Output:
import{g as at,F as _e,M as Zp,N as pl,O as kO,d as $e,P as SO,r as Y,Q as kt,R as ss,S as zc,o as Qe,U as qn,V as ca,p as me,W as $O,X as nr,Y as Wt,Z as Zr,_ as bn,w as He,$ as CO,a0 as Ut,a1 as ye,a2 as TO,a3 as tw,a4 as Qn,a5 as xt,a6 as IO,a7 as EO,a8 as Bc,a9 as Vc,aa as OO,ab as DO,ac as Yp,ad as LO,ae as Ps,af as Jp,ag as da,ah as nw,ai as Qh,aj as jb,ak as AO,al as Hb,am as Wb,an as Yu,ao as MO,ap as qb,aq as PO,ar as NO,as as FO,at as RO,au as zO,av as BO,aw as VO,ax as $l,ay as UO,T as On,az as jO,aA as Ke,aB as qe,aC as Ee,aD as ts,aE as ls,aF as Fe,aG as qt,aH as rr,aI as HO,x as Ae,aJ as WO,aK as rw,z as Xt,aL as iw,aM as qO,aN as GO,aO as Fi,aP as Qp,aQ as KO,aR as nt,aS as qo,aT as sw,aU as ow,aV as XO,aW as ZO,aX as YO,aY as JO,aZ as aw,a_ as QO,a$ as e3,b0 as t3,b1 as n3,b2 as r3,b3 as i3,b4 as s3,b5 as o3,u as Tt,n as Nt,b6 as Cl,c as C,e as P,f,h as c,t as N,i as K,s as he,A as $r,b7 as lw,a as Ot,J as ge,k as ve,b8 as gt,b9 as Ir,ba as pr,bb as di,E as Z,j as Re,bc as Di,bd as Jr,be as us,bf as ia,bg as ns,bh as jn,bi as Tu,bj as ao,bk as em,bl as uw,bm as Ju,bn as cw,bo as tm,bp as nm,bq as rm,br as Tl,I as hn,q as Se,bs as lo,b as vn,bt as Be,bu as a3,bv as zs,bw as Bs,bx as rt,by as dc,bz as Na,bA as Fa,bB as dw,y as Uc,bC as ml,bD as er,bE as fc,bF as so,bG as xn,bH as hc,bI as l3,bJ as hi,bK as im,bL as Ns,bM as fn,bN as rn,bO as Qi,bP as u3,bQ as li,bR as Vr,bS as rl,bT as jc,bU as c3,bV as fw,bW as Cr,bX as d3,bY as f3,bZ as h3,b_ as p3,b$ as pc,c0 as m3,c1 as g3,c2 as hw,c3 as v3,c4 as b3,c5 as y3,K as Jt,c6 as Ga,c7 as Gb,c8 as ho,c9 as Kb,ca as il,cb as pw,cc as mw,C as Tf,cd as sm,ce as sa,cf as Ct,cg as gw,ch as vw,ci as w3,cj as x3,L as oa,ck as gl,cl as _3,cm as k3,cn as S3,co as Ao,cp as ep,cq as Xb,cr as Zb,cs as $3,ct as C3,cu as Ra,cv as Pt,cw as Iu,cx as Eu,cy as Ka,cz as T3,m as Yb,cA as bw,l as I3,cB as E3,cC as O3,cD as D3,cE as L3,cF as A3,cG as M3,cH as P3,cI as N3,cJ as F3,cK as R3,cL as mc,cM as z3,cN as B3,cO as Jb,cP as V3,cQ as U3,cR as j3,cS as H3,cT as W3,cU as wt,cV as q3,cW as yw,cX as ww,cY as xw,cZ as G3,c_ as Qb,c$ as K3,d0 as e0,d1 as X3,d2 as Z3}from"./index-C6xDlop1.js";import{O as _w,c as om,a as Vt,b as kw,d as Sw,u as Fs,s as Mi,t as Y3,z as If}from"./vee-validate-zod.esm-Ci1P1D57.js";import{_ as pi}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{s as po,c as J3}from"./index-hRi5Zt31.js";import{i as $w,t as Q3,a as eD,r as tD,u as am,N as Cw,b as Qr,f as Yo,I as t0,S as nD,W as rD,E as iD,c as Tw,_ as sD}from"./ProgressLine.vue_vue_type_script_setup_true_lang-DBOdzNPt.js";import{p as Xe}from"./index-CdvirOHD.js";import{removeMediaPath as Gr}from"./staticFunction-ByVEHmC6.js";import{_ as oD}from"./zimaos-logo-2-B1k9OtNX.js";let gc=[];const Iw=new WeakMap;function aD(){gc.forEach(n=>n(...Iw.get(n))),gc=[]}function lD(n,...e){Iw.set(n,e),!gc.includes(n)&&gc.push(n)===1&&requestAnimationFrame(aD)}function n0(n,e){let{target:t}=n;for(;t;){if(t.dataset&&t.dataset[e]!==void 0)return!0;t=t.parentElement}return!1}function vl(n){return n.composedPath()[0]||null}function r0(n){return typeof n=="string"?n.endsWith("px")?Number(n.slice(0,n.length-2)):Number(n):n}function lm(n,e){const t=n.trim().split(/\s+/g),r={top:t[0]};switch(t.length){case 1:r.right=t[0],r.bottom=t[0],r.left=t[0];break;case 2:r.right=t[1],r.left=t[1],r.bottom=t[0];break;case 3:r.right=t[1],r.bottom=t[2],r.left=t[1];break;case 4:r.right=t[1],r.bottom=t[2],r.left=t[3];break;default:throw new Error("[seemly/getMargin]:"+n+" is not a valid value.")}return r}function uD(n=8){return Math.random().toString(16).slice(2,2+n)}function bl(n,e=[],t){const r={};return e.forEach(s=>{r[s]=n[s]}),Object.assign(r,t)}function tp(n,e=!0,t=[]){return n.forEach(r=>{if(r!==null){if(typeof r!="object"){(typeof r=="string"||typeof r=="number")&&t.push(at(String(r)));return}if(Array.isArray(r)){tp(r,e,t);return}if(r.type===_e){if(r.children===null)return;Array.isArray(r.children)&&tp(r.children,e,t)}else{if(r.type===Zp&&e)return;t.push(r)}}}),t}function tn(n,...e){if(Array.isArray(n))n.forEach(t=>tn(t,...e));else return n(...e)}function um(n){return Object.keys(n)}function Ti(n,...e){return typeof n=="function"?n(...e):typeof n=="string"?at(n):typeof n=="number"?at(String(n)):null}function np(n,e="default",t=void 0){const r=n[e];if(!r)return pl("getFirstSlotVNode",`slot[${e}] is empty`),null;const s=tp(r(t));return s.length===1?s[0]:(pl("getFirstSlotVNode",`slot[${e}] should have exactly one child`),null)}function cD(n){return e=>{e?n.value=e.$el:n.value=null}}function Ii(n){return n.some(e=>kO(e)?!(e.type===Zp||e.type===_e&&!Ii(e.children)):!0)?n:null}function rp(n,e){return n&&Ii(n())||e()}function Jn(n,e){const t=n&&Ii(n());return e(t||null)}function ip(n){return!(n&&Ii(n()))}const i0=$e({render(){var n,e;return(e=(n=this.$slots).default)===null||e===void 0?void 0:e.call(n)}});function s0(n){return n.replace(/#|\(|\)|,|\s|\./g,"_")}function o0(n){const{left:e,right:t,top:r,bottom:s}=lm(n);return`${r} ${t} ${s} ${e}`}function dD(n,e){if(n===void 0)return!1;if(e){const{context:{ids:t}}=e;return t.has(n)}return SO(n)!==null}let Ef;function fD(){return Ef===void 0&&(Ef=navigator.userAgent.includes("Node.js")||navigator.userAgent.includes("jsdom")),Ef}const fa=typeof document<"u"&&typeof window<"u",hD=new WeakSet;function Ew(n){return!hD.has(n)}function pD(n,e,t){const r=Y(n.value);let s=null;return kt(n,i=>{s!==null&&window.clearTimeout(s),i===!0?t&&!t.value?r.value=!0:s=window.setTimeout(()=>{r.value=!0},e):r.value=!1}),r}function mD(n){const e=Y(!!n.value);if(e.value)return ss(e);const t=kt(n,r=>{r&&(e.value=!0,t())});return ss(e)}function cm(){return zc()!==null}const dm=typeof window<"u";let Jo,sl;const gD=()=>{var n,e;Jo=dm?(e=(n=document)===null||n===void 0?void 0:n.fonts)===null||e===void 0?void 0:e.ready:void 0,sl=!1,Jo!==void 0?Jo.then(()=>{sl=!0}):sl=!0};gD();function vD(n){if(sl)return;let e=!1;Qe(()=>{sl||Jo==null||Jo.then(()=>{e||n()})}),qn(()=>{e=!0})}function Qu(n){return n.composedPath()[0]}const bD={mousemoveoutside:new WeakMap,clickoutside:new WeakMap};function yD(n,e,t){if(n==="mousemoveoutside"){const r=s=>{e.contains(Qu(s))||t(s)};return{mousemove:r,touchstart:r}}else if(n==="clickoutside"){let r=!1;const s=o=>{r=!e.contains(Qu(o))},i=o=>{r&&(e.contains(Qu(o))||t(o))};return{mousedown:s,mouseup:i,touchstart:s,touchend:i}}return console.error(`[evtd/create-trap-handler]: name \`${n}\` is invalid. This could be a bug of evtd.`),{}}function Ow(n,e,t){const r=bD[n];let s=r.get(e);s===void 0&&r.set(e,s=new WeakMap);let i=s.get(t);return i===void 0&&s.set(t,i=yD(n,e,t)),i}function wD(n,e,t,r){if(n==="mousemoveoutside"||n==="clickoutside"){const s=Ow(n,e,t);return Object.keys(s).forEach(i=>{dn(i,document,s[i],r)}),!0}return!1}function xD(n,e,t,r){if(n==="mousemoveoutside"||n==="clickoutside"){const s=Ow(n,e,t);return Object.keys(s).forEach(i=>{Kt(i,document,s[i],r)}),!0}return!1}function _D(){if(typeof window>"u")return{on:()=>{},off:()=>{}};const n=new WeakMap,e=new WeakMap;function t(){n.set(this,!0)}function r(){n.set(this,!0),e.set(this,!0)}function s(L,E,D){const A=L[E];return L[E]=function(){return D.apply(L,arguments),A.apply(L,arguments)},L}function i(L,E){L[E]=Event.prototype[E]}const o=new WeakMap,l=Object.getOwnPropertyDescriptor(Event.prototype,"currentTarget");function u(){var L;return(L=o.get(this))!==null&&L!==void 0?L:null}function d(L,E){l!==void 0&&Object.defineProperty(L,"currentTarget",{configurable:!0,enumerable:!0,get:E??l.get})}const p={bubble:{},capture:{}},g={};function m(){const L=function(E){const{type:D,eventPhase:A,bubbles:V}=E,M=Qu(E);if(A===2)return;const B=A===1?"capture":"bubble";let F=M;const j=[];for(;F===null&&(F=window),j.push(F),F!==window;)F=F.parentNode||null;const H=p.capture[D],ee=p.bubble[D];if(s(E,"stopPropagation",t),s(E,"stopImmediatePropagation",r),d(E,u),B==="capture"){if(H===void 0)return;for(let ue=j.length-1;ue>=0&&!n.has(E);--ue){const pe=j[ue],Q=H.get(pe);if(Q!==void 0){o.set(E,pe);for(const fe of Q){if(e.has(E))break;fe(E)}}if(ue===0&&!V&&ee!==void 0){const fe=ee.get(pe);if(fe!==void 0)for(const q of fe){if(e.has(E))break;q(E)}}}}else if(B==="bubble"){if(ee===void 0)return;for(let ue=0;ue<j.length&&!n.has(E);++ue){const pe=j[ue],Q=ee.get(pe);if(Q!==void 0){o.set(E,pe);for(const fe of Q){if(e.has(E))break;fe(E)}}}}i(E,"stopPropagation"),i(E,"stopImmediatePropagation"),d(E)};return L.displayName="evtdUnifiedHandler",L}function v(){const L=function(E){const{type:D,eventPhase:A}=E;if(A!==2)return;const V=g[D];V!==void 0&&V.forEach(M=>M(E))};return L.displayName="evtdUnifiedWindowEventHandler",L}const w=m(),S=v();function $(L,E){const D=p[L];return D[E]===void 0&&(D[E]=new Map,window.addEventListener(E,w,L==="capture")),D[E]}function T(L){return g[L]===void 0&&(g[L]=new Set,window.addEventListener(L,S)),g[L]}function x(L,E){let D=L.get(E);return D===void 0&&L.set(E,D=new Set),D}function y(L,E,D,A){const V=p[E][D];if(V!==void 0){const M=V.get(L);if(M!==void 0&&M.has(A))return!0}return!1}function b(L,E){const D=g[L];return!!(D!==void 0&&D.has(E))}function _(L,E,D,A){let V;if(typeof A=="object"&&A.once===!0?V=H=>{I(L,E,V,A),D(H)}:V=D,wD(L,E,V,A))return;const B=A===!0||typeof A=="object"&&A.capture===!0?"capture":"bubble",F=$(B,L),j=x(F,E);if(j.has(V)||j.add(V),E===window){const H=T(L);H.has(V)||H.add(V)}}function I(L,E,D,A){if(xD(L,E,D,A))return;const M=A===!0||typeof A=="object"&&A.capture===!0,B=M?"capture":"bubble",F=$(B,L),j=x(F,E);if(E===window&&!y(E,M?"bubble":"capture",L,D)&&b(L,D)){const ee=g[L];ee.delete(D),ee.size===0&&(window.removeEventListener(L,S),g[L]=void 0)}j.has(D)&&j.delete(D),j.size===0&&F.delete(E),F.size===0&&(window.removeEventListener(L,w,B==="capture"),p[B][L]=void 0)}return{on:_,off:I}}const{on:dn,off:Kt}=_D(),Xa=Y(null);function a0(n){if(n.clientX>0||n.clientY>0)Xa.value={x:n.clientX,y:n.clientY};else{const{target:e}=n;if(e instanceof Element){const{left:t,top:r,width:s,height:i}=e.getBoundingClientRect();t>0||r>0?Xa.value={x:t+s/2,y:r+i/2}:Xa.value={x:0,y:0}}else Xa.value=null}}let Ou=0,l0=!0;function kD(){if(!dm)return ss(Y(null));Ou===0&&dn("click",document,a0,!0);const n=()=>{Ou+=1};return l0&&(l0=cm())?(ca(n),qn(()=>{Ou-=1,Ou===0&&Kt("click",document,a0,!0)})):n(),ss(Xa)}const SD=Y(void 0);let Du=0;function u0(){SD.value=Date.now()}let c0=!0;function $D(n){if(!dm)return ss(Y(!1));const e=Y(!1);let t=null;function r(){t!==null&&window.clearTimeout(t)}function s(){r(),e.value=!0,t=window.setTimeout(()=>{e.value=!1},n)}Du===0&&dn("click",window,u0,!0);const i=()=>{Du+=1,dn("click",window,s,!0)};return c0&&(c0=cm())?(ca(i),qn(()=>{Du-=1,Du===0&&Kt("click",window,u0,!0),Kt("click",window,s,!0),r()})):i(),ss(e)}function yl(n,e){return kt(n,t=>{t!==void 0&&(e.value=t)}),me(()=>n.value===void 0?e.value:n.value)}function Il(){const n=Y(!1);return Qe(()=>{n.value=!0}),ss(n)}function CD(n,e){return me(()=>{for(const t of e)if(n[t]!==void 0)return n[t];return n[e[e.length-1]]})}const TD=(typeof window>"u"?!1:/iPad|iPhone|iPod/.test(navigator.platform)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1)&&!window.MSStream;function ID(){return TD}function ED(n={},e){const t=$O({ctrl:!1,command:!1,win:!1,shift:!1,tab:!1}),{keydown:r,keyup:s}=n,i=u=>{switch(u.key){case"Control":t.ctrl=!0;break;case"Meta":t.command=!0,t.win=!0;break;case"Shift":t.shift=!0;break;case"Tab":t.tab=!0;break}r!==void 0&&Object.keys(r).forEach(d=>{if(d!==u.key)return;const p=r[d];if(typeof p=="function")p(u);else{const{stop:g=!1,prevent:m=!1}=p;g&&u.stopPropagation(),m&&u.preventDefault(),p.handler(u)}})},o=u=>{switch(u.key){case"Control":t.ctrl=!1;break;case"Meta":t.command=!1,t.win=!1;break;case"Shift":t.shift=!1;break;case"Tab":t.tab=!1;break}s!==void 0&&Object.keys(s).forEach(d=>{if(d!==u.key)return;const p=s[d];if(typeof p=="function")p(u);else{const{stop:g=!1,prevent:m=!1}=p;g&&u.stopPropagation(),m&&u.preventDefault(),p.handler(u)}})},l=()=>{(e===void 0||e.value)&&(dn("keydown",document,i),dn("keyup",document,o)),e!==void 0&&kt(e,u=>{u?(dn("keydown",document,i),dn("keyup",document,o)):(Kt("keydown",document,i),Kt("keyup",document,o))})};return cm()?(ca(l),qn(()=>{(e===void 0||e.value)&&(Kt("keydown",document,i),Kt("keyup",document,o))})):l(),ss(t)}const OD=nr("n-internal-select-menu-body"),El=nr("n-modal-body"),DD=nr("n-modal-provider"),Dw=nr("n-modal"),Ol=nr("n-drawer-body"),fm=nr("n-drawer"),ha=nr("n-popover-body"),Lw="__disabled__";function aa(n){const e=Wt(El,null),t=Wt(Ol,null),r=Wt(ha,null),s=Wt(OD,null),i=Y();if(typeof document<"u"){i.value=document.fullscreenElement;const o=()=>{i.value=document.fullscreenElement};Qe(()=>{dn("fullscreenchange",document,o)}),qn(()=>{Kt("fullscreenchange",document,o)})}return Zr(()=>{var o;const{to:l}=n;return l!==void 0?l===!1?Lw:l===!0?i.value||"body":l:e!=null&&e.value?(o=e.value.$el)!==null&&o!==void 0?o:e.value:t!=null&&t.value?t.value:r!=null&&r.value?r.value:s!=null&&s.value?s.value:l??(i.value||"body")})}aa.tdkey=Lw;aa.propTo={type:[String,Object,Boolean],default:void 0};function sp(n,e,t="default"){const r=e[t];if(r===void 0)throw new Error(`[vueuc/${n}]: slot[${t}] is empty.`);return r()}function op(n,e=!0,t=[]){return n.forEach(r=>{if(r!==null){if(typeof r!="object"){(typeof r=="string"||typeof r=="number")&&t.push(at(String(r)));return}if(Array.isArray(r)){op(r,e,t);return}if(r.type===_e){if(r.children===null)return;Array.isArray(r.children)&&op(r.children,e,t)}else r.type!==Zp&&t.push(r)}}),t}function d0(n,e,t="default"){const r=e[t];if(r===void 0)throw new Error(`[vueuc/${n}]: slot[${t}] is empty.`);const s=op(r());if(s.length===1)return s[0];throw new Error(`[vueuc/${n}]: slot[${t}] should have exactly one child.`)}let xs=null;function Aw(){if(xs===null&&(xs=document.getElementById("v-binder-view-measurer"),xs===null)){xs=document.createElement("div"),xs.id="v-binder-view-measurer";const{style:n}=xs;n.position="fixed",n.left="0",n.right="0",n.top="0",n.bottom="0",n.pointerEvents="none",n.visibility="hidden",document.body.appendChild(xs)}return xs.getBoundingClientRect()}function LD(n,e){const t=Aw();return{top:e,left:n,height:0,width:0,right:t.width-n,bottom:t.height-e}}function Of(n){const e=n.getBoundingClientRect(),t=Aw();return{left:e.left-t.left,top:e.top-t.top,bottom:t.height+t.top-e.bottom,right:t.width+t.left-e.right,width:e.width,height:e.height}}function AD(n){return n.nodeType===9?null:n.parentNode}function Mw(n){if(n===null)return null;const e=AD(n);if(e===null)return null;if(e.nodeType===9)return document;if(e.nodeType===1){const{overflow:t,overflowX:r,overflowY:s}=getComputedStyle(e);if(/(auto|scroll|overlay)/.test(t+s+r))return e}return Mw(e)}const Pw=$e({name:"Binder",props:{syncTargetWithParent:Boolean,syncTarget:{type:Boolean,default:!0}},setup(n){var e;bn("VBinder",(e=zc())===null||e===void 0?void 0:e.proxy);const t=Wt("VBinder",null),r=Y(null),s=T=>{r.value=T,t&&n.syncTargetWithParent&&t.setTargetRef(T)};let i=[];const o=()=>{let T=r.value;for(;T=Mw(T),T!==null;)i.push(T);for(const x of i)dn("scroll",x,g,!0)},l=()=>{for(const T of i)Kt("scroll",T,g,!0);i=[]},u=new Set,d=T=>{u.size===0&&o(),u.has(T)||u.add(T)},p=T=>{u.has(T)&&u.delete(T),u.size===0&&l()},g=()=>{lD(m)},m=()=>{u.forEach(T=>T())},v=new Set,w=T=>{v.size===0&&dn("resize",window,$),v.has(T)||v.add(T)},S=T=>{v.has(T)&&v.delete(T),v.size===0&&Kt("resize",window,$)},$=()=>{v.forEach(T=>T())};return qn(()=>{Kt("resize",window,$),l()}),{targetRef:r,setTargetRef:s,addScrollListener:d,removeScrollListener:p,addResizeListener:w,removeResizeListener:S}},render(){return sp("binder",this.$slots)}}),Nw=$e({name:"Target",setup(){const{setTargetRef:n,syncTarget:e}=Wt("VBinder");return{syncTarget:e,setTargetDirective:{mounted:n,updated:n}}},render(){const{syncTarget:n,setTargetDirective:e}=this;return n?He(d0("follower",this.$slots),[[e]]):d0("follower",this.$slots)}}),Mo="@@mmoContext",MD={mounted(n,{value:e}){n[Mo]={handler:void 0},typeof e=="function"&&(n[Mo].handler=e,dn("mousemoveoutside",n,e))},updated(n,{value:e}){const t=n[Mo];typeof e=="function"?t.handler?t.handler!==e&&(Kt("mousemoveoutside",n,t.handler),t.handler=e,dn("mousemoveoutside",n,e)):(n[Mo].handler=e,dn("mousemoveoutside",n,e)):t.handler&&(Kt("mousemoveoutside",n,t.handler),t.handler=void 0)},unmounted(n){const{handler:e}=n[Mo];e&&Kt("mousemoveoutside",n,e),n[Mo].handler=void 0}},Po="@@coContext",vc={mounted(n,{value:e,modifiers:t}){n[Po]={handler:void 0},typeof e=="function"&&(n[Po].handler=e,dn("clickoutside",n,e,{capture:t.capture}))},updated(n,{value:e,modifiers:t}){const r=n[Po];typeof e=="function"?r.handler?r.handler!==e&&(Kt("clickoutside",n,r.handler,{capture:t.capture}),r.handler=e,dn("clickoutside",n,e,{capture:t.capture})):(n[Po].handler=e,dn("clickoutside",n,e,{capture:t.capture})):r.handler&&(Kt("clickoutside",n,r.handler,{capture:t.capture}),r.handler=void 0)},unmounted(n,{modifiers:e}){const{handler:t}=n[Po];t&&Kt("clickoutside",n,t,{capture:e.capture}),n[Po].handler=void 0}};function PD(n,e){console.error(`[vdirs/${n}]: ${e}`)}class ND{constructor(){this.elementZIndex=new Map,this.nextZIndex=2e3}get elementCount(){return this.elementZIndex.size}ensureZIndex(e,t){const{elementZIndex:r}=this;if(t!==void 0){e.style.zIndex=`${t}`,r.delete(e);return}const{nextZIndex:s}=this;r.has(e)&&r.get(e)+1===this.nextZIndex||(e.style.zIndex=`${s}`,r.set(e,s),this.nextZIndex=s+1,this.squashState())}unregister(e,t){const{elementZIndex:r}=this;r.has(e)?r.delete(e):t===void 0&&PD("z-index-manager/unregister-element","Element not found when unregistering."),this.squashState()}squashState(){const{elementCount:e}=this;e||(this.nextZIndex=2e3),this.nextZIndex-e>2500&&this.rearrange()}rearrange(){const e=Array.from(this.elementZIndex.entries());e.sort((t,r)=>t[1]-r[1]),this.nextZIndex=2e3,e.forEach(t=>{const r=t[0],s=this.nextZIndex++;`${s}`!==r.style.zIndex&&(r.style.zIndex=`${s}`)})}}const Df=new ND,No="@@ziContext",Hc={mounted(n,e){const{value:t={}}=e,{zIndex:r,enabled:s}=t;n[No]={enabled:!!s,initialized:!1},s&&(Df.ensureZIndex(n,r),n[No].initialized=!0)},updated(n,e){const{value:t={}}=e,{zIndex:r,enabled:s}=t,i=n[No].enabled;s&&!i&&(Df.ensureZIndex(n,r),n[No].initialized=!0),n[No].enabled=!!s},unmounted(n,e){if(!n[No].initialized)return;const{value:t={}}=e,{zIndex:r}=t;Df.unregister(n,r)}};function f0(n,e){console.error(`[vueuc/${n}]: ${e}`)}const{c:Lu}=CO(),FD="vueuc-style";function h0(n){return typeof n=="string"?document.querySelector(n):n()}const hm=$e({name:"LazyTeleport",props:{to:{type:[String,Object],default:void 0},disabled:Boolean,show:{type:Boolean,required:!0}},setup(n){return{showTeleport:mD(Ut(n,"show")),mergedTo:me(()=>{const{to:e}=n;return e??"body"})}},render(){return this.showTeleport?this.disabled?sp("lazy-teleport",this.$slots):ye(TO,{disabled:this.disabled,to:this.mergedTo},sp("lazy-teleport",this.$slots)):null}}),Au={top:"bottom",bottom:"top",left:"right",right:"left"},p0={start:"end",center:"center",end:"start"},Lf={top:"height",bottom:"height",left:"width",right:"width"},RD={"bottom-start":"top left",bottom:"top center","bottom-end":"top right","top-start":"bottom left",top:"bottom center","top-end":"bottom right","right-start":"top left",right:"center left","right-end":"bottom left","left-start":"top right",left:"center right","left-end":"bottom right"},zD={"bottom-start":"bottom left",bottom:"bottom center","bottom-end":"bottom right","top-start":"top left",top:"top center","top-end":"top right","right-start":"top right",right:"center right","right-end":"bottom right","left-start":"top left",left:"center left","left-end":"bottom left"},BD={"bottom-start":"right","bottom-end":"left","top-start":"right","top-end":"left","right-start":"bottom","right-end":"top","left-start":"bottom","left-end":"top"},m0={top:!0,bottom:!1,left:!0,right:!1},g0={top:"end",bottom:"start",left:"end",right:"start"};function VD(n,e,t,r,s,i){if(!s||i)return{placement:n,top:0,left:0};const[o,l]=n.split("-");let u=l??"center",d={top:0,left:0};const p=(v,w,S)=>{let $=0

... [OUTPUT TRUNCATED - 42940 chars omitted out of 92940 total] ...

 Pe===null||Ze===null||ct===null?0:Math.min(Pe,ct*Pe/Ze+r0(B.value.self.width)*1.5)}),j=me(()=>`${F.value}px`),H=me(()=>{const{value:Pe}=v,{value:Ze}=g,{value:ct}=S;return Pe===null||Ze===null||ct===null?0:ct*Pe/Ze+r0(B.value.self.height)*1.5}),ee=me(()=>`${H.value}px`),ue=me(()=>{const{value:Pe}=m,{value:Ze}=$,{value:ct}=p,{value:jt}=w;if(Pe===null||ct===null||jt===null)return 0;{const pn=ct-Pe;return pn?Ze/pn*(jt-F.value):0}}),pe=me(()=>`${ue.value}px`),Q=me(()=>{const{value:Pe}=v,{value:Ze}=T,{value:ct}=g,{value:jt}=S;if(Pe===null||ct===null||jt===null)return 0;{const pn=ct-Pe;return pn?Ze/pn*(jt-H.value):0}}),fe=me(()=>`${Q.value}px`),q=me(()=>{const{value:Pe}=m,{value:Ze}=p;return Pe!==null&&Ze!==null&&Ze>Pe}),G=me(()=>{const{value:Pe}=v,{value:Ze}=g;return Pe!==null&&Ze!==null&&Ze>Pe}),se=me(()=>{const{trigger:Pe}=n;return Pe==="none"||x.value}),ne=me(()=>{const{trigger:Pe}=n;return Pe==="none"||y.value}),re=me(()=>{const{container:Pe}=n;return Pe?Pe():o.value}),le=me(()=>{const{content:Pe}=n;return Pe?Pe():l.value}),Ce=(Pe,Ze)=>{if(!n.scrollable)return;if(typeof Pe=="number"){U(Pe,Ze??0,0,!1,"auto");return}const{left:ct,top:jt,index:pn,elSize:An,position:ir,behavior:Zt,el:sr,debounce:bi=!0}=Pe;(ct!==void 0||jt!==void 0)&&U(ct??0,jt??0,0,!1,Zt),sr!==void 0?U(0,sr.offsetTop,sr.offsetHeight,bi,Zt):pn!==void 0&&An!==void 0?U(0,pn*An,An,bi,Zt):ir==="bottom"?U(0,Number.MAX_SAFE_INTEGER,0,!1,Zt):ir==="top"&&U(0,0,0,!1,Zt)},X=p4(()=>{n.container||Ce({top:$.value,left:T.value})}),xe=()=>{X.isDeactivated||Bt()},O=Pe=>{if(X.isDeactivated)return;const{onResize:Ze}=n;Ze&&Ze(Pe),Bt()},z=(Pe,Ze)=>{if(!n.scrollable)return;const{value:ct}=re;ct&&(typeof Pe=="object"?ct.scrollBy(Pe):ct.scrollBy(Pe,Ze||0))};function U(Pe,Ze,ct,jt,pn){const{value:An}=re;if(An){if(jt){const{scrollTop:ir,offsetHeight:Zt}=An;if(Ze>ir){Ze+ct<=ir+Zt||An.scrollTo({left:Pe,top:Ze+ct-Zt,behavior:pn});return}}An.scrollTo({left:Pe,top:Ze,behavior:pn})}}function oe(){Ge(),Ve(),Bt()}function ie(){ce()}function ce(){Te(),Ne()}function Te(){L!==void 0&&window.clearTimeout(L),L=window.setTimeout(()=>{y.value=!1},n.duration)}function Ne(){I!==void 0&&window.clearTimeout(I),I=window.setTimeout(()=>{x.value=!1},n.duration)}function Ge(){I!==void 0&&window.clearTimeout(I),x.value=!0}function Ve(){L!==void 0&&window.clearTimeout(L),y.value=!0}function De(Pe){const{onScroll:Ze}=n;Ze&&Ze(Pe),lt()}function lt(){const{value:Pe}=re;Pe&&($.value=Pe.scrollTop,T.value=Pe.scrollLeft*(s!=null&&s.value?-1:1))}function Dt(){const{value:Pe}=le;Pe&&(p.value=Pe.offsetHeight,g.value=Pe.offsetWidth);const{value:Ze}=re;Ze&&(m.value=Ze.offsetHeight,v.value=Ze.offsetWidth);const{value:ct}=d,{value:jt}=u;ct&&(S.value=ct.offsetWidth),jt&&(w.value=jt.offsetHeight)}function sn(){const{value:Pe}=re;Pe&&($.value=Pe.scrollTop,T.value=Pe.scrollLeft*(s!=null&&s.value?-1:1),m.value=Pe.offsetHeight,v.value=Pe.offsetWidth,p.value=Pe.scrollHeight,g.value=Pe.scrollWidth);const{value:Ze}=d,{value:ct}=u;Ze&&(S.value=Ze.offsetWidth),ct&&(w.value=ct.offsetHeight)}function Bt(){n.scrollable&&(n.useUnifiedContainer?sn():(Dt(),lt()))}function Ln(Pe){var Ze;return!(!((Ze=i.value)===null||Ze===void 0)&&Ze.contains(vl(Pe)))}function zn(Pe){Pe.preventDefault(),Pe.stopPropagation(),_=!0,dn("mousemove",window,Gn,!0),dn("mouseup",window,Lr,!0),D=T.value,A=s!=null&&s.value?window.innerWidth-Pe.clientX:Pe.clientX}function Gn(Pe){if(!_)return;I!==void 0&&window.clearTimeout(I),L!==void 0&&window.clearTimeout(L);const{value:Ze}=v,{value:ct}=g,{value:jt}=H;if(Ze===null||ct===null)return;const An=(s!=null&&s.value?window.innerWidth-Pe.clientX-A:Pe.clientX-A)*(ct-Ze)/(Ze-jt),ir=ct-Ze;let Zt=D+An;Zt=Math.min(ir,Zt),Zt=Math.max(Zt,0);const{value:sr}=re;if(sr){sr.scrollLeft=Zt*(s!=null&&s.value?-1:1);const{internalOnUpdateScrollLeft:bi}=n;bi&&bi(Zt)}}function Lr(Pe){Pe.preventDefault(),Pe.stopPropagation(),Kt("mousemove",window,Gn,!0),Kt("mouseup",window,Lr,!0),_=!1,Bt(),Ln(Pe)&&ce()}function it(Pe){Pe.preventDefault(),Pe.stopPropagation(),b=!0,dn("mousemove",window,mi,!0),dn("mouseup",window,gi,!0),E=$.value,V=Pe.clientY}function mi(Pe){if(!b)return;I!==void 0&&window.clearTimeout(I),L!==void 0&&window.clearTimeout(L);const{value:Ze}=m,{value:ct}=p,{value:jt}=F;if(Ze===null||ct===null)return;const An=(Pe.clientY-V)*(ct-Ze)/(Ze-jt),ir=ct-Ze;let Zt=E+An;Zt=Math.min(ir,Zt),Zt=Math.max(Zt,0);const{value:sr}=re;sr&&(sr.scrollTop=Zt)}function gi(Pe){Pe.preventDefault(),Pe.stopPropagation(),Kt("mousemove",window,mi,!0),Kt("mouseup",window,gi,!0),b=!1,Bt(),Ln(Pe)&&ce()}$l(()=>{const{value:Pe}=G,{value:Ze}=q,{value:ct}=e,{value:jt}=d,{value:pn}=u;jt&&(Pe?jt.classList.remove(`${ct}-scrollbar-rail--disabled`):jt.classList.add(`${ct}-scrollbar-rail--disabled`)),pn&&(Ze?pn.classList.remove(`${ct}-scrollbar-rail--disabled`):pn.classList.add(`${ct}-scrollbar-rail--disabled`))}),Qe(()=>{n.container||Bt()}),qn(()=>{I!==void 0&&window.clearTimeout(I),L!==void 0&&window.clearTimeout(L),Kt("mousemove",window,mi,!0),Kt("mouseup",window,gi,!0)});const bt=me(()=>{const{common:{cubicBezierEaseInOut:Pe},self:{color:Ze,colorHover:ct,height:jt,width:pn,borderRadius:An,railInsetHorizontalTop:ir,railInsetHorizontalBottom:Zt,railInsetVerticalRight:sr,railInsetVerticalLeft:bi,railColor:hd}}=B.value;return{"--n-scrollbar-bezier":Pe,"--n-scrollbar-color":Ze,"--n-scrollbar-color-hover":ct,"--n-scrollbar-border-radius":An,"--n-scrollbar-width":pn,"--n-scrollbar-height":jt,"--n-scrollbar-rail-inset-horizontal-top":ir,"--n-scrollbar-rail-inset-horizontal-bottom":Zt,"--n-scrollbar-rail-inset-vertical-right":s!=null&&s.value?o0(sr):sr,"--n-scrollbar-rail-inset-vertical-left":s!=null&&s.value?o0(bi):bi,"--n-scrollbar-rail-color":hd}}),vi=t?Qr("scrollbar",void 0,bt,n):void 0;return Object.assign(Object.assign({},{scrollTo:Ce,scrollBy:z,sync:Bt,syncUnifiedContainer:sn,handleMouseEnterWrapper:oe,handleMouseLeaveWrapper:ie}),{mergedClsPrefix:e,rtlEnabled:s,containerScrollTop:$,wrapperRef:i,containerRef:o,contentRef:l,yRailRef:u,xRailRef:d,needYBar:q,needXBar:G,yBarSizePx:j,xBarSizePx:ee,yBarTopPx:pe,xBarLeftPx:fe,isShowXBar:se,isShowYBar:ne,isIos:M,handleScroll:De,handleContentResize:xe,handleContainerResize:O,handleYScrollMouseDown:it,handleXScrollMouseDown:zn,cssVars:t?void 0:bt,themeClass:vi==null?void 0:vi.themeClass,onRender:vi==null?void 0:vi.onRender})},render(){var n;const{$slots:e,mergedClsPrefix:t,triggerDisplayManually:r,rtlEnabled:s,internalHoistYRail:i,yPlacement:o,xPlacement:l,xScrollable:u}=this;if(!this.scrollable)return(n=e.default)===null||n===void 0?void 0:n.call(e);const d=this.trigger==="none",p=(v,w)=>ye("div",{ref:"yRailRef",class:[`${t}-scrollbar-rail`,`${t}-scrollbar-rail--vertical`,`${t}-scrollbar-rail--vertical--${o}`,v],"data-scrollbar-rail":!0,style:[w||"",this.verticalRailStyle],"aria-hidden":!0},ye(d?i0:On,d?null:{name:"fade-in-transition"},{default:()=>this.needYBar&&this.isShowYBar&&!this.isIos?ye("div",{class:`${t}-scrollbar-rail__scrollbar`,style:{height:this.yBarSizePx,top:this.yBarTopPx},onMousedown:this.handleYScrollMouseDown}):null})),g=()=>{var v,w;return(v=this.onRender)===null||v===void 0||v.call(this),ye("div",Ae(this.$attrs,{role:"none",ref:"wrapperRef",class:[`${t}-scrollbar`,this.themeClass,s&&`${t}-scrollbar--rtl`],style:this.cssVars,onMouseenter:r?void 0:this.handleMouseEnterWrapper,onMouseleave:r?void 0:this.handleMouseLeaveWrapper}),[this.container?(w=e.default)===null||w===void 0?void 0:w.call(e):ye("div",{role:"none",ref:"containerRef",class:[`${t}-scrollbar-container`,this.containerClass],style:this.containerStyle,onScroll:this.handleScroll,onWheel:this.onWheel},ye(T0,{onResize:this.handleContentResize},{default:()=>ye("div",{ref:"contentRef",role:"none",style:[{width:this.xScrollable?"fit-content":null},this.contentStyle],class:[`${t}-scrollbar-content`,this.contentClass]},e)})),i?null:p(void 0,void 0),u&&ye("div",{ref:"xRailRef",class:[`${t}-scrollbar-rail`,`${t}-scrollbar-rail--horizontal`,`${t}-scrollbar-rail--horizontal--${l}`],style:this.horizontalRailStyle,"data-scrollbar-rail":!0,"aria-hidden":!0},ye(d?i0:On,d?null:{name:"fade-in-transition"},{default:()=>this.needXBar&&this.isShowXBar&&!this.isIos?ye("div",{class:`${t}-scrollbar-rail__scrollbar`,style:{width:this.xBarSizePx,right:s?this.xBarLeftPx:void 0,left:s?void 0:this.xBarLeftPx},onMousedown:this.handleXScrollMouseDown}):null}))])},m=this.container?g():ye(T0,{onResize:this.handleContainerResize},{default:g});return i?ye(_e,null,m,p(this.themeClass,this.cssVars)):m}}),ox=qc,{cubicBezierEaseIn:Z0,cubicBezierEaseOut:Y0}=ls;function ax({transformOrigin:n="inherit",duration:e=".2s",enterScale:t=".9",originalTransform:r="",originalTransition:s=""}={}){return[Ee("&.fade-in-scale-up-transition-leave-active",{transformOrigin:n,transition:`opacity ${e} ${Z0}, transform ${e} ${Z0} ${s&&`,${s}`}`}),Ee("&.fade-in-scale-up-transition-enter-active",{transformOrigin:n,transition:`opacity ${e} ${Y0}, transform ${e} ${Y0} ${s&&`,${s}`}`}),Ee("&.fade-in-scale-up-transition-enter-from, &.fade-in-scale-up-transition-leave-to",{opacity:0,transform:`${r} scale(${t})`}),Ee("&.fade-in-scale-up-transition-leave-from, &.fade-in-scale-up-transition-enter-to",{opacity:1,transform:`${r} scale(1)`})]}const v5=Ke("base-wave",`
 `,[Ke("popover-arrow",e)])])])}const lx=Object.assign(Object.assign({},qt.props),{to:aa.propTo,show:Boolean,trigger:String,showArrow:Boolean,delay:Number,duration:Number,raw:Boolean,arrowPointToCenter:Boolean,arrowClass:String,arrowStyle:[String,Object],arrowWrapperClass:String,arrowWrapperStyle:[String,Object],displayDirective:String,x:Number,y:Number,flip:Boolean,overlap:Boolean,placement:String,width:[Number,String],keepAliveOnHover:Boolean,scrollable:Boolean,contentClass:String,contentStyle:[Object,String],headerClass:String,headerStyle:[Object,String],footerClass:String,footerStyle:[Object,String],internalDeactivateImmediately:Boolean,animated:Boolean,onClickoutside:Function,internalTrapFocus:Boolean,internalOnAfterLeave:Function,minWidth:Number,maxWidth:Number});function ux({arrowClass:n,arrowStyle:e,arrowWrapperClass:t,arrowWrapperStyle:r,clsPrefix:s}){return ye("div",{key:"__popover-arrow__",style:r,class:[`${s}-popover-arrow-wrapper`,t]},ye("div",{class:[`${s}-popover-arrow`,n],style:e}))}const w5=$e({name:"PopoverBody",inheritAttrs:!1,props:lx,setup(n,{slots:e,attrs:t}){const{namespaceRef:r,mergedClsPrefixRef:s,inlineThemeDisabled:i}=rr(n),o=qt("Popover","-popover",y5,rw,n,s),l=Y(null),u=Wt("NPopover"),d=Y(null),p=Y(n.show),g=Y(!1);$l(()=>{const{show:L}=n;L&&!fD()&&!n.internalDeactivateImmediately&&(g.value=!0)});const m=me(()=>{const{trigger:L,onClickoutside:E}=n,D=[],{positionManuallyRef:{value:A}}=u;return A||(L==="click"&&!E&&D.push([vc,b,void 0,{capture:!0}]),L==="hover"&&D.push([MD,y])),E&&D.push([vc,b,void 0,{capture:!0}]),(n.displayDirective==="show"||n.animated&&g.value)&&D.push([Xt,n.show]),D}),v=me(()=>{const{common:{cubicBezierEaseInOut:L,cubicBezierEaseIn:E,cubicBezierEaseOut:D},self:{space:A,spaceArrow:V,padding:M,fontSize:B,textColor:F,dividerColor:j,color:H,boxShadow:ee,borderRadius:ue,arrowHeight:pe,arrowOffset:Q,arrowOffsetVertical:fe}}=o.value;return{"--n-box-shadow":ee,"--n-bezier":L,"--n-bezier-ease-in":E,"--n-bezier-ease-out":D,"--n-font-size":B,"--n-text-color":F,"--n-color":H,"--n-divider-color":j,"--n-border-radius":ue,"--n-arrow-height":pe,"--n-arrow-offset":Q,"--n-arrow-offset-vertical":fe,"--n-padding":M,"--n-space":A,"--n-space-arrow":V}}),w=me(()=>{const L=n.width==="trigger"?void 0:Yo(n.width),E=[];L&&E.push({width:L});const{maxWidth:D,minWidth:A}=n;return D&&E.push({maxWidth:Yo(D)}),A&&E.push({maxWidth:Yo(A)}),i||E.push(v.value),E}),S=i?Qr("popover",void 0,v,n):void 0;u.setBodyInstance({syncPosition:$}),qn(()=>{u.setBodyInstance(null)}),kt(Ut(n,"show"),L=>{n.animated||(L?p.value=!0:p.value=!1)});function $(){var L;(L=l.value)===null||L===void 0||L.syncPosition()}function T(L){n.trigger==="hover"&&n.keepAliveOnHover&&n.show&&u.handleMouseEnter(L)}function x(L){n.trigger==="hover"&&n.keepAliveOnHover&&u.handleMouseLeave(L)}function y(L){n.trigger==="hover"&&!_().contains(vl(L))&&u.handleMouseMoveOutside(L)}function b(L){(n.trigger==="click"&&!_().contains(vl(L))||n.onClickoutside)&&u.handleClickOutside(L)}function _(){return u.getTriggerElement()}bn(ha,d),bn(Ol,null),bn(El,null);function I(){if(S==null||S.onRender(),!(n.displayDirective==="show"||n.show||n.animated&&g.value))return null;let E;const D=u.internalRenderBodyRef.value,{value:A}=s;if(D)E=D([`${A}-popover-shared`,S==null?void 0:S.themeClass.value,n.overlap&&`${A}-popover-shared--overlap`,n.showArrow&&`${A}-popover-shared--show-arrow`,n.arrowPointToCenter&&`${A}-popover-shared--center-arrow`],d,w.value,T,x);else{const{value:V}=u.extraClassRef,{internalTrapFocus:M}=n,B=!ip(e.header)||!ip(e.footer),F=()=>{var j,H;const ee=B?ye(_e,null,Jn(e.header,Q=>Q?ye("div",{class:[`${A}-popover__header`,n.headerClass],style:n.headerStyle},Q):null),Jn(e.default,Q=>Q?ye("div",{class:[`${A}-popover__content`,n.contentClass],style:n.contentStyle},e):null),Jn(e.footer,Q=>Q?ye("div",{class:[`${A}-popover__footer`,n.footerClass],style:n.footerStyle},Q):null)):n.scrollable?(j=e.default)===null||j===void 0?void 0:j.call(e):ye("div",{class:[`${A}-popover__content`,n.contentClass],style:n.contentStyle},e),ue=n.scrollable?ye(ox,{contentClass:B?void 0:`${A}-popover__content ${(H=n.contentClass)!==null&&H!==void 0?H:""}`,contentStyle:B?void 0:n.contentStyle},{default:()=>ee}):ee,pe=n.showArrow?ux({arrowClass:n.arrowClass,arrowStyle:n.arrowStyle,arrowWrapperClass:n.arrowWrapperClass,arrowWrapperStyle:n.arrowWrapperStyle,clsPrefix:A}):null;return[ue,pe]};E=ye("div",Ae({class:[`${A}-popover`,`${A}-popover-shared`,S==null?void 0:S.themeClass.value,V.map(j=>`${A}-${j}`),{[`${A}-popover--scrollable`]:n.scrollable,[`${A}-popover--show-header-or-footer`]:B,[`${A}-popover--raw`]:n.raw,[`${A}-popover-shared--overlap`]:n.overlap,[`${A}-popover-shared--show-arrow`]:n.showArrow,[`${A}-popover-shared--center-arrow`]:n.arrowPointToCenter}],ref:d,style:w.value,onKeydown:u.handleKeydown,onMouseenter:T,onMouseleave:x},t),M?ye(mm,{active:n.show,autoFocus:!0},{default:F}):F())}return He(E,m.value)}return{displayed:g,namespace:r,isMounted:u.isMountedRef,zIndex:u.zIndexRef,followerRef:l,adjustedTo:aa(n),followerEnabled:p,renderContentNode:I}},render(){return ye(Fw,{ref:"followerRef",zIndex:this.zIndex,show:this.show,enabled:this.followerEnabled,to:this.adjustedTo,x:this.x,y:this.y,flip:this.flip,placement:this.placement,containerClass:this.namespace,overlap:this.overlap,width:this.width==="trigger"?"target":void 0,teleportDisabled:this.adjustedTo===aa.tdkey},{default:()=>this.animated?ye(On,{name:"popover-transition",appear:this.isMounted,onEnter:()=>{this.followerEnabled=!0},onAfterLeave:()=>{var n;(n=this.internalOnAfterLeave)===null||n===void 0||n.call(this),this.followerEnabled=!1,this.displayed=!1}},{default:this.renderContentNode}):this.renderContentNode()})}}),x5=Object.keys(lx),_5={focus:["onFocus","onBlur"],click:["onClick"],hover:["onMouseenter","onMouseleave"],manual:[],nested:["onFocus","onBlur","onMouseenter","onMouseleave","onClick"]};function k5(n,e,t){_5[e].forEach(r=>{n.props?n.props=Object.assign({},n.props):n.props={};const s=n.props[r],i=t[r];s?n.props[r]=(...o)=>{s(...o),i(...o)}:n.props[r]=i})}const Gc={show:{type:Boolean,default:void 0},defaultShow:Boolean,showArrow:{type:Boolean,default:!0},trigger:{type:String,default:"hover"},delay:{type:Number,default:100},duration:{type:Number,default:100},raw:Boolean,placement:{type:String,default:"top"},x:Number,y:Number,arrowPointToCenter:Boolean,disabled:Boolean,getDisabled:Function,displayDirective:{type:String,default:"if"},arrowClass:String,arrowStyle:[String,Object],arrowWrapperClass:String,arrowWrapperStyle:[String,Object],flip:{type:Boolean,default:!0},animated:{type:Boolean,default:!0},width:{type:[Number,String],default:void 0},overlap:Boolean,keepAliveOnHover:{type:Boolean,default:!0},zIndex:Number,to:aa.propTo,scrollable:Boolean,contentClass:String,contentStyle:[Object,String],headerClass:String,headerStyle:[Object,String],footerClass:String,footerStyle:[Object,String],onClickoutside:Function,"onUpdate:show":[Function,Array],onUpdateShow:[Function,Array],internalDeactivateImmediately:Boolean,internalSyncTargetWithParent:Boolean,internalInheritedEventHandlers:{type:Array,default:()=>[]},internalTrapFocus:Boolean,internalExtraClass:{type:Array,default:()=>[]},onShow:[Function,Array],onHide:[Function,Array],arrow:{type:Boolean,default:void 0},minWidth:Number,maxWidth:Number},S5=Object.assign(Object.assign(Object.assign({},qt.props),Gc),{internalOnAfterLeave:Function,internalRenderBody:Function}),Dn=$e({name:"Popover",inheritAttrs:!1,props:S5,__popover__:!0,setup(n){const e=Il(),t=Y(null),r=me(()=>n.show),s=Y(n.defaultShow),i=yl(r,s),o=Zr(()=>n.disabled?!1:i.value),l=()=>{if(n.disabled)return!0;const{getDisabled:j}=n;return!!(j!=null&&j())},u=()=>l()?!1:i.value,d=CD(n,["arrow","showArrow"]),p=me(()=>n.overlap?!1:d.value);let g=null;const m=Y(null),v=Y(null),w=Zr(()=>n.x!==void 0&&n.y!==void 0);function S(j){const{"onUpdate:show":H,onUpdateShow:ee,onShow:ue,onHide:pe}=n;s.value=j,H&&tn(H,j),ee&&tn(ee,j),j&&ue&&tn(ue,!0),j&&pe&&tn(pe,!1)}function $(){g&&g.syncPosition()}function T(){const{value:j}=m;j&&(window.clearTimeout(j),m.value=null)}function x(){const{value:j}=v;j&&(window.clearTimeout(j),v.value=null)}function y(){const j=l();if(n.trigger==="focus"&&!j){if(u())return;S(!0)}}function b(){const j=l();if(n.trigger==="focus"&&!j){if(!u())return;S(!1)}}function _(){const j=l();if(n.trigger==="hover"&&!j){if(x(),m.value!==null||u())return;const H=()=>{S(!0),m.value=null},{delay:ee}=n;ee===0?H():m.value=window.setTimeout(H,ee)}}function I(){const j=l();if(n.trigger==="hover"&&!j){if(T(),v.value!==null||!u())return;const H=()=>{S(!1),v.value=null},{duration:ee}=n;ee===0?H():v.value=window.setTimeout(H,ee)}}function L(){I()}function E(j){var H;u()&&(n.trigger==="click"&&(T(),x(),S(!1)),(H=n.onClickoutside)===null||H===void 0||H.call(n,j))}function D(){if(n.trigger==="click"&&!l()){T(),x();const j=!u();S(j)}}function A(j){n.internalTrapFocus&&j.key==="Escape"&&(T(),x(),S(!1))}function V(j){s.value=j}function M(){var j;return(j=t.value)===null||j===void 0?void 0:j.targetRef}function B(j){g=j}return bn("NPopover",{getTriggerElement:M,handleKeydown:A,handleMouseEnter:_,handleMouseLeave:I,handleClickOutside:E,handleMouseMoveOutside:L,setBodyInstance:B,positionManuallyRef:w,isMountedRef:e,zIndexRef:Ut(n,"zIndex"),extraClassRef:Ut(n,"internalExtraClass"),internalRenderBodyRef:Ut(n,"internalRenderBody")}),$l(()=>{i.value&&l()&&S(!1)}),{binderInstRef:t,positionManually:w,mergedShowConsideringDisabledProp:o,uncontrolledShow:s,mergedShowArrow:p,getMergedShow:u,setShow:V,handleClick:D,handleMouseEnter:_,handleMouseLeave:I,handleFocus:y,handleBlur:b,syncPosition:$}},render(){var n;const{positionManually:e,$slots:t}=this;let r,s=!1;if(!e&&(t.activator?r=np(t,"activator"):r=np(t,"trigger"),r)){r=iw(r),r=r.type===qO?ye("span",[r]):r;const i={onClick:this.handleClick,onMouseenter:this.handleMouseEnter,onMouseleave:this.handleMouseLeave,onFocus:this.handleFocus,onBlur:this.handleBlur};if(!((n=r.type)===null||n===void 0)&&n.__popover__)s=!0,r.props||(r.props={internalSyncTargetWithParent:!0,internalInheritedEventHandlers:[]}),r.props.internalSyncTargetWithParent=!0,r.props.internalInheritedEventHandlers?r.props.internalInheritedEventHandlers=[i,...r.props.internalInheritedEventHandlers]:r.props.internalInheritedEventHandlers=[i];else{const{internalInheritedEventHandlers:o}=this,l=[i,...o],u={onBlur:d=>{l.forEach(p=>{p.onBlur(d)})},onFocus:d=>{l.forEach(p=>{p.onFocus(d)})},onClick:d=>{l.forEach(p=>{p.onClick(d)})},onMouseenter:d=>{l.forEach(p=>{p.onMouseenter(d)})},onMouseleave:d=>{l.forEach(p=>{p.onMouseleave(d)})}};k5(r,o?"nested":e?"manual":this.trigger,u)}}return ye(Pw,{ref:"binderInstRef",syncTarget:!s,syncTargetWithParent:this.internalSyncTargetWithParent},{default:()=>{this.mergedShowConsideringDisabledProp;const i=this.getMergedShow();return[this.internalTrapFocus&&i?He(ye("div",{style:{position:"fixed",inset:0}}),[[Hc,{enabled:i,zIndex:this.zIndex}]]):null,e?null:ye(Nw,null,{default:()=>r}),ye(w5,bl(this.$props,x5,Object.assign(Object.assign({},this.$attrs),{showArrow:this.mergedShowArrow,show:i})),{default:()=>{var o,l;return(l=(o=this.$slots).default)===null||l===void 0?void 0:l.call(o)},header:()=>{var o,l;return(l=(o=this.$slots).header)===null||l===void 0?void 0:l.call(o)},footer:()=>{var o,l;return(l=(o=this.$slots).footer)===null||l===void 0?void 0:l.call(o)}})]}})}}),{cubicBezierEaseInOut:_s}=ls;function $5({duration:n=".2s",delay:e=".1s"}={}){return[Ee("&.fade-in-width-expand-transition-leave-from, &.fade-in-width-expand-transition-enter-to",{opacity:1}),Ee("&.fade-in-width-expand-transition-leave-to, &.fade-in-width-expand-transition-enter-from",`
`,[qe("color-transition",{transition:"color .3s var(--n-bezier)"}),qe("depth",{color:"var(--n-color)"},[Ee("svg",{opacity:"var(--n-opacity)",transition:"opacity .3s var(--n-bezier)"})]),Ee("svg",{height:"1em",width:"1em"})]),iA=Object.assign(Object.assign({},qt.props),{depth:[String,Number],size:[Number,String],color:String,component:[Object,Function]}),sA=$e({_n_icon__:!0,name:"Icon",inheritAttrs:!1,props:iA,setup(n){const{mergedClsPrefixRef:e,inlineThemeDisabled:t}=rr(n),r=qt("Icon","-icon",rA,t3,n,e),s=me(()=>{const{depth:o}=n,{common:{cubicBezierEaseInOut:l},self:u}=r.value;if(o!==void 0){const{color:d,[`opacity${o}Depth`]:p}=u;return{"--n-bezier":l,"--n-color":d,"--n-opacity":p}}return{"--n-bezier":l,"--n-color":"","--n-opacity":""}}),i=t?Qr("icon",me(()=>`${n.depth||"d"}`),s,n):void 0;return{mergedClsPrefix:e,mergedStyle:me(()=>{const{size:o,color:l}=n;return{fontSize:Yo(o),color:l}}),cssVars:t?void 0:s,themeClass:i==null?void 0:i.themeClass,onRender:i==null?void 0:i.onRender}},render(){var n;const{$parent:e,depth:t,mergedClsPrefix:r,component:s,onRender:i,themeClass:o}=this;return!((n=e==null?void 0:e.$options)===null||n===void 0)&&n._n_icon__&&pl("icon","don't wrap `n-icon` inside `n-icon`"),i==null||i(),ye("i",Ae(this.$attrs,{role:"img",class:[`${r}-icon`,o,{[`${r}-icon--depth`]:t,[`${r}-icon--color-transition`]:t!==void 0}],style:[this.cssVars,this.mergedStyle]}),s?ye(s):this.$slots)}}),$m=nr("n-dropdown-menu"),Kc=nr("n-dropdown"),Q0=nr("n-dropdown-option");function pp(n,e){return n.type==="submenu"||n.type===void 0&&n[e]!==void 0}function oA(n){return n.type==="group"}function fx(n){return n.type==="divider"}function aA(n){return n.type==="render"}const hx=$e({name:"DropdownOption",props:{clsPrefix:{type:String,required:!0},tmNode:{type:Object,required:!0},parentKey:{type:[String,Number],default:null},placement:{type:String,default:"right-start"},props:Object,scrollable:Boolean},setup(n){const e=Wt(Kc),{hoverKeyRef:t,keyboardKeyRef:r,lastToggledSubmenuKeyRef:s,pendingKeyPathRef:i,activeKeyPathRef:o,animatedRef:l,mergedShowRef:u,renderLabelRef:d,renderIconRef:p,labelFieldRef:g,childrenFieldRef:m,renderOptionRef:v,nodePropsRef:w,menuPropsRef:S}=e,$=Wt(Q0,null),T=Wt($m),x=Wt(ha),y=me(()=>n.tmNode.rawNode),b=me(()=>{const{value:ee}=m;return pp(n.tmNode.rawNode,ee)}),_=me(()=>{const{disabled:ee}=n.tmNode;return ee}),I=me(()=>{if(!b.value)return!1;const{key:ee,disabled:ue}=n.tmNode;if(ue)return!1;const{value:pe}=t,{value:Q}=r,{value:fe}=s,{value:q}=i;return pe!==null?q.includes(ee):Q!==null?q.includes(ee)&&q[q.length-1]!==ee:fe!==null?q.includes(ee):!1}),L=me(()=>r.value===null&&!l.value),E=pD(I,300,L),D=me(()=>!!($!=null&&$.enteringSubmenuRef.value)),A=Y(!1);bn(Q0,{enteringSubmenuRef:A});function V(){A.value=!0}function M(){A.value=!1}function B(){const{parentKey:ee,tmNode:ue}=n;ue.disabled||u.value&&(s.value=ee,r.value=null,t.value=ue.key)}function F(){const{tmNode:ee}=n;ee.disabled||u.value&&t.value!==ee.key&&B()}function j(ee){if(n.tmNode.disabled||!u.value)return;const{relatedTarget:ue}=ee;ue&&!n0({target:ue},"dropdownOption")&&!n0({target:ue},"scrollbarRail")&&(t.value=null)}function H(){const{value:ee}=b,{tmNode:ue}=n;u.value&&!ee&&!ue.disabled&&(e.doSelect(ue.key,ue.rawNode),e.doUpdateShow(!1))}return{labelField:g,renderLabel:d,renderIcon:p,siblingHasIcon:T.showIconRef,siblingHasSubmenu:T.hasSubmenuRef,menuProps:S,popoverBody:x,animated:l,mergedShowSubmenu:me(()=>E.value&&!D.value),rawNode:y,hasSubmenu:b,pending:Zr(()=>{const{value:ee}=i,{key:ue}=n.tmNode;return ee.includes(ue)}),childActive:Zr(()=>{const{value:ee}=o,{key:ue}=n.tmNode,pe=ee.findIndex(Q=>ue===Q);return pe===-1?!1:pe<ee.length-1}),active:Zr(()=>{const{value:ee}=o,{key:ue}=n.tmNode,pe=ee.findIndex(Q=>ue===Q);return pe===-1?!1:pe===ee.length-1}),mergedDisabled:_,renderOption:v,nodeProps:w,handleClick:H,handleMouseMove:F,handleMouseEnter:B,handleMouseLeave:j,handleSubmenuBeforeEnter:V,handleSubmenuAfterEnter:M}},render(){var n,e;const{animated:t,rawNode:r,mergedShowSubmenu:s,clsPrefix:i,siblingHasIcon:o,siblingHasSubmenu:l,renderLabel:u,renderIcon:d,renderOption:p,nodeProps:g,props:m,scrollable:v}=this;let w=null;if(s){const x=(n=this.menuProps)===null||n===void 0?void 0:n.call(this,r,r.children);w=ye(px,Object.assign({},x,{clsPrefix:i,scrollable:this.scrollable,tmNodes:this.tmNode.children,parentKey:this.tmNode.key}))}const S={class:[`${i}-dropdown-option-body`,this.pending&&`${i}-dropdown-option-body--pending`,this.active&&`${i}-dropdown-option-body--active`,this.childActive&&`${i}-dropdown-option-body--child-active`,this.mergedDisabled&&`${i}-dropdown-option-body--disabled`],onMousemove:this.handleMouseMove,onMouseenter:this.handleMouseEnter,onMouseleave:this.handleMouseLeave,onClick:this.handleClick},$=g==null?void 0:g(r),T=ye("div",Object.assign({class:[`${i}-dropdown-option`,$==null?void 0:$.class],"data-dropdown-option":!0},$),ye("div",Ae(S,m),[ye("div",{class:[`${i}-dropdown-option-body__prefix`,o&&`${i}-dropdown-option-body__prefix--show-icon`]},[d?d(r):Ti(r.icon)]),ye("div",{"data-dropdown-option":!0,class:`${i}-dropdown-option-body__label`},u?u(r):Ti((e=r[this.labelField])!==null&&e!==void 0?e:r.title)),ye("div",{"data-dropdown-option":!0,class:[`${i}-dropdown-option-body__suffix`,l&&`${i}-dropdown-option-body__suffix--has-submenu`]},this.hasSubmenu?ye(sA,null,{default:()=>ye(RL,null)}):null)]),this.hasSubmenu?ye(Pw,null,{default:()=>[ye(Nw,null,{default:()=>ye("div",{class:`${i}-dropdown-offset-container`},ye(Fw,{show:this.mergedShowSubmenu,placement:this.placement,to:v&&this.popoverBody||void 0,teleportDisabled:!v},{default:()=>ye("div",{class:`${i}-dropdown-menu-wrapper`},t?ye(On,{onBeforeEnter:this.handleSubmenuBeforeEnter,onAfterEnter:this.handleSubmenuAfterEnter,name:"fade-in-scale-up-transition",appear:!0},{default:()=>w}):w)}))})]}):null);return p?p({node:T,option:r}):T}}),lA=$e({name:"DropdownGroupHeader",props:{clsPrefix:{type:String,required:!0},tmNode:{type:Object,required:!0}},setup(){const{showIconRef:n,hasSubmenuRef:e}=Wt($m),{renderLabelRef:t,labelFieldRef:r,nodePropsRef:s,renderOptionRef:i}=Wt(Kc);return{labelField:r,showIcon:n,hasSubmenu:e,renderLabel:t,nodeProps:s,renderOption:i}},render(){var n;const{clsPrefix:e,hasSubmenu:t,showIcon:r,nodeProps:s,renderLabel:i,renderOption:o}=this,{rawNode:l}=this.tmNode,u=ye("div",Object.assign({class:`${e}-dropdown-option`},s==null?void 0:s(l)),ye("div",{class:`${e}-dropdown-option-body ${e}-dropdown-option-body--group`},ye("div",{"data-dropdown-option":!0,class:[`${e}-dropdown-option-body__prefix`,r&&`${e}-dropdown-option-body__prefix--show-icon`]},Ti(l.icon)),ye("div",{class:`${e}-dropdown-option-body__label`,"data-dropdown-option":!0},i?i(l):Ti((n=l.title)!==null&&n!==void 0?n:l[this.labelField])),ye("div",{class:[`${e}-dropdown-option-body__suffix`,t&&`${e}-dropdown-option-body__suffix--has-submenu`],"data-dropdown-option":!0})));return o?o({node:u,option:l}):u}}),uA=$e({name:"NDropdownGroup",props:{clsPrefix:{type:String,required:!0},tmNode:{type:Object,required:!0},parentKey:{type:[String,Number],default:null}},render(){const{tmNode:n,parentKey:e,clsPrefix:t}=this,{children:r}=n;return ye(_e,null,ye(lA,{clsPrefix:t,tmNode:n,key:n.key}),r==null?void 0:r.map(s=>{const{rawNode:i}=s;return i.show===!1?null:fx(i)?ye(dx,{clsPrefix:t,key:s.key}):s.isGroup?(pl("dropdown","`group` node is not allowed to be put in `group` node."),null):ye(hx,{clsPrefix:t,tmNode:s,parentKey:e,key:s.key})}))}}),cA=$e({name:"DropdownRenderOption",props:{tmNode:{type:Object,required:!0}},render(){const{rawNode:{render:n,props:e}}=this.tmNode;return ye("div",e,[n==null?void 0:n()])}}),px=$e({name:"DropdownMenu",props:{scrollable:Boolean,showArrow:Boolean,arrowStyle:[String,Object],clsPrefix:{type:String,required:!0},tmNodes:{type:Array,default:()=>[]},parentKey:{type:[String,Number],default:null}},setup(n){const{renderIconRef:e,childrenFieldRef:t}=Wt(Kc);bn($m,{showIconRef:me(()=>{const s=e.value;return n.tmNodes.some(i=>{var o;if(i.isGroup)return(o=i.children)===null||o===void 0?void 0:o.some(({rawNode:u})=>s?s(u):u.icon);const{rawNode:l}=i;return s?s(l):l.icon})}),hasSubmenuRef:me(()=>{const{value:s}=t;return n.tmNodes.some(i=>{var o;if(i.isGroup)return(o=i.children)===null||o===void 0?void 0:o.some(({rawNode:u})=>pp(u,s));const{rawNode:l}=i;return pp(l,s)})})});const r=Y(null);return bn(El,null),bn(Ol,null),bn(ha,r),{bodyRef:r}},render(){const{parentKey:n,clsPrefix:e,scrollable:t}=this,r=this.tmNodes.map(s=>{const{rawNode:i}=s;return i.show===!1?null:aA(i)?ye(cA,{tmNode:s,key:s.key}):fx(i)?ye(dx,{clsPrefix:e,key:s.key}):oA(i)?ye(uA,{clsPrefix:e,tmNode:s,parentKey:n,key:s.key}):ye(hx,{clsPrefix:e,tmNode:s,parentKey:n,key:s.key,props:i.props,scrollable:t})});return ye("div",{class:[`${e}-dropdown-menu`,t&&`${e}-dropdown-menu--scrollable`],ref:"bodyRef"},t?ye(ox,{contentClass:`${e}-dropdown-menu__content`},{default:()=>r}):r,this.showArrow?ux({clsPrefix:e,arrowStyle:this.arrowStyle,arrowClass:void 0,arrowWrapperClass:void 0,arrowWrapperStyle:void 0}):null)}}),dA=Ke("dropdown-menu",`


terminal

Output: find: unrecognized: -printf


Explanation:
Let me understand what's happening. The user says "Jetzt steht wieder derzeit nicht unterstützt" meaning the CasaOS dashboard shows "Derzeit nicht unterstützt" (currently not supported) for PrintVault again.

From my investigation so far:
1. Caddy routes everything to `zimaos-app-management` on port 43455
2. The `app-management.json` was previously fixed to have proper entries
3. But the user says it's showing "nicht unterstützt" again

The key issue is: "derzeit nicht unterstützt" translates to "currently not supported" - this is the generic CasaOS error when it can't launch an app. The fact that it goes back and forth suggests something keeps overwriting `app-management.json`.

Let me look at what the zimaos-app-management service actually does and where it reads its data from. The `app-management.json` might be regenerated from Docker labels or another source.

Let me check:
1. What's in app-management.json right now
2. Whether Docker labels on the PrintVault container are correct
3. How zimaos-app-management discovers apps

sudo cat /etc/casaos/app-management.json 2>&1 | python3 -m json.tool

sudo docker inspect printvault --format '{{json .Config.Labels}}' 2>&1 | python3 -m json.tool

sudo journalctl -u zimaos-app-management --since "5 min ago" --no-pager 2>&1 | tail -30


Output:
[
    {
        "app_type": "v2app",
        "author_type": "official",
        "hostname": "",
        "icon": "https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/Audiobookshelf/icon.png",
        "image": "ghcr.io/advplyr/audiobookshelf:2.30.0",
        "index": "/",
        "is_uncontrolled": false,
        "name": "audiobookshelf",
        "port": "13378",
        "scheme": "http",
        "status": "running",
        "store_app_id": "audiobookshelf",
        "title": {
            "custom": "",
            "en_US": "Audiobookshelf"
        }
    },
    {
        "app_type": "v2app",
        "author_type": "unknown",
        "is_uncontrolled": false,
        "name": "docmaster",
        "title": {
            "en_US": "docmaster"
        }
    },
    {
        "app_type": "v2app",
        "author_type": "unknown",
        "is_uncontrolled": false,
        "name": "printvault",
        "title": {
            "en_US": "printvault"
        }
    },
    {
        "app_type": "v2app",
        "author_type": "community",
        "hostname": "172.29.0.1",
        "icon": "http://172.29.0.1:8181/icon.png",
        "image": "nginx:latest",
        "index": "/",
        "is_uncontrolled": false,
        "name": "noble_andres",
        "port": "8181",
        "scheme": "http",
        "status": "running",
        "store_app_id": "noble_andres",
        "title": {
            "custom": "DailyDose"
        }
    },
    {
        "app_type": "v2app",
        "author_type": "official",
        "hostname": "",
        "icon": "https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/OpenClaw/icon.png",
        "image": "icewhaletech/openclaw:2026.4.9",
        "index": "?token=casaos",
        "is_uncontrolled": false,
        "name": "openclaw",
        "port": "24190",
        "scheme": "https",
        "status": "running",
        "store_app_id": "openclaw",
        "title": {
            "custom": "",
            "de_DE": "OpenClaw",
            "el_GR": "OpenClaw",
            "en_GB": "OpenClaw",
            "en_US": "OpenClaw",
            "fr_FR": "OpenClaw",
            "hr_HR": "OpenClaw",
            "it_IT": "OpenClaw",
            "ja_JP": "OpenClaw",
            "ko_KR": "OpenClaw",
            "nb_NO": "OpenClaw",
            "pt_PT": "OpenClaw",
            "ru_RU": "OpenClaw",
            "sv_SE": "OpenClaw",
            "tr_TR": "OpenClaw",
            "zh_CN": "OpenClaw"
        }
    },
    {
        "app_type": "v2app",
        "author_type": "community",
        "hostname": "172.29.0.1",
        "icon": "http://172.29.0.1:8765/icon.png",
        "image": "node:20-alpine",
        "index": "/zeitgeist.html",
        "is_uncontrolled": false,
        "name": "breathtaking_maryann",
        "port": "8765",
        "scheme": "http",
        "status": "running",
        "store_app_id": "breathtaking_maryann",
        "title": {
            "custom": "Zeitgeist"
        }
    },
    {
        "app_type": "v2app",
        "author_type": "official",
        "hostname": "",
        "icon": "https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/Komga/icon.png",
        "image": "gotson/komga:1.23.6",
        "index": "/",
        "is_uncontrolled": false,
        "name": "komga",
        "port": "25600",
        "scheme": "http",
        "status": "running",
        "store_app_id": "komga",
        "title": {
            "custom": "",
            "en_US": "Komga"
        }
    },
    {
        "app_type": "v2app",
        "author_type": "by_casaos",
        "hostname": "",
        "icon": "https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/Plex/icon.png",
        "image": "lscr.io/linuxserver/plex:1.41.3",
        "index": "/web/index.html",
        "is_uncontrolled": false,
        "name": "plex",
        "port": "32400",
        "scheme": "http",
        "status": "running",
        "store_app_id": "plex",
        "title": {
            "custom": "",
            "en_us": "Plex"
        }
    },
    {
        "app_type": "v2app",
        "author_type": "community",
        "hostname": "172.29.0.1",
        "icon": "http://172.29.0.1:5051/IconSetupOS.png",
        "image": "nginx:latest",
        "index": "/setup-diagram.html",
        "is_uncontrolled": false,
        "name": "fervent_james",
        "port": "5051",
        "scheme": "http",
        "status": "running",
        "store_app_id": "fervent_james",
        "title": {
            "custom": "SetupOS"
        }
    },
    {
        "app_type": "v2app",
        "author_type": "community",
        "hostname": "",
        "icon": "https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/Immich/icon.png",
        "index": "/",
        "is_uncontrolled": false,
        "name": "immich",
        "port": "2283",
        "scheme": "http",
        "status": "running",
        "store_app_id": "immich",
        "title": {
            "custom": "",
            "en_us": "Immich"
        }
    },
    {
        "app_type": "container",
        "image": "kiwi-browser:v2",
        "is_uncontrolled": false,
        "name": "ce7d9a5d4d8a88f703df2e86d89ddaf3099147fd0ff6c1b8d2df103e0ccd1639",
        "status": "running",
        "title": {
            "en_US": "kiwi-browser"
        }
    }
]


Output:
May 17 22:18:23 ZimaOS zimaos-app-management[29304]: {"time":"2026-05-17T22:18:23.757723608+02:00","id":"","remote_ip":"172.29.61.88","host":"172.29.0.1:80","method":"GET","uri":"/v2/mod_management/modules","user_agent":"Zima/1.4.0 (com.iceWhale.ios.zima; build:165; iOS 26.4.2) Alamofire/5.11.1","status":200,"error":"","latency":4453853,"latency_human":"4.453853ms","bytes_in":0,"bytes_out":1009}
May 17 22:18:23 ZimaOS zimaos-app-management[29304]: 2026-05-17T22:18:23.868+0200        error        failed to get store info        {"func": "service.(*store).composeAppsWithStoreInfo.func1", "file": "/home/runner/work/ZimaOS-AppManagement/ZimaOS-AppManagement/service/app_grid.go", "line": 221, "error": "extension `x-casaos` not found", "composeAppID": "docmaster"}
May 17 22:18:23 ZimaOS zimaos-app-management[29304]: 2026-05-17T22:18:23.873+0200        error        failed to get store info        {"func": "service.(*store).composeAppsWithStoreInfo.func1", "file": "/home/runner/work/ZimaOS-AppManagement/ZimaOS-AppManagement/service/app_grid.go", "line": 221, "error": "extension `x-casaos` not found", "composeAppID": "printvault"}
May 17 22:18:23 ZimaOS zimaos-app-management[29304]: {"time":"2026-05-17T22:18:23.914577038+02:00","id":"","remote_ip":"172.29.61.88","host":"172.29.0.1:80","method":"GET","uri":"/v2/app_management/web/appgrid","user_agent":"Zima/1.4.0 (com.iceWhale.ios.zima; build:165; iOS 26.4.2) Alamofire/5.11.1","status":200,"error":"","latency":146496200,"latency_human":"146.4962ms","bytes_in":0,"bytes_out":3571}
May 17 22:19:32 ZimaOS zimaos-app-management[29304]: {"time":"2026-05-17T22:19:32.976898208+02:00","id":"","remote_ip":"::1","host":"localhost","method":"GET","uri":"/v2/app_management/list","user_agent":"curl/8.18.0","status":404,"error":"code=404, message=no matching operation was found","latency":44338,"latency_human":"44.338µs","bytes_in":0,"bytes_out":46}
May 17 22:20:10 ZimaOS zimaos-app-management[29304]: {"time":"2026-05-17T22:20:10.363472639+02:00","id":"","remote_ip":"::1","host":"localhost","method":"GET","uri":"/v1/app-categories/list","user_agent":"curl/8.18.0","status":404,"error":"code=404, message=Not Found","latency":526225,"latency_human":"526.225µs","bytes_in":0,"bytes_out":24}
May 17 22:20:11 ZimaOS zimaos-app-management[29304]: {"time":"2026-05-17T22:20:11.615783523+02:00","id":"","remote_ip":"::1","host":"localhost","method":"GET","uri":"/v1/apps/list","user_agent":"curl/8.18.0","status":404,"error":"code=404, message=Not Found","latency":485812,"latency_human":"485.812µs","bytes_in":0,"bytes_out":24}
May 17 22:20:40 ZimaOS zimaos-app-management[29304]: {"time":"2026-05-17T22:20:40.327711015+02:00","id":"","remote_ip":"::1","host":"localhost","method":"GET","uri":"/v2/app_management/list","user_agent":"curl/8.18.0","status":404,"error":"code=404, message=no matching operation was found","latency":171687,"latency_human":"171.687µs","bytes_in":0,"bytes_out":46}
May 17 22:20:41 ZimaOS zimaos-app-management[29304]: {"time":"2026-05-17T22:20:41.596561032+02:00","id":"","remote_ip":"::1","host":"localhost","method":"GET","uri":"/v1/container/list","user_agent":"curl/8.18.0","status":500,"error":"","latency":993888,"latency_human":"993.888µs","bytes_in":0,"bytes_out":92}
May 17 22:22:33 ZimaOS zimaos-app-management[29304]: {"time":"2026-05-17T22:22:33.666927377+02:00","id":"","remote_ip":"127.0.0.1","host":"localhost:43455","method":"GET","uri":"/v2/app_management/list","user_agent":"curl/8.18.0","status":404,"error":"code=404, message=no matching operation was found","latency":59099,"latency_human":"59.099µs","bytes_in":0,"bytes_out":46}
May 17 22:22:34 ZimaOS zimaos-app-management[29304]: {"time":"2026-05-17T22:22:34.918954351+02:00","id":"","remote_ip":"127.0.0.1","host":"localhost:43455","method":"GET","uri":"/v1/container/list","user_agent":"curl/8.18.0","status":500,"error":"","latency":860995,"latency_human":"860.995µs","bytes_in":0,"bytes_out":92}
May 17 22:22:36 ZimaOS zimaos-app-management[29304]: {"time":"2026-05-17T22:22:36.177616378+02:00","id":"","remote_ip":"127.0.0.1","host":"localhost:43455","method":"GET","uri":"/v1/apps/list","user_agent":"curl/8.18.0","status":404,"error":"code=404, message=Not Found","latency":35456,"latency_human":"35.456µs","bytes_in":0,"bytes_out":24}


I found the root cause! The `app-management.json` still has both apps as `"app_type": "v2app"` — my earlier fix got reverted. The logs confirm it:

```
error: "extension `x-casaos` not found", "composeAppID": "printvault"
error: "extension `x-casaos` not found", "composeAppID": "docmaster"
```

The gateway can't find them in the app store → shows "Derzeit nicht unterstützt". Let me fix this properly.

Explanation:
I can see the problem now. The `app-management.json` file has `printvault` and `docmaster` both as `"app_type": "v2app"` — AND they're missing the critical fields: `port`, `index`, `scheme`, `hostname`, `icon`. My earlier fix got reverted somehow (possibly by the app-management service itself).

The key error in the logs is:
```
failed to get store info ... "error": "extension `x-casaos` not found", "composeAppID": "docmaster"
failed to get store info ... "error": "extension `x-casaos` not found", "composeAppID": "printvault"
```

This "extension `x-casaos` not found" error means the app-management service is trying to look up store info for these apps (because they're marked as `v2app` type) but can't find them in the app store — so the dashboard shows "Derzeit nicht unterstützt" (not supported).

The fix: I need to change the `app_type` from `v2app` to `container` and add the proper connection details (port, scheme, index, hostname, icon). But I also notice that the Docker inspect shows no labels on printvault at all (null) — the labels must have been lost.

The proper solution is:
1. Stop and remove the printvault container
2. Rebuild with proper `casaos.*` Docker labels
3. Update `app-management.json` with the correct app_type=container + all fields
4. Restart zimaos-app-management

But actually wait — the DocMaster container DOES have proper labels and it's still showing as v2app in app-management.json. This means the app-management service is reading from app-management.json, NOT from Docker labels. The labels are only used when CasaOS first discovers the container. Since both docmaster and printvault are already in app-management.json, I just need to fix the JSON entries.

Let me fix app-management.json directly with proper fields and also ensure the containers have the right labels (for consistency).

Actually, let me also check if the docmaster is working since it has labels. If it's also showing "nicht unterstützt" then the issue is purely in app-management.json.

Let me fix both entries in app-management.json.

sudo docker inspect printvault --format '{{.State.Status}} {{range $p, $c := .NetworkSettings.Ports}}{{$p}}{{"\n"}}{{end}}' 2>&1

curl -s http://localhost:3001/icon.svg -o /dev/null -w "%{http_code} %{content_type}" 2>&1

sudo cat /DATA/AppData/hermes/projects/printvault/main.py | head -30


Output: template parsing error: template: :1:8: executing "" at <.State.Status>: map has no entry for key "State"


Output: 200 image/svg+xml


Output:
"""
PrintVault — STL-Bibliothek für ZimaOS
FastAPI Backend + Static Frontend
"""

import json
import os
import uuid
import shutil
import time
from pathlib import Path
from datetime import datetime
from typing import Optional

from fastapi import FastAPI, File, UploadFile, HTTPException, Query, Request
from fastapi.responses import FileResponse, JSONResponse, HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.middleware.cors import CORSMiddleware
import trimesh
import numpy as np

# ── Konfiguration ──────────────────────────────────────────

BASE_DIR = Path(os.environ.get("DATA_DIR", "/media/HDD_1TB/STL_Bibliothek"))
STL_DIR = BASE_DIR / "stls"
THUMB_DIR = BASE_DIR / "thumbs"
META_FILE = BASE_DIR / "metadata.json"

BASE_DIR.mkdir(parents=True, exist_ok=True)
STL_DIR.mkdir(parents=True, exist_ok=True)


Let me execute the fix.Now I see the full picture. The `app-management.json` was reverted to `v2app` type, and the logs show `"extension x-casaos not found"` which is the exact cause of "Derzeit nicht unterstützt". The gateway expects `v2app` apps to exist in the app store. I need to switch both to `"container"` type (like the working `kiwi-browser`) and ensure Docker labels are set.

Explanation:
Let me understand the situation. I can see:

1. **The `app-management.json` has both `printvault` and `docmaster` as `"app_type": "v2app"`** — this is why they show "Derzeit nicht unterstützt". The v2app type expects them to be from the app store with `x-casaos` Docker extension labels, which they don't have.

2. **The only working app is `kiwi-browser`**, which is correctly registered as `"app_type": "container"`.

3. The logs confirm the error: `extension 'x-casaos' not found` for both apps.

Now I need to figure out the correct `app_type` to use. Looking at the working `kiwi-browser` entry:
```json
{
    "app_type": "container",
    "image": "kiwi-browser:v2",
    "is_uncontrolled": false,
    "name": "ce7d9a5d4d8a88f703df2e86d89ddaf3099147fd0ff6c1b8d2df103e0ccd1639",
    "status": "running",
    "title": {
        "en_US": "kiwi-browser"
    }
}
```

The `"container"` type with `"name"` set to the docker container ID. But wait — the `kiwi-browser` also doesn't have `port`, `index`, `scheme`, etc. How does the iframe work for it then?

Actually, looking at the CasaOS/ZimaOS frontend code, when `app_type` is `"container"`, it reads the Docker container labels (`casaos.port`, `casaos.scheme`, etc.) to determine the URL. The kiwi-browser container must have those labels.

But for `"v2app"`, it expects the app to have been installed from the app store (having the x-casaos extension label).

So the fix should be to either:
1. Make them `"container"` type and set the Docker labels on the containers
2. OR make them `"v2app"` with all the required fields populated (but that might still fail because it tries to look up the store)

Wait, let me re-read the `app-management.json`. The current entries for printvault/docmaster are bare:
```json
{
    "app_type": "v2app",
    "author_type": "unknown",
    "is_uncontrolled": false,
    "name": "printvault",
    "title": {
        "en_US": "printvault"
    }
}
```

They don't have `port`, `scheme`, `index`, `hostname`, or `icon`. When these are `"v2app"`, the gateway probably tries to look them up via the app store, and since they don't exist there, shows "Derzeit nicht unterstützt".

The `kiwi-browser` is `"container"` type and it works fine. But `"container"` type reads Docker labels, not the JSON fields.

So there are TWO possible approaches:

**Approach A: Use `"v2app"` type with full fields**
Set `port`, `scheme`, `index`, `hostname`, `icon` in the JSON. But the logs show "extension `x-casaos` not found" errors, so this might still fail.

**Approach B: Use `"container"` type**
Switch to `"container"` type. The gateway will read Docker container labels. But looking at DocMaster's Docker labels:
```
casaos.port: "3000"
casaos.scheme: "http"
casaos.index: "/"
casaos.icon: "http://localhost:3000/favicon.svg"
casaos.hostname: ""
casaos.title: "DocMaster"
casaos.description: "Dokumentenverwaltung"
casaos.category: "Utilities"
```

And I can add similar labels to printvault. But the `app-management.json` entry for `container` type also needs the `name` to be the Docker container ID (or maybe container name).

Wait, looking at the kiwi-browser entry more carefully:
- `name`: `"ce7d9a5d4d8a88f703df2e86d89ddaf3099147fd0ff6c1b8d2df103e0ccd1639"` — this looks like a hash or container ID
- No `port`, `scheme`, `index`, `icon` fields in the JSON — these come from Docker labels
- `status`: `"running"`

Actually, let me reconsider. The `"container"` type in `app-management.json` seems to be for containers that were auto-discovered by Docker events. The `name` field is the container ID. The gateway reads the Docker container labels to get port/scheme/icon etc. And `status` is updated automatically.

For `"v2app"` type, all the info comes from the JSON (including port, scheme, icon as a URL). But the `"v2app"` type also tries to match against the app store, which fails for custom apps.

So the best approach is likely:
1. Add proper `casaos.*` Docker labels to printvault container
2. Register printvault as `"container"` type with its container name/ID
3. Do the same for docmaster

But actually, wait. Let me look at docmaster's current labels again:
```
casaos.port: "3000"
casaos.index: "/"
casaos.scheme: "http"
casaos.title: "DocMaster"
casaos.icon: "http://localhost:3000/favicon.svg"
casaos.description: "Dokumentenverwaltung"
casaos.category: "Utilities"
```

These are already set! So why does docmaster still show "nicht unterstützt" when it's `"v2app"` type? Because `v2app` doesn't read these labels — `v2app` expects all the info to be in the JSON itself, and it also tries to find the app in the store using `x-casaos` extension. Since docmaster was installed via docker compose (not the app store), it doesn't have `x-casaos` extension.

So the solution is clear: change both to `"container"` type in `app-management.json`, with the container name matching the actual container name or full ID.

Let me find the container IDs/names:

For docmaster:
- Container name is probably "docmaster" (from docker-compose service name)
- Full container ID can be found via `docker inspect`

For printvault:
- Need to find its container name/ID

Then I need to:
1. Update `app-management.json` to change both to `container` type
2. Make sure printvault has the casaos Docker labels
3. Restart `zimaos-app-management` service

Also, I should check the `printvault` container status. The docker inspect failed earlier (template error), so the container might not be running. Let me fix all of this.

Let me now figure out the right approach. I need to:

1. Check if printvault container is running
2. Get its container ID/name
3. Add proper Docker labels to printvault if missing
4. Update app-management.json
5. Restart app-management

Actually wait, I realize there might be more to investigate. Let me look at how the ZimaOS frontend detects and handles "container" vs "v2app" types. The message "Derzeit nicht unterstützt" likely comes from the frontend when:
- The app_type is not recognized, OR
- The required fields are missing

Looking at the working `kiwi-browser`, it has very few fields:
- `app_type`: "container"
- `name`: container ID hash
- `status`: "running"
- `title`

And the frontend reads Docker labels for the rest. So if I switch docmaster and printvault to "container" type, and they have proper Docker labels (which docmaster already has), they should work.

BUT — the `"container"` type might be reserved for auto-discovered containers managed by the Docker event watcher. The `name` field uses the full container ID (64-char hex string), not a friendly name.

Hmm, let me re-examine. For `kiwi-browser`:
```
"name": "ce7d9a5d4d8a88f703df2e86d89ddaf3099147fd0ff6c1b8d2df103e0ccd1639"
```
That's 64 hex chars = SHA256. That's definitely a container ID.

For docmaster, I'd need its Docker container ID. Same for printvault.

Let me just try this approach and see. I'll:
1. Get container IDs for both
2. Update app-management.json properly
3. Restart service
4. Test

sudo docker container ls --format '{{.ID}} {{.Names}}' | grep -E 'printvault|docmaster'

sudo docker inspect printvault --format '{{.Id}}' 2>/dev/null || echo "NO_CONTAINER"

sudo docker inspect docmaster --format '{{.Id}}' 2>/dev/null || echo "NO_CONTAINER"; sudo docker ps -a --filter name=docmaster --format '{{.ID}} {{.Names}} {{.Status}}'


Explanation: Let me check if there's a docker-compose for docmaster and printvault that might be overriding things. The printvault container exists but docmaster doesn't. Let me also check if docmaster is perhaps running as a compose project.

sudo docker ps -a --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' | grep -v "k8s_" | head -20

sudo docker compose -f /DATA/.media/HDD_1TB/DocMaster/docker-compose.yml ps 2>/dev/null || echo "NO_COMPOSE"

sudo docker compose -f /DATA/AppData/hermes/projects/printvault/docker-compose.yml ps 2>/dev/null || echo "NO_COMPOSE"


Output:
NAMES                             STATUS                      PORTS
PrintVault                        Up 7 minutes                0.0.0.0:3001->3001/tcp, :::3001->3001/tcp
audiobookshelf                    Up 21 minutes               0.0.0.0:13378->80/tcp, [::]:13378->80/tcp
kiwi-browser                      Up 21 minutes               0.0.0.0:30000->3000/tcp
DocMaster                         Up 21 minutes               0.0.0.0:3000->3000/tcp, :::3000->3000/tcp
openclaw                          Up 21 minutes (unhealthy)   0.0.0.0:18790->18790/tcp, :::18790->18790/tcp, 0.0.0.0:24190->18789/tcp, [::]:24190->18789/tcp
komga                             Up 21 minutes               0.0.0.0:25600->25600/tcp, :::25600->25600/tcp
plex                              Up 21 minutes
noble_andres-main_app-1           Up 21 minutes               0.0.0.0:8181->80/tcp, [::]:8181->80/tcp
breathtaking_maryann-main_app-1   Up 21 minutes               0.0.0.0:8765->3000/tcp, [::]:8765->3000/tcp
immich-server                     Up 21 minutes (healthy)     0.0.0.0:2283->2283/tcp, :::2283->2283/tcp
immich-machine-learning           Up 21 minutes (healthy)
immich-postgres                   Up 21 minutes (healthy)     5432/tcp
immich-redis                      Up 21 minutes (healthy)     6379/tcp
setupos                           Up 21 minutes               0.0.0.0:5051->80/tcp, [::]:5051->80/tcp


{"output": "NAME        IMAGE                 COMMAND                  SERVICE     CREATED       STATUS          PORTS\nDocMaster   docmaster-docmaster   \"docker-entrypoint.s…\"   docmaster   12 days ago   Up 21 minutes   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp", "exit_code": 0, "error": null}

[Subdirectory context discovered: .media/HDD_1TB/DocMaster/AGENTS.md]
<!-- BEGIN:nextjs-agent-rules -->
# This is NOT the Next.js you know

This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices.
<!-- END:nextjs-agent-rules -->


Output:
NAME         IMAGE        COMMAND                  SERVICE      CREATED         STATUS         PORTS
PrintVault   printvault   "uvicorn main:app --…"   printvault   7 minutes ago   Up 7 minutes   0.0.0.0:3001->3001/tcp, :::3001->3001/tcp


Explanation:
Now I understand the full picture:

1. PrintVault and DocMaster are running as Docker containers on ports 3001 and 3000 respectively.
2. The `app-management.json` has them as `"app_type": "v2app"` which means they're treated as "compose apps" that need to exist in the CasaOS app store catalog. That's why the error `"extension x-casaos not found"` appears — the system is looking for store metadata that doesn't exist for these local apps.
3. The `kiwi-browser` container is `"app_type": "container"` — this type doesn't require store metadata, it directly uses Docker labels to get the port, icon, scheme, etc.

The fix: Switch PrintVault and DocMaster from `"app_type": "v2app"` to `"app_type": "container"` in `app-management.json`, and add proper container data (port, scheme, index, icon, hostname) — just like the working `ce7d9a5d4d8a...` kiwi-browser entry.

But wait — I also need to check: are the Docker labels set on the containers? The gateway might read labels from the container directly. But the logs show the error is happening in `composeAppsWithStoreInfo` — this is specifically the v2app handling code. If we switch to "container" type, it should bypass that code path entirely.

Let me also check the `zimaos-app-management` service to see if there's a separate container-level registry vs the app-management.json.

sudo docker inspect PrintVault --format '{{json .Config.Labels}}' 2>&1 | python3 -m json.tool

sudo docker inspect DocMaster --format '{{json .Config.Labels}}' 2>&1 | python3 -m json.tool

sudo docker inspect kiwi-browser --format '{{json .Config.Labels}}' 2>&1 | python3 -m json.tool


Output:
{
    "casaos.category": "Utilities",
    "casaos.description": "STL-Bibliothek mit 3D-Vorschau",
    "casaos.hostname": "",
    "casaos.icon": "http://localhost:3001/icon.svg",
    "casaos.index": "/",
    "casaos.port": "3001",
    "casaos.scheme": "http",
    "casaos.title": "PrintVault",
    "com.docker.compose.config-hash": "40289779808ee0d1c10fba0da6367fe47bed2dbc46984d6546b33f9982d99c39",
    "com.docker.compose.container-number": "1",
    "com.docker.compose.depends_on": "",
    "com.docker.compose.image": "sha256:3466beece37e49e6247d06b59595b1079c8b497cd6a7fd962373bee0169e0214",
    "com.docker.compose.oneoff": "False",
    "com.docker.compose.project": "printvault",
    "com.docker.compose.project.config_files": "/var/lib/casaos/apps/PrintVault/docker-compose.yml",
    "com.docker.compose.project.working_dir": "/var/lib/casaos/apps/PrintVault",
    "com.docker.compose.service": "printvault",
    "com.docker.compose.version": "2.32.4"
}


Output:
{
    "casaos.category": "Utilities",
    "casaos.description": "Dokumentenverwaltung",
    "casaos.hostname": "",
    "casaos.icon": "http://localhost:3000/favicon.svg",
    "casaos.index": "/",
    "casaos.port": "3000",
    "casaos.scheme": "http",
    "casaos.title": "DocMaster",
    "com.docker.compose.config-hash": "fd36a38533ce8fef0f41bf076352cf9912a5f94d9cca35b08034474956742894",
    "com.docker.compose.container-number": "1",
    "com.docker.compose.depends_on": "",
    "com.docker.compose.image": "sha256:ebed80de66c21c89ceef9585ade48e18504ab2414eeb1aa3860e3b3e0e690144",
    "com.docker.compose.oneoff": "False",
    "com.docker.compose.project": "docmaster",
    "com.docker.compose.project.config_files": "/DATA/.media/HDD_1TB/DocMaster/docker-compose.yml",
    "com.docker.compose.project.working_dir": "/DATA/.media/HDD_1TB/DocMaster",
    "com.docker.compose.replace": "3f261897de2e8aeec3f215b3a0a6c5735922ac61d5a32b0c97e77ba0006b8d13",
    "com.docker.compose.service": "docmaster",
    "com.docker.compose.version": "2.32.4"
}


Now I see the full picture. The `app-management.json` reverted both entries to `v2app` (probably during reboot). The logs explicitly show the "Derzeit nicht unterstützt" cause:

```
"extension x-casaos not found", "composeAppID": "docmaster"
"extension x-casaos not found", "composeAppID": "printvault"
```

`v2app` expects apps from the app store — our custom containers aren't there. `kiwi-browser` works as `container` type. Let me fix both entries properly.

Explanation:
Now I understand the full picture clearly. Let me summarize:

1. `app-management.json` has both `docmaster` and `printvault` as `"app_type": "v2app"`
2. The logs show `error: "extension x-casaos not found"` for both — this is the "Derzeit nicht unterstützt" error
3. `kiwi-browser` works because it's `"app_type": "container"` — the app management finds it via Docker container
4. Both containers have proper `casaos.*` labels set

The fix: I need to change both entries in `app-management.json` from `v2app` to `container`, AND ensure they have proper hostname/icon/port/scheme/index fields like the kiwi-browser entry. But kiwi-browser has a hash-based name... Let me look at what the container-type entries need.

Looking at the kiwi-browser entry in app-management.json:
```json
{
    "app_type": "container",
    "image": "kiwi-browser:v2",
    "is_uncontrolled": false,
    "name": "ce7d9a5d4d8a88f703df2e86d89ddaf3099147fd0ff6c1b8d2df103e0ccd1639",
    "status": "running",
    "title": {
        "en_US": "kiwi-browser"
    }
}
```

And looking at the CasaOS docs/behavior — when `app_type` is `container`, the management service discovers containers via Docker (looking at labels) and auto-populates the entry. The `name` field is the container ID.

But the issue might be more fundamental. Let me look at how CasaOS actually registers apps. For `v2app` type, they're expected to come from the app store. For custom containers, they should be `container` type.

But there's a complication: the app-management.json shows these as `v2app` type, and the app-management service is trying to look them up in the store ("extension x-casaos not found"). When that fails, it shows "Derzeit nicht unterstützt".

The safest fix: change both to `container` type, but we need to set this correctly. Let me also check what endpoint the frontend uses...

Actually, let me take a different approach. The real issue might be simpler than I think. The `app-management.json` got reverted when the system restarted. I need to:

1. Fix the JSON once more
2. Restart zimaos-app-management
3. Then verify it sticks

Let me also check if there's an API endpoint to update these properly rather than raw JSON editing.

sudo python3 << 'PYEOF'
import json

with open('/etc/casaos/app-management.json', 'r') as f:
    apps = json.load(f)

for app in apps:
    name = app.get('name', '')
    if name == 'printvault':
        print(f"Fixing printvault: v2app -> container")
        app['app_type'] = 'container'
        app['hostname'] = ''
        app['icon'] = 'http://localhost:3001/icon.svg'
        app['port'] = '3001'
        app['scheme'] = 'http'
        app['index'] = '/'
        app.pop('image', None)
        app.pop('store_app_id', None)
        app.pop('author_type', None)
    elif name == 'docmaster':
        print(f"Fixing docmaster: v2app -> container")
        app['app_type'] = 'container'
        app['hostname'] = ''
        app['icon'] = 'http://localhost:3000/favicon.svg'
        app['port'] = '3000'
        app['scheme'] = 'http'
        app['index'] = '/'
        app.pop('image', None)
        app.pop('store_app_id', None)
        app.pop('author_type', None)

# Write back
with open('/etc/casaos/app-management.json', 'w') as f:
    json.dump(apps, f, indent=2)
print("Done. Updated app-management.json")
PYEOF


Output:
Fixing docmaster: v2app -> container
Fixing printvault: v2app -> container
Done. Updated app-management.json


Explanation: Now I need to restart the app-management service to pick up the changes, then verify.

sudo systemctl restart zimaos-app-management && sleep 3 && sudo journalctl -u zimaos-app-management --since "5 sec ago" --no-pager 2>&1 | grep -E "error|Error|started|Starting|printvault|docmaster|app_type" | head -10


Output:
May 17 22:24:42 ZimaOS systemd[1]: Starting ZimaOS App Management Service...
May 17 22:24:43 ZimaOS zimaos-app-management[41335]: 2026-05-17T22:24:43.612+0200        error        failed to open file        {"func": "main.patchZimaOSAI.func1", "file": "/home/runner/work/ZimaOS-AppManagement/ZimaOS-AppManagement/main.go", "line": 395, "error": "open /usr/bin/_internal/ctranslate2.libs/libctranslate2-bc15bf3f.so.4.5.0: no such file or directory"}
May 17 22:24:44 ZimaOS zimaos-app-management[41335]: 2026-05-17T22:24:44.453+0200        info        failed to parse compose app - contact the contributor of this app to fix it        {"func": "service.BuildCatalog.func1", "file": "/home/runner/work/ZimaOS-AppManagement/ZimaOS-AppManagement/service/appstore.go", "line": 657, "error": "validating : services.psitransfer.ports.0.target must be a integer", "composeFile": "/var/lib/casaos/appstore/cdn.jsdelivr.net/8b38a056ac152e214b04276d9051b44e/build/sysroot/var/lib/casaos/appstore/default.new/Apps/PsiTransfer/docker-compose.yml"}
May 17 22:24:45 ZimaOS zimaos-app-management[41335]: 2026-05-17T22:24:45.198+0200        info        failed to parse compose app - contact the contributor of this app to fix it        {"func": "service.BuildCatalog.func1", "file": "/home/runner/work/ZimaOS-AppManagement/ZimaOS-AppManagement/service/appstore.go", "line": 657, "error": "validating : services.big-bear-ayon.healthcheck.retries must be a number", "composeFile": "/var/lib/casaos/appstore/github.com/2a1238d53212bfce4e8f861dcb8ef3fe/big-bear-casaos-master/Apps/ayon/docker-compose.yml"}


No errors about printvault/docmaster this time. Now let me verify the gateway picks up the changes:

Explanation: The app-management service restarted without errors related to printvault/docmaster. Let me verify the fix is applied and trigger a gateway reconfiguration.

sudo cat /etc/casaos/app-management.json | python3 -c "
import json,sys
apps=json.load(sys.stdin)
for a in apps:
    if a['name'] in ('printvault','docmaster'):
        print(f\"{a['name']}: type={a['app_type']}, port={a.get('port')}, icon={a.get('icon','N/A')[:50]}\")
"

sudo systemctl restart zimaos-gateway && sleep 2 && sudo journalctl -u zimaos-gateway --since "3 sec ago" --no-pager 2>&1 | tail -5


Output:
docmaster: type=container, port=3000, icon=http://localhost:3000/favicon.svg
printvault: type=container, port=3001, icon=http://localhost:3001/icon.svg


Output:
May 17 22:24:55 ZimaOS zimaos-gateway[41822]: 2026/05/17 20:24:55.872        WARN        http        HTTP/2 skipped because it requires TLS        {"network": "tcp", "addr": ":80"}
May 17 22:24:55 ZimaOS zimaos-gateway[41822]: 2026/05/17 20:24:55.872        WARN        http        HTTP/3 skipped because it requires TLS        {"network": "tcp", "addr": ":80"}
May 17 22:24:55 ZimaOS zimaos-gateway[41822]: 2026/05/17 20:24:55.872        INFO        http.log        server running        {"name": "srv0", "protocols": ["h1", "h2", "h3"]}
May 17 22:24:55 ZimaOS zimaos-gateway[41822]: 2026-05-17T22:24:55.872+0200        info        Notified systemd that gateway is ready        {"func": "main.main", "file": "/home/runner/work/ZimaOS-Gateway/ZimaOS-Gateway/main.go", "line": 133}
May 17 22:24:55 ZimaOS systemd[1]: Started ZimaOS Gateway.


Explanation:
Let me analyze what's happening:

1. `app-management.json` now has both apps as `container` type with proper port/icon/index/scheme
2. Docker labels are set correctly on both containers
3. Both zimaos-app-management and zimaos-gateway have been restarted
4. No more "extension x-casaos not found" errors

The remaining question is whether the gateway actually routes to these containers. In CasaOS/ZimaOS, when apps are registered as `container` type, the gateway should create routes to the Docker containers. The `kiwi-browser` container works because it's also registered as `container` type.

But there's a subtlety - the gateway may need more than just `app-management.json`. The gateway reads this file via the app-management service, which then tells the gateway to configure routes. Let me check what routes are now configured:

Actually, I should just tell the user to test. The core issue was `v2app` type which requires app store extensions. We've fixed that. Let me check one more thing - can we access the apps through the gateway's proxy?

sudo curl -s --unix-socket /run/caddy-admin.sock http://localhost/config/ 2>&1 | python3 -c "
import json,sys
config = json.load(sys.stdin)
apps = config.get('apps', {})
http = apps.get('http', {})
servers = http.get('servers', {})
for srv_name, srv in servers.items():
    routes = srv.get('routes', [])
    for i, r in enumerate(routes):
        match = r.get('match', [])
        handle = r.get('handle', [])
        match_str = str(match)[:200]
        for h in handle:
            if h.get('handler') == 'reverse_proxy':
                ups = h.get('upstreams', [])
                if any(x in match_str for x in ['3001', '3000', 'printvault', 'docmaster', 'container', 'app']):
                    print(f'Route[{i}]: {match_str} -> {ups}')
" 2>&1


Output:
Route[3]: [{'path': ['/v1/app-categories/*']}] -> [{'dial': '127.0.0.1:38495'}]
Route[4]: [{'path': ['/v2/app_management/*']}] -> [{'dial': '127.0.0.1:38495'}]
Route[8]: [{'path': ['/v1/container/*']}] -> [{'dial': '127.0.0.1:38495'}]
Route[24]: [{'path': ['/v1/apps/*']}] -> [{'dial': '127.0.0.1:38495'}]


Now let me verify the app grid actually returns these properly:

Explanation:
Let me analyze what's happening. The config fix is in place - both apps are now `container` type properly. The services were restarted. But the Caddy config doesn't show individual routes for PrintVault/DocMaster because those are dynamically resolved by the app-management service, not static Caddy routes.

The key insight is: the `container` type apps are handled differently than `v2app`. With `container` type, the gateway uses the Docker labels (`casaos.*`) to build the iframe URL. The `v2app` type tries to look up the app in the app store and fails with "extension x-casaos not found".

Now I need to verify the full picture works. Let me check if the app-management service can see the containers properly. Let me also look at how the frontend renders these - the "Derzeit nicht unterstützt" message comes from the frontend JS when it can't determine how to render an app.

Let me dig into the frontend JS to understand what triggers the "Derzeit nicht unterstützt" message precisely.

Actually, the logs already showed the error clearly:
```
"error": "extension x-casaos not found", "composeAppID": "printvault"
"error": "extension x-casaos not found", "composeAppID": "docmaster"
```

This was when they were `v2app` type. Now they're `container` type. The service was restarted. Let me verify the app grid endpoint now returns them properly.

Let me try hitting the actual endpoint the frontend uses.

sudo curl -s http://localhost:38495/v2/app_management/web/appgrid 2>&1 | python3 -c "
import json,sys
data = json.load(sys.stdin)
items = data.get('data', data) if isinstance(data, dict) else data
if isinstance(items, dict):
    items = items.get('items', [])
for item in items:
    name = item.get('name', item.get('title', {}).get('en_US', '?'))
    atype = item.get('app_type', '?')
    if name in ('printvault', 'docmaster', 'PrintVault', 'DocMaster') or atype == 'container':
        print(f'{name}: type={atype} port={item.get(\"port\")} scheme={item.get(\"scheme\")} index={item.get(\"index\")}')
" 2>&1


Output:
docmaster: type=v2app port=None scheme=None index=None
printvault: type=v2app port=None scheme=None index=None
ce7d9a5d4d8a88f703df2e86d89ddaf3099147fd0ff6c1b8d2df103e0ccd1639: type=container port=None scheme=None index=None


The API still shows `v2app` despite the file being updated — the app-management service is caching. Let me force a full restart:

Explanation:
The app grid API still shows `v2app` for docmaster and printvault, with no port/scheme/index. This is strange because I just wrote to the file. Maybe the app-management service caches this data in memory and didn't reload from the file on restart?

Let me check if the file was actually saved correctly and if there's a mechanism to force reload.

sudo systemctl stop zimaos-app-management && sleep 2 && sudo cat /etc/casaos/app-management.json | python3 -c "
import json,sys
apps=json.load(sys.stdin)
for a in apps:
    if a['name'] in ('printvault','docmaster'):
        print(json.dumps(a, indent=2))
"


Output:
{
  "app_type": "v2app",
  "author_type": "unknown",
  "is_uncontrolled": false,
  "name": "docmaster",
  "title": {
    "en_US": "docmaster"
  }
}
{
  "app_type": "v2app",
  "author_type": "unknown",
  "is_uncontrolled": false,
  "name": "printvault",
  "title": {
    "en_US": "printvault"
  }
}


Der Service überschreibt meine Änderungen! Das ist das Kernproblem. `zimaos-app-management` hat eine interne Datenbank und schreibt beim Stop/Start die Datei aus seinem eigenen State zurück. Mal schauen, wo die echte Quelle liegt:

Explanation:
The file got REVERTED AGAIN. The app-management service is overwriting my changes. This is the key problem — the service must be recreating the file from its own internal state on startup/stop. I need to find where the real source of truth is. Let me search for a database or configuration source that zimaos-app-management uses.

Also note: the printvault container has compose labels showing it was started from `/var/lib/casaos/apps/PrintVault/docker-compose.yml`. This means CasaOS itself is managing the container, and likely has its own internal database.

Let me search for sqlite databases or config files that the app management service uses to store app info.

Also, I notice the compose labels for printvault say the project config is at `/var/lib/casaos/apps/PrintVault/docker-compose.yml` — this might mean CasaOS recognized the container as a compose project and registered it as "v2app". I need to update the compose labels or find CasaOS's database.

sudo find /var/lib/casaos -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" 2>/dev/null

sudo ls -la /var/lib/casaos/ 2>/dev/null

sudo find /var/lib/casaos -type f -name "*app*" 2>/dev/null | head -20


Output:
/var/lib/casaos/files.db
/var/lib/casaos/db/user.db
/var/lib/casaos/db/zimaos.db
/var/lib/casaos/db/message-bus.db
/var/lib/casaos/db/local-storage.db


Output:
total 41460
drwxr-xr-x  9 root root     4096 May 17 22:02 .
drwxr-xr-x 28 root root      580 May 17 22:02 ..
drwxrwxrwx  2 root root     4096 Apr 28 10:17 1
drwxr-xr-x 18 root root     4096 May 17 22:12 apps
drwxr-xr-x  5 root root     4096 Apr 13 01:30 appstore
-rw-r--r--  1 root root       52 Apr 28 10:18 baseinfo.conf
drwxr-xr-x  2 root root     4096 Apr 13 01:24 ca
drwxrwxrwx  2 root root     4096 Apr 12 23:37 customization
drwxrwxrwx  2 root root     4096 May 17 22:19 db
-rw-r--r--  1 root root   421888 May 17 18:34 files.db
-rw-r--r--  1 root root    32768 May 17 22:02 files.db-shm
-rw-r--r--  1 root root    16512 May 17 22:02 files.db-wal
-rw-r--r--  1 root root        0 Apr 13 01:24 rclone.conf
-rwxrwxrwx  1 root root 20971520 Apr 13 01:30 .spacer
-rwxr-xr-x  1 root root 20971520 May 17 22:02 spacer
drwxr-xr-x  2 root root     4096 Apr 13 01:24 ssl


Explanation: The `app-management.json` is being overwritten by the service. Let me check the SQLite database.

sudo sqlite3 /var/lib/casaos/db/zimaos.db ".tables" 2>&1


Output: schema_migrations  settings


Output:
app_order.json
icewhale_community_state
link.json
loginScreen.jpg
new_app_ids.json
system.json
tips_state.json
wallpaper.jpg
wallpaper.json
widgets_config.json


Explanation:
The zimaos.db doesn't have app-related tables. Let me check the app grid API more carefully. The problem is that the service reverted the changes when I stopped it. Let me try a different approach — modify the file while the service is running, then trigger a reconfiguration without stopping.

Also let me look at how CasaOS registers compose apps. Each app in `/var/lib/casaos/apps/PrintVault/` should have its own directory with compose file and info. Let me check if there's something there.

sudo ls -la /var/lib/casaos/apps/PrintVault/ 2>/dev/null; echo "---"; sudo ls -la /var/lib/casaos/apps/DocMaster/ 2>/dev/null

sudo cat /var/lib/casaos/apps/PrintVault/docker-compose.yml 2>/dev/null; echo "---"; sudo ls /var/lib/casaos/apps/DocMaster/ 2>/dev/null


Output:
total 12
drwxr-xr-x  2 root root 4096 May 17 22:13 .
drwxr-xr-x 18 root root 4096 May 17 22:12 ..
-rw-r--r--  1 root root  553 May 17 22:16 docker-compose.yml
---


Output:
name: printvault
services:
  printvault:
    container_name: PrintVault
    image: printvault
    network_mode: bridge
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - /media/HDD_1TB/STL_Bibliothek:/data
    environment:
      - PORT=3001
    labels:
      casaos.title: PrintVault
      casaos.icon: http://localhost:3001/icon.svg
      casaos.port: "3001"
      casaos.scheme: http
      casaos.index: /
      casaos.hostname: ""
      casaos.category: Utilities
      casaos.description: STL-Bibliothek mit 3D-Vorschau
---


Explanation:
The docker-compose.yml for PrintVault looks good — it has all necessary labels. Now I need to find where casaos stores its app management data besides just the compose file. Let me check the docmaster compose file and the casaos sqlite database.

The key insight: the `app-management.json` file is reverted by the service because it's regenerated from Docker Compose files in `/var/lib/casaos/apps/`. The service scans those compose files and builds the app-management.json. When it doesn't find an `x-casaos` extension in the compose file, it falls back to `v2app` type.

The working container (kiwi-browser) has app_type "container" because it's NOT from the app store — it was likely added manually. Let me find how the database truly stores these.

Wait — I need to also check if there's a `compose` extension being read. The error `extension x-casaos not found` in the logs means the service is scanning compose files and looking for `x-casaos` extension data in them. When that's missing, it shows as unsupported.

The fix: I need to set up the compose extension correctly, OR I need to find where the real configuration is stored (likely the SQLite db). Let me try adding the `x-casaos` extension to the compose files.

sudo ls /var/lib/casaos/apps/DocMaster/ 2>/dev/null && sudo cat /var/lib/casaos/apps/DocMaster/docker-compose.yml 2>/dev/null || echo "No DocMaster in casaos apps dir"


Output:
name: printvault
services:
  printvault:
    container_name: PrintVault
    image: printvault
    network_mode: bridge
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - /media/HDD_1TB/STL_Bibliothek:/data
    environment:
      - PORT=3001
    labels:
      casaos.title: PrintVault
      casaos.icon: http://localhost:3001/icon.svg
      casaos.port: "3001"
      casaos.scheme: http
      casaos.index: /
      casaos.hostname: ""
      casaos.category: Utilities
      casaos.description: STL-Bibliothek mit 3D-Vorschau


Output: No DocMaster in casaos apps dir