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