@dskripchenko/laravel-admin 1.1.21 → 1.1.22

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"),P=require("pinia"),D=require("vue-router"),c=require("@dskripchenko/ui"),Lt=require("axios"),M=require("./formState-GlJBphEn.cjs");let Z=null;function De(t){Z=t}function F(){if(Z===null)throw new Error("[admin] AdminClient is not registered. Call setAdminClient(...) before using stores.");return Z}function Mt(){Z=null}function Pt(){return Z!==null}const ie=P.defineStore("admin-theme",()=>{const t=e.ref("light"),n=e.ref(["light","dark"]),a=e.computed(()=>t.value==="dark");function r(s){t.value=s.theme,n.value=s.availableThemes,i(s.theme)}function o(s){if(!n.value.includes(s))throw new Error(`Theme "${s}" is not available`);t.value=s,i(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 F().post("/system/setTheme",{theme:s})}catch(u){throw o(d),u}}function i(s){typeof document<"u"&&document.documentElement&&document.documentElement.setAttribute("data-theme",s)}return{current:t,available:n,isDark:a,hydrate:r,applyLocal:o,setTheme:l}}),It=["aria-label","aria-pressed"],zt=["data-icon"],_e=e.defineComponent({__name:"ThemeToggle",setup(t){const n=ie(),a=e.computed(()=>n.current==="dark"),r=e.computed(()=>a.value?"sun":"moon"),o=e.computed(()=>a.value?"Переключить на светлую тему":"Переключить на тёмную тему");async function l(){const i=a.value?"light":"dark";await n.setTheme(i)}return(i,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":r.value},null,8,zt)],8,It))}}),se=P.defineStore("admin-locale",()=>{const t=e.ref("ru"),n=e.ref(["ru","en"]);function a(i){t.value=i.locale,n.value=i.availableLocales,l(i.locale)}function r(i){if(!n.value.includes(i))throw new Error(`Locale "${i}" is not available`);t.value=i,l(i)}async function o(i){if(!n.value.includes(i))throw new Error(`Locale "${i}" is not available`);const s=t.value;r(i);try{await F().post("/system/setLocale",{locale:i})}catch(d){throw r(s),d}}function l(i){typeof document<"u"&&document.documentElement&&document.documentElement.setAttribute("lang",i);try{F().setLocale(i)}catch{}}return{current:t,available:n,hydrate:a,applyLocal:r,setLocale:o}}),qt={type:"button",class:"admin-topbar__icon-btn",style:{width:"auto",padding:"0 8px",gap:"4px","font-size":"12px"},"aria-label":"Сменить локаль"},Be=e.defineComponent({__name:"LocaleSwitcher",setup(t){const n=se();async function a(r){r!==n.current&&await n.setLocale(r)}return(r,o)=>(e.openBlock(),e.createBlock(e.unref(c.UidMenu),null,{trigger:e.withCtx(()=>[e.createElementVNode("button",qt,[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:i=>a(l)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.toUpperCase()),1)]),_:2},1032,["onClick"]))),128))]),_:1}))}}),ce=P.defineStore("admin-notifications",()=>{const t=e.ref([]),n=e.ref(0),a=e.ref(!1),r=e.ref("all"),o=e.ref(null),l=e.computed(()=>n.value>0);function i(h){n.value=h.unread_notifications_count}async function s(h="all",k=1){a.value=!0;try{const m=await F().get(`/notifications/list?type=${h}&page=${k}`);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},r.value=h}finally{a.value=!1}}async function d(){const k=await F().get("/notifications/unread");n.value=k.count,r.value==="unread"&&(t.value=k.data)}async function u(h){await F().post("/notifications/markAsRead",{id:h});const f=t.value.find(m=>m.id===h);f&&f.read_at===null&&(f.read_at=new Date().toISOString(),n.value=Math.max(0,n.value-1))}async function p(){await F().post("/notifications/markAllAsRead");const k=new Date().toISOString();for(const f of t.value)f.read_at===null&&(f.read_at=k);n.value=0}async function g(h){await F().post("/notifications/destroy",{id:h});const f=t.value.findIndex(m=>m.id===h);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:r,hasUnread:l,hydrate:i,load:s,loadUnread:d,markAsRead:u,markAllAsRead:p,destroy:g}}),Wt=["title"],Ae=e.defineComponent({__name:"NotificationBell",setup(t){const n=ce(),a=e.computed(()=>{const r=n.unreadCount;return r<=0?null:r>99?"99+":String(r)});return(r,o)=>(e.openBlock(),e.createBlock(e.unref(D.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,Wt)):e.createCommentVNode("",!0)]),_:1}))}});class I 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 be extends I{constructor(n){super(401,n),this.name="UnauthenticatedError"}}class Re extends I{constructor(n){super(403,n),this.name="ForbiddenError"}}class Le extends I{constructor(n){super(404,n),this.name="NotFoundError"}}class ee extends I{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 te extends Error{constructor(n="Network error"){super(n),this.name="NetworkError"}}function pe(t,n){switch(t){case 401:return new be(n);case 403:return new Re(n);case 404:return new Le(n);case 422:return new ee(n);default:return new I(t,n)}}const L=P.defineStore("admin-auth",()=>{const t=e.ref(null),n=e.ref([]),a=e.ref(null),r=e.computed(()=>t.value!==null),o=e.computed(()=>a.value!==null);function l(f){t.value=f.user,n.value=f.permissions}function i(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(i)}function d(f){return f.every(i)}async function u(f){const m=F();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 I&&B.errorKey==="two_factor_required"){const x=B.payload.challenge_token;return a.value={challengeToken:typeof x=="string"?x:"",remember:f.remember??!1},"two_factor_required"}throw B}}async function p(f){if(a.value===null)throw new Error("No pending 2FA challenge");const B=await F().post("/auth/twoFactorChallenge",{challenge_token:a.value.challengeToken,code:f});t.value=B.user,a.value=null}async function g(f){if(a.value===null)throw new Error("No pending 2FA challenge");const B=await F().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 h(){a.value=null}async function k(){const f=F();try{await f.post("/auth/logout")}finally{t.value=null,n.value=[],a.value=null}}return{user:t,permissions:n,pendingChallenge:a,isAuthenticated:r,isChallengePending:o,hydrate:l,hasPermission:i,hasAnyPermission:s,hasAllPermissions:d,login:u,twoFactorChallenge:p,twoFactorRecovery:g,cancelChallenge:h,logout:k}}),Ot={type:"button",class:"admin-topbar__icon-btn admin-user-menu__trigger","aria-label":"Меню пользователя","aria-haspopup":"menu",style:{width:"auto",padding:"0 4px",gap:"8px"}},Me=e.defineComponent({__name:"UserMenu",setup(t){const n=L(),a=D.useRouter();async function r(){try{await n.logout()}finally{await a.push({name:"admin.login"})}}function o(){a.push({name:"admin.profile"})}return(l,i)=>(e.openBlock(),e.createBlock(e.unref(c.UidMenu),null,{trigger:e.withCtx(()=>[e.createElementVNode("button",Ot,[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(()=>[...i[0]||(i[0]=[e.createTextVNode("Профиль",-1)])]),_:1}),e.createVNode(e.unref(c.UidMenuSeparator)),e.createVNode(e.unref(c.UidMenuItem),{variant:"danger",onClick:r},{default:e.withCtx(()=>[...i[1]||(i[1]=[e.createTextVNode("Выйти",-1)])]),_:1})]),_:1}))}}),jt={class:"admin-topbar"},Kt={class:"admin-topbar__breadcrumbs"},Gt={key:0,class:"sep"},Pe=e.defineComponent({__name:"AdminTopBar",props:{breadcrumbs:{default:()=>[]},showCollapseToggle:{type:Boolean,default:!0}},emits:["toggle-sidebar"],setup(t,{emit:n}){const a=t,r=n,o=e.computed(()=>a.breadcrumbs.length-1);return(l,i)=>(e.openBlock(),e.createElementBlock("header",jt,[t.showCollapseToggle?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"admin-topbar__icon-btn","aria-label":"Свернуть меню",onClick:i[0]||(i[0]=s=>r("toggle-sidebar"))},[...i[1]||(i[1]=[e.createElementVNode("span",{class:"admin-topbar__icon","data-icon":"panel-left"},null,-1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",Kt,[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",Gt,"›")):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))])]),i[3]||(i[3]=e.createElementVNode("div",{class:"admin-topbar__spacer"},null,-1)),e.renderSlot(l.$slots,"search",{},()=>[i[2]||(i[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(Ae),e.createVNode(_e),e.createVNode(Be),e.createVNode(Me)]))}}),we=P.defineStore("admin-menu",()=>{const t=e.ref([]),n=e.ref(!1),a=e.ref(null),r=e.ref(!1),o=e.computed(()=>{const u=L(),p=g=>{if(Array.isArray(g.permissions)&&g.permissions.length>0&&!u.hasAnyPermission(g.permissions))return null;const h=(g.children??[]).map(p).filter(k=>k!==null);return{...g,children:h}};return t.value.map(p).filter(g=>g!==null)}),l=e.computed(()=>{const u=new Map;for(const g of o.value){const h=g.group??null;u.has(h)||u.set(h,[]),u.get(h).push(g)}const p=[];for(const[g,h]of u)h.sort((k,f)=>{const m=(k.order??0)-(f.order??0);return m!==0?m:k.label.localeCompare(f.label)}),p.push({group:g,items:h});return p});async function i(u=!1){if(r.value&&!u)return t.value;n.value=!0,a.value=null;try{const g=await F().get("/system/menu");return t.value=Array.isArray(g.items)?g.items:[],r.value=!0,t.value}catch(p){throw a.value=p instanceof Error?p:new Error(String(p)),p}finally{n.value=!1}}function s(u){t.value=u,r.value=!0,a.value=null}function d(){t.value=[],r.value=!1,a.value=null,n.value=!1}return{items:t,loading:n,error:a,isLoaded:r,visibleItems:o,groupedItems:l,load:i,setItems:s,reset:d}}),Ht={class:"admin-sidebar-brand"},Xt={class:"admin-sidebar-brand__mark"},Yt={key:0,class:"admin-sidebar-brand__name"},Jt={key:0,class:"admin-sidebar-tenant"},Qt={class:"admin-sidebar-foot"},Zt={key:0,class:"admin-sidebar-foot__text"},en=["href"],Ie=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=we(),a=D.useRoute(),r=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 i(s){if(s.url)return s.url;if(s.routeName)return{name:s.routeName}}return(s,d)=>(e.openBlock(),e.createBlock(e.unref(c.UidSidebar),{collapsed:t.collapsed},e.createSlots({header:e.withCtx(()=>[e.createElementVNode("div",Ht,[e.createElementVNode("div",Xt,e.toDisplayString(t.brandMark),1),t.collapsed?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Yt,e.toDisplayString(t.brandName),1))]),t.tenant&&!t.collapsed?(e.openBlock(),e.createElementBlock("div",Jt,[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(r.value,(u,p)=>(e.openBlock(),e.createBlock(e.unref(c.UidSidebarGroup),{key:`grp-${p}`,title:u.group??void 0},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.items,g=>(e.openBlock(),e.createBlock(e.unref(c.UidSidebarItem),{key:g.key,to:i(g),active:o(g),badge:g.badge??void 0},e.createSlots({default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(g.label),1)]),_:2},[g.icon?{name:"icon",fn:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l(g.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",Qt,[t.version?(e.openBlock(),e.createElementBlock("span",Zt,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,en)):e.createCommentVNode("",!0)])]),key:"0"}:void 0]),1032,["collapsed"]))}}),tn={class:"admin-shell-root"},nn={key:0,class:"admin-impersonation-banner",role:"status"},me="data-admin-impersonating",ze=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,r=n;function o(i){r("update:collapsed",i)}function l(){r("exit-impersonation")}return e.watch(()=>a.impersonation,i=>{typeof document>"u"||(i!==null?document.documentElement.setAttribute(me,"true"):document.documentElement.removeAttribute(me))},{immediate:!0}),e.onBeforeUnmount(()=>{typeof document<"u"&&document.documentElement.removeAttribute(me)}),(i,s)=>(e.openBlock(),e.createElementBlock("div",tn,[t.impersonation?(e.openBlock(),e.createElementBlock("div",nn,[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(i.$slots,"sidebar",{},()=>[e.createVNode(Ie,{collapsed:t.collapsed},null,8,["collapsed"])])]),header:e.withCtx(()=>[e.renderSlot(i.$slots,"topbar",{},()=>[e.createVNode(Pe,{onToggleSidebar:s[0]||(s[0]=d=>o(!t.collapsed))})])]),default:e.withCtx(()=>[e.renderSlot(i.$slots,"default")]),_:3},8,["model-value"])]))}}),Ne=P.defineStore("admin-navigation",()=>{const t=e.ref(0),n=e.computed(()=>t.value>0);function a(){t.value+=1}function r(){t.value>0&&(t.value-=1)}function o(){t.value=0}return{pending:t,isLoading:n,start:a,end:r,reset:o}}),an=e.defineComponent({__name:"AdminLoadingBar",setup(t){const n=Ne(),a=e.ref(!1);let r=null;e.watch(()=>n.isLoading,l=>{l?(r!==null&&(clearTimeout(r),r=null),a.value=!0):r=setTimeout(()=>{a.value=!1,r=null},120)},{immediate:!0});const o=e.computed(()=>({"admin-loading-bar":!0,"admin-loading-bar--visible":a.value}));return(l,i)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(o.value),role:"progressbar","aria-busy":"true"},null,2))}}),on={class:"admin-page-host"},qe=e.defineComponent({__name:"AdminApp",setup(t){const n=D.useRoute(),a=e.computed(()=>!(n.meta?.fullscreen===!0||n.meta?.kind==="auth"||n.name==="admin.notFound"));return(r,o)=>{const l=e.resolveComponent("router-view");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(an),a.value?(e.openBlock(),e.createBlock(ze,{key:0},{default:e.withCtx(()=>[e.createElementVNode("div",on,[e.createVNode(l,null,{default:e.withCtx(({Component:i})=>[e.createVNode(e.Transition,{name:"admin-page"},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i)))]),_:2},1024)]),_:1})])]),_:1})):(e.openBlock(),e.createBlock(l,{key:1},{default:e.withCtx(({Component:i})=>[e.createVNode(e.Transition,{name:"admin-page"},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i)))]),_:2},1024)]),_:1}))],64)}}}),q=P.defineStore("admin-manifest",()=>{const t=e.ref(null),n=e.ref(!1),a=e.ref(null),r=e.computed(()=>t.value!==null),o=e.computed(()=>t.value?.version??null),l=e.computed(()=>t.value?.resources??[]),i=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 p(f){return i.value.find(m=>m.slug===f)??null}function g(f){return s.value.find(m=>m.slug===f)??null}async function h(f=!1){if(t.value!==null&&!f)return t.value;n.value=!0,a.value=null;try{const B=await F().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 k(){t.value=null,a.value=null,n.value=!1}return{manifest:t,loading:n,error:a,isLoaded:r,version:o,resources:l,screens:i,settings:s,plugins:d,getResource:u,getScreen:p,getSettings:g,load:h,reset:k}}),ln={class:"admin-home"},rn={class:"admin-home__title"},sn={key:0,class:"admin-home__resources"},cn={class:"admin-home__grid"},dn=["onClick"],un={class:"admin-home__card-label"},mn={class:"admin-home__card-slug"},We=e.defineComponent({__name:"HomePage",setup(t){const n=q(),a=L(),r=D.useRouter(),o=e.computed(()=>a.user?.name??""),l=e.computed(()=>n.manifest?.resources??[]);return(i,s)=>(e.openBlock(),e.createElementBlock("div",ln,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-home__hero"},{default:e.withCtx(()=>[e.createElementVNode("h1",rn,"Добро пожаловать"+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",sn,[s[1]||(s[1]=e.createElementVNode("h2",{class:"admin-home__heading"},"Ресурсы",-1)),e.createElementVNode("ul",cn,[(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(r).push({name:`admin.resource.${d.slug}.index`})},[e.createElementVNode("span",un,e.toDisplayString(d.label),1),e.createElementVNode("span",mn,e.toDisplayString(d.slug),1)],8,dn)]))),128))])])):e.createCommentVNode("",!0)]))}}),fn={class:"admin-status-page"},Oe=e.defineComponent({__name:"ForbiddenPage",setup(t){const n=D.useRouter();return(a,r)=>(e.openBlock(),e.createElementBlock("div",fn,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[r[2]||(r[2]=e.createElementVNode("h1",{class:"admin-status-page__code"},"403",-1)),r[3]||(r[3]=e.createElementVNode("p",{class:"admin-status-page__message"},"Доступ запрещён.",-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:r[0]||(r[0]=o=>e.unref(n).replace({name:"admin.home"}))},{default:e.withCtx(()=>[...r[1]||(r[1]=[e.createTextVNode(" На главную ",-1)])]),_:1})]),_:1})]))}}),pn={class:"admin-status-page"},je=e.defineComponent({__name:"NotFoundPage",setup(t){const n=D.useRouter();return(a,r)=>(e.openBlock(),e.createElementBlock("div",pn,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[r[2]||(r[2]=e.createElementVNode("h1",{class:"admin-status-page__code"},"404",-1)),r[3]||(r[3]=e.createElementVNode("p",{class:"admin-status-page__message"},"Страница не найдена.",-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:r[0]||(r[0]=o=>e.unref(n).replace({name:"admin.home"}))},{default:e.withCtx(()=>[...r[1]||(r[1]=[e.createTextVNode(" На главную ",-1)])]),_:1})]),_:1})]))}}),gn={class:"admin-settings-page"},vn={class:"admin-settings-page__title"},hn={key:0,class:"admin-settings-page__hint"},kn={key:1,class:"admin-settings-page__debug"},Ke=e.defineComponent({__name:"SettingsPage",setup(t){const n=D.useRoute(),a=q(),r=e.computed(()=>String(n.params.slug??"")),o=e.computed(()=>a.manifest?.settings?.find(l=>l.slug===r.value)??null);return(l,i)=>(e.openBlock(),e.createElementBlock("div",gn,[e.createVNode(e.unref(c.UidCard),{padding:"lg"},{default:e.withCtx(()=>[e.createElementVNode("h1",vn,e.toDisplayString(o.value?.label??r.value),1),o.value?(e.openBlock(),e.createElementBlock("pre",kn,e.toDisplayString(JSON.stringify(o.value.fields,null,2)),1)):(e.openBlock(),e.createElementBlock("p",hn," Settings «"+e.toDisplayString(r.value)+"» не найдено в manifest'е. ",1))]),_:1})]))}}),yn={class:"admin-status-page"},_n={class:"admin-status-page__title"},Bn={class:"admin-status-page__hint"},Ge=e.defineComponent({__name:"UnknownScreenPage",setup(t){const n=D.useRoute(),a=e.computed(()=>String(n.params.slug??"")),r=e.computed(()=>String(n.meta?.title??a.value));return(o,l)=>(e.openBlock(),e.createElementBlock("div",yn,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[e.createElementVNode("h1",_n,e.toDisplayString(r.value),1),e.createElementVNode("p",Bn,[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})]))}}),bn={class:"admin-auth-card__row"},wn=["href"],Nn={key:1,style:{"text-align":"center","font-size":"var(--uid-font-size-xs)",color:"var(--uid-text-secondary)","padding-top":"4px"}},En=["href"],He=e.defineComponent({__name:"LoginForm",props:{forgotUrl:{default:null},ssoLinkLabel:{default:null},ssoUrl:{default:null}},emits:["success"],setup(t,{emit:n}){const a=n,r=L(),o=e.ref(""),l=e.ref(""),i=e.ref(!1),s=e.ref(!1),d=e.ref(null),u=e.ref({}),p=e.computed(()=>u.value.email?.[0]),g=e.computed(()=>u.value.password?.[0]);async function h(){if(!s.value){s.value=!0,d.value=null,u.value={};try{const k=await r.login({email:o.value,password:l.value,remember:i.value});a("success",k)}catch(k){k instanceof ee?(u.value=k.fields,d.value=k.firstFieldMessage()):k instanceof te?d.value="Нет соединения с сервером":k instanceof I?d.value=k.message||"Не удалось войти":d.value=k.message}finally{s.value=!1}}}return(k,f)=>(e.openBlock(),e.createElementBlock("form",{class:"admin-auth-card__bd",novalidate:"",onSubmit:e.withModifiers(h,["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:p.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:g.value,name:"password"},null,8,["modelValue","disabled","error"]),e.createElementVNode("div",bn,[e.createVNode(e.unref(c.UidCheckbox),{modelValue:i.value,"onUpdate:modelValue":f[2]||(f[2]=m=>i.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,wn)):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",Nn,[f[4]||(f[4]=e.createTextVNode(" или войдите через ",-1)),e.createElementVNode("a",{href:t.ssoUrl,class:"admin-auth-card__link"},e.toDisplayString(t.ssoLinkLabel),9,En)])):e.createCommentVNode("",!0)],32))}}),Vn=["value","disabled","aria-label","onInput","onKeydown"],Cn={class:"admin-auth-card__row"},Xe=e.defineComponent({__name:"TwoFactorForm",emits:["success","cancel"],setup(t,{emit:n}){const a=n,r=L(),o=e.ref("totp"),l=e.ref(["","","","","",""]),i=e.ref(""),s=e.ref([]),d=e.ref(!1),u=e.ref(null),p=e.ref(null),g=e.computed(()=>l.value.join("")),h=e.computed(()=>o.value==="totp"?g.value.length===6:i.value.trim().length>0);function k(v,C){C instanceof HTMLInputElement&&(s.value[v]=C)}function f(v,C){const $=C.target,T=$.value.replace(/\D/g,"").slice(-1);l.value[v]=T,$.value=T,T&&v<l.value.length-1&&e.nextTick(()=>s.value[v+1]?.focus()),g.value.length===l.value.length&&x()}function m(v,C){C.key==="Backspace"&&!l.value[v]&&v>0?e.nextTick(()=>s.value[v-1]?.focus()):C.key==="ArrowLeft"&&v>0?(s.value[v-1]?.focus(),C.preventDefault()):C.key==="ArrowRight"&&v<l.value.length-1&&(s.value[v+1]?.focus(),C.preventDefault())}function B(v){const $=(v.clipboardData?.getData("text")??"").replace(/\D/g,"").slice(0,l.value.length);if($.length!==0){v.preventDefault();for(let T=0;T<l.value.length;T++)l.value[T]=$[T]??"";e.nextTick(()=>{s.value[Math.min($.length,l.value.length-1)]?.focus(),$.length===l.value.length&&x()})}}async function x(){if(!(d.value||!h.value)){d.value=!0,u.value=null;try{if(o.value==="totp")await r.twoFactorChallenge(g.value);else{const v=await r.twoFactorRecovery(i.value.trim());p.value=v.remaining}a("success")}catch(v){v instanceof ee?u.value=v.firstFieldMessage()??"Неверный код":v instanceof te?u.value="Нет соединения с сервером":v instanceof I?u.value=v.message||"Не удалось проверить код":u.value=v.message}finally{d.value=!1}}}function w(){r.cancelChallenge(),a("cancel")}function b(){o.value=o.value==="totp"?"recovery":"totp",u.value=null}return(v,C)=>(e.openBlock(),e.createElementBlock("form",{class:"admin-auth-card__bd",novalidate:"",onSubmit:e.withModifiers(x,["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),p.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(p.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,($,T)=>(e.openBlock(),e.createElementBlock("input",{key:T,ref_for:!0,ref:y=>k(T,y),value:l.value[T],type:"text",inputmode:"numeric",autocomplete:"one-time-code",maxlength:"1",disabled:d.value,"aria-label":`Цифра ${T+1}`,onInput:y=>f(T,y),onKeydown:y=>m(T,y)},null,40,Vn))),128))],32)):(e.openBlock(),e.createBlock(e.unref(c.UidInput),{key:3,modelValue:i.value,"onUpdate:modelValue":C[0]||(C[0]=$=>i.value=$),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||!h.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value?"Проверка…":"Подтвердить"),1)]),_:1},8,["loading","disabled"]),e.createElementVNode("div",Cn,[e.createElementVNode("button",{type:"button",class:"admin-auth-card__link",onClick:b},[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:w}," Отмена ")])],32))}}),xn={class:"admin-auth-page"},Sn={key:0,class:"admin-auth-page__corner"},$n={class:"admin-auth-card__hd"},Un=["src","alt"],Tn={key:1,"aria-hidden":"true"},Fn={key:2},Dn={class:"admin-auth-card__title"},An={class:"admin-auth-card__sub"},Ye=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=L(),r=D.useRouter(),o=D.useRoute();async function l(){const i=o.query[n.redirectQueryKey];if(typeof i=="string"&&i.length>0&&i.startsWith("/")){await r.push(i);return}await r.push({name:n.homeRouteName})}return e.watch(()=>a.isAuthenticated,i=>{i&&l()}),e.onMounted(()=>{a.isAuthenticated&&l()}),(i,s)=>(e.openBlock(),e.createElementBlock("div",xn,[t.showCornerActions?(e.openBlock(),e.createElementBlock("div",Sn,[e.createVNode(_e),e.createVNode(Be)])):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,Un)):e.unref(a).isChallengePending?(e.openBlock(),e.createElementBlock("span",Tn,"🛡")):(e.openBlock(),e.createElementBlock("span",Fn,e.toDisplayString(t.brandMark),1))],2),e.createElementVNode("div",Dn,[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",An,[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(Xe,{key:0,onSuccess:s[0]||(s[0]=()=>{}),onCancel:s[1]||(s[1]=()=>{})})):(e.openBlock(),e.createBlock(He,{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"])]))}}),Te={page:1,per_page:20,total:0,last_page:1},Ee=P.defineStore("admin-resource-index",()=>{const t=e.ref(null),n=e.ref([]),a=e.ref({...Te}),r=e.ref(!1),o=e.ref(!1),l=e.ref(null);let i=null;const s=200,d=e.ref(""),u=e.ref({}),p=e.ref(null),g=e.ref(null),h=e.ref(new Set),k=e.computed(()=>!r.value&&l.value===null&&n.value.length===0),f=e.computed(()=>h.value.size),m=e.computed(()=>h.value.size>0),B=e.computed(()=>l.value!==null),x=e.computed(()=>h.value.size===0||n.value.length===0?"none":n.value.every(U=>h.value.has(w(U)))?"all":"mixed");function w(E){return E.id??E.key??""}function b(E){t.value!==E&&(t.value=E,v(),r.value=!0)}function v(){n.value=[],a.value={...Te},r.value=!1,l.value=null,d.value="",u.value={},p.value=null,g.value=null,h.value=new Set}function C(E={}){const U={page:E.page??a.value.page,per_page:E.per_page??a.value.per_page},ae=E.search??d.value;ae&&(U.q=ae);const J=E.sort??p.value,Ue=E.direction??g.value;J&&Ue!==null&&(U.order=[{column:J,direction:Ue}]);const At=E.filters??u.value,ue={};for(const[Rt,O]of Object.entries(At))O==null||O===""||(ue[Rt]=Array.isArray(O)?O.join(","):O);return Object.keys(ue).length>0&&(U.filters=ue),U}async function $(E={}){if(!t.value)throw new Error("useResourceIndexStore.load() called before setSlug()");r.value=!0,l.value=null,i!==null&&clearTimeout(i),i=setTimeout(()=>{o.value=!0},s);try{const U=F(),ae=C(E),J=await U.post(`/${t.value}/search`,ae);n.value=J.data,a.value=J.meta}catch(U){throw l.value=U instanceof Error?U:new Error(String(U)),U}finally{r.value=!1,o.value=!1,i!==null&&(clearTimeout(i),i=null)}}async function T(E){d.value=E,a.value.page=1,await $()}async function y(E,U){U==null||U===""?delete u.value[E]:u.value[E]=U,a.value.page=1,await $()}async function _(){u.value={},a.value.page=1,await $()}async function N(E,U="asc"){p.value=E,g.value=U,await $()}async function S(E){p.value===E?g.value==="asc"?g.value="desc":g.value==="desc"?(p.value=null,g.value=null):g.value="asc":(p.value=E,g.value="asc"),await $()}async function A(E){a.value.page=E,await $()}function Ut(E){const U=new Set(h.value);U.has(E)?U.delete(E):U.add(E),h.value=U}function Tt(){if(x.value==="all"){h.value=new Set;return}const E=new Set(h.value);for(const U of n.value)E.add(w(U));h.value=E}function Ft(){h.value=new Set}function Dt(E){return h.value.has(E)}return{slug:t,items:n,meta:a,loading:r,slowLoading:o,error:l,search:d,filters:u,sortKey:p,sortDirection:g,selection:h,isEmpty:k,hasError:B,hasSelection:m,selectedCount:f,selectionState:x,setSlug:b,reset:v,load:$,setSearch:T,setFilter:y,clearFilters:_,setSort:N,toggleSort:S,setPage:A,toggleRow:Ut,toggleAllOnPage:Tt,clearSelection:Ft,isSelected:Dt,rowId:w}}),Rn=Object.freeze(Object.defineProperty({__proto__:null,useResourceIndexStore:Ee},Symbol.toStringTag,{value:"Module"})),Fe="d.m.Y H:i:s",Ln="d.m.Y",Mn=/^\d{4}-\d{2}-\d{2}[T\s]\d{2}:\d{2}/;function Pn(t,n,a={}){if(t==null)return"";if(!n&&typeof t=="string"&&Mn.test(t))return fe(t,Fe);switch(n){case"date":return fe(String(t),a.format??Ln);case"datetime":return fe(String(t),a.format??Fe);case"money":return In(t,a.currency??"RUB",a.decimals??2);case"boolean":return zn(t,a.trueLabel??"Да",a.falseLabel??"Нет");case"bytes":return qn(t);default:return String(t)}}function fe(t,n){const a=new Date(t);if(isNaN(a.getTime()))return t;const r=(i,s=2)=>String(i).padStart(s,"0"),o={d:r(a.getDate()),m:r(a.getMonth()+1),Y:String(a.getFullYear()),y:r(a.getFullYear()%100),H:r(a.getHours()),h:r((a.getHours()+11)%12+1),i:r(a.getMinutes()),s:r(a.getSeconds()),U:String(Math.floor(a.getTime()/1e3)),c:a.toISOString(),N:String((a.getDay()+6)%7+1),w:String(a.getDay())};let l="";for(let i=0;i<n.length;i++){const s=n[i];if(s==="\\"&&i+1<n.length){l+=n[i+1],i++;continue}l+=o[s]??s}return l}function In(t,n,a){const r=typeof t=="number"?t:Number(t);return isNaN(r)?String(t):`${r.toFixed(a)} ${n}`}function zn(t,n,a){return t===!0||t===1||t==="1"||t==="true"?n:a}function qn(t){const n=typeof t=="number"?t:Number(t);return isNaN(n)?String(t):n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(1)} KB`:n<1024*1024*1024?`${(n/1024/1024).toFixed(1)} MB`:`${(n/1024/1024/1024).toFixed(1)} GB`}const Wn={class:"admin-page admin-resource-index"},On={class:"admin-page__hd"},jn={class:"admin-page__title-wrap"},Kn={class:"admin-page__title"},Gn={key:0,class:"admin-page__count"},Hn={class:"admin-page__actions"},Xn={key:0,class:"admin-bulk-toolbar",role:"toolbar"},Yn={class:"admin-bulk-toolbar__count"},Jn={key:1,class:"admin-filter-bar"},Qn=["value"],Zn={key:2,class:"admin-resource-index__loading"},ea={key:5,class:"admin-resource-index__table"},ta={key:6,class:"admin-resource-index__footer"},Je=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,r=n,o=Ee(),l=q(),i=Ne(),s=e.computed(()=>l.getResource(a.slug)),d=e.computed(()=>a.title??s.value?.label??a.slug),u=e.computed(()=>(s.value?.columns??[]).map(_=>{const N=_;return{key:String(N.key??N.name??""),label:String(N.label??N.name??""),sortable:!!N.sortable,align:N.align??"left",width:typeof N.width=="string"?N.width:void 0}}).filter(_=>_.key)),p=e.computed(()=>{const y=s.value?.columns??[],_={};for(const N of y){const S=N,A=String(S.key??S.name??"");A&&(_[A]={preset:typeof S.preset=="string"?S.preset:void 0,meta:S.meta??{}})}return _});function g(y,_){const S=_?.row?.[y],A=p.value[y];return Pn(S,A?.preset,A?.meta??{})}function h(y){return y?.row}const k=e.computed(()=>o.search!==""||Object.keys(o.filters).length>0),f=e.computed(()=>!o.isEmpty||k.value),m=e.computed(()=>{const y=o.meta.total;return y===0?"":`${o.items.length} из ${y}`});async function B(){i.start();try{await o.load()}catch{}finally{i.end()}}e.onMounted(async()=>{o.setSlug(a.slug),l.manifest===null&&await l.load().catch(()=>{}),await B()}),e.watch(()=>a.slug,async(y,_)=>{y!==_&&(o.setSlug(y),await B())});async function x(y){await e.nextTick(),await o.setSort(y,o.sortDirection)}async function w(y){await e.nextTick(),await o.setSort(o.sortKey,y)}function b(y){o.selection=y}async function v(y){await o.setPage(y)}function C(y){r("row-click",y)}function $(y){r("bulk-action",y,[...o.selection])}async function T(){await o.load().catch(()=>{})}return(y,_)=>(e.openBlock(),e.createElementBlock("section",Wn,[e.createElementVNode("header",On,[e.createElementVNode("div",jn,[e.createElementVNode("h1",Kn,e.toDisplayString(d.value),1),t.subtitle||m.value?(e.openBlock(),e.createElementBlock("div",Gn,[t.subtitle?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(t.subtitle),1)],64)):e.createCommentVNode("",!0),t.subtitle&&m.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" · ")],64)):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(m.value),1)],64)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Hn,[e.renderSlot(y.$slots,"actions"),t.createRouteName?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"primary",onClick:_[0]||(_[0]=N=>y.$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",Xn,[e.createElementVNode("span",Yn,[_[7]||(_[7]=e.createTextVNode(" Выбрано ",-1)),e.createElementVNode("b",null,e.toDisplayString(e.unref(o).selectedCount),1)]),_[13]||(_[13]=e.createElementVNode("span",{class:"admin-bulk-toolbar__divider"},null,-1)),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:_[1]||(_[1]=N=>$("publish"))},{default:e.withCtx(()=>[..._[8]||(_[8]=[e.createTextVNode("Опубликовать",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:_[2]||(_[2]=N=>$("archive"))},{default:e.withCtx(()=>[..._[9]||(_[9]=[e.createTextVNode("Архивировать",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:_[3]||(_[3]=N=>$("export"))},{default:e.withCtx(()=>[..._[10]||(_[10]=[e.createTextVNode("Экспорт",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"danger",onClick:_[4]||(_[4]=N=>$("delete"))},{default:e.withCtx(()=>[..._[11]||(_[11]=[e.createTextVNode("Удалить",-1)])]),_:1}),_[14]||(_[14]=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(()=>[..._[12]||(_[12]=[e.createTextVNode(" Снять выделение ",-1)])]),_:1},8,["onClick"])])):f.value?(e.openBlock(),e.createElementBlock("div",Jn,[e.createElementVNode("input",{value:e.unref(o).search,type:"search",placeholder:"Поиск…",class:"admin-filter-bar__search",onKeydown:_[5]||(_[5]=e.withKeys(N=>e.unref(o).setSearch(N.target.value),["enter"]))},null,40,Qn),e.renderSlot(y.$slots,"filters",{filters:e.unref(o).filters,setFilter:e.unref(o).setFilter}),_[16]||(_[16]=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(()=>[..._[15]||(_[15]=[e.createTextVNode(" Сброс ",-1)])]),_:1},8,["onClick"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.unref(o).loading&&e.unref(o).items.length===0?(e.openBlock(),e.createElementBlock("div",Zn,[e.unref(o).slowLoading?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},e.renderList(8,N=>e.createVNode(e.unref(c.UidSkeleton),{key:N,height:"40px"})),64)):e.createCommentVNode("",!0)])):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:T},{default:e.withCtx(()=>[..._[17]||(_[17]=[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:_[6]||(_[6]=N=>y.$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",ea,[e.createVNode(e.unref(c.UidTable),{columns:u.value,data:e.unref(o).items,"sort-key":e.unref(o).sortKey,"sort-direction":e.unref(o).sortDirection,selectable:"",selection:e.unref(o).selection,"row-key":N=>e.unref(o).rowId(N),"onUpdate:sortKey":x,"onUpdate:sortDirection":w,"onUpdate:selection":b,onRowClick:C},e.createSlots({_:2},[e.renderList(u.value,N=>({name:N.key,fn:e.withCtx(S=>[e.renderSlot(y.$slots,`cell-${N.key}`,{row:h(S)},()=>[e.createTextVNode(e.toDisplayString(g(N.key,S)),1)])])}))]),1032,["columns","data","sort-key","sort-direction","selection","row-key"])])),!e.unref(o).loading&&!e.unref(o).hasError&&!e.unref(o).isEmpty?(e.openBlock(),e.createElementBlock("footer",ta,[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":v},null,8,["model-value","total","per-page"])])):e.createCommentVNode("",!0)]))}}),Ve=P.defineStore("admin-resource-form",()=>{const t=e.ref(null),n=e.ref("create"),a=e.ref(null),r=e.ref({}),o=e.ref({}),l=e.ref({}),i=e.ref(!1),s=e.ref(!1),d=e.ref(!1),u=e.ref(null),p=e.computed(()=>n.value==="create"),g=e.computed(()=>n.value==="edit"),h=e.computed(()=>n.value==="view"),k=e.computed(()=>u.value!==null),f=e.computed(()=>{const y=r.value,_=o.value,N=new Set([...Object.keys(y),...Object.keys(_)]);for(const S of N)if(!Object.is(y[S],_[S]))if(typeof y[S]=="object"||typeof _[S]=="object"){if(JSON.stringify(y[S])!==JSON.stringify(_[S]))return!0}else return!0;return!1});function m(y,_){for(const N of Object.keys(y))delete y[N];Object.assign(y,_)}function B(){m(r.value,{}),m(o.value,{}),l.value={},i.value=!1,s.value=!1,d.value=!1,u.value=null,a.value=null}function x(y,_={}){t.value=y,n.value="create",a.value=null,m(r.value,_),m(o.value,_),l.value={},u.value=null}async function w(y,_,N="edit"){t.value=y,n.value=N,a.value=_,i.value=!0,u.value=null,l.value={};try{const A=await F().get(`/${y}/read`,{params:{id:_}});m(r.value,A.record),m(o.value,A.record)}catch(S){throw u.value=S instanceof Error?S:new Error(String(S)),S}finally{i.value=!1}}function b(y,_){if(r.value[y]=_,l.value[y]){const N={...l.value};delete N[y],l.value=N}}function v(y){l.value={...y}}function C(){l.value={}}async function $(){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 y=F(),_=n.value==="create"?`/${t.value}/create`:`/${t.value}/update`,N=n.value==="create"?r.value:{id:a.value,...r.value},S=await y.post(_,N),A=S.record?.id??S.id;if(A===void 0)throw new Error("save: backend response does not contain record.id");return a.value=A,m(o.value,{...r.value}),n.value="edit",A}catch(y){throw y instanceof ee?l.value={...y.fields}:(y instanceof I||y instanceof Error)&&(u.value=y),y}finally{s.value=!1}}async function T(){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 F().post(`/${t.value}/delete`,{id:a.value})}catch(y){throw y instanceof Error&&(u.value=y),y}finally{d.value=!1}}return{slug:t,mode:n,recordId:a,state:r,initial:o,errors:l,loading:i,saving:s,deleting:d,error:u,isCreate:p,isEdit:g,isView:h,isDirty:f,hasError:k,reset:B,prepareCreate:x,load:w,setField:b,setErrors:v,clearErrors:C,save:$,destroy:T}});function de(){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,r]of Object.entries(n))t.set(a,r)}}}const K=de(),G=de(),na=K.register,Ce=K.get,aa=K.has,oa=K.list,la=G.register,ge=G.get,ra=G.has,ia=G.list;function sa(){K.clear(),G.clear()}function Qe(t){t.fields&&K.registerBundle(t.fields),t.layouts&&G.registerBundle(t.layouts)}const xe=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}))}}),Se=e.defineComponent({__name:"FieldRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>Ce(n.node.type)),r=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},r.value)),null,16)):(e.openBlock(),e.createBlock(xe,{key:1,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}),H=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 i=ge(n.node.type);return i?{kind:"layout",component:i}:{kind:"unknown"}}const l=ge(n.node.type);return l?{kind:"layout",component:l}:Ce(n.node.type)?{kind:"field"}:{kind:"unknown"}}),r=e.computed(()=>{const{type:l,kind:i,...s}=n.node;return s}),o=e.computed(()=>n.node);return(l,i)=>a.value.kind==="layout"&&a.value.component?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value.component),e.normalizeProps(e.mergeProps({key:0},r.value)),null,16)):a.value.kind==="field"?(e.openBlock(),e.createBlock(Se,{key:1,node:o.value},null,8,["node"])):(e.openBlock(),e.createBlock(xe,{key:2,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}),ca={class:"admin-page admin-resource-form"},da={class:"admin-page__hd"},ua={class:"admin-page__title-wrap"},ma={class:"admin-page__title"},fa={class:"admin-page__actions"},pa={key:1,class:"admin-resource-form__loading"},ga={key:3,class:"admin-resource-form__savebar"},ve=e.defineComponent({__name:"ResourceFormPage",props:{slug:{},id:{default:null},indexRouteName:{default:"admin.home"}},setup(t){const n=t,a=Ve(),r=q(),o=D.useRouter(),l=M.provideFormState(a.state,a.errors);e.watch(()=>a.errors,f=>{l.setErrors({...f})});const i=e.computed(()=>r.getResource(n.slug)),s=e.computed(()=>i.value?.fields??[]),d=e.computed(()=>a.isCreate?`Создать: ${i.value?.label??n.slug}`:`${i.value?.label??n.slug}: запись #${n.id}`),u=e.computed(()=>{const f=a.state.status;return typeof f=="string"?f:null}),p=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()=>{r.manifest===null&&await r.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 g(){try{const f=await a.save();a.isCreate&&o.push({name:`admin.resource.${n.slug}.edit`,params:{id:f}}).catch(()=>{})}catch{}}async function h(){confirm("Удалить запись?")&&(await a.destroy().catch(()=>{}),a.hasError||o.push({name:n.indexRouteName}).catch(()=>{}))}function k(){a.isDirty&&!confirm("Несохранённые изменения будут потеряны. Продолжить?")||o.push({name:n.indexRouteName}).catch(()=>{})}return(f,m)=>(e.openBlock(),e.createElementBlock("section",ca,[e.createElementVNode("header",da,[e.createElementVNode("div",ua,[e.createElementVNode("a",{class:"admin-resource-form__back",onClick:k},"← Назад"),e.createElementVNode("h1",ma,e.toDisplayString(d.value),1),u.value?(e.openBlock(),e.createBlock(e.unref(c.UidBadge),{key:0,variant:p.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.value),1)]),_:1},8,["variant"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",fa,[e.createVNode(e.unref(c.UidButton),{variant:"ghost",disabled:e.unref(a).saving||e.unref(a).deleting,onClick:k},{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:h},{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:g},{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",pa,[(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,x)=>(e.openBlock(),e.createBlock(H,{key:x,node:B},null,8,["node"]))),128))]),_:1})),e.unref(a).isDirty&&!e.unref(a).loading?(e.openBlock(),e.createElementBlock("div",ga,[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:k},{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:g},{default:e.withCtx(()=>[...m[3]||(m[3]=[e.createTextVNode(" Сохранить ",-1)])]),_:1},8,["loading","disabled"])])):e.createCommentVNode("",!0)]))}}),X=de(),va=X.register,he=X.get,ha=X.has,ka=X.list,ya=X.clear,Ze=X.registerBundle,et=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}))}}),_a={key:1,class:"admin-infolist-rows"},Ba={key:2,class:"admin-infolist-cols"},ba={key:3,class:"admin-infolist-section"},wa={key:0,class:"admin-infolist-section__hd"},Na={key:0,class:"admin-infolist-section__title"},Ea={key:1,class:"admin-infolist-section__description"},Va={class:"admin-infolist-section__body"},Ca={key:4,class:"admin-infolist-tabs"},xa={class:"admin-infolist-tabs__list",role:"tablist"},Sa={class:"admin-infolist-tabs__panel"},tt=e.defineComponent({__name:"InfolistRenderer",props:{node:{}},setup(t){const n=t,a=new Set(["rows","columns","section","block","tabs"]),r=e.computed(()=>{if(n.node.kind==="entry"){const g=he(n.node.type);return g?{kind:"entry",component:g}:{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 p=he(n.node.type);return p?{kind:"entry",component:p}:{kind:"unknown"}}),o=e.computed(()=>{const{type:p,kind:g,items:h,...k}=n.node;return k}),l=e.computed(()=>n.node.items??[]),i=e.computed(()=>n.node.title??null),s=e.computed(()=>n.node.description??null),d=e.computed(()=>{const p=n.node.active;return typeof p=="number"?p:0}),u=e.computed(()=>n.node.items??[]);return(p,g)=>{const h=e.resolveComponent("InfolistRenderer",!0);return r.value.kind==="entry"?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.value.component),e.normalizeProps(e.mergeProps({key:0},o.value)),null,16)):r.value.kind==="layout"&&r.value.layoutType==="rows"?(e.openBlock(),e.createElementBlock("div",_a,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(k,f)=>(e.openBlock(),e.createBlock(h,{key:f,node:k},null,8,["node"]))),128))])):r.value.kind==="layout"&&r.value.layoutType==="columns"?(e.openBlock(),e.createElementBlock("div",Ba,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(k,f)=>(e.openBlock(),e.createElementBlock("div",{key:f,class:"admin-infolist-cols__item",style:e.normalizeStyle({gridColumn:`span ${typeof k.span=="number"?k.span:Math.max(1,Math.floor(12/l.value.length))}`})},[e.createVNode(h,{node:k},null,8,["node"])],4))),128))])):r.value.kind==="layout"&&(r.value.layoutType==="section"||r.value.layoutType==="block")?(e.openBlock(),e.createElementBlock("section",ba,[i.value||s.value?(e.openBlock(),e.createElementBlock("header",wa,[i.value?(e.openBlock(),e.createElementBlock("h3",Na,e.toDisplayString(i.value),1)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("p",Ea,e.toDisplayString(s.value),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Va,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(k,f)=>(e.openBlock(),e.createBlock(h,{key:f,node:k},null,8,["node"]))),128))])])):r.value.kind==="layout"&&r.value.layoutType==="tabs"?(e.openBlock(),e.createElementBlock("div",Ca,[e.createElementVNode("ul",xa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(k,f)=>(e.openBlock(),e.createElementBlock("li",{key:k.key??f,class:e.normalizeClass(["admin-infolist-tabs__tab",{"admin-infolist-tabs__tab--active":f===d.value}])},e.toDisplayString(k.label),3))),128))]),e.createElementVNode("div",Sa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value[d.value]?.items??[],(k,f)=>(e.openBlock(),e.createBlock(h,{key:f,node:k},null,8,["node"]))),128))])])):(e.openBlock(),e.createBlock(et,{key:5,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}}),$e=Symbol("admin.infolist-record");function nt(t){e.provide($e,t)}function $a(){const t=e.inject($e);if(!t)throw new Error("useRecord() called outside of provideRecord() scope");return t}function ne(){return e.inject($e,null)}const Ua={class:"admin-page admin-resource-view"},Ta={class:"admin-page__hd"},Fa={class:"admin-page__title-wrap"},Da={class:"admin-page__title"},Aa={class:"admin-page__actions"},Ra={key:1,class:"admin-resource-view__loading"},at=e.defineComponent({__name:"ResourceViewPage",props:{slug:{},id:{},editRouteName:{default:void 0},indexRouteName:{default:"admin.home"}},setup(t){const n=t,a=Ve(),r=q(),o=D.useRouter();nt(a.state);const l=e.computed(()=>r.getResource(n.slug)),i=e.computed(()=>l.value?.fields??[]),s=e.computed(()=>`${l.value?.label??n.slug}: запись #${n.id}`);e.onMounted(async()=>{r.manifest===null&&await r.load().catch(()=>{}),await a.load(n.slug,n.id,"view").catch(()=>{})}),e.watch(()=>[n.slug,n.id],async([p,g])=>{await a.load(p,g,"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(p,g)=>(e.openBlock(),e.createElementBlock("section",Ua,[e.createElementVNode("header",Ta,[e.createElementVNode("div",Fa,[e.createElementVNode("h1",Da,e.toDisplayString(s.value),1)]),e.createElementVNode("div",Aa,[e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:d},{default:e.withCtx(()=>[...g[0]||(g[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(()=>[...g[1]||(g[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",Ra,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(8,h=>e.createVNode(e.unref(c.UidSkeleton),{key:h,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(i.value,(h,k)=>(e.openBlock(),e.createBlock(tt,{key:k,node:h},null,8,["node"]))),128))]),_:1}))]))}}),La={class:"admin-page admin-profile"},Ma={class:"admin-page__hd"},Pa={class:"admin-page__title-wrap"},Ia={class:"admin-page__title"},za={class:"admin-page__count"},qa={class:"admin-profile__layout"},Wa={class:"admin-profile__nav","aria-label":"Profile sections"},Oa=["onClick"],ja=["data-icon"],Ka={class:"admin-profile__content"},Ga={class:"admin-profile__hero"},Ha={class:"admin-profile__hero-text"},Xa={class:"admin-profile__hero-name"},Ya={class:"admin-profile__hero-meta"},Ja={class:"admin-profile__form"},Qa={class:"admin-profile__card-ft"},Za={class:"admin-profile__card-hd"},eo={key:0,class:"admin-profile__hint"},to={key:1,class:"admin-profile__hint"},no={class:"admin-profile__card-ft"},ao={class:"admin-profile__hint"},ot=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,r=n,o=L(),l=ie(),i=se(),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(w){d.value=w,r("update:section",w)}const p=e.ref({name:o.user?.name??"",email:o.user?.email??"",locale:i.current,theme:l.current}),g=e.computed(()=>i.available.map(w=>({value:w,label:w.toUpperCase()}))),h=e.computed(()=>l.available.map(w=>({value:w,label:w==="dark"?"Тёмная":w==="light"?"Светлая":w})));function k(){r("save",{...p.value})}function f(){r("avatar-replace")}function m(){r("two-factor-disable")}function B(){r("two-factor-regenerate")}const x=e.computed(()=>!!o.user?.twoFactorEnabled);return(w,b)=>(e.openBlock(),e.createElementBlock("section",La,[e.createElementVNode("header",Ma,[e.createElementVNode("div",Pa,[e.createElementVNode("h1",Ia,e.toDisplayString(t.title),1),e.createElementVNode("div",za,e.toDisplayString(t.subtitle),1)])]),e.createElementVNode("div",qa,[e.createElementVNode("nav",Wa,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(s,v=>e.createElementVNode("button",{key:v.id,type:"button",class:e.normalizeClass(["admin-profile__nav-item",{"admin-profile__nav-item--active":d.value===v.id}]),onClick:C=>u(v.id)},[e.createElementVNode("span",{class:"admin-profile__nav-icon","data-icon":v.icon},null,8,ja),e.createElementVNode("span",null,e.toDisplayString(v.label),1)],10,Oa)),64))]),e.createElementVNode("div",Ka,[d.value==="general"?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:0,padding:"md"},{default:e.withCtx(()=>[b[7]||(b[7]=e.createElementVNode("header",{class:"admin-profile__card-hd"},[e.createElementVNode("h3",{class:"admin-profile__card-title"},"Профиль")],-1)),e.createElementVNode("div",Ga,[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",Ha,[e.createElementVNode("div",Xa,e.toDisplayString(e.unref(o).user?.name??"—"),1),e.createElementVNode("div",Ya,e.toDisplayString(e.unref(o).user?.email??"—"),1)]),b[5]||(b[5]=e.createElementVNode("div",{style:{flex:"1"}},null,-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",size:"sm",onClick:f},{default:e.withCtx(()=>[...b[4]||(b[4]=[e.createTextVNode(" Заменить ",-1)])]),_:1})]),e.createElementVNode("div",Ja,[e.createVNode(e.unref(c.UidInput),{modelValue:p.value.name,"onUpdate:modelValue":b[0]||(b[0]=v=>p.value.name=v),label:"Имя",name:"name"},null,8,["modelValue"]),e.createVNode(e.unref(c.UidInput),{modelValue:p.value.email,"onUpdate:modelValue":b[1]||(b[1]=v=>p.value.email=v),label:"Email",type:"email",name:"email"},null,8,["modelValue"]),e.createVNode(e.unref(c.UidSelect),{modelValue:p.value.locale,"onUpdate:modelValue":b[2]||(b[2]=v=>p.value.locale=v),options:g.value,label:"Язык"},null,8,["modelValue","options"]),e.createVNode(e.unref(c.UidSelect),{modelValue:p.value.theme,"onUpdate:modelValue":b[3]||(b[3]=v=>p.value.theme=v),options:h.value,label:"Тема"},null,8,["modelValue","options"])]),e.createElementVNode("footer",Qa,[e.createVNode(e.unref(c.UidButton),{variant:"primary",onClick:k},{default:e.withCtx(()=>[...b[6]||(b[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",Za,[b[8]||(b[8]=e.createElementVNode("h3",{class:"admin-profile__card-title"},"Двухфакторная аутентификация",-1)),e.createVNode(e.unref(c.UidBadge),{variant:x.value?"success":"default"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(x.value?"Включена":"Отключена"),1)]),_:1},8,["variant"])]),x.value?(e.openBlock(),e.createElementBlock("p",eo," 2FA включена. У вас остались recovery-коды на случай потери устройства. ")):(e.openBlock(),e.createElementBlock("p",to," Включите 2FA для дополнительной защиты аккаунта. ")),e.createElementVNode("footer",no,[x.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(e.unref(c.UidButton),{variant:"ghost",size:"sm",onClick:B},{default:e.withCtx(()=>[...b[9]||(b[9]=[e.createTextVNode(" Перегенерировать коды ",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{variant:"danger",size:"sm",onClick:m},{default:e.withCtx(()=>[...b[10]||(b[10]=[e.createTextVNode(" Отключить 2FA ",-1)])]),_:1})],64)):e.renderSlot(w.$slots,"enable-2fa",{key:1},()=>[e.createVNode(e.unref(c.UidButton),{variant:"primary",disabled:""},{default:e.withCtx(()=>[...b[11]||(b[11]=[e.createTextVNode(" Включить 2FA (host customize) ",-1)])]),_:1})])])]),_:3})):e.renderSlot(w.$slots,d.value,{key:2,section:d.value},()=>[e.createVNode(e.unref(c.UidCard),{padding:"md"},{default:e.withCtx(()=>[e.createElementVNode("p",ao," Section «"+e.toDisplayString(d.value)+"» не реализована библиотекой — host-проект подключает её через slot "+e.toDisplayString(d.value)+". ",1)]),_:1})])])])]))}}),Y=de(),oo=Y.register,lt=Y.get,lo=Y.has,ro=Y.list,io=Y.clear,rt=Y.registerBundle,it=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}))}}),st=e.defineComponent({__name:"WidgetRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>lt(n.node.type)),r=e.computed(()=>{const{type:o,span:l,...i}=n.node;return i});return(o,l)=>a.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value),e.normalizeProps(e.mergeProps({key:0},r.value)),null,16)):(e.openBlock(),e.createBlock(it,{key:1,type:t.node.type},null,8,["type"]))}}),so={class:"admin-page admin-dashboard"},co={class:"admin-page__hd"},uo={class:"admin-page__title-wrap"},mo={class:"admin-page__title"},fo={key:0,class:"admin-page__count"},po={class:"admin-page__actions"},go={class:"admin-dashboard__grid"},ct=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=q(),r=e.computed(()=>!n.slug||!a.manifest?null:a.manifest.dashboards?.find(u=>u.slug===n.slug)??null),o=e.computed(()=>n.widgets?n.widgets:r.value?r.value.widgets??[]:[]),l=e.computed(()=>n.title??r.value?.label??"Dashboard"),i=e.computed(()=>n.subtitle??r.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",so,[e.createElementVNode("header",co,[e.createElementVNode("div",uo,[e.createElementVNode("h1",mo,e.toDisplayString(l.value),1),i.value?(e.openBlock(),e.createElementBlock("div",fo,e.toDisplayString(i.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",po,[e.renderSlot(d.$slots,"actions")])]),e.createElementVNode("div",go,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(p,g)=>(e.openBlock(),e.createElementBlock("div",{key:g,class:"admin-dashboard__cell",style:e.normalizeStyle({gridColumn:`span ${s(p)} / span ${s(p)}`})},[e.createVNode(st,{node:p},null,8,["node"])],4))),128))])]))}}),dt=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"},r=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:r.value,loading:t.loading},null,8,["title","value","prefix","suffix","trend","precision","tone","loading"]))}}),vo={key:0,class:"admin-widget__hd"},ho={key:0,class:"admin-widget__title"},ko={key:1,class:"admin-widget__desc"},yo=["viewBox","height","aria-label"],_o=["x","y","width","height","fill","data-label","data-value"],ut=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))),r=e.computed(()=>{const l=100/Math.max(1,n.data.length);return n.data.map((i,s)=>({label:i.label,value:i.value,x:s*l+l*.1,width:l*.8,heightPct:i.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",vo,[t.title?(e.openBlock(),e.createElementBlock("h3",ho,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",ko,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(r.value,(i,s)=>(e.openBlock(),e.createElementBlock("rect",{key:s,x:i.x,y:t.height-i.heightPct/100*t.height,width:i.width,height:i.heightPct/100*t.height,fill:t.accent,rx:"1","data-label":i.label,"data-value":i.value},[e.createElementVNode("title",null,e.toDisplayString(i.label)+": "+e.toDisplayString(i.value),1)],8,_o))),128))],8,yo))]),_:1}))}}),Bo={key:0,class:"admin-widget__hd"},bo={class:"admin-widget__title"},wo={class:"admin-donut-widget__row"},No=["aria-label"],Eo=["d","fill"],Vo={class:"admin-donut-widget__legend"},Co={class:"admin-donut-widget__label"},xo={class:"admin-donut-widget__value"},mt=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)"],r=e.computed(()=>n.data.reduce((l,i)=>l+i.value,0)||1),o=e.computed(()=>{let l=0;return n.data.map((i,s)=>{const d=l/r.value*2*Math.PI;l+=i.value;const u=l/r.value*2*Math.PI,p=50,g=60,h=60,k=g+p*Math.cos(d-Math.PI/2),f=h+p*Math.sin(d-Math.PI/2),m=g+p*Math.cos(u-Math.PI/2),B=h+p*Math.sin(u-Math.PI/2),x=u-d>Math.PI?1:0,w=n.data.length===1?`M ${g-p} ${h} a ${p} ${p} 0 1 0 ${p*2} 0 a ${p} ${p} 0 1 0 ${-p*2} 0`:`M ${g} ${h} L ${k} ${f} A ${p} ${p} 0 ${x} 1 ${m} ${B} Z`;return{...i,path:w,color:i.color??a[s%a.length],pct:(i.value/r.value*100).toFixed(1)}})});return(l,i)=>(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",Bo,[e.createElementVNode("h3",bo,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",wo,[(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,Eo))),128)),i[0]||(i[0]=e.createElementVNode("circle",{cx:"60",cy:"60",r:"30",fill:"var(--uid-surface-raised)"},null,-1))],8,No)),e.createElementVNode("ul",Vo,[(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",Co,e.toDisplayString(s.label),1),e.createElementVNode("span",xo,e.toDisplayString(s.pct)+"%",1)]))),128))])])]),_:1}))}}),So={key:0,class:"admin-widget__hd"},$o={class:"admin-widget__title"},ft=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",So,[e.createElementVNode("h3",$o,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}))}}),Uo={key:0,class:"admin-widget__hd"},To={class:"admin-widget__title"},pt=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",Uo,[e.createElementVNode("h3",To,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}))}}),Fo={key:0,class:"admin-widget__hd"},Do={class:"admin-widget__title"},Ao={style:{display:"flex","justify-content":"center"}},gt=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"},r=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",Fo,[e.createElementVNode("h3",Do,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",Ao,[e.createVNode(e.unref(c.UidGauge),{value:t.value,min:t.min,max:t.max,size:t.size,ranges:t.ranges,tone:r.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}))}}),Ro={key:0,class:"admin-widget__hd"},Lo={class:"admin-widget__title"},Mo={class:"admin-markdown-widget"},vt=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",Ro,[e.createElementVNode("h3",Lo,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",Mo,e.toDisplayString(t.content),1)]),_:1}))}});function ht(){rt({stat:dt,"bar-chart":ut,"donut-chart":mt,"recent-table":ft,heatmap:pt,gauge:gt,markdown:vt})}function kt(t){return t.success===!0}function Po(t){return t.success===!1}function yt(t){const n=Lt.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=Io("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(kt(l))return o.data=l.payload,o;throw pe(o.status,l.payload)}return o},o=>{if(o.response){const l=o.response.status,i=o.response.data?.payload??{errorKey:"unknown",message:o.message},s=pe(l,i);return s instanceof be&&t.onUnauthenticated?.(),Promise.reject(s)}return Promise.reject(new te(o.message))});const a=(o,l,i)=>n[o](l,i).then(s=>s.data),r=(o,l,i,s)=>n[o](l,i,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,i)=>r("post",o,l,i),put:(o,l,i)=>r("put",o,l,i),patch:(o,l,i)=>r("patch",o,l,i),setLocale:o=>{n.defaults.headers.common["X-Admin-Locale"]=o}}}function Io(t){if(typeof document>"u")return null;const n=document.cookie.match(new RegExp("(^|; )"+zo(t)+"=([^;]*)"));return n?n[2]:null}function zo(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function oe(t,n){const a=t.permissions?.[n];return typeof a=="string"&&a.length>0?[a]:[]}function qo(t,n){const a=t.permissions?.[n];return typeof a=="string"&&a.length>0?[a]:[]}function Wo(t){return Array.isArray(t.permission)?t.permission:typeof t.permission=="string"&&t.permission.length>0?[t.permission]:[]}function Oo(t,n){const a=t.slug,r=`/r/${a}`;return[{path:r,name:`admin.resource.${a}.index`,component:n.resourceIndex,meta:{requiresAuth:!0,kind:"resource",slug:a,title:t.label,permissions:oe(t,"view")},props:{slug:a}},{path:`${r}/create`,name:`admin.resource.${a}.create`,component:n.resourceCreate,meta:{requiresAuth:!0,kind:"resource",slug:a,title:`${t.label}: создать`,permissions:oe(t,"create")},props:{slug:a}},{path:`${r}/:id/edit`,name:`admin.resource.${a}.edit`,component:n.resourceEdit,meta:{requiresAuth:!0,kind:"resource",slug:a,title:`${t.label}: редактирование`,permissions:oe(t,"update")},props:o=>({slug:a,id:o.params.id})},{path:`${r}/:id`,name:`admin.resource.${a}.view`,component:n.resourceView,meta:{requiresAuth:!0,kind:"resource",slug:a,title:t.label,permissions:oe(t,"view")},props:o=>({slug:a,id:o.params.id})}]}function jo(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:Wo(t)}}}function Ko(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:qo(t,"view")}}}function Go(t,n){if(typeof t.slug!="string"||t.slug.length===0)return null;const a=t.permission,r=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:r}}}function _t(t,n){if(t===null)return[];const a=[];for(const r of t.resources)a.push(...Oo(r,n));for(const r of t.screens)a.push(jo(r,n));for(const r of t.settings)a.push(Ko(r,n));for(const r of t.dashboards){const o=Go(r,n);o&&a.push(o)}return a}function Bt(t={}){const n=t.loginRouteName??"admin.login",a=t.forbiddenRouteName??"admin.forbidden",r=t.redirectQueryKey??"redirect";return o=>{if(o.name===n)return!0;const l=L();if(o.meta?.requiresAuth===!0&&!l.isAuthenticated)return{name:n,query:{[r]:o.fullPath}};if(l.isChallengePending)return{name:n,query:{[r]:o.fullPath}};const s=o.meta?.permissions;return Array.isArray(s)&&s.length>0&&!l.hasAnyPermission(s)?{name:a}:!0}}function bt(t={}){const n=t.template,a=t.brand??"",r=t.fallback??"";return o=>{if(typeof document>"u")return;const l=o.meta?.title??r;let i;n?i=n.replace("{title}",l).replace("{brand}",a):l&&a?i=`${l} · ${a}`:i=l||a,document.title=i}}const Ho=["admin.resource.","admin.screen.","admin.settings.","admin.dashboard."];function Xo(t){return typeof t!="string"?!1:Ho.some(n=>t.startsWith(n))}function wt(t){const n=t.base??"/admin",a=t.history??D.createWebHistory(n),r=[{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&&r.push({path:"/profile",name:"admin.profile",component:t.components.profile,meta:{requiresAuth:!0,kind:"system",title:"Профиль"}}),t.components.notifications&&r.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=D.createRouter({history:a,routes:[...r,...t.extraRoutes??[],o]});return l.beforeEach(Bt(t.authGuard)),l.afterEach(bt(t.titleGuard)),l.replaceManifestRoutes=i=>{const s=l.getRoutes();for(const u of s)Xo(u.name)&&l.removeRoute(u.name);l.hasRoute("admin.notFound")&&l.removeRoute("admin.notFound");const d=_t(i,t.components);for(const u of d)l.addRoute(u);l.addRoute(o)},l}const R=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=M.useFormState(),r=e.computed(()=>a.getField(n.name)??""),o=e.computed(()=>a.errors[n.name]?.[0]);function l(i){a.setField(n.name,i)}return(i,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidInput),{"model-value":r.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"]))}}),Q=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=M.useFormState(),r=e.computed(()=>a.getField(n.name)??""),o=e.computed(()=>a.errors[n.name]?.[0]);function l(i){a.setField(n.name,i)}return(i,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":r.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"]))}}),le=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=M.useFormState(),r=e.computed(()=>{const i=a.getField(n.name);return i==null||i===""?null:typeof i=="number"?i:Number(i)}),o=e.computed(()=>a.errors[n.name]?.[0]);function l(i){a.setField(n.name,i)}return(i,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":r.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"]))}}),z=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=M.useFormState(),r=e.computed(()=>{const i=a.getField(n.name);return i==null||i===""?null:i}),o=e.computed(()=>a.errors[n.name]?.[0]);function l(i){a.setField(n.name,i)}return(i,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":r.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"]))}}),re=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=M.useFormState(),r=e.computed(()=>!!a.getField(n.name)),o=e.computed(()=>a.errors[n.name]?.[0]);function l(i){a.setField(n.name,i)}return(i,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":r.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"]))}}),W=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=M.useFormState(),r=e.computed(()=>{const i=a.getField(n.name);return i==null||i===""?null:String(i)}),o=e.computed(()=>a.errors[n.name]?.[0]);function l(i){a.setField(n.name,i)}return(i,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":r.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"]))}}),ke=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,(r,o)=>(e.openBlock(),e.createBlock(H,{key:o,node:r},null,8,["node"]))),128))]),_:1},8,["gap"]))}}),Nt=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 r(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,(i,s)=>(e.openBlock(),e.createElementBlock("div",{key:s,class:"admin-columns__item",style:e.normalizeStyle({gridColumn:`span ${r(i)} / span ${r(i)}`})},[e.createVNode(H,{node:i},null,8,["node"])],4))),128))]),_:1},8,["cols","gap"]))}}),Yo={key:0,class:"admin-section__header"},Jo={key:0,class:"admin-section__title"},Qo={key:1,class:"admin-section__description"},Zo={class:"admin-section__body"},j=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",Yo,[t.title?(e.openBlock(),e.createElementBlock("h3",Jo,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",Qo,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Zo,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(r,o)=>(e.openBlock(),e.createBlock(H,{key:o,node:r},null,8,["node"]))),128))])]),_:1}))}}),Et=e.defineComponent({__name:"TabsLayout",props:{items:{},active:{default:0}},emits:["update:active"],setup(t,{emit:n}){const a=t,r=n;function o(s,d){return s.key??d}const l=e.ref(a.active??o(a.items[0]??{},0));function i(s){l.value=s,r("update:active",s)}return(s,d)=>(e.openBlock(),e.createBlock(e.unref(c.UidTabs),{"model-value":l.value,"onUpdate:modelValue":i},{list:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(u,p)=>(e.openBlock(),e.createBlock(e.unref(c.UidTab),{key:o(u,p),value:o(u,p)},{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,p)=>(e.openBlock(),e.createBlock(e.unref(c.UidTabPanel),{key:`panel-${o(u,p)}`,value:o(u,p)},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.items,(g,h)=>(e.openBlock(),e.createBlock(H,{key:h,node:g},null,8,["node"]))),128))]),_:2},1032,["value"]))),128))]),_:1},8,["model-value"]))}});function Vt(){Qe({fields:{input:R,text:R,email:R,url:R,password:R,tel:R,search:R,slug:R,hidden:R,label:R,textarea:Q,wysiwyg:Q,markdown:Q,code:Q,number:le,slider:le,rating:le,select:z,combobox:z,radio:z,tags:z,"morph-switcher":z,relation:z,cascader:z,"tree-select":z,checkbox:re,switcher:re,boolean:re,date:W,datetime:W,datepicker:W,"date-range":W,time:W,"time-picker":W,"color-picker":R},layouts:{rows:ke,columns:Nt,section:j,block:j,tabs:Et,accordion:j,group:ke,step:j,wizard:j}})}const V=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=ne(),r=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(r.value),3))}}),el={key:1,class:"admin-infolist-text"},Ct=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=ne(),r=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[r.value]??"default");return(l,i)=>r.value?(e.openBlock(),e.createBlock(e.unref(c.UidBadge),{key:0,variant:o.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.value),1)]),_:1},8,["variant"])):(e.openBlock(),e.createElementBlock("span",el,"—"))}}),tl=["data-icon"],nl={key:0},xt=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=ne(),r=e.computed(()=>{let i=n.value;return i===void 0&&a&&n.name&&(i=a[n.name]),!!i}),o=e.computed(()=>r.value?n.trueLabel:n.falseLabel),l=e.computed(()=>r.value?n.trueIcon:n.falseIcon);return(i,s)=>(e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(["admin-infolist-icon",r.value?"admin-infolist-icon--on":"admin-infolist-icon--off"])},[e.createElementVNode("span",{class:"admin-infolist-icon__glyph","data-icon":l.value},null,8,tl),o.value?(e.openBlock(),e.createElementBlock("span",nl,e.toDisplayString(o.value),1)):e.createCommentVNode("",!0)],2))}}),al={key:1,class:"admin-infolist-text"},ye=e.defineComponent({__name:"KeyValueEntry",props:{name:{default:""},label:{default:""},value:{default:void 0}},setup(t){const n=t,a=ne(),r=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,i)=>r.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(r.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",al,"—"))}});function St(){Ze({text:V,badge:Ct,icon:xt,keyvalue:ye,"key-value":ye,input:V,email:V,url:V,password:V,tel:V,search:V,slug:V,hidden:V,label:V,textarea:V,wysiwyg:V,markdown:V,code:V,number:V,slider:V,rating:V,select:V,combobox:V,radio:V,tags:V,"morph-switcher":V,relation:V,cascader:V,"tree-select":V,checkbox:V,switcher:V,boolean:V,date:V,datetime:V,datepicker:V,"date-range":V,time:V,"time-picker":V,"color-picker":V})}function ol(t,n={}){const a=n.pages??{},r=n.base??ll(t.baseUrl)??"/admin",o=yt({baseURL:t.apiUrl,csrfToken:t.csrf});De(o);const l=e.createApp(qe),i=P.createPinia();l.use(i),L().hydrate(t),se().hydrate(t),ie().hydrate(t),ce().hydrate(t),Vt(),ht(),St();const s=wt({base:r,history:n.router?.history??D.createWebHistory(r),components:{login:a.login??Ye,home:a.home??We,forbidden:a.forbidden??Oe,notFound:a.notFound??je,profile:a.profile??ot,resourceIndex:a.resourceIndex??Je,resourceCreate:a.resourceCreate??ve,resourceEdit:a.resourceEdit??ve,resourceView:a.resourceView??at,dashboard:a.dashboard??ct,settings:a.settings??Ke,screen:a.screen??Ge},extraRoutes:n.router?.extraRoutes,authGuard:n.router?.authGuard,titleGuard:n.router?.titleGuard});l.use(s);const d=Ne();if(s.beforeEach((u,p,g)=>{u.fullPath!==p.fullPath&&d.start(),g()}),s.afterEach(()=>{d.end()}),s.onError(()=>{d.end()}),s.beforeResolve(async(u,p,g)=>{const h=typeof u.name=="string"?u.name:null;if(h&&h.startsWith("admin.resource.")&&h.endsWith(".index")){const k=u.params.slug??u.meta.slug;if(k)try{const{useResourceIndexStore:f}=await Promise.resolve().then(()=>Rn),m=f();(m.slug!==k||m.items.length===0)&&(m.setSlug(k),await m.load().catch(()=>{}))}catch{}}g()}),!n.skipManifestLoad){const u=q(),p=L(),g=we(),h=()=>{g.load().catch(()=>{}),u.load().then(k=>{s.replaceManifestRoutes(k);const f=s.currentRoute.value;f.name==="admin.notFound"&&f.fullPath!=="/"&&s.replace(f.fullPath)}).catch(k=>{typeof console<"u"&&console.error("[laravel-admin] manifest load failed:",k)})};p.isAuthenticated&&h(),e.watch(()=>p.user,(k,f)=>{k&&!f&&h()})}return n.onAppCreated?.(l),{app:l,router:s,client:o}}function ll(t){if(!t)return null;try{return new URL(t).pathname||"/admin"}catch{return t.startsWith("/")?t:null}}async function rl(t={}){const n=$t();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 te)return null;throw a}return null}function $t(){return typeof window>"u"?null:window.__ADMIN_BOOTSTRAP__??null}function il(){return typeof document>"u"?null:document.querySelector('meta[name="csrf-token"]')?.getAttribute("content")??null}const sl={class:"admin-notifs__hd"},cl={class:"admin-notifs__title"},dl={key:0,class:"admin-notifs__count"},ul={class:"admin-notifs__list"},ml={key:0,class:"admin-notifs__empty"},fl={key:1,class:"admin-notifs__empty"},pl=["onClick"],gl=["data-kind"],vl={class:"admin-notifs__body"},hl={class:"admin-notifs__row1"},kl={key:0,class:"admin-notifs__title-strong"},yl={key:1,class:"admin-notifs__title-soft"},_l={class:"admin-notifs__time"},Bl={key:0,class:"admin-notifs__text"},bl=["onClick"],wl=e.defineComponent({__name:"NotificationsDrawer",props:{open:{type:Boolean}},emits:["update:open","select-item"],setup(t,{emit:n}){const a=t,r=n,o=ce();function l(m){r("update:open",m)}e.watch(()=>a.open,async m=>{m&&await o.load(o.lastFilter??"all",1).catch(()=>{})},{immediate:!0});const i=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){r("select-item",m),m.read_at||await o.markAsRead(m.id).catch(()=>{})}async function p(m,B){B.stopPropagation(),await o.destroy(m.id).catch(()=>{})}function g(m){const B=m.data.level;return B==="success"||B==="warning"||B==="danger"?B:"info"}function h(m){return m.data.title??"—"}function k(m){return m.data.body??""}function f(m){if(!m)return"";const B=new Date(m),x=Math.max(0,Date.now()-B.getTime()),w=Math.floor(x/6e4);if(w<1)return"только что";if(w<60)return`${w} мин назад`;const b=Math.floor(w/60);if(b<24)return`${b} ч назад`;const v=Math.floor(b/24);return v<7?`${v} д назад`: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",sl,[e.createElementVNode("h2",cl,[B[0]||(B[0]=e.createTextVNode(" Уведомления ",-1)),e.unref(o).unreadCount>0?(e.openBlock(),e.createElementBlock("span",dl," ("+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":i.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"],x=>e.createVNode(e.unref(c.UidTabPanel),{key:x,value:x},{default:e.withCtx(()=>[e.createElementVNode("ul",ul,[e.unref(o).loading?(e.openBlock(),e.createElementBlock("li",ml," Загрузка… ")):e.unref(o).items.length===0?(e.openBlock(),e.createElementBlock("li",fl," Нет уведомлений ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o).items,w=>(e.openBlock(),e.createElementBlock("li",{key:w.id,class:e.normalizeClass(["admin-notifs__item",`admin-notifs__item--${g(w)}`,{"admin-notifs__item--unread":!w.read_at}]),onClick:b=>u(w)},[e.createElementVNode("span",{class:"admin-notifs__icon","data-kind":g(w)},null,8,gl),e.createElementVNode("div",vl,[e.createElementVNode("div",hl,[w.read_at?(e.openBlock(),e.createElementBlock("span",yl,e.toDisplayString(h(w)),1)):(e.openBlock(),e.createElementBlock("strong",kl,e.toDisplayString(h(w)),1)),e.createElementVNode("span",_l,e.toDisplayString(f(w.created_at)),1)]),k(w)?(e.openBlock(),e.createElementBlock("p",Bl,e.toDisplayString(k(w)),1)):e.createCommentVNode("",!0)]),e.createElementVNode("button",{type:"button",class:"admin-notifs__close","aria-label":"Удалить",onClick:b=>p(w,b)}," × ",8,bl)],10,pl))),128))])]),_:1},8,["value"])),64))]),_:1},8,["model-value"])]),_:1},8,["model-value"]))}}),Nl={class:"admin-page admin-import-wizard"},El={class:"admin-page__hd"},Vl={class:"admin-page__title-wrap"},Cl={class:"admin-page__title"},xl={class:"admin-page__actions"},Sl={key:0,class:"admin-import-wizard__empty"},$l={key:1,class:"admin-import-wizard__mapping"},Ul={class:"admin-import-wizard__map-source"},Tl={key:0,class:"admin-import-wizard__map-sample"},Fl={class:"admin-import-wizard__card-hd"},Dl={key:2,class:"admin-import-wizard__empty"},Al={key:0,class:"admin-import-wizard__empty"},Rl={class:"admin-import-wizard__kpi"},Ll={class:"admin-import-wizard__nav"},Ml=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,r=n,o=[{label:"Загрузка",description:"CSV / TSV / XLSX"},{label:"Сопоставление",description:"Колонки файла → поля"},{label:"Предпросмотр",description:"Проверка первых строк"},{label:"Импорт",description:"Запуск + сводка"}],l=e.ref(0),i=e.computed(()=>a.step??l.value);function s(b){a.step===void 0&&(b<0||b>=o.length||(l.value=b))}const d=e.ref([]);function u(b){d.value=b,b.length>0&&r("file-uploaded",b[0].file)}const p=e.ref({});function g(b,v){p.value[b]=v===null||v===""?null:String(v)}function h(){return a.headers.map(b=>({source:b.key,target:p.value[b.key]??null}))}function k(){r("mapping-submit",h()),s(2)}function f(){r("run-import"),s(3)}const m=e.computed(()=>i.value>0),B=e.computed(()=>{switch(i.value){case 0:return d.value.length>0;case 1:return Object.values(p.value).some(b=>b!==null);case 2:return!0;default:return!1}}),x=e.computed(()=>[{value:"",label:"Не импортировать"},...a.fieldOptions]);function w(){r("cancel")}return(b,v)=>(e.openBlock(),e.createElementBlock("section",Nl,[e.createElementVNode("header",El,[e.createElementVNode("div",Vl,[e.createElementVNode("h1",Cl,e.toDisplayString(t.title),1)]),e.createElementVNode("div",xl,[e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:w},{default:e.withCtx(()=>[...v[2]||(v[2]=[e.createTextVNode("Отмена",-1)])]),_:1})])]),e.createVNode(e.unref(c.UidStepper),{steps:o,current:i.value},null,8,["current"]),i.value===0?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:0,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[v[3]||(v[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})):i.value===1?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:1,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[v[5]||(v[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",Sl," Нет данных — host ещё не отдал headers. Загрузите файл сначала. ")):(e.openBlock(),e.createElementBlock("div",$l,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.headers,C=>(e.openBlock(),e.createElementBlock("div",{key:C.key,class:"admin-import-wizard__map-row"},[e.createElementVNode("div",Ul,[e.createElementVNode("strong",null,e.toDisplayString(C.label),1),C.sample?(e.openBlock(),e.createElementBlock("span",Tl," «"+e.toDisplayString(C.sample)+"» ",1)):e.createCommentVNode("",!0)]),v[4]||(v[4]=e.createElementVNode("span",{class:"admin-import-wizard__map-arrow"},"→",-1)),e.createVNode(e.unref(c.UidSelect),{"model-value":p.value[C.key]??"",options:x.value,placeholder:"Не импортировать","onUpdate:modelValue":$=>g(C.key,$)},null,8,["model-value","options","onUpdate:modelValue"])]))),128))]))]),_:1})):i.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",Fl,[v[6]||(v[6]=e.createElementVNode("h3",null,"3. Предпросмотр",-1)),e.createElementVNode("p",null,"Первые "+e.toDisplayString(t.preview.length)+" строк перед импортом",1)]),t.preview.some(C=>C.__warning)?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:0,variant:"warning",style:{"margin-bottom":"var(--uid-space-md)"}},{default:e.withCtx(()=>[...v[7]||(v[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",Dl," Host не передал previewColumns/preview. "))]),_:1})):(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:3,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[v[8]||(v[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",Rl,[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",Al," Запускается импорт… "))]),_:1})),e.createElementVNode("footer",Ll,[m.value?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"ghost",onClick:v[0]||(v[0]=C=>s(i.value-1))},{default:e.withCtx(()=>[...v[9]||(v[9]=[e.createTextVNode(" Назад ",-1)])]),_:1})):e.createCommentVNode("",!0),v[13]||(v[13]=e.createElementVNode("span",{style:{flex:"1"}},null,-1)),i.value===0?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:1,variant:"primary",disabled:!B.value,onClick:v[1]||(v[1]=C=>s(1))},{default:e.withCtx(()=>[...v[10]||(v[10]=[e.createTextVNode(" Далее ",-1)])]),_:1},8,["disabled"])):i.value===1?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:2,variant:"primary",disabled:!B.value,onClick:k},{default:e.withCtx(()=>[...v[11]||(v[11]=[e.createTextVNode(" Подтвердить mapping ",-1)])]),_:1},8,["disabled"])):i.value===2?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:3,variant:"primary",onClick:f},{default:e.withCtx(()=>[...v[12]||(v[12]=[e.createTextVNode(" Запустить импорт ",-1)])]),_:1})):e.createCommentVNode("",!0)])]))}}),Pl={class:"admin-page admin-field-gallery"},Il={class:"admin-gallery__group-title"},zl={class:"admin-gallery__grid"},ql={class:"admin-gallery__card-hd"},Wl={class:"admin-gallery__card-title"},Ol={class:"admin-gallery__card-type"},jl={class:"admin-gallery__card-desc"},Kl={class:"admin-gallery__card-demo"},Gl=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),{}),r=e.reactive(n.reduce((o,l)=>Object.assign(o,l.initial),{}));return M.provideFormState(r),(o,l)=>(e.openBlock(),e.createElementBlock("section",Pl,[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),(i,s)=>(e.openBlock(),e.createElementBlock("section",{key:s,class:"admin-gallery__group"},[e.createElementVNode("h2",Il,e.toDisplayString(s),1),e.createElementVNode("div",zl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i,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",ql,[e.createElementVNode("h3",Wl,e.toDisplayString(d.title),1),e.createElementVNode("code",Ol,"type: "+e.toDisplayString(d.type),1)]),e.createElementVNode("p",jl,e.toDisplayString(d.description),1),e.createElementVNode("div",Kl,[e.createVNode(Se,{node:d.node},null,8,["node"])])]),_:2},1024))),128))])]))),128))]))}});exports.provideFormState=M.provideFormState;exports.tryUseFormState=M.tryUseFormState;exports.useFormState=M.useFormState;exports.AdminApp=qe;exports.AdminShell=ze;exports.AdminSidebar=Ie;exports.AdminTopBar=Pe;exports.ApiError=I;exports.BadgeEntry=Ct;exports.BarChartWidget=ut;exports.CheckboxField=re;exports.ColumnsLayout=Nt;exports.DashboardPage=ct;exports.DateField=W;exports.DonutChartWidget=mt;exports.FieldGalleryPage=Gl;exports.FieldRenderer=Se;exports.ForbiddenError=Re;exports.ForbiddenPage=Oe;exports.GaugeWidget=gt;exports.HeatmapWidget=pt;exports.HomePage=We;exports.IconEntry=xt;exports.ImportWizardPage=Ml;exports.InfolistRenderer=tt;exports.KeyValueEntry=ye;exports.LayoutRenderer=H;exports.LocaleSwitcher=Be;exports.LoginForm=He;exports.LoginPage=Ye;exports.MarkdownWidget=vt;exports.NetworkError=te;exports.NotFoundError=Le;exports.NotFoundPage=je;exports.NotificationBell=Ae;exports.NotificationsDrawer=wl;exports.NumberField=le;exports.ProfilePage=ot;exports.RecentTableWidget=ft;exports.ResourceFormPage=ve;exports.ResourceIndexPage=Je;exports.ResourceViewPage=at;exports.RowsLayout=ke;exports.SectionLayout=j;exports.SelectField=z;exports.SettingsPage=Ke;exports.StatWidget=dt;exports.TabsLayout=Et;exports.TextAreaField=Q;exports.TextEntry=V;exports.TextField=R;exports.ThemeToggle=_e;exports.TwoFactorForm=Xe;exports.UnauthenticatedError=be;exports.UnknownEntry=et;exports.UnknownField=xe;exports.UnknownScreenPage=Ge;exports.UnknownWidget=it;exports.UserMenu=Me;exports.ValidationError=ee;exports.WidgetRenderer=st;exports.buildRoutesFromManifest=_t;exports.clearAdminClient=Mt;exports.clearInfolistRegistry=ya;exports.clearRegistry=sa;exports.clearWidgetRegistry=io;exports.createAdminApp=ol;exports.createAdminClient=yt;exports.createAdminRouter=wt;exports.createAuthGuard=Bt;exports.createTitleGuard=bt;exports.getAdminClient=F;exports.getField=Ce;exports.getInfolistEntry=he;exports.getLayout=ge;exports.getWidget=lt;exports.hasAdminClient=Pt;exports.hasField=aa;exports.hasInfolistEntry=ha;exports.hasLayout=ra;exports.hasWidget=lo;exports.isError=Po;exports.isSuccess=kt;exports.listFields=oa;exports.listInfolistEntries=ka;exports.listLayouts=ia;exports.listWidgets=ro;exports.loadBootstrap=rl;exports.provideRecord=nt;exports.readCsrfFromMeta=il;exports.readInlineBootstrap=$t;exports.registerBuiltinComponents=Vt;exports.registerBuiltinInfolistEntries=St;exports.registerBuiltinWidgets=ht;exports.registerComponents=Qe;exports.registerField=na;exports.registerInfolistEntries=Ze;exports.registerInfolistEntry=va;exports.registerLayout=la;exports.registerWidget=oo;exports.registerWidgets=rt;exports.setAdminClient=De;exports.toApiError=pe;exports.tryUseRecord=ne;exports.useAuthStore=L;exports.useLocaleStore=se;exports.useManifestStore=q;exports.useMenuStore=we;exports.useNotificationsStore=ce;exports.useRecord=$a;exports.useResourceFormStore=Ve;exports.useResourceIndexStore=Ee;exports.useThemeStore=ie;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),P=require("pinia"),D=require("vue-router"),c=require("@dskripchenko/ui"),Lt=require("axios"),M=require("./formState-GlJBphEn.cjs");let Z=null;function De(t){Z=t}function F(){if(Z===null)throw new Error("[admin] AdminClient is not registered. Call setAdminClient(...) before using stores.");return Z}function Mt(){Z=null}function Pt(){return Z!==null}const ie=P.defineStore("admin-theme",()=>{const t=e.ref("light"),n=e.ref(["light","dark"]),a=e.computed(()=>t.value==="dark");function r(s){t.value=s.theme,n.value=s.availableThemes,i(s.theme)}function o(s){if(!n.value.includes(s))throw new Error(`Theme "${s}" is not available`);t.value=s,i(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 F().post("/system/setTheme",{theme:s})}catch(u){throw o(d),u}}function i(s){typeof document<"u"&&document.documentElement&&document.documentElement.setAttribute("data-theme",s)}return{current:t,available:n,isDark:a,hydrate:r,applyLocal:o,setTheme:l}}),It=["aria-label","aria-pressed"],zt=["data-icon"],_e=e.defineComponent({__name:"ThemeToggle",setup(t){const n=ie(),a=e.computed(()=>n.current==="dark"),r=e.computed(()=>a.value?"sun":"moon"),o=e.computed(()=>a.value?"Переключить на светлую тему":"Переключить на тёмную тему");async function l(){const i=a.value?"light":"dark";await n.setTheme(i)}return(i,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":r.value},null,8,zt)],8,It))}}),se=P.defineStore("admin-locale",()=>{const t=e.ref("ru"),n=e.ref(["ru","en"]);function a(i){t.value=i.locale,n.value=i.availableLocales,l(i.locale)}function r(i){if(!n.value.includes(i))throw new Error(`Locale "${i}" is not available`);t.value=i,l(i)}async function o(i){if(!n.value.includes(i))throw new Error(`Locale "${i}" is not available`);const s=t.value;r(i);try{await F().post("/system/setLocale",{locale:i})}catch(d){throw r(s),d}}function l(i){typeof document<"u"&&document.documentElement&&document.documentElement.setAttribute("lang",i);try{F().setLocale(i)}catch{}}return{current:t,available:n,hydrate:a,applyLocal:r,setLocale:o}}),qt={type:"button",class:"admin-topbar__icon-btn",style:{width:"auto",padding:"0 8px",gap:"4px","font-size":"12px"},"aria-label":"Сменить локаль"},Be=e.defineComponent({__name:"LocaleSwitcher",setup(t){const n=se();async function a(r){r!==n.current&&await n.setLocale(r)}return(r,o)=>(e.openBlock(),e.createBlock(e.unref(c.UidMenu),null,{trigger:e.withCtx(()=>[e.createElementVNode("button",qt,[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:i=>a(l)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.toUpperCase()),1)]),_:2},1032,["onClick"]))),128))]),_:1}))}}),ce=P.defineStore("admin-notifications",()=>{const t=e.ref([]),n=e.ref(0),a=e.ref(!1),r=e.ref("all"),o=e.ref(null),l=e.computed(()=>n.value>0);function i(h){n.value=h.unread_notifications_count}async function s(h="all",k=1){a.value=!0;try{const m=await F().get(`/notifications/list?type=${h}&page=${k}`);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},r.value=h}finally{a.value=!1}}async function d(){const k=await F().get("/notifications/unread");n.value=k.count,r.value==="unread"&&(t.value=k.data)}async function u(h){await F().post("/notifications/markAsRead",{id:h});const p=t.value.find(m=>m.id===h);p&&p.read_at===null&&(p.read_at=new Date().toISOString(),n.value=Math.max(0,n.value-1))}async function f(){await F().post("/notifications/markAllAsRead");const k=new Date().toISOString();for(const p of t.value)p.read_at===null&&(p.read_at=k);n.value=0}async function g(h){await F().post("/notifications/destroy",{id:h});const p=t.value.findIndex(m=>m.id===h);if(p!==-1){const m=t.value[p].read_at===null;t.value.splice(p,1),m&&(n.value=Math.max(0,n.value-1))}}return{items:t,unreadCount:n,loading:a,meta:o,lastFilter:r,hasUnread:l,hydrate:i,load:s,loadUnread:d,markAsRead:u,markAllAsRead:f,destroy:g}}),Wt=["title"],Ae=e.defineComponent({__name:"NotificationBell",setup(t){const n=ce(),a=e.computed(()=>{const r=n.unreadCount;return r<=0?null:r>99?"99+":String(r)});return(r,o)=>(e.openBlock(),e.createBlock(e.unref(D.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,Wt)):e.createCommentVNode("",!0)]),_:1}))}});class I 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 be extends I{constructor(n){super(401,n),this.name="UnauthenticatedError"}}class Re extends I{constructor(n){super(403,n),this.name="ForbiddenError"}}class Le extends I{constructor(n){super(404,n),this.name="NotFoundError"}}class ee extends I{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 te extends Error{constructor(n="Network error"){super(n),this.name="NetworkError"}}function pe(t,n){switch(t){case 401:return new be(n);case 403:return new Re(n);case 404:return new Le(n);case 422:return new ee(n);default:return new I(t,n)}}const L=P.defineStore("admin-auth",()=>{const t=e.ref(null),n=e.ref([]),a=e.ref(null),r=e.computed(()=>t.value!==null),o=e.computed(()=>a.value!==null);function l(p){t.value=p.user,n.value=p.permissions}function i(p){return n.value.includes("*")||n.value.includes(p)?!0:n.value.some(m=>{if(!m.endsWith(".*"))return!1;const B=m.slice(0,-1);return p.startsWith(B)})}function s(p){return p.some(i)}function d(p){return p.every(i)}async function u(p){const m=F();try{const B=await m.post("/auth/login",p);return B?.user&&(t.value=B.user),Array.isArray(B?.permissions)&&(n.value=B.permissions),a.value=null,"authenticated"}catch(B){if(B instanceof I&&B.errorKey==="two_factor_required"){const x=B.payload.challenge_token;return a.value={challengeToken:typeof x=="string"?x:"",remember:p.remember??!1},"two_factor_required"}throw B}}async function f(p){if(a.value===null)throw new Error("No pending 2FA challenge");const B=await F().post("/auth/twoFactorChallenge",{challenge_token:a.value.challengeToken,code:p});t.value=B.user,a.value=null}async function g(p){if(a.value===null)throw new Error("No pending 2FA challenge");const B=await F().post("/auth/twoFactorRecovery",{challenge_token:a.value.challengeToken,recovery_code:p});return t.value=B.user,a.value=null,{remaining:B.recovery_codes_remaining}}function h(){a.value=null}async function k(){const p=F();try{await p.post("/auth/logout")}finally{t.value=null,n.value=[],a.value=null}}return{user:t,permissions:n,pendingChallenge:a,isAuthenticated:r,isChallengePending:o,hydrate:l,hasPermission:i,hasAnyPermission:s,hasAllPermissions:d,login:u,twoFactorChallenge:f,twoFactorRecovery:g,cancelChallenge:h,logout:k}}),Ot={type:"button",class:"admin-topbar__icon-btn admin-user-menu__trigger","aria-label":"Меню пользователя","aria-haspopup":"menu",style:{width:"auto",padding:"0 4px",gap:"8px"}},Me=e.defineComponent({__name:"UserMenu",setup(t){const n=L(),a=D.useRouter();async function r(){try{await n.logout()}finally{await a.push({name:"admin.login"})}}function o(){a.push({name:"admin.profile"})}return(l,i)=>(e.openBlock(),e.createBlock(e.unref(c.UidMenu),null,{trigger:e.withCtx(()=>[e.createElementVNode("button",Ot,[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(()=>[...i[0]||(i[0]=[e.createTextVNode("Профиль",-1)])]),_:1}),e.createVNode(e.unref(c.UidMenuSeparator)),e.createVNode(e.unref(c.UidMenuItem),{variant:"danger",onClick:r},{default:e.withCtx(()=>[...i[1]||(i[1]=[e.createTextVNode("Выйти",-1)])]),_:1})]),_:1}))}}),jt={class:"admin-topbar"},Kt={class:"admin-topbar__breadcrumbs"},Gt={key:0,class:"sep"},Pe=e.defineComponent({__name:"AdminTopBar",props:{breadcrumbs:{default:()=>[]},showCollapseToggle:{type:Boolean,default:!0}},emits:["toggle-sidebar"],setup(t,{emit:n}){const a=t,r=n,o=e.computed(()=>a.breadcrumbs.length-1);return(l,i)=>(e.openBlock(),e.createElementBlock("header",jt,[t.showCollapseToggle?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"admin-topbar__icon-btn","aria-label":"Свернуть меню",onClick:i[0]||(i[0]=s=>r("toggle-sidebar"))},[...i[1]||(i[1]=[e.createElementVNode("span",{class:"admin-topbar__icon","data-icon":"panel-left"},null,-1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",Kt,[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",Gt,"›")):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))])]),i[3]||(i[3]=e.createElementVNode("div",{class:"admin-topbar__spacer"},null,-1)),e.renderSlot(l.$slots,"search",{},()=>[i[2]||(i[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(Ae),e.createVNode(_e),e.createVNode(Be),e.createVNode(Me)]))}}),we=P.defineStore("admin-menu",()=>{const t=e.ref([]),n=e.ref(!1),a=e.ref(null),r=e.ref(!1),o=e.computed(()=>{const u=L(),f=g=>{if(Array.isArray(g.permissions)&&g.permissions.length>0&&!u.hasAnyPermission(g.permissions))return null;const h=(g.children??[]).map(f).filter(k=>k!==null);return{...g,children:h}};return t.value.map(f).filter(g=>g!==null)}),l=e.computed(()=>{const u=new Map;for(const g of o.value){const h=g.group??null;u.has(h)||u.set(h,[]),u.get(h).push(g)}const f=[];for(const[g,h]of u)h.sort((k,p)=>{const m=(k.order??0)-(p.order??0);return m!==0?m:k.label.localeCompare(p.label)}),f.push({group:g,items:h});return f});async function i(u=!1){if(r.value&&!u)return t.value;n.value=!0,a.value=null;try{const g=await F().get("/system/menu");return t.value=Array.isArray(g.items)?g.items:[],r.value=!0,t.value}catch(f){throw a.value=f instanceof Error?f:new Error(String(f)),f}finally{n.value=!1}}function s(u){t.value=u,r.value=!0,a.value=null}function d(){t.value=[],r.value=!1,a.value=null,n.value=!1}return{items:t,loading:n,error:a,isLoaded:r,visibleItems:o,groupedItems:l,load:i,setItems:s,reset:d}}),Ht={class:"admin-sidebar-brand"},Xt={class:"admin-sidebar-brand__mark"},Yt={key:0,class:"admin-sidebar-brand__name"},Jt={key:0,class:"admin-sidebar-tenant"},Qt={class:"admin-sidebar-foot"},Zt={key:0,class:"admin-sidebar-foot__text"},en=["href"],Ie=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=we(),a=D.useRoute(),r=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 i(s){if(s.url)return s.url;if(s.routeName)return{name:s.routeName}}return(s,d)=>(e.openBlock(),e.createBlock(e.unref(c.UidSidebar),{collapsed:t.collapsed},e.createSlots({header:e.withCtx(()=>[e.createElementVNode("div",Ht,[e.createElementVNode("div",Xt,e.toDisplayString(t.brandMark),1),t.collapsed?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Yt,e.toDisplayString(t.brandName),1))]),t.tenant&&!t.collapsed?(e.openBlock(),e.createElementBlock("div",Jt,[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(r.value,(u,f)=>(e.openBlock(),e.createBlock(e.unref(c.UidSidebarGroup),{key:`grp-${f}`,title:u.group??void 0},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.items,g=>(e.openBlock(),e.createBlock(e.unref(c.UidSidebarItem),{key:g.key,to:i(g),active:o(g),badge:g.badge??void 0},e.createSlots({default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(g.label),1)]),_:2},[g.icon?{name:"icon",fn:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l(g.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",Qt,[t.version?(e.openBlock(),e.createElementBlock("span",Zt,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,en)):e.createCommentVNode("",!0)])]),key:"0"}:void 0]),1032,["collapsed"]))}}),tn={class:"admin-shell-root"},nn={key:0,class:"admin-impersonation-banner",role:"status"},me="data-admin-impersonating",ze=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,r=n;function o(i){r("update:collapsed",i)}function l(){r("exit-impersonation")}return e.watch(()=>a.impersonation,i=>{typeof document>"u"||(i!==null?document.documentElement.setAttribute(me,"true"):document.documentElement.removeAttribute(me))},{immediate:!0}),e.onBeforeUnmount(()=>{typeof document<"u"&&document.documentElement.removeAttribute(me)}),(i,s)=>(e.openBlock(),e.createElementBlock("div",tn,[t.impersonation?(e.openBlock(),e.createElementBlock("div",nn,[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(i.$slots,"sidebar",{},()=>[e.createVNode(Ie,{collapsed:t.collapsed},null,8,["collapsed"])])]),header:e.withCtx(()=>[e.renderSlot(i.$slots,"topbar",{},()=>[e.createVNode(Pe,{onToggleSidebar:s[0]||(s[0]=d=>o(!t.collapsed))})])]),default:e.withCtx(()=>[e.renderSlot(i.$slots,"default")]),_:3},8,["model-value"])]))}}),Ne=P.defineStore("admin-navigation",()=>{const t=e.ref(0),n=e.computed(()=>t.value>0);function a(){t.value+=1}function r(){t.value>0&&(t.value-=1)}function o(){t.value=0}return{pending:t,isLoading:n,start:a,end:r,reset:o}}),an=e.defineComponent({__name:"AdminLoadingBar",setup(t){const n=Ne(),a=e.ref(!1);let r=null;e.watch(()=>n.isLoading,l=>{l?(r!==null&&(clearTimeout(r),r=null),a.value=!0):r=setTimeout(()=>{a.value=!1,r=null},120)},{immediate:!0});const o=e.computed(()=>({"admin-loading-bar":!0,"admin-loading-bar--visible":a.value}));return(l,i)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(o.value),role:"progressbar","aria-busy":"true"},null,2))}}),on={class:"admin-page-host"},qe=e.defineComponent({__name:"AdminApp",setup(t){const n=D.useRoute(),a=e.computed(()=>!(n.meta?.fullscreen===!0||n.meta?.kind==="auth"||n.name==="admin.notFound"));return(r,o)=>{const l=e.resolveComponent("router-view");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(an),a.value?(e.openBlock(),e.createBlock(ze,{key:0},{default:e.withCtx(()=>[e.createElementVNode("div",on,[e.createVNode(l,null,{default:e.withCtx(({Component:i})=>[e.createVNode(e.Transition,{name:"admin-page"},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i)))]),_:2},1024)]),_:1})])]),_:1})):(e.openBlock(),e.createBlock(l,{key:1},{default:e.withCtx(({Component:i})=>[e.createVNode(e.Transition,{name:"admin-page"},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i)))]),_:2},1024)]),_:1}))],64)}}}),q=P.defineStore("admin-manifest",()=>{const t=e.ref(null),n=e.ref(!1),a=e.ref(null),r=e.computed(()=>t.value!==null),o=e.computed(()=>t.value?.version??null),l=e.computed(()=>t.value?.resources??[]),i=e.computed(()=>t.value?.screens??[]),s=e.computed(()=>t.value?.settings??[]),d=e.computed(()=>t.value?.plugins??[]);function u(p){return l.value.find(m=>m.slug===p)??null}function f(p){return i.value.find(m=>m.slug===p)??null}function g(p){return s.value.find(m=>m.slug===p)??null}async function h(p=!1){if(t.value!==null&&!p)return t.value;n.value=!0,a.value=null;try{const B=await F().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 k(){t.value=null,a.value=null,n.value=!1}return{manifest:t,loading:n,error:a,isLoaded:r,version:o,resources:l,screens:i,settings:s,plugins:d,getResource:u,getScreen:f,getSettings:g,load:h,reset:k}}),ln={class:"admin-home"},rn={class:"admin-home__title"},sn={key:0,class:"admin-home__resources"},cn={class:"admin-home__grid"},dn=["onClick"],un={class:"admin-home__card-label"},mn={class:"admin-home__card-slug"},We=e.defineComponent({__name:"HomePage",setup(t){const n=q(),a=L(),r=D.useRouter(),o=e.computed(()=>a.user?.name??""),l=e.computed(()=>n.manifest?.resources??[]);return(i,s)=>(e.openBlock(),e.createElementBlock("div",ln,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-home__hero"},{default:e.withCtx(()=>[e.createElementVNode("h1",rn,"Добро пожаловать"+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",sn,[s[1]||(s[1]=e.createElementVNode("h2",{class:"admin-home__heading"},"Ресурсы",-1)),e.createElementVNode("ul",cn,[(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(r).push({name:`admin.resource.${d.slug}.index`})},[e.createElementVNode("span",un,e.toDisplayString(d.label),1),e.createElementVNode("span",mn,e.toDisplayString(d.slug),1)],8,dn)]))),128))])])):e.createCommentVNode("",!0)]))}}),fn={class:"admin-status-page"},Oe=e.defineComponent({__name:"ForbiddenPage",setup(t){const n=D.useRouter();return(a,r)=>(e.openBlock(),e.createElementBlock("div",fn,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[r[2]||(r[2]=e.createElementVNode("h1",{class:"admin-status-page__code"},"403",-1)),r[3]||(r[3]=e.createElementVNode("p",{class:"admin-status-page__message"},"Доступ запрещён.",-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:r[0]||(r[0]=o=>e.unref(n).replace({name:"admin.home"}))},{default:e.withCtx(()=>[...r[1]||(r[1]=[e.createTextVNode(" На главную ",-1)])]),_:1})]),_:1})]))}}),pn={class:"admin-status-page"},je=e.defineComponent({__name:"NotFoundPage",setup(t){const n=D.useRouter();return(a,r)=>(e.openBlock(),e.createElementBlock("div",pn,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[r[2]||(r[2]=e.createElementVNode("h1",{class:"admin-status-page__code"},"404",-1)),r[3]||(r[3]=e.createElementVNode("p",{class:"admin-status-page__message"},"Страница не найдена.",-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:r[0]||(r[0]=o=>e.unref(n).replace({name:"admin.home"}))},{default:e.withCtx(()=>[...r[1]||(r[1]=[e.createTextVNode(" На главную ",-1)])]),_:1})]),_:1})]))}}),gn={class:"admin-settings-page"},vn={class:"admin-settings-page__title"},hn={key:0,class:"admin-settings-page__hint"},kn={key:1,class:"admin-settings-page__debug"},Ke=e.defineComponent({__name:"SettingsPage",setup(t){const n=D.useRoute(),a=q(),r=e.computed(()=>String(n.params.slug??"")),o=e.computed(()=>a.manifest?.settings?.find(l=>l.slug===r.value)??null);return(l,i)=>(e.openBlock(),e.createElementBlock("div",gn,[e.createVNode(e.unref(c.UidCard),{padding:"lg"},{default:e.withCtx(()=>[e.createElementVNode("h1",vn,e.toDisplayString(o.value?.label??r.value),1),o.value?(e.openBlock(),e.createElementBlock("pre",kn,e.toDisplayString(JSON.stringify(o.value.fields,null,2)),1)):(e.openBlock(),e.createElementBlock("p",hn," Settings «"+e.toDisplayString(r.value)+"» не найдено в manifest'е. ",1))]),_:1})]))}}),yn={class:"admin-status-page"},_n={class:"admin-status-page__title"},Bn={class:"admin-status-page__hint"},Ge=e.defineComponent({__name:"UnknownScreenPage",setup(t){const n=D.useRoute(),a=e.computed(()=>String(n.params.slug??"")),r=e.computed(()=>String(n.meta?.title??a.value));return(o,l)=>(e.openBlock(),e.createElementBlock("div",yn,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[e.createElementVNode("h1",_n,e.toDisplayString(r.value),1),e.createElementVNode("p",Bn,[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})]))}}),bn={class:"admin-auth-card__row"},wn=["href"],Nn={key:1,style:{"text-align":"center","font-size":"var(--uid-font-size-xs)",color:"var(--uid-text-secondary)","padding-top":"4px"}},En=["href"],He=e.defineComponent({__name:"LoginForm",props:{forgotUrl:{default:null},ssoLinkLabel:{default:null},ssoUrl:{default:null}},emits:["success"],setup(t,{emit:n}){const a=n,r=L(),o=e.ref(""),l=e.ref(""),i=e.ref(!1),s=e.ref(!1),d=e.ref(null),u=e.ref({}),f=e.computed(()=>u.value.email?.[0]),g=e.computed(()=>u.value.password?.[0]);async function h(){if(!s.value){s.value=!0,d.value=null,u.value={};try{const k=await r.login({email:o.value,password:l.value,remember:i.value});a("success",k)}catch(k){k instanceof ee?(u.value=k.fields,d.value=k.firstFieldMessage()):k instanceof te?d.value="Нет соединения с сервером":k instanceof I?d.value=k.message||"Не удалось войти":d.value=k.message}finally{s.value=!1}}}return(k,p)=>(e.openBlock(),e.createElementBlock("form",{class:"admin-auth-card__bd",novalidate:"",onSubmit:e.withModifiers(h,["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":p[0]||(p[0]=m=>o.value=m),type:"email",label:"Email",placeholder:"you@company.com",autocomplete:"username",required:!0,disabled:s.value,error:f.value,name:"email"},null,8,["modelValue","disabled","error"]),e.createVNode(e.unref(c.UidInput),{modelValue:l.value,"onUpdate:modelValue":p[1]||(p[1]=m=>l.value=m),type:"password",label:"Пароль",autocomplete:"current-password",required:!0,disabled:s.value,error:g.value,name:"password"},null,8,["modelValue","disabled","error"]),e.createElementVNode("div",bn,[e.createVNode(e.unref(c.UidCheckbox),{modelValue:i.value,"onUpdate:modelValue":p[2]||(p[2]=m=>i.value=m),disabled:s.value},{default:e.withCtx(()=>[...p[3]||(p[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,wn)):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",Nn,[p[4]||(p[4]=e.createTextVNode(" или войдите через ",-1)),e.createElementVNode("a",{href:t.ssoUrl,class:"admin-auth-card__link"},e.toDisplayString(t.ssoLinkLabel),9,En)])):e.createCommentVNode("",!0)],32))}}),Vn=["value","disabled","aria-label","onInput","onKeydown"],Cn={class:"admin-auth-card__row"},Xe=e.defineComponent({__name:"TwoFactorForm",emits:["success","cancel"],setup(t,{emit:n}){const a=n,r=L(),o=e.ref("totp"),l=e.ref(["","","","","",""]),i=e.ref(""),s=e.ref([]),d=e.ref(!1),u=e.ref(null),f=e.ref(null),g=e.computed(()=>l.value.join("")),h=e.computed(()=>o.value==="totp"?g.value.length===6:i.value.trim().length>0);function k(v,C){C instanceof HTMLInputElement&&(s.value[v]=C)}function p(v,C){const $=C.target,T=$.value.replace(/\D/g,"").slice(-1);l.value[v]=T,$.value=T,T&&v<l.value.length-1&&e.nextTick(()=>s.value[v+1]?.focus()),g.value.length===l.value.length&&x()}function m(v,C){C.key==="Backspace"&&!l.value[v]&&v>0?e.nextTick(()=>s.value[v-1]?.focus()):C.key==="ArrowLeft"&&v>0?(s.value[v-1]?.focus(),C.preventDefault()):C.key==="ArrowRight"&&v<l.value.length-1&&(s.value[v+1]?.focus(),C.preventDefault())}function B(v){const $=(v.clipboardData?.getData("text")??"").replace(/\D/g,"").slice(0,l.value.length);if($.length!==0){v.preventDefault();for(let T=0;T<l.value.length;T++)l.value[T]=$[T]??"";e.nextTick(()=>{s.value[Math.min($.length,l.value.length-1)]?.focus(),$.length===l.value.length&&x()})}}async function x(){if(!(d.value||!h.value)){d.value=!0,u.value=null;try{if(o.value==="totp")await r.twoFactorChallenge(g.value);else{const v=await r.twoFactorRecovery(i.value.trim());f.value=v.remaining}a("success")}catch(v){v instanceof ee?u.value=v.firstFieldMessage()??"Неверный код":v instanceof te?u.value="Нет соединения с сервером":v instanceof I?u.value=v.message||"Не удалось проверить код":u.value=v.message}finally{d.value=!1}}}function w(){r.cancelChallenge(),a("cancel")}function b(){o.value=o.value==="totp"?"recovery":"totp",u.value=null}return(v,C)=>(e.openBlock(),e.createElementBlock("form",{class:"admin-auth-card__bd",novalidate:"",onSubmit:e.withModifiers(x,["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),f.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(f.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,($,T)=>(e.openBlock(),e.createElementBlock("input",{key:T,ref_for:!0,ref:y=>k(T,y),value:l.value[T],type:"text",inputmode:"numeric",autocomplete:"one-time-code",maxlength:"1",disabled:d.value,"aria-label":`Цифра ${T+1}`,onInput:y=>p(T,y),onKeydown:y=>m(T,y)},null,40,Vn))),128))],32)):(e.openBlock(),e.createBlock(e.unref(c.UidInput),{key:3,modelValue:i.value,"onUpdate:modelValue":C[0]||(C[0]=$=>i.value=$),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||!h.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value?"Проверка…":"Подтвердить"),1)]),_:1},8,["loading","disabled"]),e.createElementVNode("div",Cn,[e.createElementVNode("button",{type:"button",class:"admin-auth-card__link",onClick:b},[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:w}," Отмена ")])],32))}}),xn={class:"admin-auth-page"},Sn={key:0,class:"admin-auth-page__corner"},$n={class:"admin-auth-card__hd"},Un=["src","alt"],Tn={key:1,"aria-hidden":"true"},Fn={key:2},Dn={class:"admin-auth-card__title"},An={class:"admin-auth-card__sub"},Ye=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=L(),r=D.useRouter(),o=D.useRoute();async function l(){const i=o.query[n.redirectQueryKey];if(typeof i=="string"&&i.length>0&&i.startsWith("/")){await r.push(i);return}await r.push({name:n.homeRouteName})}return e.watch(()=>a.isAuthenticated,i=>{i&&l()}),e.onMounted(()=>{a.isAuthenticated&&l()}),(i,s)=>(e.openBlock(),e.createElementBlock("div",xn,[t.showCornerActions?(e.openBlock(),e.createElementBlock("div",Sn,[e.createVNode(_e),e.createVNode(Be)])):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,Un)):e.unref(a).isChallengePending?(e.openBlock(),e.createElementBlock("span",Tn,"🛡")):(e.openBlock(),e.createElementBlock("span",Fn,e.toDisplayString(t.brandMark),1))],2),e.createElementVNode("div",Dn,[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",An,[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(Xe,{key:0,onSuccess:s[0]||(s[0]=()=>{}),onCancel:s[1]||(s[1]=()=>{})})):(e.openBlock(),e.createBlock(He,{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"])]))}}),Te={page:1,per_page:20,total:0,last_page:1},Ee=P.defineStore("admin-resource-index",()=>{const t=e.ref(null),n=e.ref([]),a=e.ref({...Te}),r=e.ref(!1),o=e.ref(!1),l=e.ref(null);let i=null;const s=200,d=e.ref(""),u=e.ref({}),f=e.ref(null),g=e.ref(null),h=e.ref(new Set),k=e.computed(()=>!r.value&&l.value===null&&n.value.length===0),p=e.computed(()=>h.value.size),m=e.computed(()=>h.value.size>0),B=e.computed(()=>l.value!==null),x=e.computed(()=>h.value.size===0||n.value.length===0?"none":n.value.every(U=>h.value.has(w(U)))?"all":"mixed");function w(E){return E.id??E.key??""}function b(E){t.value!==E&&(t.value=E,v(),r.value=!0)}function v(){n.value=[],a.value={...Te},r.value=!1,l.value=null,d.value="",u.value={},f.value=null,g.value=null,h.value=new Set}function C(E={}){const U={page:E.page??a.value.page,per_page:E.per_page??a.value.per_page},ae=E.search??d.value;ae&&(U.q=ae);const J=E.sort??f.value,Ue=E.direction??g.value;J&&Ue!==null&&(U.order=[{column:J,direction:Ue}]);const At=E.filters??u.value,ue={};for(const[Rt,O]of Object.entries(At))O==null||O===""||(ue[Rt]=Array.isArray(O)?O.join(","):O);return Object.keys(ue).length>0&&(U.filters=ue),U}async function $(E={}){if(!t.value)throw new Error("useResourceIndexStore.load() called before setSlug()");r.value=!0,l.value=null,i!==null&&clearTimeout(i),i=setTimeout(()=>{o.value=!0},s);try{const U=F(),ae=C(E),J=await U.post(`/${t.value}/search`,ae);n.value=J.data,a.value=J.meta}catch(U){throw l.value=U instanceof Error?U:new Error(String(U)),U}finally{r.value=!1,o.value=!1,i!==null&&(clearTimeout(i),i=null)}}async function T(E){d.value=E,a.value.page=1,await $()}async function y(E,U){U==null||U===""?delete u.value[E]:u.value[E]=U,a.value.page=1,await $()}async function _(){u.value={},a.value.page=1,await $()}async function N(E,U="asc"){f.value=E,g.value=U,await $()}async function S(E){f.value===E?g.value==="asc"?g.value="desc":g.value==="desc"?(f.value=null,g.value=null):g.value="asc":(f.value=E,g.value="asc"),await $()}async function A(E){a.value.page=E,await $()}function Ut(E){const U=new Set(h.value);U.has(E)?U.delete(E):U.add(E),h.value=U}function Tt(){if(x.value==="all"){h.value=new Set;return}const E=new Set(h.value);for(const U of n.value)E.add(w(U));h.value=E}function Ft(){h.value=new Set}function Dt(E){return h.value.has(E)}return{slug:t,items:n,meta:a,loading:r,slowLoading:o,error:l,search:d,filters:u,sortKey:f,sortDirection:g,selection:h,isEmpty:k,hasError:B,hasSelection:m,selectedCount:p,selectionState:x,setSlug:b,reset:v,load:$,setSearch:T,setFilter:y,clearFilters:_,setSort:N,toggleSort:S,setPage:A,toggleRow:Ut,toggleAllOnPage:Tt,clearSelection:Ft,isSelected:Dt,rowId:w}}),Rn=Object.freeze(Object.defineProperty({__proto__:null,useResourceIndexStore:Ee},Symbol.toStringTag,{value:"Module"})),Fe="d.m.Y H:i:s",Ln="d.m.Y",Mn=/^\d{4}-\d{2}-\d{2}[T\s]\d{2}:\d{2}/;function Pn(t,n,a={}){if(t==null)return"";if(!n&&typeof t=="string"&&Mn.test(t))return fe(t,Fe);switch(n){case"date":return fe(String(t),a.format??Ln);case"datetime":return fe(String(t),a.format??Fe);case"money":return In(t,a.currency??"RUB",a.decimals??2);case"boolean":return zn(t,a.trueLabel??"Да",a.falseLabel??"Нет");case"bytes":return qn(t);default:return String(t)}}function fe(t,n){const a=new Date(t);if(isNaN(a.getTime()))return t;const r=(i,s=2)=>String(i).padStart(s,"0"),o={d:r(a.getDate()),m:r(a.getMonth()+1),Y:String(a.getFullYear()),y:r(a.getFullYear()%100),H:r(a.getHours()),h:r((a.getHours()+11)%12+1),i:r(a.getMinutes()),s:r(a.getSeconds()),U:String(Math.floor(a.getTime()/1e3)),c:a.toISOString(),N:String((a.getDay()+6)%7+1),w:String(a.getDay())};let l="";for(let i=0;i<n.length;i++){const s=n[i];if(s==="\\"&&i+1<n.length){l+=n[i+1],i++;continue}l+=o[s]??s}return l}function In(t,n,a){const r=typeof t=="number"?t:Number(t);return isNaN(r)?String(t):`${r.toFixed(a)} ${n}`}function zn(t,n,a){return t===!0||t===1||t==="1"||t==="true"?n:a}function qn(t){const n=typeof t=="number"?t:Number(t);return isNaN(n)?String(t):n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(1)} KB`:n<1024*1024*1024?`${(n/1024/1024).toFixed(1)} MB`:`${(n/1024/1024/1024).toFixed(1)} GB`}const Wn={class:"admin-page admin-resource-index"},On={class:"admin-page__hd"},jn={class:"admin-page__title-wrap"},Kn={class:"admin-page__title"},Gn={key:0,class:"admin-page__count"},Hn={class:"admin-page__actions"},Xn={key:0,class:"admin-bulk-toolbar",role:"toolbar"},Yn={class:"admin-bulk-toolbar__count"},Jn={key:1,class:"admin-filter-bar"},Qn=["value"],Zn={key:2,class:"admin-resource-index__loading"},ea={key:5,class:"admin-resource-index__table"},ta={key:6,class:"admin-resource-index__footer"},Je=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,r=n,o=Ee(),l=q(),i=Ne(),s=e.computed(()=>l.getResource(a.slug)),d=e.computed(()=>a.title??s.value?.label??a.slug),u=e.computed(()=>(s.value?.columns??[]).map(_=>{const N=_;return{key:String(N.key??N.name??""),label:String(N.label??N.name??""),sortable:!!N.sortable,align:N.align??"left",width:typeof N.width=="string"?N.width:void 0}}).filter(_=>_.key)),f=e.computed(()=>{const y=s.value?.columns??[],_={};for(const N of y){const S=N,A=String(S.key??S.name??"");A&&(_[A]={preset:typeof S.preset=="string"?S.preset:void 0,meta:S.meta??{}})}return _});function g(y,_){const S=_?.row?.[y],A=f.value[y];return Pn(S,A?.preset,A?.meta??{})}function h(y){return y?.row}const k=e.computed(()=>o.search!==""||Object.keys(o.filters).length>0),p=e.computed(()=>!o.isEmpty||k.value),m=e.computed(()=>{const y=o.meta.total;return y===0?"":`${o.items.length} из ${y}`});async function B(){i.start();try{await o.load()}catch{}finally{i.end()}}e.onMounted(async()=>{o.setSlug(a.slug),l.manifest===null&&await l.load().catch(()=>{}),await B()}),e.watch(()=>a.slug,async(y,_)=>{y!==_&&(o.setSlug(y),await B())});async function x(y){await e.nextTick(),await o.setSort(y,o.sortDirection)}async function w(y){await e.nextTick(),await o.setSort(o.sortKey,y)}function b(y){o.selection=y}async function v(y){await o.setPage(y)}function C(y){r("row-click",y)}function $(y){r("bulk-action",y,[...o.selection])}async function T(){await o.load().catch(()=>{})}return(y,_)=>(e.openBlock(),e.createElementBlock("section",Wn,[e.createElementVNode("header",On,[e.createElementVNode("div",jn,[e.createElementVNode("h1",Kn,e.toDisplayString(d.value),1),t.subtitle||m.value?(e.openBlock(),e.createElementBlock("div",Gn,[t.subtitle?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(t.subtitle),1)],64)):e.createCommentVNode("",!0),t.subtitle&&m.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" · ")],64)):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(m.value),1)],64)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Hn,[e.renderSlot(y.$slots,"actions"),t.createRouteName?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"primary",onClick:_[0]||(_[0]=N=>y.$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",Xn,[e.createElementVNode("span",Yn,[_[7]||(_[7]=e.createTextVNode(" Выбрано ",-1)),e.createElementVNode("b",null,e.toDisplayString(e.unref(o).selectedCount),1)]),_[13]||(_[13]=e.createElementVNode("span",{class:"admin-bulk-toolbar__divider"},null,-1)),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:_[1]||(_[1]=N=>$("publish"))},{default:e.withCtx(()=>[..._[8]||(_[8]=[e.createTextVNode("Опубликовать",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:_[2]||(_[2]=N=>$("archive"))},{default:e.withCtx(()=>[..._[9]||(_[9]=[e.createTextVNode("Архивировать",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:_[3]||(_[3]=N=>$("export"))},{default:e.withCtx(()=>[..._[10]||(_[10]=[e.createTextVNode("Экспорт",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"danger",onClick:_[4]||(_[4]=N=>$("delete"))},{default:e.withCtx(()=>[..._[11]||(_[11]=[e.createTextVNode("Удалить",-1)])]),_:1}),_[14]||(_[14]=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(()=>[..._[12]||(_[12]=[e.createTextVNode(" Снять выделение ",-1)])]),_:1},8,["onClick"])])):p.value?(e.openBlock(),e.createElementBlock("div",Jn,[e.createElementVNode("input",{value:e.unref(o).search,type:"search",placeholder:"Поиск…",class:"admin-filter-bar__search",onKeydown:_[5]||(_[5]=e.withKeys(N=>e.unref(o).setSearch(N.target.value),["enter"]))},null,40,Qn),e.renderSlot(y.$slots,"filters",{filters:e.unref(o).filters,setFilter:e.unref(o).setFilter}),_[16]||(_[16]=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(()=>[..._[15]||(_[15]=[e.createTextVNode(" Сброс ",-1)])]),_:1},8,["onClick"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.unref(o).loading&&e.unref(o).items.length===0?(e.openBlock(),e.createElementBlock("div",Zn,[e.unref(o).slowLoading?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},e.renderList(8,N=>e.createVNode(e.unref(c.UidSkeleton),{key:N,height:"40px"})),64)):e.createCommentVNode("",!0)])):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:T},{default:e.withCtx(()=>[..._[17]||(_[17]=[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:_[6]||(_[6]=N=>y.$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",ea,[e.createVNode(e.unref(c.UidTable),{columns:u.value,data:e.unref(o).items,"sort-key":e.unref(o).sortKey,"sort-direction":e.unref(o).sortDirection,selectable:"",selection:e.unref(o).selection,"row-key":N=>e.unref(o).rowId(N),"onUpdate:sortKey":x,"onUpdate:sortDirection":w,"onUpdate:selection":b,onRowClick:C},e.createSlots({_:2},[e.renderList(u.value,N=>({name:N.key,fn:e.withCtx(S=>[e.renderSlot(y.$slots,`cell-${N.key}`,{row:h(S)},()=>[e.createTextVNode(e.toDisplayString(g(N.key,S)),1)])])}))]),1032,["columns","data","sort-key","sort-direction","selection","row-key"])])),!e.unref(o).loading&&!e.unref(o).hasError&&!e.unref(o).isEmpty?(e.openBlock(),e.createElementBlock("footer",ta,[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":v},null,8,["model-value","total","per-page"])])):e.createCommentVNode("",!0)]))}}),Ve=P.defineStore("admin-resource-form",()=>{const t=e.ref(null),n=e.ref("create"),a=e.ref(null),r=e.ref({}),o=e.ref({}),l=e.ref({}),i=e.ref(!1),s=e.ref(!1),d=e.ref(!1),u=e.ref(null),f=e.computed(()=>n.value==="create"),g=e.computed(()=>n.value==="edit"),h=e.computed(()=>n.value==="view"),k=e.computed(()=>u.value!==null),p=e.computed(()=>{const y=r.value,_=o.value,N=new Set([...Object.keys(y),...Object.keys(_)]);for(const S of N)if(!Object.is(y[S],_[S]))if(typeof y[S]=="object"||typeof _[S]=="object"){if(JSON.stringify(y[S])!==JSON.stringify(_[S]))return!0}else return!0;return!1});function m(y,_){for(const N of Object.keys(y))delete y[N];Object.assign(y,_)}function B(){m(r.value,{}),m(o.value,{}),l.value={},i.value=!1,s.value=!1,d.value=!1,u.value=null,a.value=null}function x(y,_={}){t.value=y,n.value="create",a.value=null,m(r.value,_),m(o.value,_),l.value={},u.value=null}async function w(y,_,N="edit"){t.value=y,n.value=N,a.value=_,i.value=!0,u.value=null,l.value={};try{const A=await F().get(`/${y}/read`,{params:{id:_}});m(r.value,A.record),m(o.value,A.record)}catch(S){throw u.value=S instanceof Error?S:new Error(String(S)),S}finally{i.value=!1}}function b(y,_){if(r.value[y]=_,l.value[y]){const N={...l.value};delete N[y],l.value=N}}function v(y){l.value={...y}}function C(){l.value={}}async function $(){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 y=F(),_=n.value==="create"?`/${t.value}/create`:`/${t.value}/update`,N=n.value==="create"?r.value:{id:a.value,...r.value},S=await y.post(_,N),A=S.record?.id??S.id;if(A===void 0)throw new Error("save: backend response does not contain record.id");return a.value=A,m(o.value,{...r.value}),n.value="edit",A}catch(y){throw y instanceof ee?l.value={...y.fields}:(y instanceof I||y instanceof Error)&&(u.value=y),y}finally{s.value=!1}}async function T(){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 F().post(`/${t.value}/delete`,{id:a.value})}catch(y){throw y instanceof Error&&(u.value=y),y}finally{d.value=!1}}return{slug:t,mode:n,recordId:a,state:r,initial:o,errors:l,loading:i,saving:s,deleting:d,error:u,isCreate:f,isEdit:g,isView:h,isDirty:p,hasError:k,reset:B,prepareCreate:x,load:w,setField:b,setErrors:v,clearErrors:C,save:$,destroy:T}});function de(){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,r]of Object.entries(n))t.set(a,r)}}}const K=de(),G=de(),na=K.register,Ce=K.get,aa=K.has,oa=K.list,la=G.register,ge=G.get,ra=G.has,ia=G.list;function sa(){K.clear(),G.clear()}function Qe(t){t.fields&&K.registerBundle(t.fields),t.layouts&&G.registerBundle(t.layouts)}const xe=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}))}}),Se=e.defineComponent({__name:"FieldRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>Ce(n.node.type)),r=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},r.value)),null,16)):(e.openBlock(),e.createBlock(xe,{key:1,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}),H=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 i=ge(n.node.type);return i?{kind:"layout",component:i}:{kind:"unknown"}}const l=ge(n.node.type);return l?{kind:"layout",component:l}:Ce(n.node.type)?{kind:"field"}:{kind:"unknown"}}),r=e.computed(()=>{const{type:l,kind:i,...s}=n.node;return s}),o=e.computed(()=>n.node);return(l,i)=>a.value.kind==="layout"&&a.value.component?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value.component),e.normalizeProps(e.mergeProps({key:0},r.value)),null,16)):a.value.kind==="field"?(e.openBlock(),e.createBlock(Se,{key:1,node:o.value},null,8,["node"])):(e.openBlock(),e.createBlock(xe,{key:2,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}),ca={class:"admin-page admin-resource-form"},da={class:"admin-page__hd"},ua={class:"admin-page__title-wrap"},ma={class:"admin-page__title"},fa={class:"admin-page__actions"},pa={key:1,class:"admin-resource-form__loading"},ga={key:3,class:"admin-resource-form__savebar"},ve=e.defineComponent({__name:"ResourceFormPage",props:{slug:{},id:{default:null},indexRouteName:{default:"admin.home"}},setup(t){const n=t,a=Ve(),r=q(),o=D.useRouter(),l=M.provideFormState(a.state,a.errors);e.watch(()=>a.errors,p=>{l.setErrors({...p})});const i=e.computed(()=>r.getResource(n.slug)),s=e.computed(()=>i.value?.fields??[]),d=e.computed(()=>a.isCreate?`Создать: ${i.value?.label??n.slug}`:`${i.value?.label??n.slug}: запись #${n.id}`),u=e.computed(()=>{const p=a.state.status;return typeof p=="string"?p:null}),f=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()=>{r.manifest===null&&await r.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([p,m])=>{m!=null?await a.load(p,m,"edit").catch(()=>{}):a.prepareCreate(p)});async function g(){try{const p=await a.save();a.isCreate&&o.push({name:`admin.resource.${n.slug}.edit`,params:{id:p}}).catch(()=>{})}catch{}}async function h(){confirm("Удалить запись?")&&(await a.destroy().catch(()=>{}),a.hasError||o.push({name:n.indexRouteName}).catch(()=>{}))}function k(){a.isDirty&&!confirm("Несохранённые изменения будут потеряны. Продолжить?")||o.push({name:n.indexRouteName}).catch(()=>{})}return(p,m)=>(e.openBlock(),e.createElementBlock("section",ca,[e.createElementVNode("header",da,[e.createElementVNode("div",ua,[e.createElementVNode("a",{class:"admin-resource-form__back",onClick:k},"← Назад"),e.createElementVNode("h1",ma,e.toDisplayString(d.value),1),u.value?(e.openBlock(),e.createBlock(e.unref(c.UidBadge),{key:0,variant:f.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.value),1)]),_:1},8,["variant"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",fa,[e.createVNode(e.unref(c.UidButton),{variant:"ghost",disabled:e.unref(a).saving||e.unref(a).deleting,onClick:k},{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:h},{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:g},{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",pa,[(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,x)=>(e.openBlock(),e.createBlock(H,{key:x,node:B},null,8,["node"]))),128))]),_:1})),e.unref(a).isDirty&&!e.unref(a).loading?(e.openBlock(),e.createElementBlock("div",ga,[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:k},{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:g},{default:e.withCtx(()=>[...m[3]||(m[3]=[e.createTextVNode(" Сохранить ",-1)])]),_:1},8,["loading","disabled"])])):e.createCommentVNode("",!0)]))}}),X=de(),va=X.register,he=X.get,ha=X.has,ka=X.list,ya=X.clear,Ze=X.registerBundle,et=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}))}}),_a={key:1,class:"admin-infolist-rows"},Ba={key:2,class:"admin-infolist-cols"},ba={key:3,class:"admin-infolist-section"},wa={key:0,class:"admin-infolist-section__hd"},Na={key:0,class:"admin-infolist-section__title"},Ea={key:1,class:"admin-infolist-section__description"},Va={class:"admin-infolist-section__body"},Ca={key:4,class:"admin-infolist-tabs"},xa={class:"admin-infolist-tabs__list",role:"tablist"},Sa={class:"admin-infolist-tabs__panel"},tt=e.defineComponent({__name:"InfolistRenderer",props:{node:{}},setup(t){const n=t,a=new Set(["rows","columns","section","block","tabs"]),r=e.computed(()=>{if(n.node.kind==="entry"){const g=he(n.node.type);return g?{kind:"entry",component:g}:{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 f=he(n.node.type);return f?{kind:"entry",component:f}:{kind:"unknown"}}),o=e.computed(()=>{const{type:f,kind:g,items:h,...k}=n.node;return k}),l=e.computed(()=>n.node.items??[]),i=e.computed(()=>n.node.title??null),s=e.computed(()=>n.node.description??null),d=e.computed(()=>{const f=n.node.active;return typeof f=="number"?f:0}),u=e.computed(()=>n.node.items??[]);return(f,g)=>{const h=e.resolveComponent("InfolistRenderer",!0);return r.value.kind==="entry"?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.value.component),e.normalizeProps(e.mergeProps({key:0},o.value)),null,16)):r.value.kind==="layout"&&r.value.layoutType==="rows"?(e.openBlock(),e.createElementBlock("div",_a,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(k,p)=>(e.openBlock(),e.createBlock(h,{key:p,node:k},null,8,["node"]))),128))])):r.value.kind==="layout"&&r.value.layoutType==="columns"?(e.openBlock(),e.createElementBlock("div",Ba,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(k,p)=>(e.openBlock(),e.createElementBlock("div",{key:p,class:"admin-infolist-cols__item",style:e.normalizeStyle({gridColumn:`span ${typeof k.span=="number"?k.span:Math.max(1,Math.floor(12/l.value.length))}`})},[e.createVNode(h,{node:k},null,8,["node"])],4))),128))])):r.value.kind==="layout"&&(r.value.layoutType==="section"||r.value.layoutType==="block")?(e.openBlock(),e.createElementBlock("section",ba,[i.value||s.value?(e.openBlock(),e.createElementBlock("header",wa,[i.value?(e.openBlock(),e.createElementBlock("h3",Na,e.toDisplayString(i.value),1)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("p",Ea,e.toDisplayString(s.value),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Va,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(k,p)=>(e.openBlock(),e.createBlock(h,{key:p,node:k},null,8,["node"]))),128))])])):r.value.kind==="layout"&&r.value.layoutType==="tabs"?(e.openBlock(),e.createElementBlock("div",Ca,[e.createElementVNode("ul",xa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(k,p)=>(e.openBlock(),e.createElementBlock("li",{key:k.key??p,class:e.normalizeClass(["admin-infolist-tabs__tab",{"admin-infolist-tabs__tab--active":p===d.value}])},e.toDisplayString(k.label),3))),128))]),e.createElementVNode("div",Sa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value[d.value]?.items??[],(k,p)=>(e.openBlock(),e.createBlock(h,{key:p,node:k},null,8,["node"]))),128))])])):(e.openBlock(),e.createBlock(et,{key:5,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}}),$e=Symbol("admin.infolist-record");function nt(t){e.provide($e,t)}function $a(){const t=e.inject($e);if(!t)throw new Error("useRecord() called outside of provideRecord() scope");return t}function ne(){return e.inject($e,null)}const Ua={class:"admin-page admin-resource-view"},Ta={class:"admin-page__hd"},Fa={class:"admin-page__title-wrap"},Da={class:"admin-page__title"},Aa={class:"admin-page__actions"},Ra={key:1,class:"admin-resource-view__loading"},at=e.defineComponent({__name:"ResourceViewPage",props:{slug:{},id:{},editRouteName:{default:void 0},indexRouteName:{default:"admin.home"}},setup(t){const n=t,a=Ve(),r=q(),o=D.useRouter();nt(a.state);const l=e.computed(()=>r.getResource(n.slug)),i=e.computed(()=>l.value?.fields??[]),s=e.computed(()=>`${l.value?.label??n.slug}: запись #${n.id}`);e.onMounted(async()=>{r.manifest===null&&await r.load().catch(()=>{}),await a.load(n.slug,n.id,"view").catch(()=>{})}),e.watch(()=>[n.slug,n.id],async([f,g])=>{await a.load(f,g,"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(f,g)=>(e.openBlock(),e.createElementBlock("section",Ua,[e.createElementVNode("header",Ta,[e.createElementVNode("div",Fa,[e.createElementVNode("h1",Da,e.toDisplayString(s.value),1)]),e.createElementVNode("div",Aa,[e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:d},{default:e.withCtx(()=>[...g[0]||(g[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(()=>[...g[1]||(g[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",Ra,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(8,h=>e.createVNode(e.unref(c.UidSkeleton),{key:h,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(i.value,(h,k)=>(e.openBlock(),e.createBlock(tt,{key:k,node:h},null,8,["node"]))),128))]),_:1}))]))}}),La={class:"admin-page admin-profile"},Ma={class:"admin-page__hd"},Pa={class:"admin-page__title-wrap"},Ia={class:"admin-page__title"},za={class:"admin-page__count"},qa={class:"admin-profile__layout"},Wa={class:"admin-profile__nav","aria-label":"Profile sections"},Oa=["onClick"],ja=["data-icon"],Ka={class:"admin-profile__content"},Ga={class:"admin-profile__hero"},Ha={class:"admin-profile__hero-text"},Xa={class:"admin-profile__hero-name"},Ya={class:"admin-profile__hero-meta"},Ja={class:"admin-profile__form"},Qa={class:"admin-profile__card-ft"},Za={class:"admin-profile__card-hd"},eo={key:0,class:"admin-profile__hint"},to={key:1,class:"admin-profile__hint"},no={class:"admin-profile__card-ft"},ao={class:"admin-profile__hint"},ot=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,r=n,o=L(),l=ie(),i=se(),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(w){d.value=w,r("update:section",w)}const f=e.ref({name:o.user?.name??"",email:o.user?.email??"",locale:i.current,theme:l.current}),g=e.computed(()=>i.available.map(w=>({value:w,label:w.toUpperCase()}))),h=e.computed(()=>l.available.map(w=>({value:w,label:w==="dark"?"Тёмная":w==="light"?"Светлая":w})));e.watch(()=>f.value.locale,(w,b)=>{w===b||!w||i.setLocale(w).catch(()=>{})}),e.watch(()=>f.value.theme,(w,b)=>{w===b||!w||l.setTheme(w).catch(()=>{})});function k(){r("save",{...f.value})}function p(){r("avatar-replace")}function m(){r("two-factor-disable")}function B(){r("two-factor-regenerate")}const x=e.computed(()=>!!o.user?.twoFactorEnabled);return(w,b)=>(e.openBlock(),e.createElementBlock("section",La,[e.createElementVNode("header",Ma,[e.createElementVNode("div",Pa,[e.createElementVNode("h1",Ia,e.toDisplayString(t.title),1),e.createElementVNode("div",za,e.toDisplayString(t.subtitle),1)])]),e.createElementVNode("div",qa,[e.createElementVNode("nav",Wa,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(s,v=>e.createElementVNode("button",{key:v.id,type:"button",class:e.normalizeClass(["admin-profile__nav-item",{"admin-profile__nav-item--active":d.value===v.id}]),onClick:C=>u(v.id)},[e.createElementVNode("span",{class:"admin-profile__nav-icon","data-icon":v.icon},null,8,ja),e.createElementVNode("span",null,e.toDisplayString(v.label),1)],10,Oa)),64))]),e.createElementVNode("div",Ka,[d.value==="general"?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:0,padding:"md"},{default:e.withCtx(()=>[b[7]||(b[7]=e.createElementVNode("header",{class:"admin-profile__card-hd"},[e.createElementVNode("h3",{class:"admin-profile__card-title"},"Профиль")],-1)),e.createElementVNode("div",Ga,[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",Ha,[e.createElementVNode("div",Xa,e.toDisplayString(e.unref(o).user?.name??"—"),1),e.createElementVNode("div",Ya,e.toDisplayString(e.unref(o).user?.email??"—"),1)]),b[5]||(b[5]=e.createElementVNode("div",{style:{flex:"1"}},null,-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",size:"sm",onClick:p},{default:e.withCtx(()=>[...b[4]||(b[4]=[e.createTextVNode(" Заменить ",-1)])]),_:1})]),e.createElementVNode("div",Ja,[e.createVNode(e.unref(c.UidInput),{modelValue:f.value.name,"onUpdate:modelValue":b[0]||(b[0]=v=>f.value.name=v),label:"Имя",name:"name"},null,8,["modelValue"]),e.createVNode(e.unref(c.UidInput),{modelValue:f.value.email,"onUpdate:modelValue":b[1]||(b[1]=v=>f.value.email=v),label:"Email",type:"email",name:"email"},null,8,["modelValue"]),e.createVNode(e.unref(c.UidSelect),{modelValue:f.value.locale,"onUpdate:modelValue":b[2]||(b[2]=v=>f.value.locale=v),options:g.value,label:"Язык"},null,8,["modelValue","options"]),e.createVNode(e.unref(c.UidSelect),{modelValue:f.value.theme,"onUpdate:modelValue":b[3]||(b[3]=v=>f.value.theme=v),options:h.value,label:"Тема"},null,8,["modelValue","options"])]),e.createElementVNode("footer",Qa,[e.createVNode(e.unref(c.UidButton),{variant:"primary",onClick:k},{default:e.withCtx(()=>[...b[6]||(b[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",Za,[b[8]||(b[8]=e.createElementVNode("h3",{class:"admin-profile__card-title"},"Двухфакторная аутентификация",-1)),e.createVNode(e.unref(c.UidBadge),{variant:x.value?"success":"default"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(x.value?"Включена":"Отключена"),1)]),_:1},8,["variant"])]),x.value?(e.openBlock(),e.createElementBlock("p",eo," 2FA включена. У вас остались recovery-коды на случай потери устройства. ")):(e.openBlock(),e.createElementBlock("p",to," Включите 2FA для дополнительной защиты аккаунта. ")),e.createElementVNode("footer",no,[x.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(e.unref(c.UidButton),{variant:"ghost",size:"sm",onClick:B},{default:e.withCtx(()=>[...b[9]||(b[9]=[e.createTextVNode(" Перегенерировать коды ",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{variant:"danger",size:"sm",onClick:m},{default:e.withCtx(()=>[...b[10]||(b[10]=[e.createTextVNode(" Отключить 2FA ",-1)])]),_:1})],64)):e.renderSlot(w.$slots,"enable-2fa",{key:1},()=>[e.createVNode(e.unref(c.UidButton),{variant:"primary",disabled:""},{default:e.withCtx(()=>[...b[11]||(b[11]=[e.createTextVNode(" Включить 2FA (host customize) ",-1)])]),_:1})])])]),_:3})):e.renderSlot(w.$slots,d.value,{key:2,section:d.value},()=>[e.createVNode(e.unref(c.UidCard),{padding:"md"},{default:e.withCtx(()=>[e.createElementVNode("p",ao," Section «"+e.toDisplayString(d.value)+"» не реализована библиотекой — host-проект подключает её через slot "+e.toDisplayString(d.value)+". ",1)]),_:1})])])])]))}}),Y=de(),oo=Y.register,lt=Y.get,lo=Y.has,ro=Y.list,io=Y.clear,rt=Y.registerBundle,it=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}))}}),st=e.defineComponent({__name:"WidgetRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>lt(n.node.type)),r=e.computed(()=>{const{type:o,span:l,...i}=n.node;return i});return(o,l)=>a.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value),e.normalizeProps(e.mergeProps({key:0},r.value)),null,16)):(e.openBlock(),e.createBlock(it,{key:1,type:t.node.type},null,8,["type"]))}}),so={class:"admin-page admin-dashboard"},co={class:"admin-page__hd"},uo={class:"admin-page__title-wrap"},mo={class:"admin-page__title"},fo={key:0,class:"admin-page__count"},po={class:"admin-page__actions"},go={class:"admin-dashboard__grid"},ct=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=q(),r=e.computed(()=>!n.slug||!a.manifest?null:a.manifest.dashboards?.find(u=>u.slug===n.slug)??null),o=e.computed(()=>n.widgets?n.widgets:r.value?r.value.widgets??[]:[]),l=e.computed(()=>n.title??r.value?.label??"Dashboard"),i=e.computed(()=>n.subtitle??r.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",so,[e.createElementVNode("header",co,[e.createElementVNode("div",uo,[e.createElementVNode("h1",mo,e.toDisplayString(l.value),1),i.value?(e.openBlock(),e.createElementBlock("div",fo,e.toDisplayString(i.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",po,[e.renderSlot(d.$slots,"actions")])]),e.createElementVNode("div",go,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(f,g)=>(e.openBlock(),e.createElementBlock("div",{key:g,class:"admin-dashboard__cell",style:e.normalizeStyle({gridColumn:`span ${s(f)} / span ${s(f)}`})},[e.createVNode(st,{node:f},null,8,["node"])],4))),128))])]))}}),dt=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"},r=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:r.value,loading:t.loading},null,8,["title","value","prefix","suffix","trend","precision","tone","loading"]))}}),vo={key:0,class:"admin-widget__hd"},ho={key:0,class:"admin-widget__title"},ko={key:1,class:"admin-widget__desc"},yo=["viewBox","height","aria-label"],_o=["x","y","width","height","fill","data-label","data-value"],ut=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))),r=e.computed(()=>{const l=100/Math.max(1,n.data.length);return n.data.map((i,s)=>({label:i.label,value:i.value,x:s*l+l*.1,width:l*.8,heightPct:i.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",vo,[t.title?(e.openBlock(),e.createElementBlock("h3",ho,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",ko,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(r.value,(i,s)=>(e.openBlock(),e.createElementBlock("rect",{key:s,x:i.x,y:t.height-i.heightPct/100*t.height,width:i.width,height:i.heightPct/100*t.height,fill:t.accent,rx:"1","data-label":i.label,"data-value":i.value},[e.createElementVNode("title",null,e.toDisplayString(i.label)+": "+e.toDisplayString(i.value),1)],8,_o))),128))],8,yo))]),_:1}))}}),Bo={key:0,class:"admin-widget__hd"},bo={class:"admin-widget__title"},wo={class:"admin-donut-widget__row"},No=["aria-label"],Eo=["d","fill"],Vo={class:"admin-donut-widget__legend"},Co={class:"admin-donut-widget__label"},xo={class:"admin-donut-widget__value"},mt=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)"],r=e.computed(()=>n.data.reduce((l,i)=>l+i.value,0)||1),o=e.computed(()=>{let l=0;return n.data.map((i,s)=>{const d=l/r.value*2*Math.PI;l+=i.value;const u=l/r.value*2*Math.PI,f=50,g=60,h=60,k=g+f*Math.cos(d-Math.PI/2),p=h+f*Math.sin(d-Math.PI/2),m=g+f*Math.cos(u-Math.PI/2),B=h+f*Math.sin(u-Math.PI/2),x=u-d>Math.PI?1:0,w=n.data.length===1?`M ${g-f} ${h} a ${f} ${f} 0 1 0 ${f*2} 0 a ${f} ${f} 0 1 0 ${-f*2} 0`:`M ${g} ${h} L ${k} ${p} A ${f} ${f} 0 ${x} 1 ${m} ${B} Z`;return{...i,path:w,color:i.color??a[s%a.length],pct:(i.value/r.value*100).toFixed(1)}})});return(l,i)=>(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",Bo,[e.createElementVNode("h3",bo,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",wo,[(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,Eo))),128)),i[0]||(i[0]=e.createElementVNode("circle",{cx:"60",cy:"60",r:"30",fill:"var(--uid-surface-raised)"},null,-1))],8,No)),e.createElementVNode("ul",Vo,[(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",Co,e.toDisplayString(s.label),1),e.createElementVNode("span",xo,e.toDisplayString(s.pct)+"%",1)]))),128))])])]),_:1}))}}),So={key:0,class:"admin-widget__hd"},$o={class:"admin-widget__title"},ft=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",So,[e.createElementVNode("h3",$o,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}))}}),Uo={key:0,class:"admin-widget__hd"},To={class:"admin-widget__title"},pt=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",Uo,[e.createElementVNode("h3",To,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}))}}),Fo={key:0,class:"admin-widget__hd"},Do={class:"admin-widget__title"},Ao={style:{display:"flex","justify-content":"center"}},gt=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"},r=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",Fo,[e.createElementVNode("h3",Do,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",Ao,[e.createVNode(e.unref(c.UidGauge),{value:t.value,min:t.min,max:t.max,size:t.size,ranges:t.ranges,tone:r.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}))}}),Ro={key:0,class:"admin-widget__hd"},Lo={class:"admin-widget__title"},Mo={class:"admin-markdown-widget"},vt=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",Ro,[e.createElementVNode("h3",Lo,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",Mo,e.toDisplayString(t.content),1)]),_:1}))}});function ht(){rt({stat:dt,"bar-chart":ut,"donut-chart":mt,"recent-table":ft,heatmap:pt,gauge:gt,markdown:vt})}function kt(t){return t.success===!0}function Po(t){return t.success===!1}function yt(t){const n=Lt.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=Io("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(kt(l))return o.data=l.payload,o;throw pe(o.status,l.payload)}return o},o=>{if(o.response){const l=o.response.status,i=o.response.data?.payload??{errorKey:"unknown",message:o.message},s=pe(l,i);return s instanceof be&&t.onUnauthenticated?.(),Promise.reject(s)}return Promise.reject(new te(o.message))});const a=(o,l,i)=>n[o](l,i).then(s=>s.data),r=(o,l,i,s)=>n[o](l,i,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,i)=>r("post",o,l,i),put:(o,l,i)=>r("put",o,l,i),patch:(o,l,i)=>r("patch",o,l,i),setLocale:o=>{n.defaults.headers.common["X-Admin-Locale"]=o}}}function Io(t){if(typeof document>"u")return null;const n=document.cookie.match(new RegExp("(^|; )"+zo(t)+"=([^;]*)"));return n?n[2]:null}function zo(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function oe(t,n){const a=t.permissions?.[n];return typeof a=="string"&&a.length>0?[a]:[]}function qo(t,n){const a=t.permissions?.[n];return typeof a=="string"&&a.length>0?[a]:[]}function Wo(t){return Array.isArray(t.permission)?t.permission:typeof t.permission=="string"&&t.permission.length>0?[t.permission]:[]}function Oo(t,n){const a=t.slug,r=`/r/${a}`;return[{path:r,name:`admin.resource.${a}.index`,component:n.resourceIndex,meta:{requiresAuth:!0,kind:"resource",slug:a,title:t.label,permissions:oe(t,"view")},props:{slug:a}},{path:`${r}/create`,name:`admin.resource.${a}.create`,component:n.resourceCreate,meta:{requiresAuth:!0,kind:"resource",slug:a,title:`${t.label}: создать`,permissions:oe(t,"create")},props:{slug:a}},{path:`${r}/:id/edit`,name:`admin.resource.${a}.edit`,component:n.resourceEdit,meta:{requiresAuth:!0,kind:"resource",slug:a,title:`${t.label}: редактирование`,permissions:oe(t,"update")},props:o=>({slug:a,id:o.params.id})},{path:`${r}/:id`,name:`admin.resource.${a}.view`,component:n.resourceView,meta:{requiresAuth:!0,kind:"resource",slug:a,title:t.label,permissions:oe(t,"view")},props:o=>({slug:a,id:o.params.id})}]}function jo(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:Wo(t)}}}function Ko(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:qo(t,"view")}}}function Go(t,n){if(typeof t.slug!="string"||t.slug.length===0)return null;const a=t.permission,r=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:r}}}function _t(t,n){if(t===null)return[];const a=[];for(const r of t.resources)a.push(...Oo(r,n));for(const r of t.screens)a.push(jo(r,n));for(const r of t.settings)a.push(Ko(r,n));for(const r of t.dashboards){const o=Go(r,n);o&&a.push(o)}return a}function Bt(t={}){const n=t.loginRouteName??"admin.login",a=t.forbiddenRouteName??"admin.forbidden",r=t.redirectQueryKey??"redirect";return o=>{if(o.name===n)return!0;const l=L();if(o.meta?.requiresAuth===!0&&!l.isAuthenticated)return{name:n,query:{[r]:o.fullPath}};if(l.isChallengePending)return{name:n,query:{[r]:o.fullPath}};const s=o.meta?.permissions;return Array.isArray(s)&&s.length>0&&!l.hasAnyPermission(s)?{name:a}:!0}}function bt(t={}){const n=t.template,a=t.brand??"",r=t.fallback??"";return o=>{if(typeof document>"u")return;const l=o.meta?.title??r;let i;n?i=n.replace("{title}",l).replace("{brand}",a):l&&a?i=`${l} · ${a}`:i=l||a,document.title=i}}const Ho=["admin.resource.","admin.screen.","admin.settings.","admin.dashboard."];function Xo(t){return typeof t!="string"?!1:Ho.some(n=>t.startsWith(n))}function wt(t){const n=t.base??"/admin",a=t.history??D.createWebHistory(n),r=[{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&&r.push({path:"/profile",name:"admin.profile",component:t.components.profile,meta:{requiresAuth:!0,kind:"system",title:"Профиль"}}),t.components.notifications&&r.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=D.createRouter({history:a,routes:[...r,...t.extraRoutes??[],o]});return l.beforeEach(Bt(t.authGuard)),l.afterEach(bt(t.titleGuard)),l.replaceManifestRoutes=i=>{const s=l.getRoutes();for(const u of s)Xo(u.name)&&l.removeRoute(u.name);l.hasRoute("admin.notFound")&&l.removeRoute("admin.notFound");const d=_t(i,t.components);for(const u of d)l.addRoute(u);l.addRoute(o)},l}const R=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=M.useFormState(),r=e.computed(()=>a.getField(n.name)??""),o=e.computed(()=>a.errors[n.name]?.[0]);function l(i){a.setField(n.name,i)}return(i,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidInput),{"model-value":r.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"]))}}),Q=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=M.useFormState(),r=e.computed(()=>a.getField(n.name)??""),o=e.computed(()=>a.errors[n.name]?.[0]);function l(i){a.setField(n.name,i)}return(i,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":r.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"]))}}),le=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=M.useFormState(),r=e.computed(()=>{const i=a.getField(n.name);return i==null||i===""?null:typeof i=="number"?i:Number(i)}),o=e.computed(()=>a.errors[n.name]?.[0]);function l(i){a.setField(n.name,i)}return(i,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":r.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"]))}}),z=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=M.useFormState(),r=e.computed(()=>{const i=a.getField(n.name);return i==null||i===""?null:i}),o=e.computed(()=>a.errors[n.name]?.[0]);function l(i){a.setField(n.name,i)}return(i,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":r.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"]))}}),re=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=M.useFormState(),r=e.computed(()=>!!a.getField(n.name)),o=e.computed(()=>a.errors[n.name]?.[0]);function l(i){a.setField(n.name,i)}return(i,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":r.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"]))}}),W=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=M.useFormState(),r=e.computed(()=>{const i=a.getField(n.name);return i==null||i===""?null:String(i)}),o=e.computed(()=>a.errors[n.name]?.[0]);function l(i){a.setField(n.name,i)}return(i,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":r.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"]))}}),ke=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,(r,o)=>(e.openBlock(),e.createBlock(H,{key:o,node:r},null,8,["node"]))),128))]),_:1},8,["gap"]))}}),Nt=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 r(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,(i,s)=>(e.openBlock(),e.createElementBlock("div",{key:s,class:"admin-columns__item",style:e.normalizeStyle({gridColumn:`span ${r(i)} / span ${r(i)}`})},[e.createVNode(H,{node:i},null,8,["node"])],4))),128))]),_:1},8,["cols","gap"]))}}),Yo={key:0,class:"admin-section__header"},Jo={key:0,class:"admin-section__title"},Qo={key:1,class:"admin-section__description"},Zo={class:"admin-section__body"},j=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",Yo,[t.title?(e.openBlock(),e.createElementBlock("h3",Jo,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",Qo,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Zo,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(r,o)=>(e.openBlock(),e.createBlock(H,{key:o,node:r},null,8,["node"]))),128))])]),_:1}))}}),Et=e.defineComponent({__name:"TabsLayout",props:{items:{},active:{default:0}},emits:["update:active"],setup(t,{emit:n}){const a=t,r=n;function o(s,d){return s.key??d}const l=e.ref(a.active??o(a.items[0]??{},0));function i(s){l.value=s,r("update:active",s)}return(s,d)=>(e.openBlock(),e.createBlock(e.unref(c.UidTabs),{"model-value":l.value,"onUpdate:modelValue":i},{list:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(u,f)=>(e.openBlock(),e.createBlock(e.unref(c.UidTab),{key:o(u,f),value:o(u,f)},{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,f)=>(e.openBlock(),e.createBlock(e.unref(c.UidTabPanel),{key:`panel-${o(u,f)}`,value:o(u,f)},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.items,(g,h)=>(e.openBlock(),e.createBlock(H,{key:h,node:g},null,8,["node"]))),128))]),_:2},1032,["value"]))),128))]),_:1},8,["model-value"]))}});function Vt(){Qe({fields:{input:R,text:R,email:R,url:R,password:R,tel:R,search:R,slug:R,hidden:R,label:R,textarea:Q,wysiwyg:Q,markdown:Q,code:Q,number:le,slider:le,rating:le,select:z,combobox:z,radio:z,tags:z,"morph-switcher":z,relation:z,cascader:z,"tree-select":z,checkbox:re,switcher:re,boolean:re,date:W,datetime:W,datepicker:W,"date-range":W,time:W,"time-picker":W,"color-picker":R},layouts:{rows:ke,columns:Nt,section:j,block:j,tabs:Et,accordion:j,group:ke,step:j,wizard:j}})}const V=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=ne(),r=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(r.value),3))}}),el={key:1,class:"admin-infolist-text"},Ct=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=ne(),r=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[r.value]??"default");return(l,i)=>r.value?(e.openBlock(),e.createBlock(e.unref(c.UidBadge),{key:0,variant:o.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.value),1)]),_:1},8,["variant"])):(e.openBlock(),e.createElementBlock("span",el,"—"))}}),tl=["data-icon"],nl={key:0},xt=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=ne(),r=e.computed(()=>{let i=n.value;return i===void 0&&a&&n.name&&(i=a[n.name]),!!i}),o=e.computed(()=>r.value?n.trueLabel:n.falseLabel),l=e.computed(()=>r.value?n.trueIcon:n.falseIcon);return(i,s)=>(e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(["admin-infolist-icon",r.value?"admin-infolist-icon--on":"admin-infolist-icon--off"])},[e.createElementVNode("span",{class:"admin-infolist-icon__glyph","data-icon":l.value},null,8,tl),o.value?(e.openBlock(),e.createElementBlock("span",nl,e.toDisplayString(o.value),1)):e.createCommentVNode("",!0)],2))}}),al={key:1,class:"admin-infolist-text"},ye=e.defineComponent({__name:"KeyValueEntry",props:{name:{default:""},label:{default:""},value:{default:void 0}},setup(t){const n=t,a=ne(),r=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,i)=>r.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(r.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",al,"—"))}});function St(){Ze({text:V,badge:Ct,icon:xt,keyvalue:ye,"key-value":ye,input:V,email:V,url:V,password:V,tel:V,search:V,slug:V,hidden:V,label:V,textarea:V,wysiwyg:V,markdown:V,code:V,number:V,slider:V,rating:V,select:V,combobox:V,radio:V,tags:V,"morph-switcher":V,relation:V,cascader:V,"tree-select":V,checkbox:V,switcher:V,boolean:V,date:V,datetime:V,datepicker:V,"date-range":V,time:V,"time-picker":V,"color-picker":V})}function ol(t,n={}){const a=n.pages??{},r=n.base??ll(t.baseUrl)??"/admin",o=yt({baseURL:t.apiUrl,csrfToken:t.csrf});De(o);const l=e.createApp(qe),i=P.createPinia();l.use(i),L().hydrate(t),se().hydrate(t),ie().hydrate(t),ce().hydrate(t),Vt(),ht(),St();const s=wt({base:r,history:n.router?.history??D.createWebHistory(r),components:{login:a.login??Ye,home:a.home??We,forbidden:a.forbidden??Oe,notFound:a.notFound??je,profile:a.profile??ot,resourceIndex:a.resourceIndex??Je,resourceCreate:a.resourceCreate??ve,resourceEdit:a.resourceEdit??ve,resourceView:a.resourceView??at,dashboard:a.dashboard??ct,settings:a.settings??Ke,screen:a.screen??Ge},extraRoutes:n.router?.extraRoutes,authGuard:n.router?.authGuard,titleGuard:n.router?.titleGuard});l.use(s);const d=Ne();if(s.beforeEach((u,f,g)=>{u.fullPath!==f.fullPath&&d.start(),g()}),s.afterEach(()=>{d.end()}),s.onError(()=>{d.end()}),s.beforeResolve(async(u,f,g)=>{const h=typeof u.name=="string"?u.name:null;if(h&&h.startsWith("admin.resource.")&&h.endsWith(".index")){const k=u.params.slug??u.meta.slug;if(k)try{const{useResourceIndexStore:p}=await Promise.resolve().then(()=>Rn),m=p();(m.slug!==k||m.items.length===0)&&(m.setSlug(k),await m.load().catch(()=>{}))}catch{}}g()}),!n.skipManifestLoad){const u=q(),f=L(),g=we(),h=()=>{g.load().catch(()=>{}),u.load().then(k=>{s.replaceManifestRoutes(k);const p=s.currentRoute.value;p.name==="admin.notFound"&&p.fullPath!=="/"&&s.replace(p.fullPath)}).catch(k=>{typeof console<"u"&&console.error("[laravel-admin] manifest load failed:",k)})};f.isAuthenticated&&h(),e.watch(()=>f.user,(k,p)=>{k&&!p&&h()})}return n.onAppCreated?.(l),{app:l,router:s,client:o}}function ll(t){if(!t)return null;try{return new URL(t).pathname||"/admin"}catch{return t.startsWith("/")?t:null}}async function rl(t={}){const n=$t();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 te)return null;throw a}return null}function $t(){return typeof window>"u"?null:window.__ADMIN_BOOTSTRAP__??null}function il(){return typeof document>"u"?null:document.querySelector('meta[name="csrf-token"]')?.getAttribute("content")??null}const sl={class:"admin-notifs__hd"},cl={class:"admin-notifs__title"},dl={key:0,class:"admin-notifs__count"},ul={class:"admin-notifs__list"},ml={key:0,class:"admin-notifs__empty"},fl={key:1,class:"admin-notifs__empty"},pl=["onClick"],gl=["data-kind"],vl={class:"admin-notifs__body"},hl={class:"admin-notifs__row1"},kl={key:0,class:"admin-notifs__title-strong"},yl={key:1,class:"admin-notifs__title-soft"},_l={class:"admin-notifs__time"},Bl={key:0,class:"admin-notifs__text"},bl=["onClick"],wl=e.defineComponent({__name:"NotificationsDrawer",props:{open:{type:Boolean}},emits:["update:open","select-item"],setup(t,{emit:n}){const a=t,r=n,o=ce();function l(m){r("update:open",m)}e.watch(()=>a.open,async m=>{m&&await o.load(o.lastFilter??"all",1).catch(()=>{})},{immediate:!0});const i=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){r("select-item",m),m.read_at||await o.markAsRead(m.id).catch(()=>{})}async function f(m,B){B.stopPropagation(),await o.destroy(m.id).catch(()=>{})}function g(m){const B=m.data.level;return B==="success"||B==="warning"||B==="danger"?B:"info"}function h(m){return m.data.title??"—"}function k(m){return m.data.body??""}function p(m){if(!m)return"";const B=new Date(m),x=Math.max(0,Date.now()-B.getTime()),w=Math.floor(x/6e4);if(w<1)return"только что";if(w<60)return`${w} мин назад`;const b=Math.floor(w/60);if(b<24)return`${b} ч назад`;const v=Math.floor(b/24);return v<7?`${v} д назад`: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",sl,[e.createElementVNode("h2",cl,[B[0]||(B[0]=e.createTextVNode(" Уведомления ",-1)),e.unref(o).unreadCount>0?(e.openBlock(),e.createElementBlock("span",dl," ("+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":i.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"],x=>e.createVNode(e.unref(c.UidTabPanel),{key:x,value:x},{default:e.withCtx(()=>[e.createElementVNode("ul",ul,[e.unref(o).loading?(e.openBlock(),e.createElementBlock("li",ml," Загрузка… ")):e.unref(o).items.length===0?(e.openBlock(),e.createElementBlock("li",fl," Нет уведомлений ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o).items,w=>(e.openBlock(),e.createElementBlock("li",{key:w.id,class:e.normalizeClass(["admin-notifs__item",`admin-notifs__item--${g(w)}`,{"admin-notifs__item--unread":!w.read_at}]),onClick:b=>u(w)},[e.createElementVNode("span",{class:"admin-notifs__icon","data-kind":g(w)},null,8,gl),e.createElementVNode("div",vl,[e.createElementVNode("div",hl,[w.read_at?(e.openBlock(),e.createElementBlock("span",yl,e.toDisplayString(h(w)),1)):(e.openBlock(),e.createElementBlock("strong",kl,e.toDisplayString(h(w)),1)),e.createElementVNode("span",_l,e.toDisplayString(p(w.created_at)),1)]),k(w)?(e.openBlock(),e.createElementBlock("p",Bl,e.toDisplayString(k(w)),1)):e.createCommentVNode("",!0)]),e.createElementVNode("button",{type:"button",class:"admin-notifs__close","aria-label":"Удалить",onClick:b=>f(w,b)}," × ",8,bl)],10,pl))),128))])]),_:1},8,["value"])),64))]),_:1},8,["model-value"])]),_:1},8,["model-value"]))}}),Nl={class:"admin-page admin-import-wizard"},El={class:"admin-page__hd"},Vl={class:"admin-page__title-wrap"},Cl={class:"admin-page__title"},xl={class:"admin-page__actions"},Sl={key:0,class:"admin-import-wizard__empty"},$l={key:1,class:"admin-import-wizard__mapping"},Ul={class:"admin-import-wizard__map-source"},Tl={key:0,class:"admin-import-wizard__map-sample"},Fl={class:"admin-import-wizard__card-hd"},Dl={key:2,class:"admin-import-wizard__empty"},Al={key:0,class:"admin-import-wizard__empty"},Rl={class:"admin-import-wizard__kpi"},Ll={class:"admin-import-wizard__nav"},Ml=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,r=n,o=[{label:"Загрузка",description:"CSV / TSV / XLSX"},{label:"Сопоставление",description:"Колонки файла → поля"},{label:"Предпросмотр",description:"Проверка первых строк"},{label:"Импорт",description:"Запуск + сводка"}],l=e.ref(0),i=e.computed(()=>a.step??l.value);function s(b){a.step===void 0&&(b<0||b>=o.length||(l.value=b))}const d=e.ref([]);function u(b){d.value=b,b.length>0&&r("file-uploaded",b[0].file)}const f=e.ref({});function g(b,v){f.value[b]=v===null||v===""?null:String(v)}function h(){return a.headers.map(b=>({source:b.key,target:f.value[b.key]??null}))}function k(){r("mapping-submit",h()),s(2)}function p(){r("run-import"),s(3)}const m=e.computed(()=>i.value>0),B=e.computed(()=>{switch(i.value){case 0:return d.value.length>0;case 1:return Object.values(f.value).some(b=>b!==null);case 2:return!0;default:return!1}}),x=e.computed(()=>[{value:"",label:"Не импортировать"},...a.fieldOptions]);function w(){r("cancel")}return(b,v)=>(e.openBlock(),e.createElementBlock("section",Nl,[e.createElementVNode("header",El,[e.createElementVNode("div",Vl,[e.createElementVNode("h1",Cl,e.toDisplayString(t.title),1)]),e.createElementVNode("div",xl,[e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:w},{default:e.withCtx(()=>[...v[2]||(v[2]=[e.createTextVNode("Отмена",-1)])]),_:1})])]),e.createVNode(e.unref(c.UidStepper),{steps:o,current:i.value},null,8,["current"]),i.value===0?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:0,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[v[3]||(v[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})):i.value===1?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:1,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[v[5]||(v[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",Sl," Нет данных — host ещё не отдал headers. Загрузите файл сначала. ")):(e.openBlock(),e.createElementBlock("div",$l,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.headers,C=>(e.openBlock(),e.createElementBlock("div",{key:C.key,class:"admin-import-wizard__map-row"},[e.createElementVNode("div",Ul,[e.createElementVNode("strong",null,e.toDisplayString(C.label),1),C.sample?(e.openBlock(),e.createElementBlock("span",Tl," «"+e.toDisplayString(C.sample)+"» ",1)):e.createCommentVNode("",!0)]),v[4]||(v[4]=e.createElementVNode("span",{class:"admin-import-wizard__map-arrow"},"→",-1)),e.createVNode(e.unref(c.UidSelect),{"model-value":f.value[C.key]??"",options:x.value,placeholder:"Не импортировать","onUpdate:modelValue":$=>g(C.key,$)},null,8,["model-value","options","onUpdate:modelValue"])]))),128))]))]),_:1})):i.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",Fl,[v[6]||(v[6]=e.createElementVNode("h3",null,"3. Предпросмотр",-1)),e.createElementVNode("p",null,"Первые "+e.toDisplayString(t.preview.length)+" строк перед импортом",1)]),t.preview.some(C=>C.__warning)?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:0,variant:"warning",style:{"margin-bottom":"var(--uid-space-md)"}},{default:e.withCtx(()=>[...v[7]||(v[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",Dl," Host не передал previewColumns/preview. "))]),_:1})):(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:3,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[v[8]||(v[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",Rl,[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",Al," Запускается импорт… "))]),_:1})),e.createElementVNode("footer",Ll,[m.value?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"ghost",onClick:v[0]||(v[0]=C=>s(i.value-1))},{default:e.withCtx(()=>[...v[9]||(v[9]=[e.createTextVNode(" Назад ",-1)])]),_:1})):e.createCommentVNode("",!0),v[13]||(v[13]=e.createElementVNode("span",{style:{flex:"1"}},null,-1)),i.value===0?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:1,variant:"primary",disabled:!B.value,onClick:v[1]||(v[1]=C=>s(1))},{default:e.withCtx(()=>[...v[10]||(v[10]=[e.createTextVNode(" Далее ",-1)])]),_:1},8,["disabled"])):i.value===1?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:2,variant:"primary",disabled:!B.value,onClick:k},{default:e.withCtx(()=>[...v[11]||(v[11]=[e.createTextVNode(" Подтвердить mapping ",-1)])]),_:1},8,["disabled"])):i.value===2?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:3,variant:"primary",onClick:p},{default:e.withCtx(()=>[...v[12]||(v[12]=[e.createTextVNode(" Запустить импорт ",-1)])]),_:1})):e.createCommentVNode("",!0)])]))}}),Pl={class:"admin-page admin-field-gallery"},Il={class:"admin-gallery__group-title"},zl={class:"admin-gallery__grid"},ql={class:"admin-gallery__card-hd"},Wl={class:"admin-gallery__card-title"},Ol={class:"admin-gallery__card-type"},jl={class:"admin-gallery__card-desc"},Kl={class:"admin-gallery__card-demo"},Gl=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),{}),r=e.reactive(n.reduce((o,l)=>Object.assign(o,l.initial),{}));return M.provideFormState(r),(o,l)=>(e.openBlock(),e.createElementBlock("section",Pl,[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),(i,s)=>(e.openBlock(),e.createElementBlock("section",{key:s,class:"admin-gallery__group"},[e.createElementVNode("h2",Il,e.toDisplayString(s),1),e.createElementVNode("div",zl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i,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",ql,[e.createElementVNode("h3",Wl,e.toDisplayString(d.title),1),e.createElementVNode("code",Ol,"type: "+e.toDisplayString(d.type),1)]),e.createElementVNode("p",jl,e.toDisplayString(d.description),1),e.createElementVNode("div",Kl,[e.createVNode(Se,{node:d.node},null,8,["node"])])]),_:2},1024))),128))])]))),128))]))}});exports.provideFormState=M.provideFormState;exports.tryUseFormState=M.tryUseFormState;exports.useFormState=M.useFormState;exports.AdminApp=qe;exports.AdminShell=ze;exports.AdminSidebar=Ie;exports.AdminTopBar=Pe;exports.ApiError=I;exports.BadgeEntry=Ct;exports.BarChartWidget=ut;exports.CheckboxField=re;exports.ColumnsLayout=Nt;exports.DashboardPage=ct;exports.DateField=W;exports.DonutChartWidget=mt;exports.FieldGalleryPage=Gl;exports.FieldRenderer=Se;exports.ForbiddenError=Re;exports.ForbiddenPage=Oe;exports.GaugeWidget=gt;exports.HeatmapWidget=pt;exports.HomePage=We;exports.IconEntry=xt;exports.ImportWizardPage=Ml;exports.InfolistRenderer=tt;exports.KeyValueEntry=ye;exports.LayoutRenderer=H;exports.LocaleSwitcher=Be;exports.LoginForm=He;exports.LoginPage=Ye;exports.MarkdownWidget=vt;exports.NetworkError=te;exports.NotFoundError=Le;exports.NotFoundPage=je;exports.NotificationBell=Ae;exports.NotificationsDrawer=wl;exports.NumberField=le;exports.ProfilePage=ot;exports.RecentTableWidget=ft;exports.ResourceFormPage=ve;exports.ResourceIndexPage=Je;exports.ResourceViewPage=at;exports.RowsLayout=ke;exports.SectionLayout=j;exports.SelectField=z;exports.SettingsPage=Ke;exports.StatWidget=dt;exports.TabsLayout=Et;exports.TextAreaField=Q;exports.TextEntry=V;exports.TextField=R;exports.ThemeToggle=_e;exports.TwoFactorForm=Xe;exports.UnauthenticatedError=be;exports.UnknownEntry=et;exports.UnknownField=xe;exports.UnknownScreenPage=Ge;exports.UnknownWidget=it;exports.UserMenu=Me;exports.ValidationError=ee;exports.WidgetRenderer=st;exports.buildRoutesFromManifest=_t;exports.clearAdminClient=Mt;exports.clearInfolistRegistry=ya;exports.clearRegistry=sa;exports.clearWidgetRegistry=io;exports.createAdminApp=ol;exports.createAdminClient=yt;exports.createAdminRouter=wt;exports.createAuthGuard=Bt;exports.createTitleGuard=bt;exports.getAdminClient=F;exports.getField=Ce;exports.getInfolistEntry=he;exports.getLayout=ge;exports.getWidget=lt;exports.hasAdminClient=Pt;exports.hasField=aa;exports.hasInfolistEntry=ha;exports.hasLayout=ra;exports.hasWidget=lo;exports.isError=Po;exports.isSuccess=kt;exports.listFields=oa;exports.listInfolistEntries=ka;exports.listLayouts=ia;exports.listWidgets=ro;exports.loadBootstrap=rl;exports.provideRecord=nt;exports.readCsrfFromMeta=il;exports.readInlineBootstrap=$t;exports.registerBuiltinComponents=Vt;exports.registerBuiltinInfolistEntries=St;exports.registerBuiltinWidgets=ht;exports.registerComponents=Qe;exports.registerField=na;exports.registerInfolistEntries=Ze;exports.registerInfolistEntry=va;exports.registerLayout=la;exports.registerWidget=oo;exports.registerWidgets=rt;exports.setAdminClient=De;exports.toApiError=pe;exports.tryUseRecord=ne;exports.useAuthStore=L;exports.useLocaleStore=se;exports.useManifestStore=q;exports.useMenuStore=we;exports.useNotificationsStore=ce;exports.useRecord=$a;exports.useResourceFormStore=Ve;exports.useResourceIndexStore=Ee;exports.useThemeStore=ie;
2
2
  //# sourceMappingURL=index.cjs.map