paskia 0.10.0__py3-none-any.whl → 0.10.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. paskia/_version.py +2 -2
  2. paskia/bootstrap.py +8 -7
  3. paskia/db/__init__.py +2 -0
  4. paskia/db/background.py +5 -8
  5. paskia/db/operations.py +17 -0
  6. paskia/db/structs.py +3 -2
  7. paskia/fastapi/__main__.py +21 -13
  8. paskia/fastapi/authz.py +8 -1
  9. paskia/fastapi/mainapp.py +6 -4
  10. paskia/fastapi/user.py +22 -0
  11. paskia/frontend-build/auth/admin/index.html +7 -6
  12. paskia/frontend-build/auth/assets/AccessDenied-CVQZxSIL.css +1 -0
  13. paskia/frontend-build/auth/assets/AccessDenied-Licr0tqA.js +8 -0
  14. paskia/frontend-build/auth/assets/{RestrictedAuth-BOdNrlQB.css → RestrictedAuth-0MFeNWS2.css} +1 -1
  15. paskia/frontend-build/auth/assets/{RestrictedAuth-BSusdAfp.js → RestrictedAuth-DWKMTEV3.js} +1 -1
  16. paskia/frontend-build/auth/assets/_plugin-vue_export-helper-DJsHCwvl.js +33 -0
  17. paskia/frontend-build/auth/assets/_plugin-vue_export-helper-DUBf8-iM.css +1 -0
  18. paskia/frontend-build/auth/assets/{admin-CmNtuH3s.css → admin-B1H4YqM_.css} +1 -1
  19. paskia/frontend-build/auth/assets/admin-CZKsX1OI.js +1 -0
  20. paskia/frontend-build/auth/assets/{auth-BKq4T2K2.css → auth-B4EpDxom.css} +1 -1
  21. paskia/frontend-build/auth/assets/auth-Pe-PKe8b.js +1 -0
  22. paskia/frontend-build/auth/assets/forward-BC0p23CH.js +1 -0
  23. paskia/frontend-build/auth/assets/{pow-2N9bxgAo.js → pow-DUr-T9XX.js} +1 -1
  24. paskia/frontend-build/auth/assets/reset-CkY9h28U.js +1 -0
  25. paskia/frontend-build/auth/assets/restricted-C9cJlHkd.js +1 -0
  26. paskia/frontend-build/auth/assets/theme-C2WysaSw.js +1 -0
  27. paskia/frontend-build/auth/index.html +8 -7
  28. paskia/frontend-build/auth/restricted/index.html +7 -6
  29. paskia/frontend-build/int/forward/index.html +6 -6
  30. paskia/frontend-build/int/reset/index.html +3 -3
  31. paskia/frontend-build/paskia.webp +0 -0
  32. paskia/util/__init__.py +0 -0
  33. paskia/util/apistructs.py +110 -0
  34. paskia/util/frontend.py +75 -0
  35. paskia/util/hostutil.py +75 -0
  36. paskia/util/htmlutil.py +47 -0
  37. paskia/util/passphrase.py +20 -0
  38. paskia/util/permutil.py +43 -0
  39. paskia/util/pow.py +45 -0
  40. paskia/util/querysafe.py +11 -0
  41. paskia/util/sessionutil.py +38 -0
  42. paskia/util/startupbox.py +103 -0
  43. paskia/util/timeutil.py +47 -0
  44. paskia/util/useragent.py +10 -0
  45. paskia/util/userinfo.py +63 -0
  46. paskia/util/vitedev.py +71 -0
  47. paskia/util/wordlist.py +54 -0
  48. {paskia-0.10.0.dist-info → paskia-0.10.2.dist-info}/METADATA +14 -11
  49. paskia-0.10.2.dist-info/RECORD +78 -0
  50. paskia/frontend-build/auth/assets/AccessDenied-C29NZI95.css +0 -1
  51. paskia/frontend-build/auth/assets/AccessDenied-DAdzg_MJ.js +0 -12
  52. paskia/frontend-build/auth/assets/_plugin-vue_export-helper-D2l53SUz.js +0 -49
  53. paskia/frontend-build/auth/assets/_plugin-vue_export-helper-DYJ24FZK.css +0 -1
  54. paskia/frontend-build/auth/assets/admin-BeFvGyD6.js +0 -1
  55. paskia/frontend-build/auth/assets/auth-DvHf8hgy.js +0 -1
  56. paskia/frontend-build/auth/assets/forward-C86Jm_Uq.js +0 -1
  57. paskia/frontend-build/auth/assets/reset-D71FG0VL.js +0 -1
  58. paskia/frontend-build/auth/assets/restricted-CW0drE_k.js +0 -1
  59. paskia-0.10.0.dist-info/RECORD +0 -60
  60. {paskia-0.10.0.dist-info → paskia-0.10.2.dist-info}/WHEEL +0 -0
  61. {paskia-0.10.0.dist-info → paskia-0.10.2.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,33 @@
1
+ (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(r){if(r.ep)return;r.ep=!0;const i=n(r);fetch(r.href,i)}})();function Qn(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const K={},ut=[],Te=()=>{},cr=()=>!1,dn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),es=e=>e.startsWith("onUpdate:"),Q=Object.assign,ts=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ci=Object.prototype.hasOwnProperty,U=(e,t)=>Ci.call(e,t),R=Array.isArray,ft=e=>Kt(e)==="[object Map]",yt=e=>Kt(e)==="[object Set]",Ts=e=>Kt(e)==="[object Date]",P=e=>typeof e=="function",q=e=>typeof e=="string",pe=e=>typeof e=="symbol",k=e=>e!==null&&typeof e=="object",ar=e=>(k(e)||P(e))&&P(e.then)&&P(e.catch),ur=Object.prototype.toString,Kt=e=>ur.call(e),Oi=e=>Kt(e).slice(8,-1),fr=e=>Kt(e)==="[object Object]",hn=e=>q(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,At=Qn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),pn=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Ii=/-\w/g,We=pn(e=>e.replace(Ii,t=>t.slice(1).toUpperCase())),Pi=/\B([A-Z])/g,Je=pn(e=>e.replace(Pi,"-$1").toLowerCase()),dr=pn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Rn=pn(e=>e?`on${dr(e)}`:""),Be=(e,t)=>!Object.is(e,t),Xt=(e,...t)=>{for(let n=0;n<e.length;n++)e[n](...t)},hr=(e,t,n,s=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},gn=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let As;const mn=()=>As||(As=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ns(e){if(R(e)){const t={};for(let n=0;n<e.length;n++){const s=e[n],r=q(s)?Fi(s):ns(s);if(r)for(const i in r)t[i]=r[i]}return t}else if(q(e)||k(e))return e}const Mi=/;(?![^(]*\))/g,Ni=/:([^]+)/,Di=/\/\*[^]*?\*\//g;function Fi(e){const t={};return e.replace(Di,"").split(Mi).forEach(n=>{if(n){const s=n.split(Ni);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ss(e){let t="";if(q(e))t=e;else if(R(e))for(let n=0;n<e.length;n++){const s=ss(e[n]);s&&(t+=s+" ")}else if(k(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}const Ui="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Li=Qn(Ui);function pr(e){return!!e||e===""}function Ki(e,t){if(e.length!==t.length)return!1;let n=!0;for(let s=0;n&&s<e.length;s++)n=it(e[s],t[s]);return n}function it(e,t){if(e===t)return!0;let n=Ts(e),s=Ts(t);if(n||s)return n&&s?e.getTime()===t.getTime():!1;if(n=pe(e),s=pe(t),n||s)return e===t;if(n=R(e),s=R(t),n||s)return n&&s?Ki(e,t):!1;if(n=k(e),s=k(t),n||s){if(!n||!s)return!1;const r=Object.keys(e).length,i=Object.keys(t).length;if(r!==i)return!1;for(const o in e){const l=e.hasOwnProperty(o),c=t.hasOwnProperty(o);if(l&&!c||!l&&c||!it(e[o],t[o]))return!1}}return String(e)===String(t)}function rs(e,t){return e.findIndex(n=>it(n,t))}const gr=e=>!!(e&&e.__v_isRef===!0),ji=e=>q(e)?e:e==null?"":R(e)||k(e)&&(e.toString===ur||!P(e.toString))?gr(e)?ji(e.value):JSON.stringify(e,mr,2):String(e),mr=(e,t)=>gr(t)?mr(e,t.value):ft(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Cn(s,i)+" =>"]=r,n),{})}:yt(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Cn(n))}:pe(t)?Cn(t):k(t)&&!R(t)&&!fr(t)?String(t):t,Cn=(e,t="")=>{var n;return pe(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let z;class br{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=z,!t&&z&&(this.index=(z.scopes||(z.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].pause();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].resume();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].resume()}}run(t){if(this._active){const n=z;try{return z=this,t()}finally{z=n}}}on(){++this._on===1&&(this.prevScope=z,z=this)}off(){this._on>0&&--this._on===0&&(z=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n<s;n++)this.effects[n].stop();for(this.effects.length=0,n=0,s=this.cleanups.length;n<s;n++)this.cleanups[n]();if(this.cleanups.length=0,this.scopes){for(n=0,s=this.scopes.length;n<s;n++)this.scopes[n].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){const r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.parent=void 0}}}function jc(e){return new br(e)}function Hi(){return z}function Hc(e,t=!1){z&&z.cleanups.push(e)}let $;const On=new WeakSet;class yr{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,z&&z.active&&z.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,On.has(this)&&(On.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||wr(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,Rs(this),vr(this);const t=$,n=he;$=this,he=!0;try{return this.fn()}finally{Er(this),$=t,he=n,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)ls(t);this.deps=this.depsTail=void 0,Rs(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?On.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Hn(this)&&this.run()}get dirty(){return Hn(this)}}let _r=0,Rt,Ct;function wr(e,t=!1){if(e.flags|=8,t){e.next=Ct,Ct=e;return}e.next=Rt,Rt=e}function is(){_r++}function os(){if(--_r>0)return;if(Ct){let t=Ct;for(Ct=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Rt;){let t=Rt;for(Rt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function vr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Er(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),ls(s),$i(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Hn(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Sr(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Sr(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Nt)||(e.globalVersion=Nt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Hn(e))))return;e.flags|=2;const t=e.dep,n=$,s=he;$=e,he=!0;try{vr(e);const r=e.fn(e._value);(t.version===0||Be(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{$=n,he=s,Er(e),e.flags&=-3}}function ls(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)ls(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function $i(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let he=!0;const xr=[];function Ne(){xr.push(he),he=!1}function De(){const e=xr.pop();he=e===void 0?!0:e}function Rs(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=$;$=void 0;try{t()}finally{$=n}}}let Nt=0;class ki{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class cs{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!$||!he||$===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==$)n=this.activeLink=new ki($,this),$.deps?(n.prevDep=$.depsTail,$.depsTail.nextDep=n,$.depsTail=n):$.deps=$.depsTail=n,Tr(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=$.depsTail,n.nextDep=void 0,$.depsTail.nextDep=n,$.depsTail=n,$.deps===n&&($.deps=s)}return n}trigger(t){this.version++,Nt++,this.notify(t)}notify(t){is();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{os()}}}function Tr(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Tr(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const sn=new WeakMap,nt=Symbol(""),$n=Symbol(""),Dt=Symbol("");function X(e,t,n){if(he&&$){let s=sn.get(e);s||sn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new cs),r.map=s,r.key=n),r.track()}}function Ie(e,t,n,s,r,i){const o=sn.get(e);if(!o){Nt++;return}const l=c=>{c&&c.trigger()};if(is(),t==="clear")o.forEach(l);else{const c=R(e),d=c&&hn(n);if(c&&n==="length"){const f=Number(s);o.forEach((p,E)=>{(E==="length"||E===Dt||!pe(E)&&E>=f)&&l(p)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),d&&l(o.get(Dt)),t){case"add":c?d&&l(o.get("length")):(l(o.get(nt)),ft(e)&&l(o.get($n)));break;case"delete":c||(l(o.get(nt)),ft(e)&&l(o.get($n)));break;case"set":ft(e)&&l(o.get(nt));break}}os()}function Vi(e,t){const n=sn.get(e);return n&&n.get(t)}function ot(e){const t=F(e);return t===e?t:(X(t,"iterate",Dt),fe(e)?t:t.map(ge))}function bn(e){return X(e=F(e),"iterate",Dt),e}function He(e,t){return Fe(e)?pt(st(e)?ge(t):t):ge(t)}const Bi={__proto__:null,[Symbol.iterator](){return In(this,Symbol.iterator,e=>He(this,e))},concat(...e){return ot(this).concat(...e.map(t=>R(t)?ot(t):t))},entries(){return In(this,"entries",e=>(e[1]=He(this,e[1]),e))},every(e,t){return Ce(this,"every",e,t,void 0,arguments)},filter(e,t){return Ce(this,"filter",e,t,n=>n.map(s=>He(this,s)),arguments)},find(e,t){return Ce(this,"find",e,t,n=>He(this,n),arguments)},findIndex(e,t){return Ce(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ce(this,"findLast",e,t,n=>He(this,n),arguments)},findLastIndex(e,t){return Ce(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ce(this,"forEach",e,t,void 0,arguments)},includes(...e){return Pn(this,"includes",e)},indexOf(...e){return Pn(this,"indexOf",e)},join(e){return ot(this).join(e)},lastIndexOf(...e){return Pn(this,"lastIndexOf",e)},map(e,t){return Ce(this,"map",e,t,void 0,arguments)},pop(){return St(this,"pop")},push(...e){return St(this,"push",e)},reduce(e,...t){return Cs(this,"reduce",e,t)},reduceRight(e,...t){return Cs(this,"reduceRight",e,t)},shift(){return St(this,"shift")},some(e,t){return Ce(this,"some",e,t,void 0,arguments)},splice(...e){return St(this,"splice",e)},toReversed(){return ot(this).toReversed()},toSorted(e){return ot(this).toSorted(e)},toSpliced(...e){return ot(this).toSpliced(...e)},unshift(...e){return St(this,"unshift",e)},values(){return In(this,"values",e=>He(this,e))}};function In(e,t,n){const s=bn(e),r=s[t]();return s!==e&&!fe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const Wi=Array.prototype;function Ce(e,t,n,s,r,i){const o=bn(e),l=o!==e&&!fe(e),c=o[t];if(c!==Wi[t]){const p=c.apply(e,i);return l?ge(p):p}let d=n;o!==e&&(l?d=function(p,E){return n.call(this,He(e,p),E,e)}:n.length>2&&(d=function(p,E){return n.call(this,p,E,e)}));const f=c.call(o,d,s);return l&&r?r(f):f}function Cs(e,t,n,s){const r=bn(e);let i=n;return r!==e&&(fe(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,He(e,l),c,e)}),r[t](i,...s)}function Pn(e,t,n){const s=F(e);X(s,"iterate",Dt);const r=s[t](...n);return(r===-1||r===!1)&&yn(n[0])?(n[0]=F(n[0]),s[t](...n)):r}function St(e,t,n=[]){Ne(),is();const s=F(e)[t].apply(e,n);return os(),De(),s}const qi=Qn("__proto__,__v_isRef,__isVue"),Ar=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(pe));function Ji(e){pe(e)||(e=String(e));const t=F(this);return X(t,"has",e),t.hasOwnProperty(e)}class Rr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?so:Pr:i?Ir:Or).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=R(t);if(!r){let c;if(o&&(c=Bi[n]))return c;if(n==="hasOwnProperty")return Ji}const l=Reflect.get(t,n,G(t)?t:s);if((pe(n)?Ar.has(n):qi(n))||(r||X(t,"get",n),i))return l;if(G(l)){const c=o&&hn(n)?l:l.value;return r&&k(c)?Vn(c):c}return k(l)?r?Vn(l):us(l):l}}class Cr extends Rr{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];const o=R(t)&&hn(n);if(!this._isShallow){const d=Fe(i);if(!fe(s)&&!Fe(s)&&(i=F(i),s=F(s)),!o&&G(i)&&!G(s))return d||(i.value=s),!0}const l=o?Number(n)<t.length:U(t,n),c=Reflect.set(t,n,s,G(t)?t:r);return t===F(r)&&(l?Be(s,i)&&Ie(t,"set",n,s):Ie(t,"add",n,s)),c}deleteProperty(t,n){const s=U(t,n);t[n];const r=Reflect.deleteProperty(t,n);return r&&s&&Ie(t,"delete",n,void 0),r}has(t,n){const s=Reflect.has(t,n);return(!pe(n)||!Ar.has(n))&&X(t,"has",n),s}ownKeys(t){return X(t,"iterate",R(t)?"length":nt),Reflect.ownKeys(t)}}class Gi extends Rr{constructor(t=!1){super(!0,t)}set(t,n){return!0}deleteProperty(t,n){return!0}}const Yi=new Cr,zi=new Gi,Xi=new Cr(!0);const kn=e=>e,qt=e=>Reflect.getPrototypeOf(e);function Zi(e,t,n){return function(...s){const r=this.__v_raw,i=F(r),o=ft(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,d=r[e](...s),f=n?kn:t?pt:ge;return!t&&X(i,"iterate",c?$n:nt),Q(Object.create(d),{next(){const{value:p,done:E}=d.next();return E?{value:p,done:E}:{value:l?[f(p[0]),f(p[1])]:f(p),done:E}}})}}function Jt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Qi(e,t){const n={get(r){const i=this.__v_raw,o=F(i),l=F(r);e||(Be(r,l)&&X(o,"get",r),X(o,"get",l));const{has:c}=qt(o),d=t?kn:e?pt:ge;if(c.call(o,r))return d(i.get(r));if(c.call(o,l))return d(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&X(F(r),"iterate",nt),r.size},has(r){const i=this.__v_raw,o=F(i),l=F(r);return e||(Be(r,l)&&X(o,"has",r),X(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=F(l),d=t?kn:e?pt:ge;return!e&&X(c,"iterate",nt),l.forEach((f,p)=>r.call(i,d(f),d(p),o))}};return Q(n,e?{add:Jt("add"),set:Jt("set"),delete:Jt("delete"),clear:Jt("clear")}:{add(r){!t&&!fe(r)&&!Fe(r)&&(r=F(r));const i=F(this);return qt(i).has.call(i,r)||(i.add(r),Ie(i,"add",r,r)),this},set(r,i){!t&&!fe(i)&&!Fe(i)&&(i=F(i));const o=F(this),{has:l,get:c}=qt(o);let d=l.call(o,r);d||(r=F(r),d=l.call(o,r));const f=c.call(o,r);return o.set(r,i),d?Be(i,f)&&Ie(o,"set",r,i):Ie(o,"add",r,i),this},delete(r){const i=F(this),{has:o,get:l}=qt(i);let c=o.call(i,r);c||(r=F(r),c=o.call(i,r)),l&&l.call(i,r);const d=i.delete(r);return c&&Ie(i,"delete",r,void 0),d},clear(){const r=F(this),i=r.size!==0,o=r.clear();return i&&Ie(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Zi(r,e,t)}),n}function as(e,t){const n=Qi(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(U(n,r)&&r in s?n:s,r,i)}const eo={get:as(!1,!1)},to={get:as(!1,!0)},no={get:as(!0,!1)};const Or=new WeakMap,Ir=new WeakMap,Pr=new WeakMap,so=new WeakMap;function ro(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function io(e){return e.__v_skip||!Object.isExtensible(e)?0:ro(Oi(e))}function us(e){return Fe(e)?e:fs(e,!1,Yi,eo,Or)}function oo(e){return fs(e,!1,Xi,to,Ir)}function Vn(e){return fs(e,!0,zi,no,Pr)}function fs(e,t,n,s,r){if(!k(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=io(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function st(e){return Fe(e)?st(e.__v_raw):!!(e&&e.__v_isReactive)}function Fe(e){return!!(e&&e.__v_isReadonly)}function fe(e){return!!(e&&e.__v_isShallow)}function yn(e){return e?!!e.__v_raw:!1}function F(e){const t=e&&e.__v_raw;return t?F(t):e}function lo(e){return!U(e,"__v_skip")&&Object.isExtensible(e)&&hr(e,"__v_skip",!0),e}const ge=e=>k(e)?us(e):e,pt=e=>k(e)?Vn(e):e;function G(e){return e?e.__v_isRef===!0:!1}function $c(e){return co(e,!1)}function co(e,t){return G(e)?e:new ao(e,t)}class ao{constructor(t,n){this.dep=new cs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:F(t),this._value=n?t:ge(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||fe(t)||Fe(t);t=s?t:F(t),Be(t,n)&&(this._rawValue=t,this._value=s?t:ge(t),this.dep.trigger())}}function Mr(e){return G(e)?e.value:e}const uo={get:(e,t,n)=>t==="__v_raw"?e:Mr(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return G(r)&&!G(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Nr(e){return st(e)?e:new Proxy(e,uo)}function kc(e){const t=R(e)?new Array(e.length):{};for(const n in e)t[n]=ho(e,n);return t}class fo{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._raw=F(t);let r=!0,i=t;if(!R(t)||!hn(String(n)))do r=!yn(i)||fe(i);while(r&&(i=i.__v_raw));this._shallow=r}get value(){let t=this._object[this._key];return this._shallow&&(t=Mr(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&G(this._raw[this._key])){const n=this._object[this._key];if(G(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return Vi(this._raw,this._key)}}function ho(e,t,n){return new fo(e,t,n)}class po{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new cs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Nt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&$!==this)return wr(this,!0),!0}get value(){const t=this.dep.track();return Sr(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function go(e,t,n=!1){let s,r;return P(e)?s=e:(s=e.get,r=e.set),new po(s,r,n)}const Gt={},rn=new WeakMap;let Qe;function mo(e,t=!1,n=Qe){if(n){let s=rn.get(n);s||rn.set(n,s=[]),s.push(e)}}function bo(e,t,n=K){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,d=O=>r?O:fe(O)||r===!1||r===0?Pe(O,1):Pe(O);let f,p,E,x,C=!1,N=!1;if(G(e)?(p=()=>e.value,C=fe(e)):st(e)?(p=()=>d(e),C=!0):R(e)?(N=!0,C=e.some(O=>st(O)||fe(O)),p=()=>e.map(O=>{if(G(O))return O.value;if(st(O))return d(O);if(P(O))return c?c(O,2):O()})):P(e)?t?p=c?()=>c(e,2):e:p=()=>{if(E){Ne();try{E()}finally{De()}}const O=Qe;Qe=f;try{return c?c(e,3,[x]):e(x)}finally{Qe=O}}:p=Te,t&&r){const O=p,J=r===!0?1/0:r;p=()=>Pe(O(),J)}const ee=Hi(),D=()=>{f.stop(),ee&&ee.active&&ts(ee.effects,f)};if(i&&t){const O=t;t=(...J)=>{O(...J),D()}}let V=N?new Array(e.length).fill(Gt):Gt;const W=O=>{if(!(!(f.flags&1)||!f.dirty&&!O))if(t){const J=f.run();if(r||C||(N?J.some((Ke,me)=>Be(Ke,V[me])):Be(J,V))){E&&E();const Ke=Qe;Qe=f;try{const me=[J,V===Gt?void 0:N&&V[0]===Gt?[]:V,x];V=J,c?c(t,3,me):t(...me)}finally{Qe=Ke}}}else f.run()};return l&&l(W),f=new yr(p),f.scheduler=o?()=>o(W,!1):W,x=O=>mo(O,!1,f),E=f.onStop=()=>{const O=rn.get(f);if(O){if(c)c(O,4);else for(const J of O)J();rn.delete(f)}},t?s?W(!0):V=f.run():o?o(W.bind(null,!0),!0):f.run(),D.pause=f.pause.bind(f),D.resume=f.resume.bind(f),D.stop=D,D}function Pe(e,t=1/0,n){if(t<=0||!k(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,G(e))Pe(e.value,t,n);else if(R(e))for(let s=0;s<e.length;s++)Pe(e[s],t,n);else if(yt(e)||ft(e))e.forEach(s=>{Pe(s,t,n)});else if(fr(e)){for(const s in e)Pe(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Pe(e[s],t,n)}return e}function jt(e,t,n,s){try{return s?e(...s):e()}catch(r){_n(r,t,n)}}function Re(e,t,n,s){if(P(e)){const r=jt(e,t,n,s);return r&&ar(r)&&r.catch(i=>{_n(i,t,n)}),r}if(R(e)){const r=[];for(let i=0;i<e.length;i++)r.push(Re(e[i],t,n,s));return r}}function _n(e,t,n,s=!0){const r=t?t.vnode:null,{errorHandler:i,throwUnhandledErrorInProduction:o}=t&&t.appContext.config||K;if(t){let l=t.parent;const c=t.proxy,d=`https://vuejs.org/error-reference/#runtime-${n}`;for(;l;){const f=l.ec;if(f){for(let p=0;p<f.length;p++)if(f[p](e,c,d)===!1)return}l=l.parent}if(i){Ne(),jt(i,null,10,[e,c,d]),De();return}}yo(e,n,r,s,o)}function yo(e,t,n,s=!0,r=!1){if(r)throw e;console.error(e)}const se=[];let Ee=-1;const dt=[];let $e=null,lt=0;const Dr=Promise.resolve();let on=null;function Fr(e){const t=on||Dr;return e?t.then(this?e.bind(this):e):t}function _o(e){let t=Ee+1,n=se.length;for(;t<n;){const s=t+n>>>1,r=se[s],i=Ft(r);i<e||i===e&&r.flags&2?t=s+1:n=s}return t}function ds(e){if(!(e.flags&1)){const t=Ft(e),n=se[se.length-1];!n||!(e.flags&2)&&t>=Ft(n)?se.push(e):se.splice(_o(t),0,e),e.flags|=1,Ur()}}function Ur(){on||(on=Dr.then(Kr))}function wo(e){R(e)?dt.push(...e):$e&&e.id===-1?$e.splice(lt+1,0,e):e.flags&1||(dt.push(e),e.flags|=1),Ur()}function Os(e,t,n=Ee+1){for(;n<se.length;n++){const s=se[n];if(s&&s.flags&2){if(e&&s.id!==e.uid)continue;se.splice(n,1),n--,s.flags&4&&(s.flags&=-2),s(),s.flags&4||(s.flags&=-2)}}}function Lr(e){if(dt.length){const t=[...new Set(dt)].sort((n,s)=>Ft(n)-Ft(s));if(dt.length=0,$e){$e.push(...t);return}for($e=t,lt=0;lt<$e.length;lt++){const n=$e[lt];n.flags&4&&(n.flags&=-2),n.flags&8||n(),n.flags&=-2}$e=null,lt=0}}const Ft=e=>e.id==null?e.flags&2?-1:1/0:e.id;function Kr(e){try{for(Ee=0;Ee<se.length;Ee++){const t=se[Ee];t&&!(t.flags&8)&&(t.flags&4&&(t.flags&=-2),jt(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2))}}finally{for(;Ee<se.length;Ee++){const t=se[Ee];t&&(t.flags&=-2)}Ee=-1,se.length=0,Lr(),on=null,(se.length||dt.length)&&Kr()}}let Z=null,jr=null;function ln(e){const t=Z;return Z=e,jr=e&&e.type.__scopeId||null,t}function vo(e,t=Z,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&js(-1);const i=ln(t);let o;try{o=e(...r)}finally{ln(i),s._d&&js(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Vc(e,t){if(Z===null)return e;const n=Sn(Z),s=e.dirs||(e.dirs=[]);for(let r=0;r<t.length;r++){let[i,o,l,c=K]=t[r];i&&(P(i)&&(i={mounted:i,updated:i}),i.deep&&Pe(o),s.push({dir:i,instance:n,value:o,oldValue:void 0,arg:l,modifiers:c}))}return e}function Xe(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;o<r.length;o++){const l=r[o];i&&(l.oldValue=i[o].value);let c=l.dir[s];c&&(Ne(),Re(c,n,8,[e.el,l,e,t]),De())}}function Eo(e,t){if(re){let n=re.provides;const s=re.parent&&re.parent.provides;s===n&&(n=re.provides=Object.create(s)),n[e]=t}}function Zt(e,t,n=!1){const s=di();if(s||rt){let r=rt?rt._context.provides:s?s.parent==null||s.ce?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides:void 0;if(r&&e in r)return r[e];if(arguments.length>1)return n&&P(t)?t.call(s&&s.proxy):t}}function Bc(){return!!(di()||rt)}const So=Symbol.for("v-scx"),xo=()=>Zt(So);function Mn(e,t,n){return Hr(e,t,n)}function Hr(e,t,n=K){const{immediate:s,deep:r,flush:i,once:o}=n,l=Q({},n),c=t&&s||!t&&i!=="post";let d;if(Lt){if(i==="sync"){const x=xo();d=x.__watcherHandles||(x.__watcherHandles=[])}else if(!c){const x=()=>{};return x.stop=Te,x.resume=Te,x.pause=Te,x}}const f=re;l.call=(x,C,N)=>Re(x,f,C,N);let p=!1;i==="post"?l.scheduler=x=>{ce(x,f&&f.suspense)}:i!=="sync"&&(p=!0,l.scheduler=(x,C)=>{C?x():ds(x)}),l.augmentJob=x=>{t&&(x.flags|=4),p&&(x.flags|=2,f&&(x.id=f.uid,x.i=f))};const E=bo(e,t,l);return Lt&&(d?d.push(E):c&&E()),E}function To(e,t,n){const s=this.proxy,r=q(e)?e.includes(".")?$r(s,e):()=>s[e]:e.bind(s,s);let i;P(t)?i=t:(i=t.handler,n=t);const o=Ht(this),l=Hr(r,i.bind(s),n);return o(),l}function $r(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r<n.length&&s;r++)s=s[n[r]];return s}}const Ao=Symbol("_vte"),Ro=e=>e.__isTeleport,Co=Symbol("_leaveCb");function hs(e,t){e.shapeFlag&6&&e.component?(e.transition=t,hs(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function kr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}const cn=new WeakMap;function Ot(e,t,n,s,r=!1){if(R(e)){e.forEach((C,N)=>Ot(C,t&&(R(t)?t[N]:t),n,s,r));return}if(ht(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Ot(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Sn(s.component):s.el,o=r?null:i,{i:l,r:c}=e,d=t&&t.r,f=l.refs===K?l.refs={}:l.refs,p=l.setupState,E=F(p),x=p===K?cr:C=>U(E,C);if(d!=null&&d!==c){if(Is(t),q(d))f[d]=null,x(d)&&(p[d]=null);else if(G(d)){d.value=null;const C=t;C.k&&(f[C.k]=null)}}if(P(c))jt(c,l,12,[o,f]);else{const C=q(c),N=G(c);if(C||N){const ee=()=>{if(e.f){const D=C?x(c)?p[c]:f[c]:c.value;if(r)R(D)&&ts(D,i);else if(R(D))D.includes(i)||D.push(i);else if(C)f[c]=[i],x(c)&&(p[c]=f[c]);else{const V=[i];c.value=V,e.k&&(f[e.k]=V)}}else C?(f[c]=o,x(c)&&(p[c]=o)):N&&(c.value=o,e.k&&(f[e.k]=o))};if(o){const D=()=>{ee(),cn.delete(e)};D.id=-1,cn.set(e,D),ce(D,n)}else Is(e),ee()}}}function Is(e){const t=cn.get(e);t&&(t.flags|=8,cn.delete(e))}mn().requestIdleCallback;mn().cancelIdleCallback;const ht=e=>!!e.type.__asyncLoader,Vr=e=>e.type.__isKeepAlive;function Oo(e,t){Br(e,"a",t)}function Io(e,t){Br(e,"da",t)}function Br(e,t,n=re){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(wn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)Vr(r.parent.vnode)&&Po(s,t,n,r),r=r.parent}}function Po(e,t,n,s){const r=wn(t,e,s,!0);Wr(()=>{ts(s[t],r)},n)}function wn(e,t,n=re,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{Ne();const l=Ht(n),c=Re(t,n,e,o);return l(),De(),c});return s?r.unshift(i):r.push(i),i}}const Le=e=>(t,n=re)=>{(!Lt||e==="sp")&&wn(e,(...s)=>t(...s),n)},Mo=Le("bm"),No=Le("m"),Do=Le("bu"),Fo=Le("u"),Uo=Le("bum"),Wr=Le("um"),Lo=Le("sp"),Ko=Le("rtg"),jo=Le("rtc");function Ho(e,t=re){wn("ec",e,t)}const $o=Symbol.for("v-ndc");function Wc(e,t,n,s){let r;const i=n,o=R(e);if(o||q(e)){const l=o&&st(e);let c=!1,d=!1;l&&(c=!fe(e),d=Fe(e),e=bn(e)),r=new Array(e.length);for(let f=0,p=e.length;f<p;f++)r[f]=t(c?d?pt(ge(e[f])):ge(e[f]):e[f],f,void 0,i)}else if(typeof e=="number"){r=new Array(e);for(let l=0;l<e;l++)r[l]=t(l+1,l,void 0,i)}else if(k(e))if(e[Symbol.iterator])r=Array.from(e,(l,c)=>t(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,d=l.length;c<d;c++){const f=l[c];r[c]=t(e[f],f,c,i)}}else r=[];return r}function qc(e,t,n={},s,r){if(Z.ce||Z.parent&&ht(Z.parent)&&Z.parent.ce){const d=Object.keys(n).length>0;return t!=="default"&&(n.name=t),Gn(),Yn(ae,null,[Ae("slot",n,s&&s())],d?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),Gn();const o=i&&qr(i(n)),l=n.key||o&&o.key,c=Yn(ae,{key:(l&&!pe(l)?l:`_${t}`)+(!o&&s?"_fb":"")},o||(s?s():[]),o&&e._===1?64:-2);return i&&i._c&&(i._d=!0),c}function qr(e){return e.some(t=>ms(t)?!(t.type===Ue||t.type===ae&&!qr(t.children)):!0)?e:null}const Bn=e=>e?hi(e)?Sn(e):Bn(e.parent):null,It=Q(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Bn(e.parent),$root:e=>Bn(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Gr(e),$forceUpdate:e=>e.f||(e.f=()=>{ds(e.update)}),$nextTick:e=>e.n||(e.n=Fr.bind(e.proxy)),$watch:e=>To.bind(e)}),Nn=(e,t)=>e!==K&&!e.__isScriptSetup&&U(e,t),ko={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;if(t[0]!=="$"){const E=o[t];if(E!==void 0)switch(E){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Nn(s,t))return o[t]=1,s[t];if(r!==K&&U(r,t))return o[t]=2,r[t];if(U(i,t))return o[t]=3,i[t];if(n!==K&&U(n,t))return o[t]=4,n[t];Wn&&(o[t]=0)}}const d=It[t];let f,p;if(d)return t==="$attrs"&&X(e.attrs,"get",""),d(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==K&&U(n,t))return o[t]=4,n[t];if(p=c.config.globalProperties,U(p,t))return p[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Nn(r,t)?(r[t]=n,!0):s!==K&&U(s,t)?(s[t]=n,!0):U(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:i,type:o}},l){let c;return!!(n[l]||e!==K&&l[0]!=="$"&&U(e,l)||Nn(t,l)||U(i,l)||U(s,l)||U(It,l)||U(r.config.globalProperties,l)||(c=o.__cssModules)&&c[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:U(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Ps(e){return R(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Wn=!0;function Vo(e){const t=Gr(e),n=e.proxy,s=e.ctx;Wn=!1,t.beforeCreate&&Ms(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:d,created:f,beforeMount:p,mounted:E,beforeUpdate:x,updated:C,activated:N,deactivated:ee,beforeDestroy:D,beforeUnmount:V,destroyed:W,unmounted:O,render:J,renderTracked:Ke,renderTriggered:me,errorCaptured:je,serverPrefetch:$t,expose:Ge,inheritAttrs:_t,components:kt,directives:Vt,filters:Tn}=t;if(d&&Bo(d,s,null),o)for(const B in o){const j=o[B];P(j)&&(s[B]=j.bind(n))}if(r){const B=r.call(n,n);k(B)&&(e.data=us(B))}if(Wn=!0,i)for(const B in i){const j=i[B],Ye=P(j)?j.bind(n,n):P(j.get)?j.get.bind(n,n):Te,Bt=!P(j)&&P(j.set)?j.set.bind(n):Te,ze=Rl({get:Ye,set:Bt});Object.defineProperty(s,B,{enumerable:!0,configurable:!0,get:()=>ze.value,set:be=>ze.value=be})}if(l)for(const B in l)Jr(l[B],s,n,B);if(c){const B=P(c)?c.call(n):c;Reflect.ownKeys(B).forEach(j=>{Eo(j,B[j])})}f&&Ms(f,e,"c");function te(B,j){R(j)?j.forEach(Ye=>B(Ye.bind(n))):j&&B(j.bind(n))}if(te(Mo,p),te(No,E),te(Do,x),te(Fo,C),te(Oo,N),te(Io,ee),te(Ho,je),te(jo,Ke),te(Ko,me),te(Uo,V),te(Wr,O),te(Lo,$t),R(Ge))if(Ge.length){const B=e.exposed||(e.exposed={});Ge.forEach(j=>{Object.defineProperty(B,j,{get:()=>n[j],set:Ye=>n[j]=Ye,enumerable:!0})})}else e.exposed||(e.exposed={});J&&e.render===Te&&(e.render=J),_t!=null&&(e.inheritAttrs=_t),kt&&(e.components=kt),Vt&&(e.directives=Vt),$t&&kr(e)}function Bo(e,t,n=Te){R(e)&&(e=qn(e));for(const s in e){const r=e[s];let i;k(r)?"default"in r?i=Zt(r.from||s,r.default,!0):i=Zt(r.from||s):i=Zt(r),G(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Ms(e,t,n){Re(R(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Jr(e,t,n,s){let r=s.includes(".")?$r(n,s):()=>n[s];if(q(e)){const i=t[e];P(i)&&Mn(r,i)}else if(P(e))Mn(r,e.bind(n));else if(k(e))if(R(e))e.forEach(i=>Jr(i,t,n,s));else{const i=P(e.handler)?e.handler.bind(n):t[e.handler];P(i)&&Mn(r,i,e)}}function Gr(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(d=>an(c,d,o,!0)),an(c,t,o)),k(t)&&i.set(t,c),c}function an(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&an(e,i,n,!0),r&&r.forEach(o=>an(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Wo[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Wo={data:Ns,props:Ds,emits:Ds,methods:Tt,computed:Tt,beforeCreate:ne,created:ne,beforeMount:ne,mounted:ne,beforeUpdate:ne,updated:ne,beforeDestroy:ne,beforeUnmount:ne,destroyed:ne,unmounted:ne,activated:ne,deactivated:ne,errorCaptured:ne,serverPrefetch:ne,components:Tt,directives:Tt,watch:Jo,provide:Ns,inject:qo};function Ns(e,t){return t?e?function(){return Q(P(e)?e.call(this,this):e,P(t)?t.call(this,this):t)}:t:e}function qo(e,t){return Tt(qn(e),qn(t))}function qn(e){if(R(e)){const t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function ne(e,t){return e?[...new Set([].concat(e,t))]:t}function Tt(e,t){return e?Q(Object.create(null),e,t):t}function Ds(e,t){return e?R(e)&&R(t)?[...new Set([...e,...t])]:Q(Object.create(null),Ps(e),Ps(t??{})):t}function Jo(e,t){if(!e)return t;if(!t)return e;const n=Q(Object.create(null),e);for(const s in t)n[s]=ne(e[s],t[s]);return n}function Yr(){return{app:null,config:{isNativeTag:cr,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Go=0;function Yo(e,t){return function(s,r=null){P(s)||(s=Q({},s)),r!=null&&!k(r)&&(r=null);const i=Yr(),o=new WeakSet,l=[];let c=!1;const d=i.app={_uid:Go++,_component:s,_props:r,_container:null,_context:i,_instance:null,version:Cl,get config(){return i.config},set config(f){},use(f,...p){return o.has(f)||(f&&P(f.install)?(o.add(f),f.install(d,...p)):P(f)&&(o.add(f),f(d,...p))),d},mixin(f){return i.mixins.includes(f)||i.mixins.push(f),d},component(f,p){return p?(i.components[f]=p,d):i.components[f]},directive(f,p){return p?(i.directives[f]=p,d):i.directives[f]},mount(f,p,E){if(!c){const x=d._ceVNode||Ae(s,r);return x.appContext=i,E===!0?E="svg":E===!1&&(E=void 0),e(x,f,E),c=!0,d._container=f,f.__vue_app__=d,Sn(x.component)}},onUnmount(f){l.push(f)},unmount(){c&&(Re(l,d._instance,16),e(null,d._container),delete d._container.__vue_app__)},provide(f,p){return i.provides[f]=p,d},runWithContext(f){const p=rt;rt=d;try{return f()}finally{rt=p}}};return d}}let rt=null;const zo=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${We(t)}Modifiers`]||e[`${Je(t)}Modifiers`];function Xo(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||K;let r=n;const i=t.startsWith("update:"),o=i&&zo(s,t.slice(7));o&&(o.trim&&(r=n.map(f=>q(f)?f.trim():f)),o.number&&(r=n.map(gn)));let l,c=s[l=Rn(t)]||s[l=Rn(We(t))];!c&&i&&(c=s[l=Rn(Je(t))]),c&&Re(c,e,6,r);const d=s[l+"Once"];if(d){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Re(d,e,6,r)}}const Zo=new WeakMap;function zr(e,t,n=!1){const s=n?Zo:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!P(e)){const c=d=>{const f=zr(d,t,!0);f&&(l=!0,Q(o,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(k(e)&&s.set(e,null),null):(R(i)?i.forEach(c=>o[c]=null):Q(o,i),k(e)&&s.set(e,o),o)}function vn(e,t){return!e||!dn(t)?!1:(t=t.slice(2).replace(/Once$/,""),U(e,t[0].toLowerCase()+t.slice(1))||U(e,Je(t))||U(e,t))}function Fs(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:d,renderCache:f,props:p,data:E,setupState:x,ctx:C,inheritAttrs:N}=e,ee=ln(e);let D,V;try{if(n.shapeFlag&4){const O=r||s,J=O;D=Se(d.call(J,O,f,p,x,E,C)),V=l}else{const O=t;D=Se(O.length>1?O(p,{attrs:l,slots:o,emit:c}):O(p,null)),V=t.props?l:Qo(l)}}catch(O){Pt.length=0,_n(O,e,1),D=Ae(Ue)}let W=D;if(V&&N!==!1){const O=Object.keys(V),{shapeFlag:J}=W;O.length&&J&7&&(i&&O.some(es)&&(V=el(V,i)),W=gt(W,V,!1,!0))}return n.dirs&&(W=gt(W,null,!1,!0),W.dirs=W.dirs?W.dirs.concat(n.dirs):n.dirs),n.transition&&hs(W,n.transition),D=W,ln(ee),D}const Qo=e=>{let t;for(const n in e)(n==="class"||n==="style"||dn(n))&&((t||(t={}))[n]=e[n]);return t},el=(e,t)=>{const n={};for(const s in e)(!es(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function tl(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,d=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Us(s,o,d):!!o;if(c&8){const f=t.dynamicProps;for(let p=0;p<f.length;p++){const E=f[p];if(o[E]!==s[E]&&!vn(d,E))return!0}}}else return(r||l)&&(!l||!l.$stable)?!0:s===o?!1:s?o?Us(s,o,d):!0:!!o;return!1}function Us(e,t,n){const s=Object.keys(t);if(s.length!==Object.keys(e).length)return!0;for(let r=0;r<s.length;r++){const i=s[r];if(t[i]!==e[i]&&!vn(n,i))return!0}return!1}function nl({vnode:e,parent:t},n){for(;t;){const s=t.subTree;if(s.suspense&&s.suspense.activeBranch===e&&(s.el=e.el),s===e)(e=t.vnode).el=n,t=t.parent;else break}}const Xr={},Zr=()=>Object.create(Xr),Qr=e=>Object.getPrototypeOf(e)===Xr;function sl(e,t,n,s=!1){const r={},i=Zr();e.propsDefaults=Object.create(null),ei(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:oo(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function rl(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=F(r),[c]=e.propsOptions;let d=!1;if((s||o>0)&&!(o&16)){if(o&8){const f=e.vnode.dynamicProps;for(let p=0;p<f.length;p++){let E=f[p];if(vn(e.emitsOptions,E))continue;const x=t[E];if(c)if(U(i,E))x!==i[E]&&(i[E]=x,d=!0);else{const C=We(E);r[C]=Jn(c,l,C,x,e,!1)}else x!==i[E]&&(i[E]=x,d=!0)}}}else{ei(e,t,r,i)&&(d=!0);let f;for(const p in l)(!t||!U(t,p)&&((f=Je(p))===p||!U(t,f)))&&(c?n&&(n[p]!==void 0||n[f]!==void 0)&&(r[p]=Jn(c,l,p,void 0,e,!0)):delete r[p]);if(i!==l)for(const p in i)(!t||!U(t,p))&&(delete i[p],d=!0)}d&&Ie(e.attrs,"set","")}function ei(e,t,n,s){const[r,i]=e.propsOptions;let o=!1,l;if(t)for(let c in t){if(At(c))continue;const d=t[c];let f;r&&U(r,f=We(c))?!i||!i.includes(f)?n[f]=d:(l||(l={}))[f]=d:vn(e.emitsOptions,c)||(!(c in s)||d!==s[c])&&(s[c]=d,o=!0)}if(i){const c=F(n),d=l||K;for(let f=0;f<i.length;f++){const p=i[f];n[p]=Jn(r,c,p,d[p],e,!U(d,p))}}return o}function Jn(e,t,n,s,r,i){const o=e[n];if(o!=null){const l=U(o,"default");if(l&&s===void 0){const c=o.default;if(o.type!==Function&&!o.skipFactory&&P(c)){const{propsDefaults:d}=r;if(n in d)s=d[n];else{const f=Ht(r);s=d[n]=c.call(null,t),f()}}else s=c;r.ce&&r.ce._setProp(n,s)}o[0]&&(i&&!l?s=!1:o[1]&&(s===""||s===Je(n))&&(s=!0))}return s}const il=new WeakMap;function ti(e,t,n=!1){const s=n?il:t.propsCache,r=s.get(e);if(r)return r;const i=e.props,o={},l=[];let c=!1;if(!P(e)){const f=p=>{c=!0;const[E,x]=ti(p,t,!0);Q(o,E),x&&l.push(...x)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!c)return k(e)&&s.set(e,ut),ut;if(R(i))for(let f=0;f<i.length;f++){const p=We(i[f]);Ls(p)&&(o[p]=K)}else if(i)for(const f in i){const p=We(f);if(Ls(p)){const E=i[f],x=o[p]=R(E)||P(E)?{type:E}:Q({},E),C=x.type;let N=!1,ee=!0;if(R(C))for(let D=0;D<C.length;++D){const V=C[D],W=P(V)&&V.name;if(W==="Boolean"){N=!0;break}else W==="String"&&(ee=!1)}else N=P(C)&&C.name==="Boolean";x[0]=N,x[1]=ee,(N||U(x,"default"))&&l.push(p)}}const d=[o,l];return k(e)&&s.set(e,d),d}function Ls(e){return e[0]!=="$"&&!At(e)}const ps=e=>e==="_"||e==="_ctx"||e==="$stable",gs=e=>R(e)?e.map(Se):[Se(e)],ol=(e,t,n)=>{if(t._n)return t;const s=vo((...r)=>gs(t(...r)),n);return s._c=!1,s},ni=(e,t,n)=>{const s=e._ctx;for(const r in e){if(ps(r))continue;const i=e[r];if(P(i))t[r]=ol(r,i,s);else if(i!=null){const o=gs(i);t[r]=()=>o}}},si=(e,t)=>{const n=gs(t);e.slots.default=()=>n},ri=(e,t,n)=>{for(const s in t)(n||!ps(s))&&(e[s]=t[s])},ll=(e,t,n)=>{const s=e.slots=Zr();if(e.vnode.shapeFlag&32){const r=t._;r?(ri(s,t,n),n&&hr(s,"_",r,!0)):ni(t,s)}else t&&si(e,t)},cl=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=K;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:ri(r,t,n):(i=!t.$stable,ni(t,r)),o=t}else t&&(si(e,t),o={default:1});if(i)for(const l in r)!ps(l)&&o[l]==null&&delete r[l]},ce=hl;function al(e){return ul(e)}function ul(e,t){const n=mn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:d,setElementText:f,parentNode:p,nextSibling:E,setScopeId:x=Te,insertStaticContent:C}=e,N=(a,u,h,y=null,g=null,m=null,v=void 0,w=null,_=!!u.dynamicChildren)=>{if(a===u)return;a&&!xt(a,u)&&(y=Wt(a),be(a,g,m,!0),a=null),u.patchFlag===-2&&(_=!1,u.dynamicChildren=null);const{type:b,ref:A,shapeFlag:S}=u;switch(b){case En:ee(a,u,h,y);break;case Ue:D(a,u,h,y);break;case Fn:a==null&&V(u,h,y,v);break;case ae:kt(a,u,h,y,g,m,v,w,_);break;default:S&1?J(a,u,h,y,g,m,v,w,_):S&6?Vt(a,u,h,y,g,m,v,w,_):(S&64||S&128)&&b.process(a,u,h,y,g,m,v,w,_,vt)}A!=null&&g?Ot(A,a&&a.ref,m,u||a,!u):A==null&&a&&a.ref!=null&&Ot(a.ref,null,m,a,!0)},ee=(a,u,h,y)=>{if(a==null)s(u.el=l(u.children),h,y);else{const g=u.el=a.el;u.children!==a.children&&d(g,u.children)}},D=(a,u,h,y)=>{a==null?s(u.el=c(u.children||""),h,y):u.el=a.el},V=(a,u,h,y)=>{[a.el,a.anchor]=C(a.children,u,h,y,a.el,a.anchor)},W=({el:a,anchor:u},h,y)=>{let g;for(;a&&a!==u;)g=E(a),s(a,h,y),a=g;s(u,h,y)},O=({el:a,anchor:u})=>{let h;for(;a&&a!==u;)h=E(a),r(a),a=h;r(u)},J=(a,u,h,y,g,m,v,w,_)=>{if(u.type==="svg"?v="svg":u.type==="math"&&(v="mathml"),a==null)Ke(u,h,y,g,m,v,w,_);else{const b=a.el&&a.el._isVueCE?a.el:null;try{b&&b._beginPatch(),$t(a,u,g,m,v,w,_)}finally{b&&b._endPatch()}}},Ke=(a,u,h,y,g,m,v,w)=>{let _,b;const{props:A,shapeFlag:S,transition:T,dirs:I}=a;if(_=a.el=o(a.type,m,A&&A.is,A),S&8?f(_,a.children):S&16&&je(a.children,_,null,y,g,Dn(a,m),v,w),I&&Xe(a,null,y,"created"),me(_,a,a.scopeId,v,y),A){for(const H in A)H!=="value"&&!At(H)&&i(_,H,null,A[H],m,y);"value"in A&&i(_,"value",null,A.value,m),(b=A.onVnodeBeforeMount)&&ve(b,y,a)}I&&Xe(a,null,y,"beforeMount");const M=fl(g,T);M&&T.beforeEnter(_),s(_,u,h),((b=A&&A.onVnodeMounted)||M||I)&&ce(()=>{b&&ve(b,y,a),M&&T.enter(_),I&&Xe(a,null,y,"mounted")},g)},me=(a,u,h,y,g)=>{if(h&&x(a,h),y)for(let m=0;m<y.length;m++)x(a,y[m]);if(g){let m=g.subTree;if(u===m||ci(m.type)&&(m.ssContent===u||m.ssFallback===u)){const v=g.vnode;me(a,v,v.scopeId,v.slotScopeIds,g.parent)}}},je=(a,u,h,y,g,m,v,w,_=0)=>{for(let b=_;b<a.length;b++){const A=a[b]=w?ke(a[b]):Se(a[b]);N(null,A,u,h,y,g,m,v,w)}},$t=(a,u,h,y,g,m,v)=>{const w=u.el=a.el;let{patchFlag:_,dynamicChildren:b,dirs:A}=u;_|=a.patchFlag&16;const S=a.props||K,T=u.props||K;let I;if(h&&Ze(h,!1),(I=T.onVnodeBeforeUpdate)&&ve(I,h,u,a),A&&Xe(u,a,h,"beforeUpdate"),h&&Ze(h,!0),(S.innerHTML&&T.innerHTML==null||S.textContent&&T.textContent==null)&&f(w,""),b?Ge(a.dynamicChildren,b,w,h,y,Dn(u,g),m):v||j(a,u,w,null,h,y,Dn(u,g),m,!1),_>0){if(_&16)_t(w,S,T,h,g);else if(_&2&&S.class!==T.class&&i(w,"class",null,T.class,g),_&4&&i(w,"style",S.style,T.style,g),_&8){const M=u.dynamicProps;for(let H=0;H<M.length;H++){const L=M[H],ie=S[L],oe=T[L];(oe!==ie||L==="value")&&i(w,L,ie,oe,g,h)}}_&1&&a.children!==u.children&&f(w,u.children)}else!v&&b==null&&_t(w,S,T,h,g);((I=T.onVnodeUpdated)||A)&&ce(()=>{I&&ve(I,h,u,a),A&&Xe(u,a,h,"updated")},y)},Ge=(a,u,h,y,g,m,v)=>{for(let w=0;w<u.length;w++){const _=a[w],b=u[w],A=_.el&&(_.type===ae||!xt(_,b)||_.shapeFlag&198)?p(_.el):h;N(_,b,A,null,y,g,m,v,!0)}},_t=(a,u,h,y,g)=>{if(u!==h){if(u!==K)for(const m in u)!At(m)&&!(m in h)&&i(a,m,u[m],null,g,y);for(const m in h){if(At(m))continue;const v=h[m],w=u[m];v!==w&&m!=="value"&&i(a,m,w,v,g,y)}"value"in h&&i(a,"value",u.value,h.value,g)}},kt=(a,u,h,y,g,m,v,w,_)=>{const b=u.el=a?a.el:l(""),A=u.anchor=a?a.anchor:l("");let{patchFlag:S,dynamicChildren:T,slotScopeIds:I}=u;I&&(w=w?w.concat(I):I),a==null?(s(b,h,y),s(A,h,y),je(u.children||[],h,A,g,m,v,w,_)):S>0&&S&64&&T&&a.dynamicChildren&&a.dynamicChildren.length===T.length?(Ge(a.dynamicChildren,T,h,g,m,v,w),(u.key!=null||g&&u===g.subTree)&&ii(a,u,!0)):j(a,u,h,A,g,m,v,w,_)},Vt=(a,u,h,y,g,m,v,w,_)=>{u.slotScopeIds=w,a==null?u.shapeFlag&512?g.ctx.activate(u,h,y,v,_):Tn(u,h,y,g,m,v,_):_s(a,u,_)},Tn=(a,u,h,y,g,m,v)=>{const w=a.component=vl(a,y,g);if(Vr(a)&&(w.ctx.renderer=vt),El(w,!1,v),w.asyncDep){if(g&&g.registerDep(w,te,v),!a.el){const _=w.subTree=Ae(Ue);D(null,_,u,h),a.placeholder=_.el}}else te(w,a,u,h,g,m,v)},_s=(a,u,h)=>{const y=u.component=a.component;if(tl(a,u,h))if(y.asyncDep&&!y.asyncResolved){B(y,u,h);return}else y.next=u,y.update();else u.el=a.el,y.vnode=u},te=(a,u,h,y,g,m,v)=>{const w=()=>{if(a.isMounted){let{next:S,bu:T,u:I,parent:M,vnode:H}=a;{const _e=oi(a);if(_e){S&&(S.el=H.el,B(a,S,v)),_e.asyncDep.then(()=>{a.isUnmounted||w()});return}}let L=S,ie;Ze(a,!1),S?(S.el=H.el,B(a,S,v)):S=H,T&&Xt(T),(ie=S.props&&S.props.onVnodeBeforeUpdate)&&ve(ie,M,S,H),Ze(a,!0);const oe=Fs(a),ye=a.subTree;a.subTree=oe,N(ye,oe,p(ye.el),Wt(ye),a,g,m),S.el=oe.el,L===null&&nl(a,oe.el),I&&ce(I,g),(ie=S.props&&S.props.onVnodeUpdated)&&ce(()=>ve(ie,M,S,H),g)}else{let S;const{el:T,props:I}=u,{bm:M,m:H,parent:L,root:ie,type:oe}=a,ye=ht(u);Ze(a,!1),M&&Xt(M),!ye&&(S=I&&I.onVnodeBeforeMount)&&ve(S,L,u),Ze(a,!0);{ie.ce&&ie.ce._def.shadowRoot!==!1&&ie.ce._injectChildStyle(oe);const _e=a.subTree=Fs(a);N(null,_e,h,y,a,g,m),u.el=_e.el}if(H&&ce(H,g),!ye&&(S=I&&I.onVnodeMounted)){const _e=u;ce(()=>ve(S,L,_e),g)}(u.shapeFlag&256||L&&ht(L.vnode)&&L.vnode.shapeFlag&256)&&a.a&&ce(a.a,g),a.isMounted=!0,u=h=y=null}};a.scope.on();const _=a.effect=new yr(w);a.scope.off();const b=a.update=_.run.bind(_),A=a.job=_.runIfDirty.bind(_);A.i=a,A.id=a.uid,_.scheduler=()=>ds(A),Ze(a,!0),b()},B=(a,u,h)=>{u.component=a;const y=a.vnode.props;a.vnode=u,a.next=null,rl(a,u.props,y,h),cl(a,u.children,h),Ne(),Os(a),De()},j=(a,u,h,y,g,m,v,w,_=!1)=>{const b=a&&a.children,A=a?a.shapeFlag:0,S=u.children,{patchFlag:T,shapeFlag:I}=u;if(T>0){if(T&128){Bt(b,S,h,y,g,m,v,w,_);return}else if(T&256){Ye(b,S,h,y,g,m,v,w,_);return}}I&8?(A&16&&wt(b,g,m),S!==b&&f(h,S)):A&16?I&16?Bt(b,S,h,y,g,m,v,w,_):wt(b,g,m,!0):(A&8&&f(h,""),I&16&&je(S,h,y,g,m,v,w,_))},Ye=(a,u,h,y,g,m,v,w,_)=>{a=a||ut,u=u||ut;const b=a.length,A=u.length,S=Math.min(b,A);let T;for(T=0;T<S;T++){const I=u[T]=_?ke(u[T]):Se(u[T]);N(a[T],I,h,null,g,m,v,w,_)}b>A?wt(a,g,m,!0,!1,S):je(u,h,y,g,m,v,w,_,S)},Bt=(a,u,h,y,g,m,v,w,_)=>{let b=0;const A=u.length;let S=a.length-1,T=A-1;for(;b<=S&&b<=T;){const I=a[b],M=u[b]=_?ke(u[b]):Se(u[b]);if(xt(I,M))N(I,M,h,null,g,m,v,w,_);else break;b++}for(;b<=S&&b<=T;){const I=a[S],M=u[T]=_?ke(u[T]):Se(u[T]);if(xt(I,M))N(I,M,h,null,g,m,v,w,_);else break;S--,T--}if(b>S){if(b<=T){const I=T+1,M=I<A?u[I].el:y;for(;b<=T;)N(null,u[b]=_?ke(u[b]):Se(u[b]),h,M,g,m,v,w,_),b++}}else if(b>T)for(;b<=S;)be(a[b],g,m,!0),b++;else{const I=b,M=b,H=new Map;for(b=M;b<=T;b++){const le=u[b]=_?ke(u[b]):Se(u[b]);le.key!=null&&H.set(le.key,b)}let L,ie=0;const oe=T-M+1;let ye=!1,_e=0;const Et=new Array(oe);for(b=0;b<oe;b++)Et[b]=0;for(b=I;b<=S;b++){const le=a[b];if(ie>=oe){be(le,g,m,!0);continue}let we;if(le.key!=null)we=H.get(le.key);else for(L=M;L<=T;L++)if(Et[L-M]===0&&xt(le,u[L])){we=L;break}we===void 0?be(le,g,m,!0):(Et[we-M]=b+1,we>=_e?_e=we:ye=!0,N(le,u[we],h,null,g,m,v,w,_),ie++)}const Es=ye?dl(Et):ut;for(L=Es.length-1,b=oe-1;b>=0;b--){const le=M+b,we=u[le],Ss=u[le+1],xs=le+1<A?Ss.el||li(Ss):y;Et[b]===0?N(null,we,h,xs,g,m,v,w,_):ye&&(L<0||b!==Es[L]?ze(we,h,xs,2):L--)}}},ze=(a,u,h,y,g=null)=>{const{el:m,type:v,transition:w,children:_,shapeFlag:b}=a;if(b&6){ze(a.component.subTree,u,h,y);return}if(b&128){a.suspense.move(u,h,y);return}if(b&64){v.move(a,u,h,vt);return}if(v===ae){s(m,u,h);for(let S=0;S<_.length;S++)ze(_[S],u,h,y);s(a.anchor,u,h);return}if(v===Fn){W(a,u,h);return}if(y!==2&&b&1&&w)if(y===0)w.beforeEnter(m),s(m,u,h),ce(()=>w.enter(m),g);else{const{leave:S,delayLeave:T,afterLeave:I}=w,M=()=>{a.ctx.isUnmounted?r(m):s(m,u,h)},H=()=>{m._isLeaving&&m[Co](!0),S(m,()=>{M(),I&&I()})};T?T(m,M,H):H()}else s(m,u,h)},be=(a,u,h,y=!1,g=!1)=>{const{type:m,props:v,ref:w,children:_,dynamicChildren:b,shapeFlag:A,patchFlag:S,dirs:T,cacheIndex:I}=a;if(S===-2&&(g=!1),w!=null&&(Ne(),Ot(w,null,h,a,!0),De()),I!=null&&(u.renderCache[I]=void 0),A&256){u.ctx.deactivate(a);return}const M=A&1&&T,H=!ht(a);let L;if(H&&(L=v&&v.onVnodeBeforeUnmount)&&ve(L,u,a),A&6)Ri(a.component,h,y);else{if(A&128){a.suspense.unmount(h,y);return}M&&Xe(a,null,u,"beforeUnmount"),A&64?a.type.remove(a,u,h,vt,y):b&&!b.hasOnce&&(m!==ae||S>0&&S&64)?wt(b,u,h,!1,!0):(m===ae&&S&384||!g&&A&16)&&wt(_,u,h),y&&ws(a)}(H&&(L=v&&v.onVnodeUnmounted)||M)&&ce(()=>{L&&ve(L,u,a),M&&Xe(a,null,u,"unmounted")},h)},ws=a=>{const{type:u,el:h,anchor:y,transition:g}=a;if(u===ae){Ai(h,y);return}if(u===Fn){O(a);return}const m=()=>{r(h),g&&!g.persisted&&g.afterLeave&&g.afterLeave()};if(a.shapeFlag&1&&g&&!g.persisted){const{leave:v,delayLeave:w}=g,_=()=>v(h,m);w?w(a.el,m,_):_()}else m()},Ai=(a,u)=>{let h;for(;a!==u;)h=E(a),r(a),a=h;r(u)},Ri=(a,u,h)=>{const{bum:y,scope:g,job:m,subTree:v,um:w,m:_,a:b}=a;Ks(_),Ks(b),y&&Xt(y),g.stop(),m&&(m.flags|=8,be(v,a,u,h)),w&&ce(w,u),ce(()=>{a.isUnmounted=!0},u)},wt=(a,u,h,y=!1,g=!1,m=0)=>{for(let v=m;v<a.length;v++)be(a[v],u,h,y,g)},Wt=a=>{if(a.shapeFlag&6)return Wt(a.component.subTree);if(a.shapeFlag&128)return a.suspense.next();const u=E(a.anchor||a.el),h=u&&u[Ao];return h?E(h):u};let An=!1;const vs=(a,u,h)=>{let y;a==null?u._vnode&&(be(u._vnode,null,null,!0),y=u._vnode.component):N(u._vnode||null,a,u,null,null,null,h),u._vnode=a,An||(An=!0,Os(y),Lr(),An=!1)},vt={p:N,um:be,m:ze,r:ws,mt:Tn,mc:je,pc:j,pbc:Ge,n:Wt,o:e};return{render:vs,hydrate:void 0,createApp:Yo(vs)}}function Dn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Ze({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function fl(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ii(e,t,n=!1){const s=e.children,r=t.children;if(R(s)&&R(r))for(let i=0;i<s.length;i++){const o=s[i];let l=r[i];l.shapeFlag&1&&!l.dynamicChildren&&((l.patchFlag<=0||l.patchFlag===32)&&(l=r[i]=ke(r[i]),l.el=o.el),!n&&l.patchFlag!==-2&&ii(o,l)),l.type===En&&(l.patchFlag!==-1?l.el=o.el:l.__elIndex=i+(e.type===ae?1:0)),l.type===Ue&&!l.el&&(l.el=o.el)}}function dl(e){const t=e.slice(),n=[0];let s,r,i,o,l;const c=e.length;for(s=0;s<c;s++){const d=e[s];if(d!==0){if(r=n[n.length-1],e[r]<d){t[s]=r,n.push(s);continue}for(i=0,o=n.length-1;i<o;)l=i+o>>1,e[n[l]]<d?i=l+1:o=l;d<e[n[i]]&&(i>0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function oi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:oi(t)}function Ks(e){if(e)for(let t=0;t<e.length;t++)e[t].flags|=8}function li(e){if(e.placeholder)return e.placeholder;const t=e.component;return t?li(t.subTree):null}const ci=e=>e.__isSuspense;function hl(e,t){t&&t.pendingBranch?R(e)?t.effects.push(...e):t.effects.push(e):wo(e)}const ae=Symbol.for("v-fgt"),En=Symbol.for("v-txt"),Ue=Symbol.for("v-cmt"),Fn=Symbol.for("v-stc"),Pt=[];let ue=null;function Gn(e=!1){Pt.push(ue=e?null:[])}function pl(){Pt.pop(),ue=Pt[Pt.length-1]||null}let Ut=1;function js(e,t=!1){Ut+=e,e<0&&ue&&t&&(ue.hasOnce=!0)}function ai(e){return e.dynamicChildren=Ut>0?ue||ut:null,pl(),Ut>0&&ue&&ue.push(e),e}function Jc(e,t,n,s,r,i){return ai(fi(e,t,n,s,r,i,!0))}function Yn(e,t,n,s,r){return ai(Ae(e,t,n,s,r,!0))}function ms(e){return e?e.__v_isVNode===!0:!1}function xt(e,t){return e.type===t.type&&e.key===t.key}const ui=({key:e})=>e??null,Qt=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?q(e)||G(e)||P(e)?{i:Z,r:e,k:t,f:!!n}:e:null);function fi(e,t=null,n=null,s=0,r=null,i=e===ae?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ui(t),ref:t&&Qt(t),scopeId:jr,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Z};return l?(bs(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=q(n)?8:16),Ut>0&&!o&&ue&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&ue.push(c),c}const Ae=gl;function gl(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===$o)&&(e=Ue),ms(e)){const l=gt(e,t,!0);return n&&bs(l,n),Ut>0&&!i&&ue&&(l.shapeFlag&6?ue[ue.indexOf(e)]=l:ue.push(l)),l.patchFlag=-2,l}if(Al(e)&&(e=e.__vccOpts),t){t=ml(t);let{class:l,style:c}=t;l&&!q(l)&&(t.class=ss(l)),k(c)&&(yn(c)&&!R(c)&&(c=Q({},c)),t.style=ns(c))}const o=q(e)?1:ci(e)?128:Ro(e)?64:k(e)?4:P(e)?2:0;return fi(e,t,n,s,r,o,i,!0)}function ml(e){return e?yn(e)||Qr(e)?Q({},e):e:null}function gt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,d=t?yl(r||{},t):r,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:d,key:d&&ui(d),ref:t&&t.ref?n&&i?R(i)?i.concat(Qt(t)):[i,Qt(t)]:Qt(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ae?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&gt(e.ssContent),ssFallback:e.ssFallback&&gt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&hs(f,c.clone(f)),f}function bl(e=" ",t=0){return Ae(En,null,e,t)}function Gc(e="",t=!1){return t?(Gn(),Yn(Ue,null,e)):Ae(Ue,null,e)}function Se(e){return e==null||typeof e=="boolean"?Ae(Ue):R(e)?Ae(ae,null,e.slice()):ms(e)?ke(e):Ae(En,null,String(e))}function ke(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:gt(e)}function bs(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(R(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),bs(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Qr(t)?t._ctx=Z:r===3&&Z&&(Z.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else P(t)?(t={default:t,_ctx:Z},n=32):(t=String(t),s&64?(n=16,t=[bl(t)]):n=8);e.children=t,e.shapeFlag|=n}function yl(...e){const t={};for(let n=0;n<e.length;n++){const s=e[n];for(const r in s)if(r==="class")t.class!==s.class&&(t.class=ss([t.class,s.class]));else if(r==="style")t.style=ns([t.style,s.style]);else if(dn(r)){const i=t[r],o=s[r];o&&i!==o&&!(R(i)&&i.includes(o))&&(t[r]=i?[].concat(i,o):o)}else r!==""&&(t[r]=s[r])}return t}function ve(e,t,n,s=null){Re(e,t,7,[n,s])}const _l=Yr();let wl=0;function vl(e,t,n){const s=e.type,r=(t?t.appContext:e.appContext)||_l,i={uid:wl++,vnode:e,type:s,parent:t,appContext:r,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new br(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(r.provides),ids:t?t.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:ti(s,r),emitsOptions:zr(s,r),emit:null,emitted:null,propsDefaults:K,inheritAttrs:s.inheritAttrs,ctx:K,data:K,props:K,attrs:K,slots:K,refs:K,setupState:K,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return i.ctx={_:i},i.root=t?t.root:i,i.emit=Xo.bind(null,i),e.ce&&e.ce(i),i}let re=null;const di=()=>re||Z;let un,zn;{const e=mn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};un=t("__VUE_INSTANCE_SETTERS__",n=>re=n),zn=t("__VUE_SSR_SETTERS__",n=>Lt=n)}const Ht=e=>{const t=re;return un(e),e.scope.on(),()=>{e.scope.off(),un(t)}},Hs=()=>{re&&re.scope.off(),un(null)};function hi(e){return e.vnode.shapeFlag&4}let Lt=!1;function El(e,t=!1,n=!1){t&&zn(t);const{props:s,children:r}=e.vnode,i=hi(e);sl(e,s,i,t),ll(e,r,n||t);const o=i?Sl(e,t):void 0;return t&&zn(!1),o}function Sl(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ko);const{setup:s}=n;if(s){Ne();const r=e.setupContext=s.length>1?Tl(e):null,i=Ht(e),o=jt(s,e,0,[e.props,r]),l=ar(o);if(De(),i(),(l||e.sp)&&!ht(e)&&kr(e),l){if(o.then(Hs,Hs),t)return o.then(c=>{$s(e,c)}).catch(c=>{_n(c,e,0)});e.asyncDep=o}else $s(e,o)}else pi(e)}function $s(e,t,n){P(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:k(t)&&(e.setupState=Nr(t)),pi(e)}function pi(e,t,n){const s=e.type;e.render||(e.render=s.render||Te);{const r=Ht(e);Ne();try{Vo(e)}finally{De(),r()}}}const xl={get(e,t){return X(e,"get",""),e[t]}};function Tl(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,xl),slots:e.slots,emit:e.emit,expose:t}}function Sn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Nr(lo(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in It)return It[n](e)},has(t,n){return n in t||n in It}})):e.proxy}function Al(e){return P(e)&&"__vccOpts"in e}const Rl=(e,t)=>go(e,t,Lt),Cl="3.5.27";let Xn;const ks=typeof window<"u"&&window.trustedTypes;if(ks)try{Xn=ks.createPolicy("vue",{createHTML:e=>e})}catch{}const gi=Xn?e=>Xn.createHTML(e):e=>e,Ol="http://www.w3.org/2000/svg",Il="http://www.w3.org/1998/Math/MathML",Oe=typeof document<"u"?document:null,Vs=Oe&&Oe.createElement("template"),Pl={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Oe.createElementNS(Ol,e):t==="mathml"?Oe.createElementNS(Il,e):n?Oe.createElement(e,{is:n}):Oe.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Oe.createTextNode(e),createComment:e=>Oe.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Oe.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Vs.innerHTML=gi(s==="svg"?`<svg>${e}</svg>`:s==="mathml"?`<math>${e}</math>`:e);const l=Vs.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ml=Symbol("_vtc");function Nl(e,t,n){const s=e[Ml];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Bs=Symbol("_vod"),Dl=Symbol("_vsh"),Fl=Symbol(""),Ul=/(?:^|;)\s*display\s*:/;function Ll(e,t,n){const s=e.style,r=q(n);let i=!1;if(n&&!r){if(t)if(q(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&en(s,l,"")}else for(const o in t)n[o]==null&&en(s,o,"");for(const o in n)o==="display"&&(i=!0),en(s,o,n[o])}else if(r){if(t!==n){const o=s[Fl];o&&(n+=";"+o),s.cssText=n,i=Ul.test(n)}}else t&&e.removeAttribute("style");Bs in e&&(e[Bs]=i?s.display:"",e[Dl]&&(s.display="none"))}const Ws=/\s*!important$/;function en(e,t,n){if(R(n))n.forEach(s=>en(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Kl(e,t);Ws.test(n)?e.setProperty(Je(s),n.replace(Ws,""),"important"):e[s]=n}}const qs=["Webkit","Moz","ms"],Un={};function Kl(e,t){const n=Un[t];if(n)return n;let s=We(t);if(s!=="filter"&&s in e)return Un[t]=s;s=dr(s);for(let r=0;r<qs.length;r++){const i=qs[r]+s;if(i in e)return Un[t]=i}return t}const Js="http://www.w3.org/1999/xlink";function Gs(e,t,n,s,r,i=Li(t)){s&&t.startsWith("xlink:")?n==null?e.removeAttributeNS(Js,t.slice(6,t.length)):e.setAttributeNS(Js,t,n):n==null||i&&!pr(n)?e.removeAttribute(t):e.setAttribute(t,i?"":pe(n)?String(n):n)}function Ys(e,t,n,s,r){if(t==="innerHTML"||t==="textContent"){n!=null&&(e[t]=t==="innerHTML"?gi(n):n);return}const i=e.tagName;if(t==="value"&&i!=="PROGRESS"&&!i.includes("-")){const l=i==="OPTION"?e.getAttribute("value")||"":e.value,c=n==null?e.type==="checkbox"?"on":"":String(n);(l!==c||!("_value"in e))&&(e.value=c),n==null&&e.removeAttribute(t),e._value=n;return}let o=!1;if(n===""||n==null){const l=typeof e[t];l==="boolean"?n=pr(n):n==null&&l==="string"?(n="",o=!0):l==="number"&&(n=0,o=!0)}try{e[t]=n}catch{}o&&e.removeAttribute(r||t)}function Me(e,t,n,s){e.addEventListener(t,n,s)}function jl(e,t,n,s){e.removeEventListener(t,n,s)}const zs=Symbol("_vei");function Hl(e,t,n,s,r=null){const i=e[zs]||(e[zs]={}),o=i[t];if(s&&o)o.value=s;else{const[l,c]=$l(t);if(s){const d=i[t]=Bl(s,r);Me(e,l,d,c)}else o&&(jl(e,l,o,c),i[t]=void 0)}}const Xs=/(?:Once|Passive|Capture)$/;function $l(e){let t;if(Xs.test(e)){t={};let s;for(;s=e.match(Xs);)e=e.slice(0,e.length-s[0].length),t[s[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):Je(e.slice(2)),t]}let Ln=0;const kl=Promise.resolve(),Vl=()=>Ln||(kl.then(()=>Ln=0),Ln=Date.now());function Bl(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Re(Wl(s,n.value),t,5,[s])};return n.value=e,n.attached=Vl(),n}function Wl(e,t){if(R(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Zs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ql=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?Nl(e,s,o):t==="style"?Ll(e,n,s):dn(t)?es(t)||Hl(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Jl(e,t,s,o))?(Ys(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Gs(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!q(s))?Ys(e,We(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Gs(e,t,s,o))};function Jl(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Zs(t)&&P(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Zs(t)&&q(n)?!1:t in e}const qe=e=>{const t=e.props["onUpdate:modelValue"]||!1;return R(t)?n=>Xt(t,n):t};function Gl(e){e.target.composing=!0}function Qs(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const de=Symbol("_assign");function er(e,t,n){return t&&(e=e.trim()),n&&(e=gn(e)),e}const tr={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[de]=qe(r);const i=s||r.props&&r.props.type==="number";Me(e,t?"change":"input",o=>{o.target.composing||e[de](er(e.value,n,i))}),(n||i)&&Me(e,"change",()=>{e.value=er(e.value,n,i)}),t||(Me(e,"compositionstart",Gl),Me(e,"compositionend",Qs),Me(e,"change",Qs))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[de]=qe(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?gn(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},Yl={deep:!0,created(e,t,n){e[de]=qe(n),Me(e,"change",()=>{const s=e._modelValue,r=mt(e),i=e.checked,o=e[de];if(R(s)){const l=rs(s,r),c=l!==-1;if(i&&!c)o(s.concat(r));else if(!i&&c){const d=[...s];d.splice(l,1),o(d)}}else if(yt(s)){const l=new Set(s);i?l.add(r):l.delete(r),o(l)}else o(mi(e,i))})},mounted:nr,beforeUpdate(e,t,n){e[de]=qe(n),nr(e,t,n)}};function nr(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(R(t))r=rs(t,s.props.value)>-1;else if(yt(t))r=t.has(s.props.value);else{if(t===n)return;r=it(t,mi(e,!0))}e.checked!==r&&(e.checked=r)}const zl={created(e,{value:t},n){e.checked=it(t,n.props.value),e[de]=qe(n),Me(e,"change",()=>{e[de](mt(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[de]=qe(s),t!==n&&(e.checked=it(t,s.props.value))}},Xl={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const r=yt(t);Me(e,"change",()=>{const i=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>n?gn(mt(o)):mt(o));e[de](e.multiple?r?new Set(i):i:i[0]),e._assigning=!0,Fr(()=>{e._assigning=!1})}),e[de]=qe(s)},mounted(e,{value:t}){sr(e,t)},beforeUpdate(e,t,n){e[de]=qe(n)},updated(e,{value:t}){e._assigning||sr(e,t)}};function sr(e,t){const n=e.multiple,s=R(t);if(!(n&&!s&&!yt(t))){for(let r=0,i=e.options.length;r<i;r++){const o=e.options[r],l=mt(o);if(n)if(s){const c=typeof l;c==="string"||c==="number"?o.selected=t.some(d=>String(d)===String(l)):o.selected=rs(t,l)>-1}else o.selected=t.has(l);else if(it(mt(o),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function mt(e){return"_value"in e?e._value:e.value}function mi(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Yc={created(e,t,n){Yt(e,t,n,null,"created")},mounted(e,t,n){Yt(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){Yt(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){Yt(e,t,n,s,"updated")}};function Zl(e,t){switch(e){case"SELECT":return Xl;case"TEXTAREA":return tr;default:switch(t){case"checkbox":return Yl;case"radio":return zl;default:return tr}}}function Yt(e,t,n,s,r){const o=Zl(e.tagName,n.props&&n.props.type)[r];o&&o(e,t,n,s)}const Ql=["ctrl","shift","alt","meta"],ec={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ql.some(n=>e[`${n}Key`]&&!t.includes(n))},zc=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((r,...i)=>{for(let o=0;o<t.length;o++){const l=ec[t[o]];if(l&&l(r,t))return}return e(r,...i)}))},tc={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Xc=(e,t)=>{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(r=>{if(!("key"in r))return;const i=Je(r.key);if(t.some(o=>o===i||tc[o]===i))return e(r)}))},nc=Q({patchProp:ql},Pl);let rr;function sc(){return rr||(rr=al(nc))}const Zc=((...e)=>{const t=sc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=ic(s);if(!r)return;const i=t._component;!P(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,rc(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t});function rc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ic(e){return q(e)?document.querySelector(e):e}function xe(e){const t=new Uint8Array(e);let n="";for(const r of t)n+=String.fromCharCode(r);return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function fn(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),n=(4-t.length%4)%4,s=t.padEnd(t.length+n,"="),r=atob(s),i=new ArrayBuffer(r.length),o=new Uint8Array(i);for(let l=0;l<r.length;l++)o[l]=r.charCodeAt(l);return i}function ys(){return oc.stubThis(globalThis?.PublicKeyCredential!==void 0&&typeof globalThis.PublicKeyCredential=="function")}const oc={stubThis:e=>e};function bi(e){const{id:t}=e;return{...e,id:fn(t),transports:e.transports}}function yi(e){return e==="localhost"||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(e)}class Y extends Error{constructor({message:t,code:n,cause:s,name:r}){super(t,{cause:s}),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name=r??s.name,this.code=n}}function lc({error:e,options:t}){const{publicKey:n}=t;if(!n)throw Error("options was missing required publicKey property");if(e.name==="AbortError"){if(t.signal instanceof AbortSignal)return new Y({message:"Registration ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:e})}else if(e.name==="ConstraintError"){if(n.authenticatorSelection?.requireResidentKey===!0)return new Y({message:"Discoverable credentials were required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT",cause:e});if(t.mediation==="conditional"&&n.authenticatorSelection?.userVerification==="required")return new Y({message:"User verification was required during automatic registration but it could not be performed",code:"ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE",cause:e});if(n.authenticatorSelection?.userVerification==="required")return new Y({message:"User verification was required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT",cause:e})}else{if(e.name==="InvalidStateError")return new Y({message:"The authenticator was previously registered",code:"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED",cause:e});if(e.name==="NotAllowedError")return new Y({message:e.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:e});if(e.name==="NotSupportedError")return n.pubKeyCredParams.filter(r=>r.type==="public-key").length===0?new Y({message:'No entry in pubKeyCredParams was of type "public-key"',code:"ERROR_MALFORMED_PUBKEYCREDPARAMS",cause:e}):new Y({message:"No available authenticator supported any of the specified pubKeyCredParams algorithms",code:"ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG",cause:e});if(e.name==="SecurityError"){const s=globalThis.location.hostname;if(yi(s)){if(n.rp.id!==s)return new Y({message:`The RP ID "${n.rp.id}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:e})}else return new Y({message:`${globalThis.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:e})}else if(e.name==="TypeError"){if(n.user.id.byteLength<1||n.user.id.byteLength>64)return new Y({message:"User ID was not between 1 and 64 characters",code:"ERROR_INVALID_USER_ID_LENGTH",cause:e})}else if(e.name==="UnknownError")return new Y({message:"The authenticator was unable to process the specified options, or could not create a new credential",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:e})}return e}class cc{constructor(){Object.defineProperty(this,"controller",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}createNewAbortSignal(){if(this.controller){const n=new Error("Cancelling existing WebAuthn API call for new one");n.name="AbortError",this.controller.abort(n)}const t=new AbortController;return this.controller=t,t.signal}cancelCeremony(){if(this.controller){const t=new Error("Manually cancelling existing WebAuthn API call");t.name="AbortError",this.controller.abort(t),this.controller=void 0}}}const _i=new cc,ac=["cross-platform","platform"];function wi(e){if(e&&!(ac.indexOf(e)<0))return e}async function uc(e){!e.optionsJSON&&e.challenge&&(console.warn("startRegistration() was not called correctly. It will try to continue with the provided options, but this call should be refactored to use the expected call structure instead. See https://simplewebauthn.dev/docs/packages/browser#typeerror-cannot-read-properties-of-undefined-reading-challenge for more information."),e={optionsJSON:e});const{optionsJSON:t,useAutoRegister:n=!1}=e;if(!ys())throw new Error("WebAuthn is not supported in this browser");const s={...t,challenge:fn(t.challenge),user:{...t.user,id:fn(t.user.id)},excludeCredentials:t.excludeCredentials?.map(bi)},r={};n&&(r.mediation="conditional"),r.publicKey=s,r.signal=_i.createNewAbortSignal();let i;try{i=await navigator.credentials.create(r)}catch(C){throw lc({error:C,options:r})}if(!i)throw new Error("Registration was not completed");const{id:o,rawId:l,response:c,type:d}=i;let f;typeof c.getTransports=="function"&&(f=c.getTransports());let p;if(typeof c.getPublicKeyAlgorithm=="function")try{p=c.getPublicKeyAlgorithm()}catch(C){Kn("getPublicKeyAlgorithm()",C)}let E;if(typeof c.getPublicKey=="function")try{const C=c.getPublicKey();C!==null&&(E=xe(C))}catch(C){Kn("getPublicKey()",C)}let x;if(typeof c.getAuthenticatorData=="function")try{x=xe(c.getAuthenticatorData())}catch(C){Kn("getAuthenticatorData()",C)}return{id:o,rawId:xe(l),response:{attestationObject:xe(c.attestationObject),clientDataJSON:xe(c.clientDataJSON),transports:f,publicKeyAlgorithm:p,publicKey:E,authenticatorData:x},type:d,clientExtensionResults:i.getClientExtensionResults(),authenticatorAttachment:wi(i.authenticatorAttachment)}}function Kn(e,t){console.warn(`The browser extension that intercepted this WebAuthn API call incorrectly implemented ${e}. You should report this error to them.
2
+ `,t)}function fc(){if(!ys())return jn.stubThis(new Promise(t=>t(!1)));const e=globalThis.PublicKeyCredential;return e?.isConditionalMediationAvailable===void 0?jn.stubThis(new Promise(t=>t(!1))):jn.stubThis(e.isConditionalMediationAvailable())}const jn={stubThis:e=>e};function dc({error:e,options:t}){const{publicKey:n}=t;if(!n)throw Error("options was missing required publicKey property");if(e.name==="AbortError"){if(t.signal instanceof AbortSignal)return new Y({message:"Authentication ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:e})}else{if(e.name==="NotAllowedError")return new Y({message:e.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:e});if(e.name==="SecurityError"){const s=globalThis.location.hostname;if(yi(s)){if(n.rpId!==s)return new Y({message:`The RP ID "${n.rpId}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:e})}else return new Y({message:`${globalThis.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:e})}else if(e.name==="UnknownError")return new Y({message:"The authenticator was unable to process the specified options, or could not create a new assertion signature",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:e})}return e}async function hc(e){!e.optionsJSON&&e.challenge&&(console.warn("startAuthentication() was not called correctly. It will try to continue with the provided options, but this call should be refactored to use the expected call structure instead. See https://simplewebauthn.dev/docs/packages/browser#typeerror-cannot-read-properties-of-undefined-reading-challenge for more information."),e={optionsJSON:e});const{optionsJSON:t,useBrowserAutofill:n=!1,verifyBrowserAutofillInput:s=!0}=e;if(!ys())throw new Error("WebAuthn is not supported in this browser");let r;t.allowCredentials?.length!==0&&(r=t.allowCredentials?.map(bi));const i={...t,challenge:fn(t.challenge),allowCredentials:r},o={};if(n){if(!await fc())throw Error("Browser does not support WebAuthn autofill");if(document.querySelectorAll("input[autocomplete$='webauthn']").length<1&&s)throw Error('No <input> with "webauthn" as the only or last value in its `autocomplete` attribute was detected');o.mediation="conditional",i.allowCredentials=[]}o.publicKey=i,o.signal=_i.createNewAbortSignal();let l;try{l=await navigator.credentials.get(o)}catch(x){throw dc({error:x,options:o})}if(!l)throw new Error("Authentication was not completed");const{id:c,rawId:d,response:f,type:p}=l;let E;return f.userHandle&&(E=xe(f.userHandle)),{id:c,rawId:xe(d),response:{authenticatorData:xe(f.authenticatorData),clientDataJSON:xe(f.clientDataJSON),signature:xe(f.signature),userHandle:E},type:p,clientExtensionResults:l.getClientExtensionResults(),authenticatorAttachment:wi(l.authenticatorAttachment)}}class pc extends WebSocket{#n=[];#e=[];#t=null;#s=!1;constructor(t,n,s,r,i){super(new URL(s,document.baseURI.replace(/^http/,"ws")),r),this.binaryType=i||"blob",this.onopen=()=>{this.#s=!0,t(this)},this.onmessage=o=>{this.#e.length?this.#e.shift().resolve(o.data):this.#n.push(o.data)},this.onclose=o=>{if(!this.#s){n(new Error(`Failed to connect to server (code ${o.code})`));return}let l;if(o.wasClean)switch(o.code){case 1e3:l="Connection closed normally";break;case 1001:l="Server is going away";break;case 1002:l="Protocol error";break;case 1003:l="Unsupported data received";break;case 1006:l="Connection lost unexpectedly";break;case 1007:l="Invalid data received";break;case 1008:l="Policy violation";break;case 1009:l="Message too large";break;case 1010:l="Extension negotiation failed";break;case 1011:l="Server encountered an error";break;case 1012:l="Server is restarting";break;case 1013:l="Server is overloaded, try again later";break;case 1014:l="Bad gateway";break;case 1015:l="TLS handshake failed";break;default:l=`Connection closed (code ${o.code})`}else l=o.code===1006?"Connection lost unexpectedly":`Connection closed with error (code ${o.code})`;this.#t=new Error(l),this.#e.splice(0).forEach(c=>c.reject(this.#t))}}receive(){return this.#n.length?Promise.resolve(this.#n.shift()):this.#t?Promise.reject(this.#t):new Promise((t,n)=>this.#e.push({resolve:t,reject:n}))}async receive_bytes(){const t=await this.receive();if(typeof t=="string")throw console.error("WebSocket received text data, expected a binary message",t),new Error("WebSocket received text data, expected a binary message");return t instanceof Blob?t.bytes():new Uint8Array(t)}async receive_json(){const t=await this.receive();if(typeof t!="string")throw console.error("WebSocket received binary data, expected JSON string",t),new Error("WebSocket received binary data, expected JSON string");try{return JSON.parse(t)}catch(n){throw console.error("Failed to parse JSON from WebSocket message",t,n),new Error("Failed to parse JSON from WebSocket message")}}send_json(t){let n;try{n=JSON.stringify(t)}catch(s){throw new Error(`Failed to stringify data for WebSocket: ${s.message}`)}this.send(n)}}function vi(e,t={}){const{protocols:n,binaryType:s}=t;return new Promise((r,i)=>{new pc(r,i,e,n,s)})}let zt=null,et=null;async function gc(){return et||zt||(zt=fetch("/auth/api/settings").then(e=>e.ok?e.json():{}).then(e=>(et=e||{},et)).catch(()=>(et={},et)),zt)}function Mt(){const e=et?.ui_base_path||"/auth/";return e==="/"?"/":e.endsWith("/")?e:e+"/"}function Qc(){return Mt()==="/"?"/admin/":Mt()+"admin/"}function ea(e=""){const t=e.startsWith("/")?e.slice(1):e;return t?Mt()==="/"?"/"+t:Mt()+t:Mt()}const bt="paskia-iframe",ir="paskia-dialog",mc=`body::before {
3
+ content: '';
4
+ position: fixed;
5
+ inset: 0;
6
+ z-index: 1099;
7
+ background: transparent;
8
+ backdrop-filter: blur(0) brightness(1);
9
+ -webkit-backdrop-filter: blur(0) brightness(1);
10
+ pointer-events: none;
11
+ visibility: hidden;
12
+ transition: all 0.2s ease-out;
13
+ }
14
+ body.paskia-backdrop::before {
15
+ -webkit-backdrop-filter: blur(.2rem) brightness(0.5);
16
+ backdrop-filter: blur(.2rem) brightness(0.5);
17
+ visibility: visible;
18
+ }
19
+ body.paskia-backdrop {
20
+ overflow: auto;
21
+ }
22
+ #${bt} {
23
+ border: none;
24
+ position: fixed;
25
+ top: 0;
26
+ left: 0;
27
+ width: 100%;
28
+ height: 100%;
29
+ z-index: 9999;
30
+ color-scheme: auto;
31
+ background: transparent;
32
+ }
33
+ `;let Ve=null,tt=null,ct=null,at=null,or=!1,tn=0;function Ei(){if(document.getElementById(ir))return;const e=document.createElement("style");e.id=ir,e.textContent=mc,document.head.insertBefore(e,document.head.firstChild)}class bc extends Error{constructor(){super("Authentication cancelled"),this.name="AuthCancelledError"}}function yc(){tn++,document.body.classList.add("paskia-backdrop")}function _c(){tn=Math.max(0,tn-1),tn===0&&document.body.classList.remove("paskia-backdrop")}function Zn(){Ve&&(Ve.remove(),Ve=null,_c())}function wc(e){const t=e.data;if(t?.type)switch(t.type){case"auth-success":Zn(),ct&&(ct(),tt=null,ct=null,at=null);break;case"auth-back":Zn(),at&&(at(new bc),tt=null,ct=null,at=null);break}}function vc(){or||typeof window<"u"&&(window.addEventListener("message",wc),or=!0)}function Si(e,t="Authentication"){return Ei(),vc(),tt||(document.getElementById(bt)?(tt=new Promise((n,s)=>{ct=n,at=s}),tt):(tt=new Promise((n,s)=>{ct=n,at=s}),Zn(),yc(),Ve=document.createElement("iframe"),Ve.id=bt,Ve.title=t,Ve.src=e,document.body.appendChild(Ve),tt))}function ta(e,t="Authentication"){Ei();const n=document.getElementById(bt);n&&n.remove();const s=document.createElement("iframe");return s.id=bt,s.title=t,s.src=e,document.body.appendChild(s),s}function na(){const e=document.getElementById(bt);e&&e.remove()}const Ec=1e3;class xi extends Error{constructor(t,n,s){super(s?.detail||`Request failed: ${n.status}`),this.name="ApiError",this.url=t,this.status=n.status,this.statusText=n.statusText,this.data=s}}class nn extends Error{constructor(t,n=null){super(t),this.name="NetworkError",this.originalError=n}}async function Sc(e,t={}){const{timeout:n=Ec,...s}=t;for(s.credentials=s.credentials||"include";;){let r;try{r=await fetch(e,{...s,signal:n?AbortSignal.timeout(n):void 0})}catch(i){const o=i;throw o.name==="TimeoutError"?new nn("Request timed out",o):o.name==="AbortError"?i:o.name==="TypeError"&&o.message==="Failed to fetch"?new nn("Unable to connect to server",o):new nn(o.message||"Network error",o)}if(r.status===401||r.status===403){let i=null;try{i=await r.clone().json()}catch{}if(i?.auth?.iframe&&window===window.top){await Si(i.auth.iframe);continue}}return r}}async function xc(e,t={}){return Tc(e,t,Sc)}async function Tc(e,t={},n=fetch){const s={Accept:"application/json",...t.headers};let r;t.body&&typeof t.body=="object"&&!(t.body instanceof FormData)?(s["Content-Type"]="application/json",r=JSON.stringify(t.body)):r=t.body;const i={...t,headers:s,body:r},o=await n(e,i),l=await o.json();if(!o.ok)throw new xi(e,o,l);return l}function sa(e){return e instanceof nn||e instanceof xi?e.message:e.name==="TimeoutError"?"Request timed out":e.name==="TypeError"&&e.message==="Failed to fetch"?"Unable to connect to server":e.message||"An error occurred"}const Ac=60*1e3,Rc=300*1e3;class ra{constructor(t,n){this.pollTimer=null,this.idleTimer=null,this.active=!1,this.userUuidGetter=t,this.onSessionLost=n,this.resetIdleTimer=this.resetIdleTimer.bind(this)}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.active||this.startPolling(),this.idleTimer=setTimeout(()=>this.stopPolling(),Rc)}async validate(){try{(await xc("/auth/api/validate",{method:"POST"})).ctx?.user?.uuid!==this.userUuidGetter()&&window.location.reload()}catch(t){t.name!=="NetworkError"&&(this.stopPolling(),this.onSessionLost(t))}}startPolling(){this.active||(this.active=!0,this.pollTimer=setInterval(()=>this.validate(),Ac))}stopPolling(){this.active=!1,this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)}start(){window.addEventListener("pointermove",this.resetIdleTimer),window.addEventListener("pointerdown",this.resetIdleTimer),this.resetIdleTimer()}stop(){window.removeEventListener("pointermove",this.resetIdleTimer),window.removeEventListener("pointerdown",this.resetIdleTimer),this.idleTimer&&clearTimeout(this.idleTimer),this.stopPolling()}}async function Ti(e){const n=(await gc())?.auth_host;return n&&location.host!==n?`//${n}${e}`:e}async function Cc(e=null,t=null,n=null){let s=[];e&&s.push(`reset=${encodeURIComponent(e)}`),t&&s.push(`name=${encodeURIComponent(t)}`);const r=s.length?`?${s.join("&")}`:"";for(;;){const i=await vi(await Ti(`/auth/ws/register${r}`));try{const o=await i.receive_json();if((o.status===401||o.status===403)&&o.auth?.iframe){i.close(),await Si(o.auth.iframe);continue}if(o.status)throw new Error(o.detail||`Registration failed: ${o.status}`);n&&n();const l=await uc(o);i.send_json(l);const c=await i.receive_json();if(c.status)throw new Error(c.detail||`Registration failed: ${c.status}`);return c}catch(o){throw i.close(),console.error("Registration error:",o),Error(o.name==="NotAllowedError"?"Passkey registration cancelled":o.message)}}}async function Oc(){const e=await vi(await Ti("/auth/ws/authenticate"));try{let t=await e.receive_json();if(t.status>=400)throw new Error(t.detail||`Authentication failed: ${t.status}`);const n=await hc(t);if(e.send_json(n),t=await e.receive_json(),t.status>=400)throw new Error(t.detail||`Authentication failed: ${t.status}`);return t}catch(t){throw console.error("Authentication error:",t),Error(t.name==="NotAllowedError"?"Passkey authentication cancelled":t.message)}finally{e.close()}}const ia={authenticate:Oc,register:Cc},Ic={ArrowLeft:"left",ArrowRight:"right",ArrowUp:"up",ArrowDown:"down"},Pc=new Set(["text","email","password","search","tel","url","number"]),Mc=e=>{const t=Ic[e.key];if(!t)return null;const n=e.target;return(n.tagName==="INPUT"&&Pc.has(n.type)||n.tagName==="TEXTAREA")&&(t==="left"||t==="right")&&n.value!==""?null:t},xn=(e,t=null)=>{if(!e)return[];const n=t||e.dataset?.navItems||'button:not([disabled]), a, [tabindex="0"], [tabindex="-1"]:not([disabled])';return Array.from(e.querySelectorAll(n))},Nc=(e,t)=>{const n=xn(e,t);if(n.length===0)return null;const s=n[0].getBoundingClientRect().top;let r=0;for(const i of n)if(Math.abs(i.getBoundingClientRect().top-s)<5)r++;else break;return{items:n,cols:Math.max(1,r)}},Dc=(e,t,n,s={})=>{const r=xn(e,s.itemSelector);if(r.length===0)return"none";const i=r.indexOf(t);return i===-1?"none":n==="left"?i>0?(r[i-1].focus(),"moved"):"boundary":n==="right"&&i<r.length-1?(r[i+1].focus(),"moved"):"boundary"},oa=(e,t,n,s={})=>{const r=Nc(e,s.itemSelector);if(!r)return"none";const{items:i,cols:o}=r,l=i.indexOf(t);if(l===-1)return"none";const c=Math.floor(l/o),d=l%o;let f=l;switch(n){case"left":if(d===0)return"boundary";f=l-1;break;case"right":if(l>=i.length-1)return"boundary";f=l+1;break;case"up":if(c===0)return"boundary";f=l-o;break;case"down":if(l+o>=i.length)return"boundary";f=l+o;break;default:return"none"}return f!==l?(i[f].focus(),"moved"):"none"},la=(e,t={})=>{if(!e)return null;const n=e.querySelector("[data-nav-primary]")||t.primarySelector&&e.querySelector(t.primarySelector);if(n)return n.focus(),n;const s=xn(e,t.itemSelector);return s.length>0?(s[0].focus(),s[0]):null},ca=(e,t,n={})=>{if(!e)return null;const s=xn(e,n.itemSelector);if(s.length===0)return null;const r=t<0?s.length+t:t;return r>=0&&r<s.length?(s[r].focus(),s[r]):null},aa=(e,t,n)=>e.key!=="Escape"?!1:(e.preventDefault(),t?.("up"),!0),ua=(e,t)=>{const n=navigator.userAgent.includes("Mac OS");return e.key==="Delete"||n&&e.key==="Backspace"?(e.preventDefault(),t?.(),!0):!1},Fc=e=>{if(!e)return null;const t=[".btn-primary:not([disabled])",".btn-secondary:not([disabled])","button:not([disabled])"];for(const n of t){const s=e.querySelector(n);if(s)return s.focus(),s}return null},fa=e=>{if(!e)return null;const t=e.querySelector('input:not([disabled]):not([type="hidden"]), textarea:not([disabled])');return t?(t.focus(),typeof t.select=="function"&&t.select(),t):Fc(e)},Uc=".button-row, .modal-actions, .actions, .role-actions, .ancillary-actions",Lc=e=>{const t=Mc(e);if(!t)return;const n=e.target;if(n.tagName!=="BUTTON"&&n.tagName!=="A")return;const s=n.closest(Uc);s&&(t==="left"||t==="right")&&(e.preventDefault(),Dc(s,n,t,{itemSelector:"button:not([disabled]), a"}))};let lr=!1;const da=()=>{lr||typeof document>"u"||(document.addEventListener("keydown",Lc),lr=!0)},ha=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n};export{Cc as $,Mc as A,la as B,ea as C,Qc as D,Dc as E,ae as F,ca as G,ia as H,ta as I,Zc as J,da as K,Xc as L,lo as M,ra as N,na as O,jc as P,Zt as Q,Bc as R,G as S,st as T,F as U,Hi as V,Hc as W,us as X,kc as Y,Oc as Z,ha as _,Wr as a,oa as a0,ua as a1,aa as a2,qc as a3,fa as a4,Yc as a5,xi as a6,sa as a7,Mt as a8,Fc as a9,Tc as aa,Gn as b,Jc as c,fi as d,ss as e,ns as f,Gc as g,bl as h,Vc as i,zc as j,$c as k,gc as l,Rl as m,Fr as n,No as o,vi as p,Ae as q,Wc as r,hc as s,ji as t,Mr as u,tr as v,Mn as w,Yn as x,vo as y,xc as z};
@@ -0,0 +1 @@
1
+ :root{--font-sans: "Inter", "Inter var", "Segoe UI", system-ui, -apple-system, "Helvetica Neue", sans-serif;--font-mono: "DM Mono", "JetBrains Mono", "SFMono-Regular", Menlo, Monaco, Consolas, "Liberation Mono", monospace;--color-canvas: #ffffff;--color-surface: #eff6ff;--color-surface-subtle: #dbeafe;--color-border: #2563eb;--color-border-strong: #1e40af;--color-heading: #1e3a8a;--color-text: #1e293b;--color-text-muted: #475569;--color-link: #1d4ed8;--color-link-hover: #1e40af;--color-accent: #2563eb;--color-accent-strong: #1e40af;--color-accent-contrast: #ffffff;--color-success-text: #166534;--color-success-bg: #dcfce7;--color-error-text: #b91c1c;--color-error-bg: #fee2e2;--color-info-text: #1e40af;--color-info-bg: #dbeafe;--color-danger: #dc2626;--shadow-soft: 0 10px 30px rgba(30, 64, 175, .15);--radius-none: 0;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 10px;--space-xxs: .25rem;--space-xs: .5rem;--space-sm: .75rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2.25rem;--space-xxl: 3.5rem;--layout-padding: clamp(1.5rem, 3vw + 1rem, 3.25rem);--transition-base: .16s ease;--focus-ring: 0 0 0 2px var(--color-accent)}@media(prefers-color-scheme:dark){:root{--color-canvas: #0f172a;--color-surface: #141b2f;--color-surface-subtle: #1b243b;--color-border: #25304a;--color-border-strong: #3d4d6b;--color-heading: #fff;--color-text: #e2e8f0;--color-text-muted: #94a3b8;--color-link: #60a5fa;--color-link-hover: #93c5fd;--color-accent: #60a5fa;--color-accent-strong: #3b82f6;--color-accent-contrast: #0b1120;--color-success-text: #34d399;--color-success-bg: #1a4d2e;--color-error-text: #fca5a5;--color-error-bg: #4a1f1f;--color-info-text: #bae6fd;--color-info-bg: #1e3a5f;--color-danger: #f87171;--shadow-soft: 0 0 0 #000000}}*,*:before,*:after{box-sizing:border-box}html{overflow:clip;height:100%;background:var(--color-canvas)}body{overflow:auto;scrollbar-gutter:stable;height:100%;margin:0;font-family:var(--font-sans);background:none;color:var(--color-text);line-height:1.55;-webkit-font-smoothing:antialiased;text-align:justify;hyphens:auto;-webkit-hyphens:auto;-moz-hyphens:auto}body,#app,#admin-app{display:flex;flex-direction:column;min-height:100vh}#app,#admin-app{flex:1}a,a:visited{color:var(--color-link);text-decoration:none}a:hover,a:focus-visible{color:var(--color-link-hover)}.app-shell{flex:1;display:flex;flex-direction:column;min-height:100vh}.app-main{flex:1;display:flex;flex-direction:column}.view-root{position:relative;flex:1;width:100%;display:flex;flex-direction:column;gap:2rem;padding:var(--layout-padding);box-sizing:border-box;margin:0 auto}.view-root--wide{width:min(100%,1200px)}.view-root--narrow{max-width:540px}.view-header{display:flex;flex-direction:column;gap:.75rem}.view-header h1{margin:0;font-weight:600;color:var(--color-heading)}.view-lede{margin:0;color:var(--color-text-muted);font-size:1rem}.section-block{display:flex;flex-direction:column;gap:1rem}.section-block h2{margin:0;font-size:clamp(1.25rem,1.5vw + 1rem,1.65rem);font-weight:600;color:var(--color-heading)}.section-body{display:flex;flex-direction:column;gap:1rem}.section-description{margin:0;color:var(--color-text-muted)}.button-row{display:flex;flex-wrap:nowrap;gap:.75rem;justify-content:flex-start}.button-row button{min-width:0}.surface{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-lg);box-shadow:var(--shadow-soft)}.surface--tight{padding:var(--space-md)}button{font-family:inherit;font-size:1rem;font-weight:500;border-radius:var(--radius-sm);border:1px solid transparent;padding:.65rem 1.1rem;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:.4rem;background:var(--color-surface);color:var(--color-text)}button:disabled{cursor:not-allowed;filter:opacity(.6)}.btn-primary{background:var(--color-accent);color:var(--color-accent-contrast);border-color:var(--color-accent);box-shadow:var(--shadow-soft)}.btn-primary:hover:not(:disabled){background:var(--color-accent-strong);border-color:var(--color-accent-strong)}.btn-secondary{background:transparent;color:var(--color-text);border-color:var(--color-border)}.btn-secondary:hover:not(:disabled){border-color:var(--color-border-strong);background:var(--color-surface-subtle)}.btn-danger{background:var(--color-danger);color:var(--color-accent-contrast);border-color:transparent}.btn-danger:hover:not(:disabled){filter:brightness(.92)}.btn-primary:focus-visible,.btn-secondary:focus-visible,.btn-danger:focus-visible{outline:1px solid var(-webkit-focus-ring-color)}input[type=text],input[type=search],input[type=email],textarea,select{font:inherit;width:100%;padding:.65rem .75rem;border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);transition:border-color var(--transition-base),box-shadow var(--transition-base)}label{display:flex;flex-direction:column;gap:.5rem;color:var(--color-text)}p{margin:0;color:var(--color-text)}small{color:var(--color-text-muted)}.table-wrapper{overflow-x:auto;background:var(--color-surface);border:1px solid var(--color-border)}table{width:100%;border-collapse:collapse;font-size:.95rem}thead tr{background:var(--color-surface-subtle);color:var(--color-text-muted)}td,th{padding:.65rem .75rem;border-bottom:1px solid var(--color-border);text-align:left}.center{text-align:center}.badge{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .6rem;border-radius:var(--radius-sm);background:var(--color-surface-subtle);border:1px solid var(--color-border);color:var(--color-text-muted);font-size:.75rem}.global-status{position:fixed;top:1.5rem;left:0;right:0;margin:0 auto;z-index:1200;width:fit-content;min-width:min(520px,calc(100% - 2rem));max-width:calc(100% - 2rem);display:none}.global-status .status{display:flex;align-items:center;justify-content:center;padding:.85rem 1.25rem;border-radius:var(--radius-sm);border-width:1px;border-style:solid;background:var(--color-surface);box-shadow:var(--shadow-soft);font-weight:550}.status.info{border-color:#3b82f6;color:var(--color-info-text);background:var(--color-info-bg)}.status.success{border-color:#16a34a;color:var(--color-success-text);background:var(--color-success-bg)}.status.error{border-color:#dc2626;color:var(--color-error-text);background:var(--color-error-bg)}.dialog-overlay{position:fixed;inset:0;background:transparent;z-index:1100;display:flex;align-items:center;justify-content:center;padding:1.5rem}.device-dialog,.modal{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);width:min(520px,100%);max-height:calc(100vh - 3rem);overflow-y:auto;padding:1.75rem;box-shadow:var(--shadow-soft);color:var(--color-text)}.qr-container{display:flex;flex-direction:column;align-items:center;gap:.75rem;text-align:center;color:var(--color-text-muted)}.qr-code{padding:1rem;background:#fff;box-shadow:var(--shadow-soft)}.link-container,.token-display,.token-info{background:var(--color-surface-subtle);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:.75rem;color:var(--color-text)}:root{--card-width: 16rem}.record-list,.credential-list,.session-list{width:100%;display:grid;grid-auto-flow:row;grid-template-columns:repeat(auto-fill,minmax(var(--card-width),1fr));justify-content:start;gap:.5rem;align-items:stretch;margin:0 auto;outline:none}@media(max-width:720px){.record-list{display:flex;flex-direction:column;max-width:100%}}.record-item,.credential-item,.session-item{display:flex;flex-direction:column;padding:.5rem;border-radius:var(--radius-md);background:var(--color-surface);height:100%;transition:border-color .2s ease,box-shadow .2s ease,transform .2s ease;position:relative;cursor:pointer}.record-item:hover,.credential-item:hover,.session-item:hover{border-color:var(--color-border-strong);box-shadow:0 10px 24px #0f172a1f;transform:translateY(-1px)}.record-item.is-current,.credential-item.current-session,.credential-item.is-hovered,.session-item.is-current,.session-item.is-hovered,.credential-item.is-linked-session,.session-item.is-linked-credential{border-color:var(--color-accent);background-color:var(--color-surface-subtle)}.credential-item:focus,.session-item:focus{outline:1px solid var(-webkit-focus-ring-color)}.item-top{display:flex;align-items:center;height:2.5rem}.item-icon{width:40px;height:40px;display:grid;place-items:center;flex-shrink:0}.auth-icon{border-radius:var(--radius-sm)}.icon{flex:0 0 auto;font-size:1.5em;width:40px}.item-title{flex:1;margin:0;font-size:1rem;font-weight:600;color:var(--color-heading);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.item-actions{flex-shrink:0;display:flex;align-items:center}.item-actions .badge+.btn-card-delete{margin-left:.25rem}.item-actions .badge+.badge{margin-left:.25rem}.item-details{margin-left:40px}.credential-dates,.session-dates{display:grid;grid-auto-flow:row;grid-template-columns:8em 1fr;font-size:.75rem;align-items:center}.date-label{font-weight:500;color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis}.date-value{color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-card-delete{background:transparent;border:none;color:var(--color-danger);padding:.35rem .5rem;font-size:1.05rem;line-height:1;border-radius:var(--radius-sm);cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.btn-card-delete:hover:not(:disabled){background:#fee}.btn-card-delete:disabled{filter:opacity(.4);cursor:not-allowed}.session-emoji{font-size:1.2rem}.session-group{position:relative}.session-group:focus-visible{outline:1px solid var(-webkit-focus-ring-color)}.session-group-host{display:flex;align-items:center;font-size:1.5rem;font-weight:600;margin:.5rem 0}.session-group-icon{margin-left:-1.5rem}.session-group-host a{color:var(--color-text);text-decoration:none}.session-group:focus-visible .session-group-host,.session-group:focus-visible .session-group-host a{color:var(--color-heading)}.btn-card-delete{display:none}.session-item:focus .btn-card-delete{display:block}.badge{padding:.2rem .5rem;border-radius:var(--radius-sm);font-size:.8rem;font-weight:500;white-space:nowrap}.badge-current{background:var(--color-accent);color:var(--color-accent-contrast);box-shadow:0 0 0 1px var(--color-accent) inset}.badge:not(.badge-current){background:var(--color-surface-subtle);color:var(--color-text-muted);border:1px solid var(--color-border)}.session-meta-info{font-size:.75rem;color:var(--color-text-muted);font-family:monospace}.empty-state{text-align:center;padding:var(--space-lg);color:var(--color-text-muted)}.empty-state p{margin:0}.user-info{display:grid;border-radius:var(--radius-md);background:var(--color-surface);padding:1.1rem 1.25rem}.user-details{display:grid;grid-template-columns:7em 1fr;gap:0 .5rem;padding-left:40px;font-size:.75rem}.toggle-link{color:var(--color-link);cursor:pointer}.toggle-link:hover{color:var(--color-link-hover)}.token-info code{font-family:var(--font-mono)}@media(max-width:720px){.view-root{padding:clamp(1rem,3vw + .75rem,2rem);gap:1.75rem}.global-status{top:1rem}}.dialog-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;background:transparent;backdrop-filter:blur(.1rem) brightness(.7);-webkit-backdrop-filter:blur(.1rem) brightness(.7);display:flex;align-items:center;justify-content:center;z-index:1000}.dialog-container{max-width:90vw;max-height:90vh;overflow-y:auto}.dialog-content{flex:none;width:100%;max-width:480px;padding:2rem;background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:0 20px 60px #1e293b;border:1px solid var(--color-border)}.dialog-content--wide{max-width:540px}.dialog-content--narrow{max-width:420px}@media(max-width:720px){.dialog-content{padding:1.5rem}}.slot-machine{padding:.875rem 1rem;background:var(--color-surface-hover, rgba(0, 0, 0, .03));border:1px solid var(--color-border);border-radius:var(--radius-sm);font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;display:flex;align-items:center;-webkit-user-select:none;user-select:none;pointer-events:none;white-space:nowrap;overflow:hidden}.slot-reel{display:inline-flex;align-items:center;justify-content:center;flex:1;min-width:0;height:1.8em;position:relative}
@@ -1 +1 @@
1
- .permissions-section[data-v-56228c4a]{margin-bottom:var(--space-xl)}.permissions-section h2[data-v-56228c4a]{margin-bottom:var(--space-md)}.actions[data-v-56228c4a]{display:flex;flex-wrap:wrap;gap:var(--space-sm);align-items:center}.actions button[data-v-56228c4a]{width:auto}.org-table a[data-v-56228c4a]{text-decoration:none;color:var(--color-link)}.org-table a[data-v-56228c4a]:hover{text-decoration:underline}.org-table .center[data-v-56228c4a]{width:6rem;min-width:6rem}.org-table .role-names[data-v-56228c4a]{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.perm-name-cell[data-v-56228c4a]{display:flex;flex-direction:column;gap:.3rem}.perm-title[data-v-56228c4a]{font-weight:600;color:var(--color-heading)}.perm-id-info[data-v-56228c4a]{font-size:.8rem;color:var(--color-text-muted);display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.perm-domain[data-v-56228c4a]{color:var(--color-text-muted);font-size:.9rem}.icon-btn[data-v-56228c4a]{background:none;border:none;color:var(--color-text-muted);padding:.2rem;border-radius:var(--radius-sm);cursor:pointer;transition:background .2s ease,color .2s ease}.icon-btn[data-v-56228c4a]:hover{color:var(--color-heading);background:var(--color-surface-muted)}.delete-icon[data-v-56228c4a]{color:var(--color-danger)}.delete-icon[data-v-56228c4a]:hover{background:var(--color-danger-bg);color:var(--color-danger-text)}.matrix-wrapper[data-v-56228c4a]{margin:var(--space-md) 0;padding:var(--space-lg)}.matrix-scroll[data-v-56228c4a]{overflow-x:auto}.matrix-hint[data-v-56228c4a]{font-size:.8rem;color:var(--color-text-muted)}.perm-matrix-grid[data-v-56228c4a]{display:inline-grid;gap:.25rem;align-items:stretch}.perm-matrix-grid[data-v-56228c4a]>*{padding:.35rem .45rem;font-size:.75rem}.perm-matrix-grid .grid-head[data-v-56228c4a]{color:var(--color-text-muted);text-transform:uppercase;font-weight:600;letter-spacing:.05em}.perm-matrix-grid .perm-head[data-v-56228c4a]{display:flex;align-items:flex-end;justify-content:flex-start;padding:.35rem .45rem;font-size:.75rem}.perm-matrix-grid .org-head[data-v-56228c4a]{display:flex;align-items:flex-end;justify-content:center}.perm-matrix-grid .org-head span[data-v-56228c4a]{writing-mode:vertical-rl;transform:rotate(180deg);font-size:.65rem}.perm-name[data-v-56228c4a]{font-weight:600;color:var(--color-heading);padding:.35rem .45rem;font-size:.75rem}.display-text[data-v-56228c4a]{margin-right:var(--space-xs)}.edit-display-btn[data-v-56228c4a]{padding:.1rem .2rem;font-size:.8rem}.edit-org-btn[data-v-56228c4a]{padding:.1rem .2rem;font-size:.8rem;margin-left:var(--space-xs)}.perm-actions[data-v-56228c4a],.center[data-v-56228c4a]{text-align:center}.muted[data-v-56228c4a]{color:var(--color-text-muted)}.card.surface[data-v-f76fbbc3]{padding:var(--space-lg)}.org-title[data-v-f76fbbc3]{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-lg)}.org-name[data-v-f76fbbc3]{font-size:1.5rem;font-weight:600;color:var(--color-heading)}.icon-btn[data-v-f76fbbc3]{background:none;border:none;color:var(--color-text-muted);padding:.2rem;border-radius:var(--radius-sm);cursor:pointer;transition:background .2s ease,color .2s ease}.icon-btn[data-v-f76fbbc3]:hover{color:var(--color-heading);background:var(--color-surface-muted)}.matrix-wrapper[data-v-f76fbbc3]{margin:var(--space-md) 0;padding:var(--space-lg)}.matrix-scroll[data-v-f76fbbc3]{overflow-x:auto}.matrix-hint[data-v-f76fbbc3]{font-size:.8rem;color:var(--color-text-muted)}.perm-matrix-grid[data-v-f76fbbc3]{display:inline-grid;gap:.25rem;align-items:stretch}.perm-matrix-grid[data-v-f76fbbc3]>*{padding:.35rem .45rem;font-size:.75rem}.perm-matrix-grid .grid-head[data-v-f76fbbc3]{color:var(--color-text-muted);text-transform:uppercase;font-weight:600;letter-spacing:.05em}.perm-matrix-grid .perm-head[data-v-f76fbbc3]{display:flex;align-items:flex-end;justify-content:flex-start;padding:.35rem .45rem;font-size:.75rem}.perm-matrix-grid .role-head[data-v-f76fbbc3]{display:flex;align-items:flex-end;justify-content:center}.perm-matrix-grid .role-head span[data-v-f76fbbc3]{writing-mode:vertical-rl;transform:rotate(180deg);font-size:.65rem}.perm-matrix-grid .add-role-head[data-v-f76fbbc3]{cursor:pointer}.perm-name[data-v-f76fbbc3]{font-weight:600;color:var(--color-heading);padding:.35rem .45rem;font-size:.75rem}.roles-grid[data-v-f76fbbc3]{display:flex;gap:var(--space-lg);margin-top:var(--space-lg)}.role-column[data-v-f76fbbc3]{flex:1;min-width:200px;border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-md)}.role-header[data-v-f76fbbc3]{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-md)}.role-name[data-v-f76fbbc3]{display:flex;align-items:center;gap:var(--space-xs);font-size:1.1rem;color:var(--color-heading)}.role-actions[data-v-f76fbbc3]{display:flex;gap:var(--space-xs)}.plus-btn[data-v-f76fbbc3]{background:var(--color-accent-soft);color:var(--color-accent);border:none;border-radius:var(--radius-sm);padding:.25rem .45rem;font-size:1.1rem;cursor:pointer}.plus-btn[data-v-f76fbbc3]:hover{background:#2563eb2e}.user-list[data-v-f76fbbc3]{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:var(--space-xs)}.user-chip[data-v-f76fbbc3]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:.45rem .6rem;display:flex;justify-content:space-between;gap:var(--space-sm);cursor:grab}.user-chip[data-v-f76fbbc3]:focus{outline:2px solid var(--color-accent);outline-offset:1px}.user-chip .meta[data-v-f76fbbc3]{font-size:.7rem;color:var(--color-text-muted)}.empty-role[data-v-f76fbbc3]{border:1px dashed var(--color-border-strong);border-radius:var(--radius-md);padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs);align-items:flex-start}.empty-text[data-v-f76fbbc3]{margin:0}.delete-icon[data-v-f76fbbc3]{color:var(--color-danger)}.delete-icon[data-v-f76fbbc3]:hover{background:var(--color-danger-bg);color:var(--color-danger-text)}.muted[data-v-f76fbbc3]{color:var(--color-text-muted)}@media (max-width: 720px){.roles-grid[data-v-f76fbbc3]{flex-direction:column}}.user-detail[data-v-738bccea]{display:flex;flex-direction:column;gap:var(--space-lg)}.actions[data-v-738bccea]{display:flex;flex-wrap:wrap;gap:var(--space-sm);align-items:center}.ancillary-actions[data-v-738bccea]{margin-top:-.5rem}.reg-token-btn[data-v-738bccea]{align-self:flex-start}.registration-actions[data-v-738bccea]{display:flex;flex-direction:column;gap:.5rem}.icon-btn[data-v-738bccea]{background:none;border:none;color:var(--color-text-muted);padding:.2rem;border-radius:var(--radius-sm);cursor:pointer;transition:background .2s ease,color .2s ease}.icon-btn[data-v-738bccea]:hover{color:var(--color-heading);background:var(--color-surface-muted)}.matrix-hint[data-v-738bccea]{font-size:.8rem;color:var(--color-text-muted)}.error[data-v-738bccea]{color:var(--color-danger-text)}.small[data-v-738bccea]{font-size:.9rem}.muted[data-v-738bccea]{color:var(--color-text-muted)}.error[data-v-8d16c6cc]{color:var(--color-danger-text)}.small[data-v-8d16c6cc]{font-size:.9rem}.muted[data-v-8d16c6cc]{color:var(--color-text-muted)}.optional[data-v-8d16c6cc]{font-weight:400;color:var(--color-text-muted);font-size:.85em}.view-admin[data-v-6d820553]{padding-bottom:var(--space-3xl)}.view-header[data-v-6d820553]{display:flex;flex-direction:column;gap:var(--space-sm)}.admin-section[data-v-6d820553]{margin-top:var(--space-xl)}.admin-section-body[data-v-6d820553],.admin-panels[data-v-6d820553]{display:flex;flex-direction:column;gap:var(--space-xl)}
1
+ .permissions-section[data-v-56228c4a]{margin-bottom:var(--space-xl)}.permissions-section h2[data-v-56228c4a]{margin-bottom:var(--space-md)}.actions[data-v-56228c4a]{display:flex;flex-wrap:wrap;gap:var(--space-sm);align-items:center}.actions button[data-v-56228c4a]{width:auto}.org-table a[data-v-56228c4a]{text-decoration:none;color:var(--color-link)}.org-table a[data-v-56228c4a]:hover{text-decoration:underline}.org-table .center[data-v-56228c4a]{width:6rem;min-width:6rem}.org-table .role-names[data-v-56228c4a]{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.perm-name-cell[data-v-56228c4a]{display:flex;flex-direction:column;gap:.3rem}.perm-title[data-v-56228c4a]{font-weight:600;color:var(--color-heading)}.perm-id-info[data-v-56228c4a]{font-size:.8rem;color:var(--color-text-muted);display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.perm-domain[data-v-56228c4a]{color:var(--color-text-muted);font-size:.9rem}.icon-btn[data-v-56228c4a]{background:none;border:none;color:var(--color-text-muted);padding:.2rem;border-radius:var(--radius-sm);cursor:pointer;transition:background .2s ease,color .2s ease}.icon-btn[data-v-56228c4a]:hover{color:var(--color-heading);background:var(--color-surface-muted)}.delete-icon[data-v-56228c4a]{color:var(--color-danger)}.delete-icon[data-v-56228c4a]:hover{background:var(--color-danger-bg);color:var(--color-danger-text)}.matrix-wrapper[data-v-56228c4a]{margin:var(--space-md) 0;padding:var(--space-lg)}.matrix-scroll[data-v-56228c4a]{overflow-x:auto}.matrix-hint[data-v-56228c4a]{font-size:.8rem;color:var(--color-text-muted)}.perm-matrix-grid[data-v-56228c4a]{display:inline-grid;gap:.25rem;align-items:stretch}.perm-matrix-grid[data-v-56228c4a]>*{padding:.35rem .45rem;font-size:.75rem}.perm-matrix-grid .grid-head[data-v-56228c4a]{color:var(--color-text-muted);text-transform:uppercase;font-weight:600;letter-spacing:.05em}.perm-matrix-grid .perm-head[data-v-56228c4a]{display:flex;align-items:flex-end;justify-content:flex-start;padding:.35rem .45rem;font-size:.75rem}.perm-matrix-grid .org-head[data-v-56228c4a]{display:flex;align-items:flex-end;justify-content:center}.perm-matrix-grid .org-head span[data-v-56228c4a]{writing-mode:vertical-rl;transform:rotate(180deg);font-size:.65rem}.perm-name[data-v-56228c4a]{font-weight:600;color:var(--color-heading);padding:.35rem .45rem;font-size:.75rem}.display-text[data-v-56228c4a]{margin-right:var(--space-xs)}.edit-display-btn[data-v-56228c4a]{padding:.1rem .2rem;font-size:.8rem}.edit-org-btn[data-v-56228c4a]{padding:.1rem .2rem;font-size:.8rem;margin-left:var(--space-xs)}.perm-actions[data-v-56228c4a],.center[data-v-56228c4a]{text-align:center}.muted[data-v-56228c4a]{color:var(--color-text-muted)}.card.surface[data-v-f76fbbc3]{padding:var(--space-lg)}.org-title[data-v-f76fbbc3]{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-lg)}.org-name[data-v-f76fbbc3]{font-size:1.5rem;font-weight:600;color:var(--color-heading)}.icon-btn[data-v-f76fbbc3]{background:none;border:none;color:var(--color-text-muted);padding:.2rem;border-radius:var(--radius-sm);cursor:pointer;transition:background .2s ease,color .2s ease}.icon-btn[data-v-f76fbbc3]:hover{color:var(--color-heading);background:var(--color-surface-muted)}.matrix-wrapper[data-v-f76fbbc3]{margin:var(--space-md) 0;padding:var(--space-lg)}.matrix-scroll[data-v-f76fbbc3]{overflow-x:auto}.matrix-hint[data-v-f76fbbc3]{font-size:.8rem;color:var(--color-text-muted)}.perm-matrix-grid[data-v-f76fbbc3]{display:inline-grid;gap:.25rem;align-items:stretch}.perm-matrix-grid[data-v-f76fbbc3]>*{padding:.35rem .45rem;font-size:.75rem}.perm-matrix-grid .grid-head[data-v-f76fbbc3]{color:var(--color-text-muted);text-transform:uppercase;font-weight:600;letter-spacing:.05em}.perm-matrix-grid .perm-head[data-v-f76fbbc3]{display:flex;align-items:flex-end;justify-content:flex-start;padding:.35rem .45rem;font-size:.75rem}.perm-matrix-grid .role-head[data-v-f76fbbc3]{display:flex;align-items:flex-end;justify-content:center}.perm-matrix-grid .role-head span[data-v-f76fbbc3]{writing-mode:vertical-rl;transform:rotate(180deg);font-size:.65rem}.perm-matrix-grid .add-role-head[data-v-f76fbbc3]{cursor:pointer}.perm-name[data-v-f76fbbc3]{font-weight:600;color:var(--color-heading);padding:.35rem .45rem;font-size:.75rem}.roles-grid[data-v-f76fbbc3]{display:flex;gap:var(--space-lg);margin-top:var(--space-lg)}.role-column[data-v-f76fbbc3]{flex:1;min-width:200px;border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-md)}.role-header[data-v-f76fbbc3]{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-md)}.role-name[data-v-f76fbbc3]{display:flex;align-items:center;gap:var(--space-xs);font-size:1.1rem;color:var(--color-heading)}.role-actions[data-v-f76fbbc3]{display:flex;gap:var(--space-xs)}.plus-btn[data-v-f76fbbc3]{background:var(--color-accent-soft);color:var(--color-accent);border:none;border-radius:var(--radius-sm);padding:.25rem .45rem;font-size:1.1rem;cursor:pointer}.plus-btn[data-v-f76fbbc3]:hover{background:#2563eb2e}.user-list[data-v-f76fbbc3]{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:var(--space-xs)}.user-chip[data-v-f76fbbc3]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:.45rem .6rem;display:flex;justify-content:space-between;gap:var(--space-sm);cursor:grab}.user-chip[data-v-f76fbbc3]:focus{outline:2px solid var(--color-accent);outline-offset:1px}.user-chip .meta[data-v-f76fbbc3]{font-size:.7rem;color:var(--color-text-muted)}.empty-role[data-v-f76fbbc3]{border:1px dashed var(--color-border-strong);border-radius:var(--radius-md);padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs);align-items:flex-start}.empty-text[data-v-f76fbbc3]{margin:0}.delete-icon[data-v-f76fbbc3]{color:var(--color-danger)}.delete-icon[data-v-f76fbbc3]:hover{background:var(--color-danger-bg);color:var(--color-danger-text)}.muted[data-v-f76fbbc3]{color:var(--color-text-muted)}@media(max-width:720px){.roles-grid[data-v-f76fbbc3]{flex-direction:column}}.user-detail[data-v-738bccea]{display:flex;flex-direction:column;gap:var(--space-lg)}.actions[data-v-738bccea]{display:flex;flex-wrap:wrap;gap:var(--space-sm);align-items:center}.ancillary-actions[data-v-738bccea]{margin-top:-.5rem}.reg-token-btn[data-v-738bccea]{align-self:flex-start}.registration-actions[data-v-738bccea]{display:flex;flex-direction:column;gap:.5rem}.icon-btn[data-v-738bccea]{background:none;border:none;color:var(--color-text-muted);padding:.2rem;border-radius:var(--radius-sm);cursor:pointer;transition:background .2s ease,color .2s ease}.icon-btn[data-v-738bccea]:hover{color:var(--color-heading);background:var(--color-surface-muted)}.matrix-hint[data-v-738bccea]{font-size:.8rem;color:var(--color-text-muted)}.error[data-v-738bccea]{color:var(--color-danger-text)}.small[data-v-738bccea]{font-size:.9rem}.muted[data-v-738bccea]{color:var(--color-text-muted)}.error[data-v-8d16c6cc]{color:var(--color-danger-text)}.small[data-v-8d16c6cc]{font-size:.9rem}.muted[data-v-8d16c6cc]{color:var(--color-text-muted)}.optional[data-v-8d16c6cc]{font-weight:400;color:var(--color-text-muted);font-size:.85em}.view-admin[data-v-6d820553]{padding-bottom:var(--space-3xl)}.view-header[data-v-6d820553]{display:flex;flex-direction:column;gap:var(--space-sm)}.admin-section[data-v-6d820553]{margin-top:var(--space-xl)}.admin-section-body[data-v-6d820553],.admin-panels[data-v-6d820553]{display:flex;flex-direction:column;gap:var(--space-xl)}
@@ -0,0 +1 @@
1
+ import{_ as re,b as m,c as p,d as o,t as A,g as T,F as C,r as X,f as Re,B as te,m as I,A as J,E as ie,k as O,j as Ce,L as De,x as G,q as ae,G as ke,z as P,y as _e,h as z,i as ne,v as oe,u as ge,o as Se,a as Oe,N as et,w as tt,C as st,D as nt,J as ot,K as at}from"./_plugin-vue_export-helper-DJsHCwvl.js";import{i as it}from"./theme-C2WysaSw.js";import{u as Ae,U as rt,_ as lt,a as ut,R as dt,N as me,M as ct,b as mt,L as ft,A as fe,B as gt,c as vt}from"./AccessDenied-Licr0tqA.js";import"./helpers-DzjFIx78.js";const yt={key:0},pt=["onClick"],ht=["onClick"],bt={class:"role-names"},wt={class:"center"},$t={key:0,class:"center"},Dt=["onClick"],kt={key:0,class:"permissions-section"},St={class:"matrix-scroll"},Ot=["title"],Rt=["title"],Ct={class:"display-text"},At=["checked","onChange"],Ut={class:"perm-name-cell"},Et={class:"perm-title"},Mt={class:"display-text"},Pt=["onClick"],xt={class:"perm-id-info"},qt={class:"id-text"},Nt={class:"perm-domain"},Tt={class:"perm-members center"},Lt={class:"perm-actions center"},Ft=["onClick"],It={__name:"AdminOverview",props:{info:Object,orgs:Array,permissions:Array,permissionSummary:Object,navigationDisabled:{type:Boolean,default:!1}},emits:["createOrg","openOrg","updateOrg","deleteOrg","toggleOrgPermission","openDialog","deletePermission","renamePermissionDisplay","navigateOut"],setup(n,{expose:V,emit:Y}){const k=n,L=Y,E=O(null),c=O(null),y=O(null),x=O(null),N=O(null),B=O(null),q=I(()=>[...k.orgs].sort((r,t)=>{const s=r.display_name.localeCompare(t.display_name);return s!==0?s:r.uuid.localeCompare(t.uuid)})),w=I(()=>[...k.permissions].sort((r,t)=>r.scope.localeCompare(t.scope))),F=I(()=>k.info?.ctx.permissions.includes("auth:admin")),$=I(()=>k.info?.ctx.permissions.includes("auth:org:admin"));function _(r){return r.roles.slice().sort((t,s)=>t.display_name.localeCompare(s.display_name)).map(t=>t.display_name).join(", ")}function Z(r,t){if(k.navigationDisabled)return;const s=J(r);if(!s)return;const D=r.target,l=D.closest("tr");if(!l)return;const d=l.closest("tbody");if(!d)return;const h=Array.from(d.querySelectorAll("tr")),R=h.indexOf(l);if(R===-1)return;if(s==="left"||s==="right"){r.preventDefault();const M=Array.from(l.querySelectorAll("a, button:not([disabled])")),K=M.indexOf(D);if(K===-1)return;s==="left"&&K>0?M[K-1].focus():s==="right"&&K<M.length-1&&M[K+1].focus();return}let j=R;if(s==="up"&&R>0)j=R-1;else if(s==="down"&&R<h.length-1)j=R+1;else if(s==="up"&&R===0){r.preventDefault(),t==="org"?te(c.value,{itemSelector:"button"}):t==="perm"&&te(N.value,{itemSelector:"button"});return}else if(s==="down"&&R===h.length-1){if(r.preventDefault(),t==="org"&&F.value&&x.value){const M=x.value.querySelector('input[type="checkbox"]');M?M.focus():te(N.value,{itemSelector:"button"})}return}if(j!==R){r.preventDefault();const K=h[j].querySelector("a, button:not([disabled])");K&&K.focus()}}function ee(r){if(k.navigationDisabled)return;const t=J(r);if(t){if(r.preventDefault(),t==="left"||t==="right")ie(c.value,r.target,t,{itemSelector:"button"});else if(t==="up")L("navigateOut","up");else if(t==="down"){const s=y.value?.querySelector("tbody tr a, tbody tr button:not([disabled])");s&&s.focus()}}}function g(r){if(k.navigationDisabled)return;const t=J(r);if(!t)return;const s=r.target;if(s.tagName!=="INPUT")return;r.preventDefault();const D=Array.from(x.value.querySelectorAll('input[type="checkbox"]')),l=D.indexOf(s);if(l===-1)return;const d=q.value.length,h=w.value.length;if(d===0||h===0)return;const R=Math.floor(l/d),j=l%d;let M=l;if(t==="left")j>0&&(M=l-1);else if(t==="right")j<d-1&&(M=l+1);else if(t==="up")if(R>0)M=l-d;else{const le=y.value?.querySelector("tbody tr:last-child")?.querySelector("a, button:not([disabled])");le&&le.focus();return}else if(t==="down")if(R<h-1)M=l+d;else{te(N.value,{itemSelector:"button"});return}M!==l&&D[M]&&D[M].focus()}function u(r){if(k.navigationDisabled)return;const t=J(r);if(t){if(r.preventDefault(),t==="left"||t==="right")ie(N.value,r.target,t,{itemSelector:"button"});else if(t==="up"){const s=x.value?.querySelectorAll('input[type="checkbox"]');if(s?.length){const D=q.value.length,d=(w.value.length-1)*D;s[d]?s[d].focus():s[0].focus()}else{const l=y.value?.querySelector("tbody tr:last-child")?.querySelector("a, button:not([disabled])");l&&l.focus()}}else if(t==="down"){const s=B.value?.querySelector("tbody tr button:not([disabled])");s&&s.focus()}}}function f(){if(F.value)te(c.value,{itemSelector:"button"});else{const r=y.value?.querySelector("tbody tr a, tbody tr button:not([disabled])");r&&r.focus()}}return V({focusFirstElement:f}),(r,t)=>(m(),p(C,null,[o("div",{class:"permissions-section",ref_key:"orgSection",ref:E},[o("h2",null,A(F.value?"Organizations":"Your Organizations"),1),o("div",{class:"actions",ref_key:"orgActionsRef",ref:c,onKeydown:ee},[F.value?(m(),p("button",{key:0,onClick:t[0]||(t[0]=s=>r.$emit("createOrg"))},"+ Create Org")):T("",!0)],544),o("table",{class:"org-table",ref_key:"orgTableRef",ref:y,onKeydown:t[1]||(t[1]=s=>Z(s,"org"))},[o("thead",null,[o("tr",null,[t[4]||(t[4]=o("th",null,"Name",-1)),t[5]||(t[5]=o("th",null,"Roles",-1)),t[6]||(t[6]=o("th",null,"Members",-1)),F.value?(m(),p("th",yt,"Actions")):T("",!0)])]),o("tbody",null,[(m(!0),p(C,null,X(q.value,s=>(m(),p("tr",{key:s.uuid},[o("td",null,[o("a",{href:"#org/{{o.uuid}}",onClick:Ce(D=>r.$emit("openOrg",s),["prevent"])},A(s.display_name),9,pt),F.value||$.value?(m(),p("button",{key:0,onClick:D=>r.$emit("updateOrg",s),class:"icon-btn edit-org-btn","aria-label":"Rename organization",title:"Rename organization"},"✏️",8,ht)):T("",!0)]),o("td",bt,A(_(s)),1),o("td",wt,A(s.roles.reduce((D,l)=>D+l.users.length,0)),1),F.value?(m(),p("td",$t,[o("button",{onClick:D=>r.$emit("deleteOrg",s),class:"icon-btn delete-icon","aria-label":"Delete organization",title:"Delete organization"},"❌",8,Dt)])):T("",!0)]))),128))])],544)],512),F.value?(m(),p("div",kt,[t[10]||(t[10]=o("h2",null,"Permissions",-1)),o("div",{class:"matrix-wrapper",ref_key:"permMatrixRef",ref:x,onKeydown:g},[o("div",St,[o("div",{class:"perm-matrix-grid",style:Re({gridTemplateColumns:"minmax(180px, 1fr) "+q.value.map(()=>"2.2rem").join(" ")})},[t[7]||(t[7]=o("div",{class:"grid-head perm-head"},"Permission",-1)),(m(!0),p(C,null,X(q.value,s=>(m(),p("div",{key:"head-"+s.uuid,class:"grid-head org-head",title:s.display_name},[o("span",null,A(s.display_name),1)],8,Ot))),128)),(m(!0),p(C,null,X(w.value,s=>(m(),p(C,{key:s.uuid},[o("div",{class:"perm-name",title:s.scope},[o("span",Ct,A(s.display_name),1)],8,Rt),(m(!0),p(C,null,X(q.value,D=>(m(),p("div",{key:D.uuid+"-"+s.uuid,class:"matrix-cell"},[o("input",{type:"checkbox",checked:D.permissions.includes(s.uuid),onChange:l=>r.$emit("toggleOrgPermission",D,s.uuid,l.target.checked)},null,40,At)]))),128))],64))),128))],4)]),t[8]||(t[8]=o("p",{class:"matrix-hint muted"},"Toggle which permissions each organization can grant to its members.",-1))],544),o("div",{class:"actions",ref_key:"permActionsRef",ref:N,onKeydown:u},[F.value?(m(),p("button",{key:0,onClick:t[2]||(t[2]=s=>r.$emit("openDialog","perm-create",{display_name:"",scope:"",domain:""}))},"+ Create Permission")):T("",!0)],544),o("table",{class:"org-table",ref_key:"permTableRef",ref:B,onKeydown:t[3]||(t[3]=s=>Z(s,"perm"))},[t[9]||(t[9]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Permission"),o("th",{scope:"col"},"Domain"),o("th",{scope:"col",class:"center"},"Members"),o("th",{scope:"col",class:"center"},"Actions")])],-1)),o("tbody",null,[(m(!0),p(C,null,X(w.value,s=>(m(),p("tr",{key:s.uuid},[o("td",Ut,[o("div",Et,[o("span",Mt,A(s.display_name),1),o("button",{onClick:D=>r.$emit("renamePermissionDisplay",s),class:"icon-btn edit-display-btn","aria-label":"Edit permission",title:"Edit permission"},"✏️",8,Pt)]),o("div",xt,[o("span",qt,A(s.scope),1)])]),o("td",Nt,A(s.domain||"—"),1),o("td",Tt,A(n.permissionSummary[s.uuid]?.userCount||0),1),o("td",Lt,[o("button",{onClick:D=>r.$emit("deletePermission",s),class:"icon-btn delete-icon","aria-label":"Delete permission",title:"Delete permission"},"❌",8,Ft)])]))),128))])],544)])):T("",!0)],64))}},Kt=re(It,[["__scopeId","data-v-56228c4a"]]),Bt=["title"],zt={class:"org-name"},Vt={class:"matrix-scroll"},jt=["title"],Ht=["title"],Gt=["checked","onChange"],Jt=["onDrop"],Yt=["onKeydown"],Wt=["title"],Zt=["onClick"],Qt={class:"role-actions"},Xt=["onClick"],_t=["onDragstart","onClick","onKeydown","title"],es={class:"name"},ts={class:"meta"},ss=["onKeydown"],ns=["onClick"],os={__name:"AdminOrgDetail",props:{selectedOrg:Object,permissions:Array,navigationDisabled:{type:Boolean,default:!1}},emits:["updateOrg","createRole","updateRole","deleteRole","createUserInRole","openUser","toggleRolePermission","onRoleDragOver","onRoleDrop","onUserDragStart","navigateOut"],setup(n,{expose:V,emit:Y}){const k=n,L=Y,E=O(null),c=O(null),y=O(null),x=I(()=>[...k.selectedOrg.roles].sort((g,u)=>{const f=g.display_name.toLowerCase(),r=u.display_name.toLowerCase();return f!==r?f.localeCompare(r):g.uuid.localeCompare(u.uuid)})),N=I(()=>{const g=new Set(k.selectedOrg.permissions||[]);return k.permissions.filter(u=>g.has(u.uuid))});function B(g,u,f){L("toggleRolePermission",g,u,f)}function q(g){if(k.navigationDisabled)return;const u=J(g);if(u){if(g.preventDefault(),u==="left"||u==="right")ie(E.value,g.target,u,{itemSelector:"button"});else if(u==="up")L("navigateOut","up");else if(u==="down"){const f=c.value?.querySelector('input[type="checkbox"]');f?f.focus():Z()}}}function w(g){if(k.navigationDisabled)return;const u=J(g);if(!u)return;const f=g.target;if(f.tagName!=="INPUT")return;g.preventDefault();const r=Array.from(c.value.querySelectorAll('input[type="checkbox"]')),t=r.indexOf(f);if(t===-1)return;const s=x.value.length,D=k.selectedOrg.permissions.length,l=Math.floor(t/s),d=t%s;let h=t;if(u==="left"&&d>0)h=t-1;else if(u==="right"&&d<s-1)h=t+1;else if(u==="up"&&l>0)h=t-s;else if(u==="down"&&l<D-1)h=t+s;else if(u==="up"&&l===0){const R=E.value?.querySelector("button");R&&R.focus();return}else if(u==="down"&&l===D-1){Z();return}h!==t&&r[h]&&r[h].focus()}function F(g){if(k.navigationDisabled)return;const u=J(g);if(!u)return;const f=g.target;if(!f.classList.contains("user-chip"))return;const r=f.closest(".user-list");if(!r)return;const t=Array.from(r.querySelectorAll(".user-chip")),s=t.indexOf(f);if(s!==-1){if(u==="up"&&s>0){g.preventDefault(),t[s-1].focus();return}else if(u==="down"&&s<t.length-1){g.preventDefault(),t[s+1].focus();return}if(u==="up"&&s===0){g.preventDefault();const l=r.closest(".role-column")?.querySelector(".role-header button");l&&l.focus();return}if(!(u==="down"&&s===t.length-1)&&(u==="left"||u==="right")){g.preventDefault();const D=Array.from(y.value?.querySelectorAll(".role-column")||[]),l=r.closest(".role-column"),d=D.indexOf(l);let h=u==="left"?d-1:d+1;if(h>=0&&h<D.length){const R=D[h],j=R.querySelectorAll(".user-chip"),M=Math.min(s,j.length-1);if(j[M])j[M].focus();else{const K=R.querySelector(".plus-btn");K&&K.focus()}}else if(u==="left"&&d===0){const R=c.value?.querySelector('input[type="checkbox"]:last-of-type');R&&R.focus()}}}}function $(g,u){if(k.navigationDisabled)return;const f=J(g);if(!f)return;const r=Array.from(y.value?.querySelectorAll(".role-column")||[]);if(f==="left"||f==="right"){g.preventDefault();const t=g.currentTarget.querySelectorAll("button:not([disabled])"),s=Array.from(t).indexOf(g.target);if(f==="left"&&s>0)t[s-1].focus();else if(f==="right"&&s<t.length-1)t[s+1].focus();else if(f==="left"&&s===0&&u>0){const l=r[u-1]?.querySelectorAll(".role-header button");l?.length&&l[l.length-1].focus()}else if(f==="right"&&s===t.length-1&&u<r.length-1){const l=r[u+1]?.querySelector(".role-header button");l&&l.focus()}}else if(f==="up"){g.preventDefault();const t=c.value?.querySelectorAll('input[type="checkbox"]');if(t?.length){const s=x.value.length,l=(k.selectedOrg.permissions.length-1)*s+u;t[l]?t[l].focus():t[t.length-1].focus()}else{const s=E.value?.querySelector("button");s&&s.focus()}}else if(f==="down"){g.preventDefault();const s=r[u]?.querySelector(".user-chip");s&&s.focus()}}function _(g,u){if(k.navigationDisabled)return;const f=J(g);if(!f)return;const r=Array.from(y.value?.querySelectorAll(".role-column")||[]);if(f==="up"){g.preventDefault();const s=r[u]?.querySelector(".role-header button");s&&s.focus()}else if(f==="left"&&u>0){g.preventDefault();const t=r[u-1],s=t?.querySelector(".empty-role button"),D=t?.querySelector(".user-chip:last-child");s?s.focus():D&&D.focus()}else if(f==="right"&&u<r.length-1){g.preventDefault();const t=r[u+1],s=t?.querySelector(".empty-role button"),D=t?.querySelector(".user-chip");s?s.focus():D&&D.focus()}}function Z(){const u=y.value?.querySelector(".role-column")?.querySelector(".role-header button");u&&u.focus()}function ee(){const g=E.value?.querySelector("button");g&&g.focus()}return V({focusFirstElement:ee}),(g,u)=>(m(),p(C,null,[o("h2",{class:"org-title",ref_key:"orgTitleRef",ref:E,onKeydown:q,title:n.selectedOrg.uuid},[o("span",zt,A(n.selectedOrg.display_name),1),o("button",{onClick:u[0]||(u[0]=f=>g.$emit("updateOrg",n.selectedOrg)),class:"icon-btn","aria-label":"Rename organization",title:"Rename organization"},"✏️")],40,Bt),o("div",{class:"matrix-wrapper",ref_key:"permMatrixRef",ref:c,onKeydown:w},[o("div",Vt,[o("div",{class:"perm-matrix-grid",style:Re({gridTemplateColumns:"minmax(180px, 1fr) "+x.value.map(()=>"2.2rem").join(" ")+" 2.2rem"})},[u[5]||(u[5]=o("div",{class:"grid-head perm-head"},"Permission",-1)),(m(!0),p(C,null,X(x.value,f=>(m(),p("div",{key:"head-"+f.uuid,class:"grid-head role-head",title:f.display_name},[o("span",null,A(f.display_name),1)],8,jt))),128)),o("div",{class:"grid-head role-head add-role-head",title:"Add role",onClick:u[1]||(u[1]=f=>g.$emit("createRole",n.selectedOrg)),role:"button",tabindex:"0",onKeydown:u[2]||(u[2]=De(f=>g.$emit("createRole",n.selectedOrg),["enter"]))},"➕",32),(m(!0),p(C,null,X(N.value,f=>(m(),p(C,{key:f.uuid},[o("div",{class:"perm-name",title:f.scope},A(f.display_name),9,Ht),(m(!0),p(C,null,X(x.value,r=>(m(),p("div",{key:r.uuid+"-"+f.uuid,class:"matrix-cell"},[o("input",{type:"checkbox",checked:r.permissions.includes(f.uuid),onChange:t=>B(r,f.uuid,t.target.checked)},null,40,Gt)]))),128)),u[4]||(u[4]=o("div",{class:"matrix-cell add-role-cell"},null,-1))],64))),128))],4)]),u[6]||(u[6]=o("p",{class:"matrix-hint muted"},"Toggle which permissions each role grants.",-1))],544),o("div",{class:"roles-grid",ref_key:"rolesGridRef",ref:y},[(m(!0),p(C,null,X(x.value,(f,r)=>(m(),p("div",{key:f.uuid,class:"role-column",onDragover:u[3]||(u[3]=t=>g.$emit("onRoleDragOver",t)),onDrop:t=>g.$emit("onRoleDrop",t,n.selectedOrg,f)},[o("div",{class:"role-header",onKeydown:t=>$(t,r)},[o("strong",{class:"role-name",title:f.uuid},[o("span",null,A(f.display_name),1),o("button",{onClick:t=>g.$emit("updateRole",f),class:"icon-btn","aria-label":"Edit role",title:"Edit role"},"✏️",8,Zt)],8,Wt),o("div",Qt,[o("button",{onClick:t=>g.$emit("createUserInRole",n.selectedOrg,f),class:"plus-btn","aria-label":"Add user",title:"Add user"},"➕",8,Xt)])],40,Yt),f.users.length>0?(m(),p("ul",{key:0,class:"user-list",onKeydown:F},[(m(!0),p(C,null,X(f.users.slice().sort((t,s)=>{const D=t.display_name.toLowerCase(),l=s.display_name.toLowerCase();return D!==l?D.localeCompare(l):t.uuid.localeCompare(s.uuid)}),t=>(m(),p("li",{key:t.uuid,class:"user-chip",tabindex:"0",draggable:"true",onDragstart:s=>g.$emit("onUserDragStart",s,t,n.selectedOrg.uuid),onClick:s=>g.$emit("openUser",t),onKeydown:De(s=>g.$emit("openUser",t),["enter"]),title:t.uuid},[o("span",es,A(t.display_name),1),o("span",ts,A(t.last_seen?new Date(t.last_seen).toLocaleDateString():"—"),1)],40,_t))),128))],32)):(m(),p("div",{key:1,class:"empty-role",onKeydown:t=>_(t,r)},[u[7]||(u[7]=o("p",{class:"empty-text muted"},"No members",-1)),o("button",{onClick:t=>g.$emit("deleteRole",f),class:"icon-btn delete-icon","aria-label":"Delete empty role",title:"Delete role"},"❌",8,ns)],40,ss))],40,Jt))),128))],512)],64))}},as=re(os,[["__scopeId","data-v-f76fbbc3"]]),is={class:"user-detail"},rs={key:0,class:"error small"},ls=["disabled"],us={class:"section-block","data-section":"registered-passkeys"},ds={class:"section-body"},cs={__name:"AdminUserDetail",props:{selectedUser:Object,userDetail:Object,selectedOrg:Object,loading:Boolean,showRegModal:Boolean,navigationDisabled:{type:Boolean,default:!1}},emits:["generateUserRegistrationLink","goOverview","openOrg","onUserNameSaved","closeRegModal","editUserName","refreshUserDetail","navigateOut"],setup(n,{expose:V,emit:Y}){const k=n,L=Y,E=Ae(),c=O({}),y=O(null),x=O(null),N=O(null),B=O(null),q=O(null),w=O(null),F=O(null),$=I(()=>k.showRegModal);function _(){E.showMessage(`📋 Link copied! Send it to ${k.selectedUser.display_name}.`),L("closeRegModal")}function Z(){L("editUserName",k.selectedUser)}async function ee(l){try{const d=await P(`/auth/api/admin/orgs/${k.selectedUser.org}/users/${k.selectedUser.uuid}/credentials/${l.credential}`,{method:"DELETE"});d.status==="ok"?L("onUserNameSaved"):console.error("Failed to delete credential",d)}catch(d){console.error("Delete credential error",d)}}async function g(l){const d=l?.id;if(d){c.value={...c.value,[d]:!0};try{const h=await P(`/auth/api/admin/orgs/${k.selectedUser.org}/users/${k.selectedUser.uuid}/sessions/${d}`,{method:"DELETE"});if(h.status==="ok"){if(h.current_session_terminated){sessionStorage.clear(),location.reload();return}L("refreshUserDetail"),E.showMessage("Session terminated","success",2500)}else E.showMessage(h.detail||"Failed to terminate session","error")}catch(h){console.error("Terminate session error",h),E.showMessage(h.message||"Failed to terminate session","error")}finally{const h={...c.value};delete h[d],c.value=h}}}function u(l){if($.value||k.navigationDisabled)return;const d=J(l);d&&(l.preventDefault(),d==="left"||d==="right"?ie(N.value,l.target,d,{itemSelector:".mini-btn"}):d==="up"?L("navigateOut","up"):d==="down"&&te(B.value,{itemSelector:"button"}))}function f(l){if($.value||k.navigationDisabled)return;const d=J(l);d&&(l.preventDefault(),d==="left"||d==="right"?ie(B.value,l.target,d,{itemSelector:"button"}):d==="up"?te(N.value,{itemSelector:".mini-btn"}):d==="down"&&q.value?.$el?.focus())}function r(l){$.value||k.navigationDisabled||(l==="up"?te(B.value,{itemSelector:"button"}):l==="down"&&ke(w.value?.$el,0,{itemSelector:".session-group"}))}function t(l){if(!($.value||k.navigationDisabled)){if(l==="up")q.value?.$el?.focus();else if(l==="down"){const d=F.value?.querySelector("button");d&&d.focus()}}}function s(l){if($.value||k.navigationDisabled)return;const d=J(l);d&&(l.preventDefault(),d==="up"&&ke(w.value?.$el,-1,{itemSelector:".session-group"}))}function D(){te(N.value,{itemSelector:".mini-btn"})}return V({focusFirstElement:D}),(l,d)=>(m(),p("div",is,[o("div",{ref_key:"userInfoRef",ref:N,onKeydown:u},[n.userDetail&&!n.userDetail.error?(m(),G(rt,{key:0,name:n.userDetail.display_name||n.selectedUser.display_name,visits:n.userDetail.visits,"created-at":n.userDetail.created_at,"last-seen":n.userDetail.last_seen,loading:n.loading,"org-display-name":n.userDetail.org.display_name,"role-name":n.userDetail.role,"update-endpoint":`/auth/api/admin/orgs/${n.selectedUser.org}/users/${n.selectedUser.uuid}/display-name`,onSaved:d[0]||(d[0]=h=>l.$emit("onUserNameSaved")),onEditName:Z},null,8,["name","visits","created-at","last-seen","loading","org-display-name","role-name","update-endpoint"])):T("",!0)],544),n.userDetail?.error?(m(),p("div",rs,A(n.userDetail.error),1)):T("",!0),n.userDetail&&!n.userDetail.error?(m(),p(C,{key:1},[o("div",{class:"registration-actions",ref_key:"regActionsRef",ref:B,onKeydown:f},[o("button",{class:"btn-secondary reg-token-btn",onClick:d[1]||(d[1]=h=>l.$emit("generateUserRegistrationLink",n.selectedUser)),disabled:n.loading},"Generate Registration Token",8,ls),d[6]||(d[6]=o("p",{class:"matrix-hint muted"}," Generate a one-time registration link so this user can register or add another passkey. Copy the link from the dialog and send it to the user, or have the user scan the QR code on their device. ",-1))],544),o("section",us,[d[7]||(d[7]=o("div",{class:"section-header"},[o("h2",null,"Registered Passkeys")],-1)),o("div",ds,[ae(lt,{ref_key:"credentialListRef",ref:q,credentials:n.userDetail.credentials,"aaguid-info":n.userDetail.aaguid_info,"allow-delete":!0,"hovered-credential-uuid":y.value,"hovered-session-credential-uuid":x.value?.credential,"navigation-disabled":$.value,onDelete:ee,onCredentialHover:d[2]||(d[2]=h=>y.value=h),onNavigateOut:r},null,8,["credentials","aaguid-info","hovered-credential-uuid","hovered-session-credential-uuid","navigation-disabled"])])]),ae(ut,{ref_key:"sessionListRef",ref:w,sessions:n.userDetail.sessions||[],"terminating-sessions":c.value,"hovered-credential-uuid":y.value,"navigation-disabled":$.value,"empty-message":"This user has no active sessions.","section-description":"View and manage the active sessions for this user.",onTerminate:g,onSessionHover:d[3]||(d[3]=h=>x.value=h),onNavigateOut:t},null,8,["sessions","terminating-sessions","hovered-credential-uuid","navigation-disabled"])],64)):T("",!0),o("div",{class:"actions ancillary-actions",ref_key:"backButtonRef",ref:F,onKeydown:s},[n.selectedOrg?(m(),p("button",{key:0,onClick:d[4]||(d[4]=h=>l.$emit("openOrg",n.selectedOrg)),class:"icon-btn",title:"Back to Org"},"↩️")):T("",!0)],544),n.showRegModal?(m(),G(dt,{key:2,endpoint:`/auth/api/admin/orgs/${n.selectedUser.org}/users/${n.selectedUser.uuid}/create-link`,"user-name":n.userDetail?.display_name||n.selectedUser.display_name,onClose:d[5]||(d[5]=h=>l.$emit("closeRegModal")),onCopied:_},null,8,["endpoint","user-name"])):T("",!0)]))}},ms=re(cs,[["__scopeId","data-v-738bccea"]]),fs={class:"modal-title"},gs={key:0},vs={key:2},ys={class:"small muted"},ps=["placeholder","pattern"],hs={class:"small muted"},bs={key:7},ws={key:8,class:"error small"},$s={key:9,class:"modal-actions"},Ds=["disabled"],ks=["disabled"],Ss={__name:"AdminDialogs",props:{dialog:Object,PERMISSION_ID_PATTERN:String,settings:Object},emits:["submitDialog","closeDialog"],setup(n,{emit:V}){const Y=n,k=new Set(["org-update","role-update","user-update-name"]),L=I(()=>Y.settings?.rp_id||"the configured domain");return(E,c)=>n.dialog.type?(m(),G(ct,{key:0,onClose:c[14]||(c[14]=y=>E.$emit("closeDialog"))},{default:_e(()=>[o("h3",fs,[n.dialog.type==="org-create"?(m(),p(C,{key:0},[z("Create Organization")],64)):n.dialog.type==="org-update"?(m(),p(C,{key:1},[z("Rename Organization")],64)):n.dialog.type==="role-create"?(m(),p(C,{key:2},[z("Create Role")],64)):n.dialog.type==="role-update"?(m(),p(C,{key:3},[z("Edit Role")],64)):n.dialog.type==="user-create"?(m(),p(C,{key:4},[z("Add User To Role")],64)):n.dialog.type==="user-update-name"?(m(),p(C,{key:5},[z("Edit User Name")],64)):n.dialog.type==="perm-create"||n.dialog.type==="perm-display"?(m(),p(C,{key:6},[z(A(n.dialog.type==="perm-create"?"Create Permission":"Edit Permission"),1)],64)):n.dialog.type==="confirm"?(m(),p(C,{key:7},[z("Confirm")],64)):T("",!0)]),o("form",{onSubmit:c[13]||(c[13]=Ce(y=>E.$emit("submitDialog"),["prevent"])),class:"modal-form"},[n.dialog.type==="org-create"?(m(),p("label",gs,[c[15]||(c[15]=z("Name ",-1)),ne(o("input",{ref:"nameInput","onUpdate:modelValue":c[0]||(c[0]=y=>n.dialog.data.name=y),required:""},null,512),[[oe,n.dialog.data.name]])])):n.dialog.type==="org-update"?(m(),G(me,{key:1,label:"Organization Name",modelValue:n.dialog.data.name,"onUpdate:modelValue":c[1]||(c[1]=y=>n.dialog.data.name=y),busy:n.dialog.busy,error:n.dialog.error,onCancel:c[2]||(c[2]=y=>E.$emit("closeDialog"))},null,8,["modelValue","busy","error"])):n.dialog.type==="role-create"?(m(),p("label",vs,[c[16]||(c[16]=z("Role Name ",-1)),ne(o("input",{"onUpdate:modelValue":c[3]||(c[3]=y=>n.dialog.data.name=y),placeholder:"Role name",required:""},null,512),[[oe,n.dialog.data.name]])])):n.dialog.type==="role-update"?(m(),G(me,{key:3,label:"Role Name",modelValue:n.dialog.data.name,"onUpdate:modelValue":c[4]||(c[4]=y=>n.dialog.data.name=y),busy:n.dialog.busy,error:n.dialog.error,onCancel:c[5]||(c[5]=y=>E.$emit("closeDialog"))},null,8,["modelValue","busy","error"])):n.dialog.type==="user-create"?(m(),p(C,{key:4},[o("p",ys,"Role: "+A(n.dialog.data.role.display_name),1),o("label",null,[c[17]||(c[17]=z("Display Name ",-1)),ne(o("input",{"onUpdate:modelValue":c[6]||(c[6]=y=>n.dialog.data.name=y),placeholder:"User display name",required:""},null,512),[[oe,n.dialog.data.name]])])],64)):n.dialog.type==="user-update-name"?(m(),G(me,{key:5,label:"Display Name",modelValue:n.dialog.data.name,"onUpdate:modelValue":c[7]||(c[7]=y=>n.dialog.data.name=y),busy:n.dialog.busy,error:n.dialog.error,onCancel:c[8]||(c[8]=y=>E.$emit("closeDialog"))},null,8,["modelValue","busy","error"])):n.dialog.type==="perm-create"||n.dialog.type==="perm-display"?(m(),p(C,{key:6},[o("label",null,[c[18]||(c[18]=z("Display Name ",-1)),ne(o("input",{ref:"displayNameInput","onUpdate:modelValue":c[9]||(c[9]=y=>n.dialog.data.display_name=y),required:""},null,512),[[oe,n.dialog.data.display_name]])]),o("label",null,[c[19]||(c[19]=z("Permission Scope ",-1)),ne(o("input",{"onUpdate:modelValue":c[10]||(c[10]=y=>n.dialog.data.scope=y),placeholder:n.dialog.type==="perm-create"?"yourapp:permission":n.dialog.data.permission.scope,required:"",pattern:n.PERMISSION_ID_PATTERN,title:"Allowed: A-Za-z0-9:._~-","data-form-type":"other"},null,8,ps),[[oe,n.dialog.data.scope]])]),c[21]||(c[21]=o("p",{class:"small muted"},"E.g. yourapp:reports. Changing the scope name may break deployed applications.",-1)),o("label",null,[c[20]||(c[20]=z("Domain Scope ",-1)),ne(o("input",{"onUpdate:modelValue":c[11]||(c[11]=y=>n.dialog.data.domain=y),placeholder:"e.g. app.example.com","data-form-type":"other"},null,512),[[oe,n.dialog.data.domain]])]),o("p",hs,"If set, this permission is effective only on the specified domain, which can be "+A(L.value)+" or its subdomain.",1)],64)):n.dialog.type==="confirm"?(m(),p("p",bs,A(n.dialog.data.message),1)):T("",!0),n.dialog.error&&!ge(k).has(n.dialog.type)?(m(),p("div",ws,A(n.dialog.error),1)):T("",!0),ge(k).has(n.dialog.type)?T("",!0):(m(),p("div",$s,[o("button",{type:"button",class:"btn-secondary",onClick:c[12]||(c[12]=y=>E.$emit("closeDialog")),disabled:n.dialog.busy}," Cancel ",8,Ds),o("button",{type:"submit",class:"btn-primary",disabled:n.dialog.busy},A(n.dialog.type==="confirm"?"OK":"Save"),9,ks)]))],32)]),_:1})):T("",!0)}},Os=re(Ss,[["__scopeId","data-v-8d16c6cc"]]),Rs={class:"app-shell admin-shell"},Cs={class:"app-main"},As={key:4,class:"view-root view-root--wide view-admin"},Us={class:"view-header"},Es={class:"section-block admin-section"},Ms={class:"section-body admin-section-body"},Ps={class:"admin-panels"},xs="^[A-Za-z0-9:._~-]+$",qs={__name:"AdminApp",setup(n){const V=O(null),Y=O(!0),k=O("Loading..."),L=O(!1),E=O(!1),c=O(null),y=O([]),x=O([]),N=O(null),B=O(null),q=O(null),w=Ae(),F=O(null),$=O({type:null,data:null,busy:!1,error:""}),_=O(null),Z=O(null),ee=O(null),g=O(null),u=O(null),f=I(()=>$.value.type!==null||ue.value),r=I(()=>V.value?.ctx.permissions.includes("auth:admin")),t=I(()=>V.value?.ctx.permissions.includes("auth:org:admin"));function s(e){if(!F.value)return;const a=e.target.closest(".org-add-menu"),i=e.target.closest(".add-org-btn");!a&&!i&&(F.value=null)}Se(async()=>{document.addEventListener("click",s),window.addEventListener("hashchange",d),await w.loadSettings(),w.settings?.rp_name&&(document.title=w.settings.rp_name+" Admin"),await Ee()}),Oe(()=>{document.removeEventListener("click",s),window.removeEventListener("hashchange",d)});const D=I(()=>{const e={};for(const i of y.value){const v={uuid:i.uuid,display_name:i.display_name},b=new Set(i.permissions||[]);for(const S of i.permissions||[])e[S]||(e[S]={orgs:[],orgSet:new Set,userCount:0}),e[S].orgSet.has(i.uuid)||(e[S].orgs.push(v),e[S].orgSet.add(i.uuid));for(const S of i.roles)for(const U of S.permissions)b.has(U)&&(e[U]||(e[U]={orgs:[],orgSet:new Set,userCount:0}),e[U].orgSet.has(i.uuid)||(e[U].orgs.push(v),e[U].orgSet.add(i.uuid)),e[U].userCount+=S.users.length)}const a={};for(const[i,v]of Object.entries(e))a[i]={orgs:v.orgs.sort((b,S)=>b.display_name.localeCompare(S.display_name)),userCount:v.userCount};return a});function l(e){Q("perm-display",{permission:e,scope:e.scope,display_name:e.display_name,domain:e.domain||""})}function d(){const e=window.location.hash||"";N.value=null,B.value=null,e.startsWith("#org/")?N.value=e.slice(5):e.startsWith("#user/")&&(B.value=e.slice(6))}async function h(){const e=await P("/auth/api/admin/orgs");y.value=e.map(a=>{const i=a.roles.map(b=>({...b,org:a.uuid,users:[]})),v=Object.fromEntries(i.map(b=>[b.display_name,b]));for(const b of a.users||[])v[b.role]&&v[b.role].users.push(b);return{...a,roles:i}})}async function R(){x.value=await P("/auth/api/admin/permissions")}async function j(){const e=await P("/auth/api/validate",{method:"POST"});V.value=e,L.value=!0}function M(){V.value=null,y.value=[],x.value=[],q.value=null,L.value=!1}function K(e){M(),e.name==="AuthCancelledError"?E.value=!0:c.value=e.message}const le=()=>V.value?.ctx.user.uuid,ve=new et(le,K);Se(()=>ve.start()),Oe(()=>ve.stop());async function Ee(){Y.value=!0,k.value="Loading...",c.value=null;try{await Promise.all([h(),R()]),await j(),!r.value&&t.value&&y.value.length===1&&(!window.location.hash||window.location.hash==="#overview")?(N.value=y.value[0].uuid,window.location.hash=`#org/${N.value}`,w.showMessage(`Navigating to ${y.value[0].display_name} Administration`,"info",3e3)):d()}catch(e){K(e)}finally{Y.value=!1}}function Me(){Q("org-create",{})}function ye(e){Q("org-update",{org:e,name:e.display_name})}function Pe(e){Q("user-update-name",{user:e,name:e.display_name})}async function pe(e){await P(`/auth/api/admin/orgs/${e}`,{method:"DELETE"}),await Promise.all([h(),R()])}function xe(e){if(e.roles.reduce((b,S)=>b+S.users.length,0)===0){pe(e.uuid).then(()=>{w.showMessage(`Organization "${e.display_name}" deleted.`,"success",2500)}).catch(b=>{w.showMessage(b.message||"Failed to delete organization","error")});return}const v=e.roles.filter(b=>b.users.length>0).map(b=>`${b.users.length} ${b.display_name}`).join(", ");Q("confirm",{message:`Delete organization "${e.display_name}", including accounts of ${v})?`,action:async()=>{await pe(e.uuid)}})}function qe(e,a){Q("user-create",{org:e,role:a})}async function Ne(e,a,i){if(a.role!==i)try{await P(`/auth/api/admin/orgs/${e.uuid}/users/${a.uuid}/role`,{method:"PATCH",body:{role:i}}),await h()}catch(v){w.showMessage(v.message||"Failed to update user role")}}function Te(e,a,i){e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain",JSON.stringify({user_uuid:a.uuid,org:i}))}function Le(e){e.preventDefault(),e.dataTransfer.dropEffect="move"}function Fe(e,a,i){e.preventDefault();try{const v=JSON.parse(e.dataTransfer.getData("text/plain"));if(v.org!==a.uuid)return;const b=a.roles.flatMap(S=>S.users).find(S=>S.uuid===v.user_uuid);b&&Ne(a,b,i.display_name)}catch{}}function Ie(e){Q("role-create",{org:e})}function Ke(e){Q("role-update",{role:e,name:e.display_name})}function Be(e){P(`/auth/api/admin/orgs/${e.org}/roles/${e.uuid}`,{method:"DELETE"}).then(()=>{w.showMessage(`Role "${e.display_name}" deleted.`,"success",2500),h()}).catch(a=>{w.showMessage(a.message||"Failed to delete role","error")})}async function ze(e,a,i){const v=[...e.permissions],b=i?[...e.permissions,a]:e.permissions.filter(S=>S!==a);e.permissions=b;try{const S=i?"POST":"DELETE";await P(`/auth/api/admin/orgs/${e.org}/roles/${e.uuid}/permissions/${a}`,{method:S}),await h()}catch(S){w.showMessage(S.message||"Failed to update role permission"),e.permissions=v}}async function he(e){const a=new URLSearchParams({permission_uuid:e});await P(`/auth/api/admin/permission?${a.toString()}`,{method:"DELETE"}),await R()}function Ve(e){const a=D.value[e.uuid]?.userCount||0;let i=0;for(const S of y.value)for(const U of S.roles)U.permissions.includes(e.uuid)&&i++;if(i===0){he(e.uuid).then(()=>{w.showMessage(`Permission "${e.display_name}" deleted.`,"success",2500)}).catch(S=>{w.showMessage(S.message||"Failed to delete permission","error")});return}const v=[];i>0&&v.push(`${i} role${i!==1?"s":""}`),a>0&&v.push(`${a} user${a!==1?"s":""}`);const b=v.join(", ");Q("confirm",{message:`Delete permission "${e.display_name}" (${b})?`,action:async()=>{await he(e.uuid)}})}const se=I(()=>y.value.find(e=>e.uuid===N.value)||null);function be(e){window.location.hash=`#org/${e.uuid}`}function je(){window.location.hash="#overview"}function He(e){window.location.hash=`#user/${e.uuid}`}const H=I(()=>{if(!B.value)return null;for(const e of y.value)for(const a of e.roles){const i=a.users.find(v=>v.uuid===B.value);if(i)return{...i,org:e.uuid,role_display_name:a.display_name}}return null}),Ge=I(()=>H.value?"Admin: User":se.value?"Admin: Org":(w.settings?.rp_name||"Master")+" Admin"),Je=I(()=>{const e=[{label:"Auth",href:st()},{label:"Admin",href:nt()}];let a=null;H.value&&(a=y.value.find(v=>v.uuid===H.value.org)||null);const i=se.value||a;return i&&e.push({label:i.display_name,href:`#org/${i.uuid}`}),H.value&&e.push({label:H.value.display_name,href:`#user/${H.value.uuid}`}),e});tt(H,async e=>{if(!e){q.value=null;return}try{q.value=await P(`/auth/api/admin/orgs/${e.org}/users/${e.uuid}`)}catch(a){q.value={error:a.message}}});const ue=O(!1);function Ye(e){ue.value=!0}async function We(e,a,i){const v=e.permissions.includes(a);if(i&&v||!i&&!v)return;const b=i?[...e.permissions,a]:e.permissions.filter(U=>U!==a),S=[...e.permissions];e.permissions=b;try{const U=new URLSearchParams({permission_uuid:a});await P(`/auth/api/admin/orgs/${e.uuid}/permission?${U.toString()}`,{method:i?"POST":"DELETE"}),await h()}catch(U){w.showMessage(U.message||"Failed to update organization permission","error"),e.permissions=S}}function Q(e,a){const i=document.activeElement;if(_.value=i,e==="confirm"&&i){const v=i.closest("tr");if(v){const b=v.closest("tbody");if(b){const S=Array.from(b.querySelectorAll("tr")),U=S.indexOf(v);$.value.focusContext={tbody:b,index:U,total:S.length,selector:"button:not([disabled]), a"}}}}$.value={...$.value,type:e,data:a,busy:!1,error:""}}function W(){const e=_.value,a=$.value.focusContext;$.value={type:null,data:null,busy:!1,error:""},Ze(e,a),_.value=null}function Ze(e,a){if(!e)return;if(document.body.contains(e)&&!e.disabled){e.focus();return}if(a?.tbody&&a.selector){const b=Array.from(a.tbody.querySelectorAll("tr"));if(b.length>0){const S=Math.min(a.index,b.length-1),de=b[S]?.querySelector(a.selector);if(de){de.focus();return}}}const i=document.querySelector(".admin-panels");if(!i)return;const v=i.querySelector('button:not([disabled]), a, input:not([disabled]), [tabindex="0"]');v&&v.focus()}function Qe(e){if(f.value)return;const a=J(e);a&&a==="down"&&(e.preventDefault(),ee.value?ee.value.focusFirstElement?.():g.value?g.value.focusFirstElement?.():u.value&&u.value.focusFirstElement?.())}function ce(e){f.value||e==="up"&&Z.value?.focusCurrent?.()}async function we(){if(await h(),H.value)try{q.value=await P(`/auth/api/admin/orgs/${H.value.org}/users/${H.value.uuid}`)}catch(e){w.showMessage(e.message||"Failed to reload user","error")}}async function $e(){await we(),w.showMessage("User renamed","success",1500)}async function Xe(){if(!(!$.value.type||$.value.busy)){$.value.busy=!0,$.value.error="";try{const e=$.value.type;if(e==="org-create"){const a=$.value.data.name?.trim();if(!a)throw new Error("Name required");W(),P("/auth/api/admin/orgs",{method:"POST",body:{display_name:a,permissions:[]}}).then(()=>{w.showMessage(`Organization "${a}" created.`,"success",2500),Promise.all([h(),R()])}).catch(i=>{w.showMessage(i.message||"Failed to create organization","error")});return}else if(e==="org-update"){const{org:a}=$.value.data,i=$.value.data.name?.trim();if(!i)throw new Error("Name required");W(),P(`/auth/api/admin/orgs/${a.uuid}`,{method:"PATCH",body:{display_name:i}}).then(()=>{w.showMessage(`Organization renamed to "${i}".`,"success",2500),h()}).catch(v=>{w.showMessage(v.message||"Failed to update organization","error")});return}else if(e==="role-create"){const{org:a}=$.value.data,i=$.value.data.name?.trim();if(!i)throw new Error("Name required");W(),P(`/auth/api/admin/orgs/${a.uuid}/roles`,{method:"POST",body:{display_name:i,permissions:[]}}).then(()=>{w.showMessage(`Role "${i}" created.`,"success",2500),h()}).catch(v=>{w.showMessage(v.message||"Failed to create role","error")});return}else if(e==="role-update"){const{role:a}=$.value.data,i=$.value.data.name?.trim();if(!i)throw new Error("Name required");W(),P(`/auth/api/admin/orgs/${a.org}/roles/${a.uuid}`,{method:"PATCH",body:{display_name:i}}).then(()=>{w.showMessage(`Role renamed to "${i}".`,"success",2500),h()}).catch(v=>{w.showMessage(v.message||"Failed to update role","error")});return}else if(e==="user-create"){const{org:a,role:i}=$.value.data,v=$.value.data.name?.trim();if(!v)throw new Error("Name required");W(),P(`/auth/api/admin/orgs/${a.uuid}/users`,{method:"POST",body:{display_name:v,role:i.display_name}}).then(()=>{w.showMessage(`User "${v}" added to ${i.display_name} role.`,"success",2500),h()}).catch(b=>{w.showMessage(b.message||"Failed to add user","error")});return}else if(e==="user-update-name"){const{user:a}=$.value.data,i=$.value.data.name?.trim();if(!i)throw new Error("Name required");W(),P(`/auth/api/admin/orgs/${a.org}/users/${a.uuid}/display-name`,{method:"PATCH",body:{display_name:i}}).then(()=>{w.showMessage(`User renamed to "${i}".`,"success",2500),$e()}).catch(v=>{w.showMessage(v.message||"Failed to update user name","error")});return}else if(e==="perm-display"){const{permission:a}=$.value.data,i=$.value.data.scope?.trim(),v=$.value.data.display_name?.trim(),b=$.value.data.domain?.trim()||"";if(!v)throw new Error("Display name required");if(!i)throw new Error("Scope required");W();const S=a.domain||"";if(i===a.scope&&v===a.display_name&&b===S)return;const U=new URLSearchParams({permission_uuid:a.uuid});i!==a.scope&&U.set("scope",i),v!==a.display_name&&U.set("display_name",v),b!==S&&U.set("domain",b||""),P(`/auth/api/admin/permission?${U.toString()}`,{method:"PATCH"}).then(()=>{w.showMessage(`Permission "${v}" updated.`,"success",2500),R()}).catch(de=>{w.showMessage(de.message||"Failed to update permission","error")});return}else if(e==="perm-create"){const a=$.value.data.scope?.trim();if(!a)throw new Error("Scope required");const i=$.value.data.display_name?.trim();if(!i)throw new Error("Display name required");const v=$.value.data.domain?.trim()||"";W(),P("/auth/api/admin/permissions",{method:"POST",body:{scope:a,display_name:i,domain:v||void 0}}).then(()=>{w.showMessage(`Permission "${i}" created.`,"success",2500),R()}).catch(b=>{w.showMessage(b.message||"Failed to create permission","error")});return}else if(e==="confirm"){const a=$.value.data.action;if(W(),a)try{await a()}catch(i){w.showMessage(i.message||"Action failed","error")}return}W()}catch(e){$.value.error=e.message||"Error"}finally{$.value.busy=!1}}}return(e,a)=>(m(),p("div",Rs,[ae(mt),o("main",Cs,[Y.value?(m(),G(ft,{key:0,message:k.value},null,8,["message"])):E.value?(m(),G(fe,{key:1})):c.value?(m(),G(fe,{key:2,icon:"⚠️",title:"Error",message:c.value},null,8,["message"])):L.value&&!r.value&&!t.value?(m(),G(fe,{key:3,icon:"⛔",message:"You do not have admin permissions for this application."})):L.value&&(r.value||t.value)?(m(),p("section",As,[o("header",Us,[o("h1",null,A(Ge.value),1),ae(gt,{ref_key:"breadcrumbsRef",ref:Z,entries:Je.value,onKeydown:Qe},null,8,["entries"])]),o("section",Es,[o("div",Ms,[o("div",Ps,[!H.value&&!se.value&&(r.value||t.value)?(m(),G(Kt,{key:0,ref_key:"adminOverviewRef",ref:ee,info:V.value,orgs:y.value,permissions:x.value,"navigation-disabled":f.value,"permission-summary":D.value,onCreateOrg:Me,onOpenOrg:be,onUpdateOrg:ye,onDeleteOrg:xe,onToggleOrgPermission:We,onOpenDialog:Q,onDeletePermission:Ve,onRenamePermissionDisplay:l,onNavigateOut:ce},null,8,["info","orgs","permissions","navigation-disabled","permission-summary"])):H.value?(m(),G(ms,{key:1,ref_key:"adminUserDetailRef",ref:u,"selected-user":H.value,"user-detail":q.value,"selected-org":se.value,loading:Y.value,"show-reg-modal":ue.value,"navigation-disabled":f.value,onGenerateUserRegistrationLink:Ye,onGoOverview:je,onOpenOrg:be,onOnUserNameSaved:$e,onRefreshUserDetail:we,onEditUserName:Pe,onCloseRegModal:a[0]||(a[0]=i=>ue.value=!1),onNavigateOut:ce},null,8,["selected-user","user-detail","selected-org","loading","show-reg-modal","navigation-disabled"])):se.value?(m(),G(as,{key:2,ref_key:"adminOrgDetailRef",ref:g,"selected-org":se.value,permissions:x.value,"navigation-disabled":f.value,onUpdateOrg:ye,onCreateRole:Ie,onUpdateRole:Ke,onDeleteRole:Be,onCreateUserInRole:qe,onOpenUser:He,onToggleRolePermission:ze,onOnRoleDragOver:Le,onNavigateOut:ce,onOnRoleDrop:Fe,onOnUserDragStart:Te},null,8,["selected-org","permissions","navigation-disabled"])):T("",!0)])])])])):T("",!0)]),ae(Os,{dialog:$.value,"permission-id-pattern":xs,settings:ge(w).settings,onSubmitDialog:Xe,onCloseDialog:W},null,8,["dialog","settings"])]))}},Ns=re(qs,[["__scopeId","data-v-6d820553"]]);it();const Ue=ot(Ns);Ue.use(vt());Ue.mount("#admin-app");at();
@@ -1 +1 @@
1
- .pairing-entry[data-v-77a073d9]{display:flex;flex-direction:column;gap:1rem}.pairing-form[data-v-77a073d9]{display:flex;flex-direction:column;gap:.5rem}.input-row[data-v-77a073d9]{display:flex;align-items:center;gap:.5rem}.input-wrapper[data-v-77a073d9]{position:relative;display:flex;width:280px;max-width:100%}.slot-machine[data-v-77a073d9]{position:absolute;left:0;top:0;width:100%;height:100%;gap:0;box-sizing:border-box;z-index:1;pointer-events:none}.input-wrapper.focused.has-error .slot-machine[data-v-77a073d9]{background:var(--color-error-bg, rgba(239, 68, 68, .05))}.slot-reel[data-v-77a073d9]{flex:1 1 33.333%;overflow:visible}.slot-reel[data-v-77a073d9]:not(:last-child){margin-right:.5rem}.slot-word[data-v-77a073d9]{font-weight:600;letter-spacing:.05em;text-align:center;width:100%;color:var(--color-text);display:flex;align-items:center;justify-content:center;position:relative}.slot-word .typed-prefix[data-v-77a073d9]{color:var(--color-text)}.slot-word .hint-suffix[data-v-77a073d9]{color:var(--color-text-muted);opacity:.6}.cursor-overlay[data-v-77a073d9]{position:absolute;width:2px;height:1.2em;background:var(--color-text);animation:none;pointer-events:none;left:calc(50% + (var(--cursor-pos) - var(--word-len, 0) / 2) * .65em);transform:translate(-1px);opacity:0}.input-wrapper.focused .cursor-overlay[data-v-77a073d9]{opacity:1;animation:cursorBlink-77a073d9 .25s alternate infinite}.input-wrapper.focused.has-selection .cursor-overlay[data-v-77a073d9]{animation:none}.selection-overlay[data-v-77a073d9]{position:absolute;height:1.2em;background:var(--color-primary, #3b82f6);opacity:.3;pointer-events:none;left:calc(50% + (var(--sel-start) - var(--word-len, 0) / 2) * .65em);width:calc((var(--sel-end) - var(--sel-start)) * .65em)}@keyframes cursorBlink-77a073d9{0%,50%{opacity:1}80%,to{opacity:0}}.slot-reel.invalid-word .slot-word[data-v-77a073d9],.slot-reel.invalid-word .slot-word .typed-prefix[data-v-77a073d9]{color:var(--color-error, #ef4444)}.slot-reel.invalid-word .cursor-overlay[data-v-77a073d9]{background:var(--color-error, #ef4444)}.slot-reel.empty .slot-word[data-v-77a073d9]{color:var(--color-text-muted)}.pairing-input[data-v-77a073d9]{flex:1;width:100%;height:100%;border-radius:var(--radius-sm, 6px);position:relative;z-index:0}.pairing-input.hidden-input[data-v-77a073d9]{opacity:0}.pairing-input[data-v-77a073d9]:disabled{cursor:not-allowed}.pairing-input[data-v-77a073d9]::placeholder{color:transparent}.processing-status[data-v-77a073d9]{display:flex;align-items:center;gap:.25rem;font-size:.875rem;color:var(--color-text-muted)}.processing-icon[data-v-77a073d9]{font-size:.875rem}.processing-spinner-small[data-v-77a073d9]{width:12px;height:12px;border:2px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin-77a073d9 .8s linear infinite}@keyframes spin-77a073d9{to{transform:rotate(360deg)}}.device-info[data-v-77a073d9]{display:flex;flex-direction:column;gap:.5rem}.device-permit-text[data-v-77a073d9]{margin:0;font-size:.95rem;color:var(--color-text)}.device-meta[data-v-77a073d9]{margin:0;font-size:.8rem;color:var(--color-text-muted);font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace}.error-message[data-v-77a073d9]{margin:0;font-size:.875rem;color:var(--color-error, #ef4444);margin-bottom:1rem}.view-lede[data-v-70360523]{margin:0;color:var(--color-text-muted);font-size:1rem}.section-header[data-v-70360523]{display:flex;flex-direction:column;gap:.4rem}.empty-state[data-v-70360523]{margin:0;color:var(--color-text-muted);text-align:center;padding:1rem 0}.logout-note[data-v-70360523]{margin:.75rem 0 0;color:var(--color-text-muted);font-size:.875rem}.remote-auth-inline[data-v-70360523]{display:flex;flex-direction:column;gap:.5rem}.remote-auth-label[data-v-70360523]{display:block;margin:0;font-size:.875rem;color:var(--color-text-muted);font-weight:500}.remote-auth-description[data-v-70360523]{font-size:.75rem;color:var(--color-text-muted)}.host-view[data-v-237999a2]{padding:3rem 1.5rem 4rem}.host-actions[data-v-237999a2]{display:flex;flex-direction:column;gap:.75rem}.host-actions .button-row[data-v-237999a2]{gap:.75rem;flex-wrap:wrap}.host-actions .button-row button[data-v-237999a2]{flex:1 1 0}.note[data-v-237999a2],.empty-state[data-v-237999a2]{margin:0;color:var(--color-text-muted)}
1
+ .pairing-entry[data-v-77a073d9]{display:flex;flex-direction:column;gap:1rem}.pairing-form[data-v-77a073d9]{display:flex;flex-direction:column;gap:.5rem}.input-row[data-v-77a073d9]{display:flex;align-items:center;gap:.5rem}.input-wrapper[data-v-77a073d9]{position:relative;display:flex;width:280px;max-width:100%}.slot-machine[data-v-77a073d9]{position:absolute;left:0;top:0;width:100%;height:100%;gap:0;box-sizing:border-box;z-index:1;pointer-events:none}.input-wrapper.focused.has-error .slot-machine[data-v-77a073d9]{background:var(--color-error-bg, rgba(239, 68, 68, .05))}.slot-reel[data-v-77a073d9]{flex:1 1 33.333%;overflow:visible}.slot-reel[data-v-77a073d9]:not(:last-child){margin-right:.5rem}.slot-word[data-v-77a073d9]{font-weight:600;letter-spacing:.05em;text-align:center;width:100%;color:var(--color-text);display:flex;align-items:center;justify-content:center;position:relative}.slot-word .typed-prefix[data-v-77a073d9]{color:var(--color-text)}.slot-word .hint-suffix[data-v-77a073d9]{color:var(--color-text-muted);opacity:.6}.cursor-overlay[data-v-77a073d9]{position:absolute;width:2px;height:1.2em;background:var(--color-text);animation:none;pointer-events:none;left:calc(50% + (var(--cursor-pos) - var(--word-len, 0) / 2) * .65em);transform:translate(-1px);opacity:0}.input-wrapper.focused .cursor-overlay[data-v-77a073d9]{opacity:1;animation:cursorBlink-77a073d9 .25s alternate infinite}.input-wrapper.focused.has-selection .cursor-overlay[data-v-77a073d9]{animation:none}.selection-overlay[data-v-77a073d9]{position:absolute;height:1.2em;background:var(--color-primary, #3b82f6);opacity:.3;pointer-events:none;left:calc(50% + (var(--sel-start) - var(--word-len, 0) / 2) * .65em);width:calc((var(--sel-end) - var(--sel-start)) * .65em)}@keyframes cursorBlink-77a073d9{0%,50%{opacity:1}80%,to{opacity:0}}.slot-reel.invalid-word .slot-word[data-v-77a073d9],.slot-reel.invalid-word .slot-word .typed-prefix[data-v-77a073d9]{color:var(--color-error, #ef4444)}.slot-reel.invalid-word .cursor-overlay[data-v-77a073d9]{background:var(--color-error, #ef4444)}.slot-reel.empty .slot-word[data-v-77a073d9]{color:var(--color-text-muted)}.pairing-input[data-v-77a073d9]{flex:1;width:100%;height:100%;border-radius:var(--radius-sm, 6px);position:relative;z-index:0}.pairing-input.hidden-input[data-v-77a073d9]{opacity:0}.pairing-input[data-v-77a073d9]:disabled{cursor:not-allowed}.pairing-input[data-v-77a073d9]::placeholder{color:transparent}.processing-status[data-v-77a073d9]{display:flex;align-items:center;gap:.25rem;font-size:.875rem;color:var(--color-text-muted)}.processing-icon[data-v-77a073d9]{font-size:.875rem}.processing-spinner-small[data-v-77a073d9]{width:12px;height:12px;border:2px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin-77a073d9 .8s linear infinite}@keyframes spin-77a073d9{to{transform:rotate(360deg)}}.device-info[data-v-77a073d9]{display:flex;flex-direction:column;gap:.5rem}.device-permit-text[data-v-77a073d9]{margin:0;font-size:.95rem;color:var(--color-text)}.device-meta[data-v-77a073d9]{margin:0;font-size:.8rem;color:var(--color-text-muted);font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace}.error-message[data-v-77a073d9]{margin:0;font-size:.875rem;color:var(--color-error, #ef4444);margin-bottom:1rem}.view-lede[data-v-2cc35e77]{margin:0;color:var(--color-text-muted);font-size:1rem}.section-header[data-v-2cc35e77]{display:flex;flex-direction:column;gap:.4rem}.empty-state[data-v-2cc35e77]{margin:0;color:var(--color-text-muted);text-align:center;padding:1rem 0}.logout-note[data-v-2cc35e77]{margin:.75rem 0 0;color:var(--color-text-muted);font-size:.875rem}.remote-auth-inline[data-v-2cc35e77]{display:flex;flex-direction:column;gap:.5rem}.remote-auth-label[data-v-2cc35e77]{display:block;margin:0;font-size:.875rem;color:var(--color-text-muted);font-weight:500}.remote-auth-description[data-v-2cc35e77]{font-size:.75rem;color:var(--color-text-muted)}.theme-toggle[data-v-2cc35e77]{position:absolute;top:var(--layout-padding);right:var(--layout-padding)}.theme-btn[data-v-2cc35e77]{background:none;border:none;padding:.25rem;font-size:1.25rem;cursor:pointer;opacity:.5;transition:opacity .15s}.theme-btn[data-v-2cc35e77]:hover{opacity:.8}.theme-menu[data-v-2cc35e77]{position:absolute;top:100%;right:0;width:5rem;height:4rem;margin-top:.25rem}.theme-option[data-v-2cc35e77]{position:absolute;background:none;border:none;font-size:1.25rem;cursor:pointer;opacity:.5;padding:.25rem;border-radius:var(--radius-sm);transition:opacity .15s,transform .15s}.theme-option[data-v-2cc35e77]:hover{opacity:1;transform:scale(1.2)}.theme-option.active[data-v-2cc35e77]{opacity:1}.theme-option.top[data-v-2cc35e77]{top:0;left:50%;transform:translate(-50%)}.theme-option.top[data-v-2cc35e77]:hover{transform:translate(-50%) scale(1.2)}.theme-option.left[data-v-2cc35e77]{bottom:0;left:0}.theme-option.right[data-v-2cc35e77]{bottom:0;right:0}.host-view[data-v-237999a2]{padding:3rem 1.5rem 4rem}.host-actions[data-v-237999a2]{display:flex;flex-direction:column;gap:.75rem}.host-actions .button-row[data-v-237999a2]{gap:.75rem;flex-wrap:wrap}.host-actions .button-row button[data-v-237999a2]{flex:1 1 0}.note[data-v-237999a2],.empty-state[data-v-237999a2]{margin:0;color:var(--color-text-muted)}
@@ -0,0 +1 @@
1
+ import{_ as Ke,w as He,o as Se,n as Ie,a as $e,b as f,c as m,d as a,e as ie,F as he,r as it,f as Ne,g as B,t as W,h as F,i as ut,v as ct,j as pe,k as c,l as dt,m as A,s as ft,p as vt,q as re,u as k,x as Q,y as Ye,z as Re,A as ge,B as Te,C as ht,D as pt,E as Ce,G as Ue,H as gt,N as mt,O as xe,I as yt,J as wt,K as bt}from"./_plugin-vue_export-helper-DJsHCwvl.js";import{u as kt,i as _t}from"./theme-C2WysaSw.js";import{u as Ae,B as It,U as et,_ as xt,a as Ct,N as St,M as $t,R as Lt,L as At,b as Wt,A as Pt,c as Mt}from"./AccessDenied-Licr0tqA.js";import{g as Ze,i as te,a as Ge,b as Je,c as Qe,s as Xe}from"./pow-DUr-T9XX.js";import{g as Le}from"./helpers-DzjFIx78.js";const Ve={};async function Et(T="login"){if(Ve[T])return Ve[T];const o=await fetch("/auth/api/forward");if(o.status===401||o.status===403){const $=await o.json();if($.auth?.iframe){let _=$.auth.iframe;return T!==$.auth.mode&&(_=_.replace(/mode=[^&]*/,`mode=${T}`)),Ve[T]=_,_}}throw new Error("Unable to fetch auth iframe URL")}const Dt={class:"pairing-entry"},Bt={key:0,class:"input-row"},Nt={class:"slot-word"},Tt={class:"typed-prefix"},Ut={class:"hint-suffix"},Vt={key:0,class:"cursor-overlay",style:{"--cursor-pos":0,"--word-len":0}},Ht=["placeholder"],Rt={key:0,class:"processing-status"},Kt={class:"processing-icon"},zt={key:1,class:"device-info"},Ft={class:"device-permit-text"},jt={class:"device-meta"},Ot={key:0,class:"error-message",style:{"margin-top":"0.5rem"}},qt={class:"button-row",style:{"margin-top":"0.75rem",display:"flex",gap:"0.5rem"}},Yt=["disabled"],Zt=["disabled"],Gt={__name:"RemoteAuthPermit",props:{title:{type:String,default:"Help Another Device Sign In"},description:{type:String,default:"Enter the code shown on the device that needs to sign in."},placeholder:{type:String,default:"Enter three words"},action:{type:String,default:"login"}},emits:["completed","error","cancelled","back","register","deviceInfoVisible"],setup(T,{expose:o,emit:$}){const _=$,I=c(!1),C=c(null),U=c(null);let d=null,V=null;try{V=Ae()}catch{}const E=c(null),j=c(null),u=c(""),g=c(!1),y=c(""),h=c(null),p=c("");He(h,e=>{_("deviceInfoVisible",!!e)});const w=c(!1),P=c(!1),L=c(0),H=c(0),X=c(0),ue=c(!1),se=c(!1);let R=0,ne=!1,G=null,oe=null,q=null,N=null,Y=null,J=null;function ae(e,n="info",s=3e3){V&&V.showMessage(e,n,s)}async function me(){try{const e=await dt();U.value=e}catch(e){console.warn("Unable to load settings",e)}}function ye(e,n){if(!e||n<0)return{word:"",start:0,end:0};let s=n,i=n;for(;s>0&&/[a-zA-Z]/.test(e[s-1]);)s--;for(;i<e.length&&/[a-zA-Z]/.test(e[i]);)i++;return{word:e.slice(s,i),start:s,end:i}}function le(e){return e.trim().split(/[.\s]+/).filter(n=>n.length>0)}function D(e){const n=le(e),s=[];for(const i of n){let r=i.toLowerCase();for(;r.length>0&&s.length<3;){let S=null;for(let b=Math.min(r.length,6);b>=3;b--){const x=r.slice(0,b);if(te(x)){S=x;break}}if(S)s.push(S),r=r.slice(S.length);else{s.push(r);break}}if(s.length>=3)break}return s}function We(e){const n=/[.\s]$/.test(e),s=D(e);return n?s.length:Math.max(0,s.length-1)}function ce(e){if(!e)return{valid:!0,segments:[]};const n=[],s=/[.\s]$/.test(e);let i,r=/([a-zA-Z]+)|([.\s]+)/g;for(;(i=r.exec(e))!==null;)i[1]?n.push({text:i[1],isWord:!0,start:i.index}):i[2]&&n.push({text:i[2],isWord:!1,start:i.index});const S=n.filter(x=>x.isWord);let b=!0;return S.forEach((x,K)=>{const M=K===S.length-1,Z=x.text.toLowerCase();M&&!s?x.invalid=!Ge(Z):x.invalid=!te(Z),x.invalid&&(b=!1)}),{valid:b,segments:n}}function we(e){return ce(e).valid}function ee(e){return D(e).length>0&&D(e).every(n=>te(n))}function Pe(e){if(/[.\s]$/.test(e))return"";const s=e.match(/[a-zA-Z]+$/);return s?s[0].toLowerCase():""}function be(e,n){if(!e||n===0)return{wordIndex:0,charIndex:0};const s=e.slice(0,n),i=/[.\s]$/.test(s),r=D(s);if(r.length===0)return{wordIndex:0,charIndex:0};if(i)return{wordIndex:Math.min(r.length,2),charIndex:0};const S=r[r.length-1],b=r.length-1;D(e);const x=S.length;return b<2&&!se.value&&te(S)?{wordIndex:b+1,charIndex:0}:{wordIndex:Math.min(b,2),charIndex:x}}function de(e,n){if(!e||n===0)return{wordIndex:0,charIndex:0};const s=e.slice(0,n),i=/[.\s]$/.test(s),r=D(s);if(r.length===0)return{wordIndex:0,charIndex:0};if(i)return{wordIndex:Math.min(r.length,2),charIndex:0};const S=r[r.length-1],b=r.length-1;return{wordIndex:Math.min(b,2),charIndex:S.length}}const Me=A(()=>{const e=D(u.value),n=[],s=Pe(u.value),i=p.value,r=/[.\s]$/.test(u.value),S=H.value!==X.value,b=de(u.value,Math.min(H.value,X.value)),x=de(u.value,Math.max(H.value,X.value)),K=S?de(u.value,L.value):be(u.value,L.value);for(let M=0;M<3;M++){const Z=K.wordIndex===M;let O=-1,z=-1;if(S&&(M>b.wordIndex&&M<x.wordIndex?(O=0,z=e[M]?.length??0):M===b.wordIndex&&M===x.wordIndex?(O=b.charIndex,z=x.charIndex):M===b.wordIndex?(O=b.charIndex,z=e[M]?.length??0):M===x.wordIndex&&(O=0,z=x.charIndex)),M<e.length){const _e=e[M].toLowerCase(),Oe=M===e.length-1,qe=Oe&&!r?!Ge(_e):!te(_e);if(Oe&&!r&&i&&s){const rt=i.length;n.push({text:"",typedPrefix:s,hintSuffix:i.slice(s.length),invalid:qe,hasCursor:Z,cursorCharIndex:Z?K.charIndex:-1,wordLen:rt,selectionStartChar:O,selectionEndChar:z})}else n.push({text:_e,invalid:qe,hasCursor:Z,cursorCharIndex:Z?K.charIndex:-1,wordLen:_e.length,selectionStartChar:O,selectionEndChar:z})}else n.push({text:"",invalid:!1,hasCursor:Z,cursorCharIndex:0,wordLen:0,selectionStartChar:O,selectionEndChar:z})}return n}),Ee=A(()=>H.value!==X.value),fe=A(()=>{const e=D(u.value);return e.length===3&&e.every(n=>te(n))});function ke(e){return D(e).join(".")}function De(){if(!G||q)return;const e=Qe(G);q=Xe(e,oe).then(n=>{N=n,q=null})}async function l(){if(N){const n=N;return N=null,n}if(q){await q;const n=N;return N=null,n}if(!G)throw new Error("No PoW challenge available");const e=Qe(G);return await Xe(e,oe)}function t(e){e?.challenge&&(G=e.challenge,oe=e.work,N=null,q=null,De())}async function v(){if(!(d||ne)){ne=!0;try{const e=U.value?.auth_host,n="/auth/ws/remote-auth/permit",s=e&&location.host!==e?`//${e}${n}`:n;d=await vt(s);const i=await d.receive_json();if(i.status&&i.detail)throw new Error(i.detail);if(!i.pow?.challenge)throw new Error("Server did not send PoW challenge");t(i.pow)}catch(e){throw console.error("WebSocket connection error:",e),d=null,e}finally{ne=!1}}}function st(e){if(e.key==="Tab"||e.key===" "||e.key==="Escape"){at(e);return}setTimeout(ze,0)}function ze(){const e=E.value,n=e?.selectionStart??u.value.length,s=e?.selectionEnd??n,r=(e?.selectionDirection??"none")==="backward"?n:s;se.value=r<R,R=r,L.value=r,X.value=s,H.value=n}function nt(){L.value=E.value?.selectionStart??u.value.length;const{word:e,end:n}=ye(u.value,L.value);if(We(u.value)>=3||!e||e.length<1||L.value!==n){p.value="";return}const i=Ze(e.toLowerCase());i&&i!==e.toLowerCase()?p.value=i:p.value=""}function Fe(){if(!p.value)return!1;const{word:e,start:n,end:s}=ye(u.value,L.value);if(!e)return!1;const i=u.value.slice(0,n),b=D(i).length===2?"":" ",x=u.value.slice(s);u.value=i+p.value+b+x.trimStart();const K=n+p.value.length+b.length;return Ie(()=>{E.value?.setSelectionRange(K,K),L.value=K}),p.value="",!0}function ve(){L.value=E.value?.selectionStart??u.value.length;const e=L.value,s=u.value.slice(0,e).match(/([a-zA-Z]+) $/);if(s){const r=s[1].toLowerCase(),S=Ze(r);if(S&&S!==r&&!te(r)){const b=e-s[0].length,x=u.value.slice(0,b),K=u.value.slice(e),O=D(x).length===2?"":" ";u.value=x+S+O+K;const z=b+S.length+O.length;Ie(()=>{E.value?.setSelectionRange(z,z),L.value=z})}}nt(),Y&&(clearTimeout(Y),Y=null),h.value=null,C.value=null,P.value=!1,w.value=!we(u.value);const i=D(u.value);if(i.length>=1&&!d&&!ne&&v(),i.length===3){if(!ee(u.value))return;Y=setTimeout(()=>{ot()},150)}}async function ot(){if(!(g.value||I.value||!fe.value||ke(u.value)===J&&h.value)){g.value=!0,y.value="pow",C.value=null,P.value=!1;try{if(await v(),!d)throw new Error("Failed to connect");const n=await l(),s=Je(n),i=ke(u.value);if(!fe.value)return;y.value="server",d.send_json({code:i,pow:s});const r=await d.receive_json();if(t(r.pow),typeof r.status=="number"&&r.status>=400){ae(r.detail||"Request failed","error"),P.value=!0,h.value=null,J=null;return}r.status==="found"&&r.host?(h.value={host:r.host,user_agent_pretty:r.user_agent_pretty,client_ip:r.client_ip,action:r.action||"login"},J=i,Ie(()=>{j.value?.focus()})):(ae("Unexpected response from server","error"),P.value=!0,h.value=null,J=null)}catch(n){console.error("Lookup error:",n),ae(n.message||"Lookup failed","error"),P.value=!0,h.value=null,J=null,d&&(d.close(),d=null)}finally{g.value=!1,y.value=""}}}function at(e){if(e.key==="Escape"){u.value="",ve(),e.preventDefault();return}if(e.key==="Tab"){if(p.value&&Fe()){e.preventDefault(),ve();return}u.value.trim()&&e.preventDefault();return}e.key===" "&&p.value&&Fe()&&(e.preventDefault(),ve())}async function lt(){if(!(!h.value||I.value)){I.value=!0,C.value=null;try{if(d||await v(),!d)throw new Error("Failed to connect");const e=await l(),n=Je(e);d.send_json({authenticate:!0,pow:n});const s=await d.receive_json();if(typeof s.status=="number"&&s.status>=400)throw new Error(s.detail||"Authentication failed");if(!s.optionsJSON)throw new Error(s.detail||"Failed to get authentication options");const i=await ft(s);d.send_json(i);const r=await d.receive_json();if(typeof r.status=="number"&&r.status>=400)throw new Error(r.detail||"Authentication failed");if(r.status==="success")ae("Device authenticated successfully!","success",3e3),_("completed"),Be();else throw new Error(r.detail||"Authentication failed")}catch(e){console.error("Pairing error:",e);const n=e.name==="NotAllowedError"?"Passkey authentication was cancelled":e.message||"Authentication failed";C.value=n,_("error",n)}finally{I.value=!1,d&&(d.close(),d=null)}}}async function je(){if(d){try{d.send_json({deny:!0}),await new Promise(e=>setTimeout(e,100))}catch(e){console.error("Error sending deny message:",e)}d.close(),d=null}Be()}function Be(){u.value="",C.value=null,P.value=!1,h.value=null,g.value=!1,y.value="",p.value="",w.value=!1,J=null,d&&(d.close(),d=null),G=null,oe=null,q=null,N=null}return Se(async()=>{await me(),Ie(()=>{L.value=E.value?.selectionStart??0})}),$e(()=>{Y&&(clearTimeout(Y),Y=null),d&&(d.close(),d=null)}),o({reset:Be,deny:je,code:u,handleInput:ve,loading:I,error:C}),(e,n)=>(f(),m("div",Dt,[a("form",{onSubmit:pe(lt,["prevent"]),class:"pairing-form"},[h.value?h.value?(f(),m("div",zt,[a("p",Ft,[F("Permit "+W(h.value.action==="register"?"registration":"login")+" to ",1),a("strong",null,W(h.value.host),1)]),a("p",jt,W(h.value.user_agent_pretty),1),C.value?(f(),m("p",Ot,W(C.value),1)):B("",!0),a("div",qt,[a("button",{type:"button",class:"btn-secondary",disabled:I.value,onClick:je,style:{flex:"1"}}," Deny ",8,Yt),a("button",{ref_key:"submitBtnRef",ref:j,type:"submit",disabled:I.value,class:"btn-primary",style:{flex:"1"}},W(I.value?"Authenticating…":"Authorize"),9,Zt)])])):B("",!0):(f(),m("div",Bt,[a("div",{class:ie(["input-wrapper",{"has-error":P.value,"is-complete":h.value&&!P.value,focused:ue.value,"has-selection":Ee.value}])},[a("div",{class:ie(["slot-machine",{"has-error":P.value,"is-complete":h.value&&!P.value}]),"aria-hidden":"true"},[(f(!0),m(he,null,it(Me.value,(s,i)=>(f(),m("div",{key:i,class:ie(["slot-reel",{"invalid-word":s.invalid,empty:!s.text&&!s.typedPrefix}])},[a("div",Nt,[s.selectionStartChar>=0&&s.selectionEndChar>s.selectionStartChar?(f(),m("span",{key:0,class:"selection-overlay",style:Ne({"--sel-start":s.selectionStartChar,"--sel-end":s.selectionEndChar,"--word-len":s.wordLen})},null,4)):B("",!0),s.typedPrefix?(f(),m(he,{key:1},[a("span",Tt,W(s.typedPrefix),1),a("span",Ut,W(s.hintSuffix),1),s.hasCursor?(f(),m("span",{key:0,class:"cursor-overlay",style:Ne({"--cursor-pos":s.cursorCharIndex,"--word-len":s.wordLen})},null,4)):B("",!0)],64)):s.text?(f(),m(he,{key:2},[F(W(s.text)+" ",1),s.hasCursor?(f(),m("span",{key:0,class:"cursor-overlay",style:Ne({"--cursor-pos":s.cursorCharIndex,"--word-len":s.wordLen})},null,4)):B("",!0)],64)):(f(),m(he,{key:3},[s.hasCursor?(f(),m("span",Vt)):B("",!0)],64))])],2))),128))],2),ut(a("input",{ref_key:"inputRef",ref:E,"onUpdate:modelValue":n[0]||(n[0]=s=>u.value=s),type:"text",placeholder:T.placeholder,autocomplete:"off",autocapitalize:"none",autocorrect:"off",spellcheck:"false",class:"pairing-input hidden-input",onInput:ve,onKeydown:st,onMouseup:ze,onFocus:n[1]||(n[1]=s=>ue.value=!0),onBlur:n[2]||(n[2]=s=>ue.value=!1)},null,40,Ht),[[ct,u.value]])],2),y.value?(f(),m("div",Rt,[a("span",Kt,W(y.value==="pow"?"🔐":"📡"),1),n[3]||(n[3]=a("span",{class:"processing-spinner-small"},null,-1))])):B("",!0)]))],32)]))}},Jt=Ke(Gt,[["__scopeId","data-v-77a073d9"]]),Qt={class:"view-root","data-view":"profile"},Xt={class:"theme-toggle"},es=["title"],ts={class:"view-header"},ss={class:"remote-auth-inline"},ns={key:0,class:"remote-auth-label"},os={class:"section-block"},as={class:"section-body"},ls={class:"section-block"},rs=["disabled"],is=["disabled"],us=["disabled"],cs={key:0,class:"logout-note"},ds={key:1,class:"logout-note"},fs={__name:"ProfileView",setup(T){const o=Ae(),$=c(null),_=c(!1),I=c(!1),C=c(""),U=c(!1),d=c(null),V=c(null),E=c(!1),j=c(null),u=c(null),g=c(null),y=c(null),h=c(null),p=c(null),w=c(null),P=c(null),L=c(""),H=c(!1),X=A(()=>({"":"🌓",light:"☀️",dark:"🌙"})[L.value]||"🌓"),ue=A(()=>({"":"Auto (system)",light:"Light mode",dark:"Dark mode"})[L.value]||"Theme");He(()=>o.userInfo?.ctx?.user?.theme,l=>{L.value=l||""},{immediate:!0});function se(l){L.value=l,H.value=!1,kt({user:{theme:l}},!0),Re("/auth/api/user/theme",{method:"PATCH",body:{theme:l}}).catch(t=>o.showMessage(t.message,"error"))}const R=A(()=>_.value||I.value);He(_,l=>{l&&(C.value=o.userInfo?.ctx.user.display_name??"")}),Se(()=>{$.value=setInterval(()=>{o.userInfo&&(o.userInfo={...o.userInfo})},6e4)}),$e(()=>{$.value&&clearInterval($.value)});const ne=async()=>{try{await gt.register(null,null,()=>{o.showMessage("Adding new passkey...","info")}),await o.loadUserInfo(),o.showMessage("New passkey added successfully!","success",3e3)}catch(l){console.error("Failed to add new passkey:",l),o.showMessage(l.message,"error")}},G=()=>{o.showMessage("The other device is now signed in!","success",4e3),setTimeout(()=>j.value?.reset(),3e3)},oe=l=>{l.includes("cancelled")||o.showMessage(l,"error",4e3)},q=()=>{o.showMessage("📋 Link copied! Send it to your other device."),I.value=!1},N=l=>{Te(l,{primarySelector:".btn-primary",itemSelector:"button"})},Y=l=>{if(R.value)return;const t=ge(l);t&&t==="down"&&(l.preventDefault(),Te(P.value,{primarySelector:".mini-btn",itemSelector:".mini-btn, .pairing-input"}))},J=l=>{if(R.value)return;const t=ge(l);if(!t)return;l.preventDefault(),t==="left"||t==="right"?Ce(P.value,l.target,t,{itemSelector:".mini-btn, .pairing-input"}):t==="up"?p.value?.focusCurrent?.():t==="down"&&u.value?.$el?.focus()},ae=l=>{R.value||(l==="down"||l==="right"?N(g.value):(l==="up"||l==="left")&&Te(P.value,{primarySelector:".mini-btn",itemSelector:".mini-btn, .pairing-input"}))},me=l=>{if(R.value)return;const t=ge(l);t&&(l.preventDefault(),t==="left"||t==="right"?Ce(g.value,l.target,t,{itemSelector:"button"}):t==="up"?Ue(u.value?.$el,0,{itemSelector:".credential-item"}):t==="down"&&Ue(y.value?.$el,0,{itemSelector:".session-group"}))},ye=l=>{R.value||(l==="up"?N(g.value):l==="down"&&N(h.value))},le=l=>{if(R.value)return;const t=ge(l);t&&(l.preventDefault(),t==="left"||t==="right"?Ce(h.value,l.target,t,{itemSelector:"button"}):t==="up"&&Ue(y.value?.$el,-1,{itemSelector:".session-group"}))},D=async l=>{const t=l?.credential;if(t)try{await o.deleteCredential(t),o.showMessage("Passkey deleted! You should also remove it from your password manager or device.","success",3e3)}catch(v){o.showMessage(`Failed to delete passkey: ${v.message}`,"error")}},We=A(()=>o.settings?.rp_name||"this service"),ce=A(()=>o.userInfo?.sessions||[]),we=A(()=>ce.value.find(t=>t.is_current)?.host||"this host"),ee=c({}),Pe=async l=>{const t=l?.id;if(t){ee.value={...ee.value,[t]:!0};try{await o.terminateSession(t)}catch(v){o.showMessage(v.message||"Failed to terminate session","error",5e3)}finally{const v={...ee.value};delete v[t],ee.value=v}}},be=async()=>{await o.logoutEverywhere()},de=async()=>{await o.logout()},Me=()=>{C.value=o.userInfo?.ctx.user.display_name??"",_.value=!0},Ee=A(()=>{const l=o.userInfo?.ctx.permissions;return l.includes("auth:admin")||l.includes("auth:org:admin")}),fe=A(()=>ce.value.length>1),ke=A(()=>{const l=[{label:"Auth",href:ht()}];return Ee.value&&l.push({label:"Admin",href:pt()}),l}),De=async()=>{const l=C.value.trim();if(!l){o.showMessage("Name cannot be empty","error");return}try{U.value=!0,await Re("/auth/api/user/display-name",{method:"PATCH",body:{display_name:l}}),_.value=!1,await o.loadUserInfo(),o.showMessage("Name updated successfully!","success",3e3)}catch(t){o.showMessage(t.message||"Failed to update name","error")}finally{U.value=!1}};return(l,t)=>(f(),m("section",Qt,[a("div",Xt,[a("button",{class:"theme-btn",onClick:t[0]||(t[0]=v=>H.value=!H.value),title:ue.value},W(X.value),9,es),H.value?(f(),m("div",{key:0,class:"theme-menu",onClick:t[4]||(t[4]=v=>H.value=!1)},[a("button",{class:ie(["theme-option top",{active:L.value===""}]),onClick:t[1]||(t[1]=pe(v=>se(""),["stop"])),title:"Auto"},"🌓",2),a("button",{class:ie(["theme-option left",{active:L.value==="light"}]),onClick:t[2]||(t[2]=pe(v=>se("light"),["stop"])),title:"Light"},"☀️",2),a("button",{class:ie(["theme-option right",{active:L.value==="dark"}]),onClick:t[3]||(t[3]=pe(v=>se("dark"),["stop"])),title:"Dark"},"🌙",2)])):B("",!0)]),a("header",ts,[t[15]||(t[15]=a("h1",null,"User Profile",-1)),re(It,{ref_key:"breadcrumbs",ref:p,entries:ke.value,onKeydown:Y},null,8,["entries"]),t[16]||(t[16]=a("p",{class:"view-lede"},"Account dashboard for managing credentials and authenticating with other devices.",-1))]),a("section",{class:"section-block",ref_key:"userInfoSection",ref:P},[k(o).userInfo?.ctx?(f(),Q(et,{key:0,ref_key:"userBasicInfo",ref:w,name:k(o).userInfo.ctx.user.display_name,visits:k(o).userInfo.visits,"created-at":k(o).userInfo.created_at,"last-seen":k(o).userInfo.last_seen,loading:k(o).isLoading,"update-endpoint":"/auth/api/user/display-name",onSaved:t[6]||(t[6]=v=>k(o).loadUserInfo()),onEditName:Me,onKeydown:J},{default:Ye(()=>[a("div",ss,[E.value?B("",!0):(f(),m("label",ns,"Code words:")),re(Jt,{ref_key:"pairingEntry",ref:j,title:"",description:"",onCompleted:G,onError:oe,onDeviceInfoVisible:t[5]||(t[5]=v=>E.value=v)},null,512)]),t[17]||(t[17]=a("p",{class:"remote-auth-description"},"Provided by another device requesting remote auth.",-1))]),_:1},8,["name","visits","created-at","last-seen","loading"])):B("",!0)],512),a("section",os,[t[18]||(t[18]=a("div",{class:"section-header"},[a("h2",null,"Your Passkeys"),a("p",{class:"section-description"},[F("Ideally have at least two passkeys in case you lose one. More than one user can be registered on the same device, giving you a choice at login. "),a("a",{href:"https://bitwarden.com/pricing/",target:"_blank",rel:"noopener noreferrer"},"Bitwarden"),F(" can sync one passkey to all your devices. Other secure options include "),a("b",null,"local passkeys"),F(", as well as hardware keys such as "),a("a",{href:"https://www.yubico.com",target:"_blank",rel:"noopener noreferrer"},"YubiKey"),F(". Cloud sync via Google, Microsoft or iCloud is discouraged.")])],-1)),a("div",as,[re(xt,{ref_key:"credentialList",ref:u,credentials:k(o).userInfo?.credentials||[],"aaguid-info":k(o).userInfo?.aaguid_info||{},loading:k(o).isLoading,"hovered-credential-uuid":d.value,"hovered-session-credential-uuid":V.value?.credential,"navigation-disabled":R.value,"allow-delete":"",onDelete:D,onCredentialHover:t[7]||(t[7]=v=>d.value=v),onNavigateOut:ae},null,8,["credentials","aaguid-info","loading","hovered-credential-uuid","hovered-session-credential-uuid","navigation-disabled"]),a("div",{class:"button-row",ref_key:"credentialButtons",ref:g},[a("button",{onClick:ne,class:"btn-primary",onKeydown:me},"Register New",32),a("button",{onClick:t[8]||(t[8]=v=>I.value=!0),class:"btn-secondary",onKeydown:me},"Another Device",32)],512)])]),re(Ct,{ref_key:"sessionList",ref:y,sessions:ce.value,"terminating-sessions":ee.value,"hovered-credential-uuid":d.value,"navigation-disabled":R.value,onTerminate:Pe,onSessionHover:t[9]||(t[9]=v=>V.value=v),onNavigateOut:ye,"section-description":"You are currently signed in to the following sessions. If you don't recognize something, consider deleting not only the session but the associated passkey you suspect is compromised, as only this terminates all linked sessions and prevents logging in again."},null,8,["sessions","terminating-sessions","hovered-credential-uuid","navigation-disabled"]),_.value?(f(),Q($t,{key:0,onClose:t[12]||(t[12]=v=>_.value=!1)},{default:Ye(()=>[t[19]||(t[19]=a("h3",null,"Edit Display Name",-1)),a("form",{onSubmit:pe(De,["prevent"]),class:"modal-form"},[re(St,{label:"Display Name",modelValue:C.value,"onUpdate:modelValue":t[10]||(t[10]=v=>C.value=v),busy:U.value,onCancel:t[11]||(t[11]=v=>_.value=!1)},null,8,["modelValue","busy"])],32)]),_:1})):B("",!0),a("section",ls,[a("div",{class:"button-row",ref_key:"logoutButtons",ref:h},[a("button",{type:"button",class:"btn-secondary",onClick:t[13]||(t[13]=(...v)=>k(Le)&&k(Le)(...v)),onKeydown:le}," Back ",32),fe.value?(f(),m(he,{key:1},[a("button",{onClick:de,class:"btn-danger",disabled:k(o).isLoading,onKeydown:le},"Logout",40,is),a("button",{onClick:be,class:"btn-danger",disabled:k(o).isLoading,onKeydown:le},"All",40,us)],64)):(f(),m("button",{key:0,onClick:be,class:"btn-danger",disabled:k(o).isLoading,onKeydown:le},"Logout",40,rs))],512),fe.value?(f(),m("p",ds,[t[21]||(t[21]=a("strong",null,"Logout",-1)),F(" this session on "+W(we.value)+", or ",1),t[22]||(t[22]=a("strong",null,"All",-1)),F(" sessions across all sites and devices for "+W(We.value)+". You'll need to log in again with your passkey afterwards.",1)])):(f(),m("p",cs,[t[20]||(t[20]=a("strong",null,"Logout",-1)),F(" from "+W(we.value)+".",1)]))]),I.value?(f(),Q(Lt,{key:1,endpoint:"/auth/api/user/create-link",onClose:t[14]||(t[14]=v=>I.value=!1),onCopied:q})):B("",!0)]))}},vs=Ke(fs,[["__scopeId","data-v-2cc35e77"]]),hs={class:"view-root host-view","data-view":"host-profile"},ps={class:"view-header"},gs={class:"view-lede"},ms={class:"section-body"},ys={key:1,class:"empty-state"},ws={class:"section-block"},bs={class:"section-body host-actions"},ks=["disabled"],_s=["disabled"],Is={class:"note"},xs={__name:"HostProfileView",props:{initializing:{type:Boolean,default:!1}},setup(T){const o=Ae(),$=window.location.host,_=c(null),I=c(null),C=A(()=>o.userInfo?.ctx||null),U=A(()=>C.value?.org.display_name??""),d=A(()=>C.value?.role.display_name??""),V=A(()=>{const p=o.settings?.rp_name;return p?`${p} account`:"Account overview"}),E=A(()=>`You're signed in to ${$}.`),j=A(()=>o.settings?.auth_host||""),u=A(()=>{const p=j.value;if(!p)return"";let w=o.settings?.ui_base_path??"/auth/";return w.startsWith("/")||(w=`/${w}`),w.endsWith("/")||(w=`${w}/`),`${window.location.protocol||"https:"}//${p}${w}`}),g=()=>{u.value&&(window.location.href=u.value)},y=async()=>{await o.logout()},h=p=>{const w=ge(p);w&&(p.preventDefault(),(w==="left"||w==="right")&&Ce(I.value,p.target,w,{itemSelector:"button"}))};return(p,w)=>(f(),m("section",hs,[a("header",ps,[a("h1",null,W(V.value),1),a("p",gs,W(E.value),1)]),a("section",{class:"section-block",ref_key:"userInfoSection",ref:_},[a("div",ms,[C.value?(f(),Q(et,{key:0,name:C.value.user.display_name,visits:k(o).userInfo?.visits||0,"created-at":k(o).userInfo?.created_at,"last-seen":k(o).userInfo?.last_seen,"org-display-name":U.value,"role-name":d.value,"can-edit":!1},null,8,["name","visits","created-at","last-seen","org-display-name","role-name"])):(f(),m("p",ys,W(T.initializing?"Loading your account…":"No active session found."),1))])],512),a("section",ws,[a("div",bs,[a("div",{class:"button-row",ref_key:"buttonRow",ref:I,onKeydown:h},[a("button",{type:"button",class:"btn-secondary",onClick:w[0]||(w[0]=(...P)=>k(Le)&&k(Le)(...P))}," Back "),a("button",{type:"button",class:"btn-danger",disabled:k(o).isLoading,onClick:y},W(k(o).isLoading?"Signing out…":"Logout"),9,ks),u.value?(f(),m("button",{key:0,type:"button",class:"btn-primary",disabled:k(o).isLoading,onClick:g}," Full Profile ",8,_s)):B("",!0)],544),a("p",Is,[w[1]||(w[1]=a("strong",null,"Logout",-1)),F(" from "+W(k($))+", or access your ",1),w[2]||(w[2]=a("strong",null,"Full Profile",-1)),F(" at "+W(j.value)+" (you may need to sign in again).",1)])])])]))}},Cs=Ke(xs,[["__scopeId","data-v-237999a2"]]),Ss={class:"app-shell"},$s={class:"app-main"},Ls={__name:"App",setup(T){const o=Ae(),$=c("loading"),_=c("Loading...");function I(g){if(!g)return null;const y=g.trim().toLowerCase();return y?y.replace(/:80$/,"").replace(/:443$/,""):null}const C=A(()=>{const g=o.settings?.auth_host;if(!g)return!1;const y=I(window.location.host),h=I(g);return y!==h});function U(){o.userInfo=null,$.value="terminal"}const d=()=>o.userInfo?.ctx.user.uuid,V=new mt(d,U);Se(()=>V.start()),$e(()=>V.stop());async function E(){try{return o.userInfo=await Re("/auth/api/user-info",{method:"POST"}),$.value="profile",!0}catch{return o.userInfo=null,!1}}async function j(){const g=await Et("login");yt(g),_.value="Authentication required..."}function u(g){const y=g.data;if(y?.type)switch(y.type){case"auth-success":xe(),$.value="loading",_.value="Loading user profile...",E();break;case"auth-error":y.cancelled?console.log("Authentication cancelled by user"):o.showMessage(y.message||"Authentication failed","error",5e3);break;case"auth-cancelled":console.log("Authentication cancelled");break;case"auth-back":xe(),U();break;case"auth-close-request":xe();break}}return Se(async()=>{window.addEventListener("message",u),await o.loadSettings();const g=o.settings?.rp_name;if(g){const h=o.settings?.auth_host,p=h&&I(window.location.host)!==I(h);document.title=p?`${g} · Account summary`:g}await E()||j()}),$e(()=>{window.removeEventListener("message",u),xe()}),(g,y)=>(f(),m("div",Ss,[re(Wt),a("main",$s,[$.value==="profile"&&C.value?(f(),Q(Cs,{key:0})):$.value==="profile"?(f(),Q(vs,{key:1})):$.value==="loading"?(f(),Q(At,{key:2,message:_.value},null,8,["message"])):$.value==="terminal"?(f(),Q(Pt,{key:3})):B("",!0)])]))}};_t();const tt=wt(Ls);tt.use(Mt());tt.mount("#app");bt();
@@ -0,0 +1 @@
1
+ import{o as d,b as u,x as s,u as m,m as o,a8 as l,J as h,K as p}from"./_plugin-vue_export-helper-DJsHCwvl.js";import{R as f}from"./RestrictedAuth-DWKMTEV3.js";import{g as a}from"./helpers-DzjFIx78.js";import"./pow-DUr-T9XX.js";const w={__name:"RestrictedForward",setup(_){const n=o(()=>l()),r=o(()=>{const e=document.documentElement.getAttribute("data-mode");return e==="reauth"?"reauth":e==="forbidden"?"forbidden":"login"});function i(){location.reload()}function c(){const t=n.value||"/auth/";window.location.pathname!==t&&history.replaceState(null,"",t),window.location.href=t}return d(()=>{window.addEventListener("keydown",t=>{t.key==="Escape"&&a()})}),(t,e)=>(u(),s(f,{mode:r.value,onAuthenticated:i,onBack:m(a),onHome:c},null,8,["mode","onBack"]))}};h(w).mount("#app");p();