diff --git a/htdocs/assets/index.js b/htdocs/assets/index.js index 0c93e1cc..6a6b2b09 100644 --- a/htdocs/assets/index.js +++ b/htdocs/assets/index.js @@ -47,7 +47,7 @@ * vue-router v4.3.0 * (c) 2024 Eduardo San Martin Morote * @license MIT - */const Mo=typeof document<"u";function zA(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const at=Object.assign;function Uc(e,t){const n={};for(const r in t){const o=t[r];n[r]=Gn(o)?o.map(e):e(o)}return n}const Zs=()=>{},Gn=Array.isArray,_1=/#/g,wA=/&/g,CA=/\//g,kA=/=/g,xA=/\?/g,g1=/\+/g,SA=/%5B/g,EA=/%5D/g,y1=/%5E/g,$A=/%60/g,v1=/%7B/g,TA=/%7C/g,b1=/%7D/g,AA=/%20/g;function am(e){return encodeURI(""+e).replace(TA,"|").replace(SA,"[").replace(EA,"]")}function OA(e){return am(e).replace(v1,"{").replace(b1,"}").replace(y1,"^")}function Bu(e){return am(e).replace(g1,"%2B").replace(AA,"+").replace(_1,"%23").replace(wA,"%26").replace($A,"`").replace(v1,"{").replace(b1,"}").replace(y1,"^")}function PA(e){return Bu(e).replace(kA,"%3D")}function IA(e){return am(e).replace(_1,"%23").replace(xA,"%3F")}function RA(e){return e==null?"":IA(e).replace(CA,"%2F")}function hi(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const DA=/\/$/,LA=e=>e.replace(DA,"");function jc(e,t,n="/"){let r,o={},s="",i="";const a=t.indexOf("#");let l=t.indexOf("?");return a=0&&(l=-1),l>-1&&(r=t.slice(0,l),s=t.slice(l+1,a>-1?a:t.length),o=e(s)),a>-1&&(r=r||t.slice(0,a),i=t.slice(a,t.length)),r=VA(r??t,n),{fullPath:r+(s&&"?")+s+i,path:r,query:o,hash:hi(i)}}function NA(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Op(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function MA(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&ls(t.matched[r],n.matched[o])&&z1(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function ls(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function z1(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!FA(e[n],t[n]))return!1;return!0}function FA(e,t){return Gn(e)?Pp(e,t):Gn(t)?Pp(t,e):e===t}function Pp(e,t){return Gn(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function VA(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let s=n.length-1,i,a;for(i=0;i1&&s--;else break;return n.slice(0,s).join("/")+"/"+r.slice(i).join("/")}var _i;(function(e){e.pop="pop",e.push="push"})(_i||(_i={}));var Ys;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Ys||(Ys={}));function HA(e){if(!e)if(Mo){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),LA(e)}const UA=/^[^#]+#/;function jA(e,t){return e.replace(UA,"#")+t}function qA(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const ic=()=>({left:window.scrollX,top:window.scrollY});function BA(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=qA(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Ip(e,t){return(history.state?history.state.position-t:-1)+e}const Wu=new Map;function WA(e,t){Wu.set(e,t)}function GA(e){const t=Wu.get(e);return Wu.delete(e),t}let KA=()=>location.protocol+"//"+location.host;function w1(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf("#");if(s>-1){let a=o.includes(e.slice(s))?e.slice(s).length:1,l=o.slice(a);return l[0]!=="/"&&(l="/"+l),Op(l,"")}return Op(n,e)+r+o}function ZA(e,t,n,r){let o=[],s=[],i=null;const a=({state:f})=>{const p=w1(e,location),h=n.value,_=t.value;let b=0;if(f){if(n.value=p,t.value=f,i&&i===h){i=null;return}b=_?f.position-_.position:0}else r(p);o.forEach(w=>{w(n.value,h,{delta:b,type:_i.pop,direction:b?b>0?Ys.forward:Ys.back:Ys.unknown})})};function l(){i=n.value}function u(f){o.push(f);const p=()=>{const h=o.indexOf(f);h>-1&&o.splice(h,1)};return s.push(p),p}function m(){const{history:f}=window;f.state&&f.replaceState(at({},f.state,{scroll:ic()}),"")}function d(){for(const f of s)f();s=[],window.removeEventListener("popstate",a),window.removeEventListener("beforeunload",m)}return window.addEventListener("popstate",a),window.addEventListener("beforeunload",m,{passive:!0}),{pauseListeners:l,listen:u,destroy:d}}function Rp(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?ic():null}}function YA(e){const{history:t,location:n}=window,r={value:w1(e,n)},o={value:t.state};o.value||s(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function s(l,u,m){const d=e.indexOf("#"),f=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+l:KA()+e+l;try{t[m?"replaceState":"pushState"](u,"",f),o.value=u}catch(p){console.error(p),n[m?"replace":"assign"](f)}}function i(l,u){const m=at({},t.state,Rp(o.value.back,l,o.value.forward,!0),u,{position:o.value.position});s(l,m,!0),r.value=l}function a(l,u){const m=at({},o.value,t.state,{forward:l,scroll:ic()});s(m.current,m,!0);const d=at({},Rp(r.value,l,null),{position:m.position+1},u);s(l,d,!1),r.value=l}return{location:r,state:o,push:a,replace:i}}function JA(e){e=HA(e);const t=YA(e),n=ZA(e,t.state,t.location,t.replace);function r(s,i=!0){i||n.pauseListeners(),history.go(s)}const o=at({location:"",base:e,go:r,createHref:jA.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function XA(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),JA(e)}function QA(e){return typeof e=="string"||e&&typeof e=="object"}function C1(e){return typeof e=="string"||typeof e=="symbol"}const Tr={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},k1=Symbol("");var Dp;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Dp||(Dp={}));function cs(e,t){return at(new Error,{type:e,[k1]:!0},t)}function dr(e,t){return e instanceof Error&&k1 in e&&(t==null||!!(e.type&t))}const Lp="[^/]+?",eO={sensitive:!1,strict:!1,start:!0,end:!0},tO=/[.+*?^${}()[\]/\\]/g;function nO(e,t){const n=at({},eO,t),r=[];let o=n.start?"^":"";const s=[];for(const u of e){const m=u.length?[]:[90];n.strict&&!u.length&&(o+="/");for(let d=0;dt.length?t.length===1&&t[0]===80?1:-1:0}function oO(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const sO={type:0,value:""},iO=/[a-zA-Z0-9_]/;function aO(e){if(!e)return[[]];if(e==="/")return[[sO]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(p){throw new Error(`ERR (${n})/"${u}": ${p}`)}let n=0,r=n;const o=[];let s;function i(){s&&o.push(s),s=[]}let a=0,l,u="",m="";function d(){u&&(n===0?s.push({type:0,value:u}):n===1||n===2||n===3?(s.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:u,regexp:m,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),u="")}function f(){u+=l}for(;a{i(C)}:Zs}function i(m){if(C1(m)){const d=r.get(m);d&&(r.delete(m),n.splice(n.indexOf(d),1),d.children.forEach(i),d.alias.forEach(i))}else{const d=n.indexOf(m);d>-1&&(n.splice(d,1),m.record.name&&r.delete(m.record.name),m.children.forEach(i),m.alias.forEach(i))}}function a(){return n}function l(m){let d=0;for(;d=0&&(m.record.path!==n[d].record.path||!x1(m,n[d]));)d++;n.splice(d,0,m),m.record.name&&!Fp(m)&&r.set(m.record.name,m)}function u(m,d){let f,p={},h,_;if("name"in m&&m.name){if(f=r.get(m.name),!f)throw cs(1,{location:m});_=f.record.name,p=at(Mp(d.params,f.keys.filter(C=>!C.optional).concat(f.parent?f.parent.keys.filter(C=>C.optional):[]).map(C=>C.name)),m.params&&Mp(m.params,f.keys.map(C=>C.name))),h=f.stringify(p)}else if(m.path!=null)h=m.path,f=n.find(C=>C.re.test(h)),f&&(p=f.parse(h),_=f.record.name);else{if(f=d.name?r.get(d.name):n.find(C=>C.re.test(d.path)),!f)throw cs(1,{location:m,currentLocation:d});_=f.record.name,p=at({},d.params,m.params),h=f.stringify(p)}const b=[];let w=f;for(;w;)b.unshift(w.record),w=w.parent;return{name:_,path:h,params:p,matched:b,meta:mO(b)}}return e.forEach(m=>s(m)),{addRoute:s,resolve:u,removeRoute:i,getRoutes:a,getRecordMatcher:o}}function Mp(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function uO(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:dO(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function dO(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function Fp(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function mO(e){return e.reduce((t,n)=>at(t,n.meta),{})}function Vp(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function x1(e,t){return t.children.some(n=>n===e||x1(e,n))}function fO(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;os&&Bu(s)):[r&&Bu(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function pO(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=Gn(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const hO=Symbol(""),Up=Symbol(""),lm=Symbol(""),S1=Symbol(""),Gu=Symbol("");function $s(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Nr(e,t,n,r,o,s=i=>i()){const i=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((a,l)=>{const u=f=>{f===!1?l(cs(4,{from:n,to:t})):f instanceof Error?l(f):QA(f)?l(cs(2,{from:t,to:f})):(i&&r.enterCallbacks[o]===i&&typeof f=="function"&&i.push(f),a())},m=s(()=>e.call(r&&r.instances[o],t,n,u));let d=Promise.resolve(m);e.length<3&&(d=d.then(u)),d.catch(f=>l(f))})}function qc(e,t,n,r,o=s=>s()){const s=[];for(const i of e)for(const a in i.components){let l=i.components[a];if(!(t!=="beforeRouteEnter"&&!i.instances[a]))if(_O(l)){const m=(l.__vccOpts||l)[t];m&&s.push(Nr(m,n,r,i,a,o))}else{let u=l();s.push(()=>u.then(m=>{if(!m)return Promise.reject(new Error(`Couldn't resolve component "${a}" at "${i.path}"`));const d=zA(m)?m.default:m;i.components[a]=d;const p=(d.__vccOpts||d)[t];return p&&Nr(p,n,r,i,a,o)()}))}}return s}function _O(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function jp(e){const t=jn(lm),n=jn(S1),r=Nt(()=>t.resolve(gn(e.to))),o=Nt(()=>{const{matched:l}=r.value,{length:u}=l,m=l[u-1],d=n.matched;if(!m||!d.length)return-1;const f=d.findIndex(ls.bind(null,m));if(f>-1)return f;const p=qp(l[u-2]);return u>1&&qp(m)===p&&d[d.length-1].path!==p?d.findIndex(ls.bind(null,l[u-2])):f}),s=Nt(()=>o.value>-1&&bO(n.params,r.value.params)),i=Nt(()=>o.value>-1&&o.value===n.matched.length-1&&z1(n.params,r.value.params));function a(l={}){return vO(l)?t[gn(e.replace)?"replace":"push"](gn(e.to)).catch(Zs):Promise.resolve()}return{route:r,href:Nt(()=>r.value.href),isActive:s,isExactActive:i,navigate:a}}const gO=br({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:jp,setup(e,{slots:t}){const n=ms(jp(e)),{options:r}=jn(lm),o=Nt(()=>({[Bp(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Bp(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const s=t.default&&t.default(n);return e.custom?s:er("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},s)}}}),yO=gO;function vO(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function bO(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!Gn(o)||o.length!==r.length||r.some((s,i)=>s!==o[i]))return!1}return!0}function qp(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Bp=(e,t,n)=>e??t??n,zO=br({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=jn(Gu),o=Nt(()=>e.route||r.value),s=jn(Up,0),i=Nt(()=>{let u=gn(s);const{matched:m}=o.value;let d;for(;(d=m[u])&&!d.components;)u++;return u}),a=Nt(()=>o.value.matched[i.value]);js(Up,Nt(()=>i.value+1)),js(hO,a),js(Gu,o);const l=rr();return vn(()=>[l.value,a.value,e.name],([u,m,d],[f,p,h])=>{m&&(m.instances[d]=u,p&&p!==m&&u&&u===f&&(m.leaveGuards.size||(m.leaveGuards=p.leaveGuards),m.updateGuards.size||(m.updateGuards=p.updateGuards))),u&&m&&(!p||!ls(m,p)||!f)&&(m.enterCallbacks[d]||[]).forEach(_=>_(u))},{flush:"post"}),()=>{const u=o.value,m=e.name,d=a.value,f=d&&d.components[m];if(!f)return Wp(n.default,{Component:f,route:u});const p=d.props[m],h=p?p===!0?u.params:typeof p=="function"?p(u):p:null,b=er(f,at({},h,t,{onVnodeUnmounted:w=>{w.component.isUnmounted&&(d.instances[m]=null)},ref:l}));return Wp(n.default,{Component:b,route:u})||b}}});function Wp(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const wO=zO;function CO(e){const t=cO(e.routes,e),n=e.parseQuery||fO,r=e.stringifyQuery||Hp,o=e.history,s=$s(),i=$s(),a=$s(),l=bd(Tr);let u=Tr;Mo&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const m=Uc.bind(null,B=>""+B),d=Uc.bind(null,RA),f=Uc.bind(null,hi);function p(B,ue){let ie,ge;return C1(B)?(ie=t.getRecordMatcher(B),ge=ue):ge=B,t.addRoute(ge,ie)}function h(B){const ue=t.getRecordMatcher(B);ue&&t.removeRoute(ue)}function _(){return t.getRoutes().map(B=>B.record)}function b(B){return!!t.getRecordMatcher(B)}function w(B,ue){if(ue=at({},ue||l.value),typeof B=="string"){const O=jc(n,B,ue.path),H=t.resolve({path:O.path},ue),Y=o.createHref(O.fullPath);return at(O,H,{params:f(H.params),hash:hi(O.hash),redirectedFrom:void 0,href:Y})}let ie;if(B.path!=null)ie=at({},B,{path:jc(n,B.path,ue.path).path});else{const O=at({},B.params);for(const H in O)O[H]==null&&delete O[H];ie=at({},B,{params:d(O)}),ue.params=d(ue.params)}const ge=t.resolve(ie,ue),Ue=B.hash||"";ge.params=m(f(ge.params));const Ke=NA(r,at({},B,{hash:OA(Ue),path:ge.path})),T=o.createHref(Ke);return at({fullPath:Ke,hash:Ue,query:r===Hp?pO(B.query):B.query||{}},ge,{redirectedFrom:void 0,href:T})}function C(B){return typeof B=="string"?jc(n,B,l.value.path):at({},B)}function v(B,ue){if(u!==B)return cs(8,{from:ue,to:B})}function z(B){return M(B)}function E(B){return z(at(C(B),{replace:!0}))}function x(B){const ue=B.matched[B.matched.length-1];if(ue&&ue.redirect){const{redirect:ie}=ue;let ge=typeof ie=="function"?ie(B):ie;return typeof ge=="string"&&(ge=ge.includes("?")||ge.includes("#")?ge=C(ge):{path:ge},ge.params={}),at({query:B.query,hash:B.hash,params:ge.path!=null?{}:B.params},ge)}}function M(B,ue){const ie=u=w(B),ge=l.value,Ue=B.state,Ke=B.force,T=B.replace===!0,O=x(ie);if(O)return M(at(C(O),{state:typeof O=="object"?at({},Ue,O.state):Ue,force:Ke,replace:T}),ue||ie);const H=ie;H.redirectedFrom=ue;let Y;return!Ke&&MA(r,ge,ie)&&(Y=cs(16,{to:H,from:ge}),Ve(ge,ge,!0,!1)),(Y?Promise.resolve(Y):N(H,ge)).catch(K=>dr(K)?dr(K,2)?K:ut(K):se(K,H,ge)).then(K=>{if(K){if(dr(K,2))return M(at({replace:T},C(K.to),{state:typeof K.to=="object"?at({},Ue,K.to.state):Ue,force:Ke}),ue||H)}else K=j(H,ge,!0,T,Ue);return Z(H,ge,K),K})}function D(B,ue){const ie=v(B,ue);return ie?Promise.reject(ie):Promise.resolve()}function P(B){const ue=pt.values().next().value;return ue&&typeof ue.runWithContext=="function"?ue.runWithContext(B):B()}function N(B,ue){let ie;const[ge,Ue,Ke]=kO(B,ue);ie=qc(ge.reverse(),"beforeRouteLeave",B,ue);for(const O of ge)O.leaveGuards.forEach(H=>{ie.push(Nr(H,B,ue))});const T=D.bind(null,B,ue);return ie.push(T),Me(ie).then(()=>{ie=[];for(const O of s.list())ie.push(Nr(O,B,ue));return ie.push(T),Me(ie)}).then(()=>{ie=qc(Ue,"beforeRouteUpdate",B,ue);for(const O of Ue)O.updateGuards.forEach(H=>{ie.push(Nr(H,B,ue))});return ie.push(T),Me(ie)}).then(()=>{ie=[];for(const O of Ke)if(O.beforeEnter)if(Gn(O.beforeEnter))for(const H of O.beforeEnter)ie.push(Nr(H,B,ue));else ie.push(Nr(O.beforeEnter,B,ue));return ie.push(T),Me(ie)}).then(()=>(B.matched.forEach(O=>O.enterCallbacks={}),ie=qc(Ke,"beforeRouteEnter",B,ue,P),ie.push(T),Me(ie))).then(()=>{ie=[];for(const O of i.list())ie.push(Nr(O,B,ue));return ie.push(T),Me(ie)}).catch(O=>dr(O,8)?O:Promise.reject(O))}function Z(B,ue,ie){a.list().forEach(ge=>P(()=>ge(B,ue,ie)))}function j(B,ue,ie,ge,Ue){const Ke=v(B,ue);if(Ke)return Ke;const T=ue===Tr,O=Mo?history.state:{};ie&&(ge||T?o.replace(B.fullPath,at({scroll:T&&O&&O.scroll},Ue)):o.push(B.fullPath,Ue)),l.value=B,Ve(B,ue,ie,T),ut()}let q;function Q(){q||(q=o.listen((B,ue,ie)=>{if(!ht.listening)return;const ge=w(B),Ue=x(ge);if(Ue){M(at(Ue,{replace:!0}),ge).catch(Zs);return}u=ge;const Ke=l.value;Mo&&WA(Ip(Ke.fullPath,ie.delta),ic()),N(ge,Ke).catch(T=>dr(T,12)?T:dr(T,2)?(M(T.to,ge).then(O=>{dr(O,20)&&!ie.delta&&ie.type===_i.pop&&o.go(-1,!1)}).catch(Zs),Promise.reject()):(ie.delta&&o.go(-ie.delta,!1),se(T,ge,Ke))).then(T=>{T=T||j(ge,Ke,!1),T&&(ie.delta&&!dr(T,8)?o.go(-ie.delta,!1):ie.type===_i.pop&&dr(T,20)&&o.go(-1,!1)),Z(ge,Ke,T)}).catch(Zs)}))}let he=$s(),W=$s(),re;function se(B,ue,ie){ut(B);const ge=W.list();return ge.length?ge.forEach(Ue=>Ue(B,ue,ie)):console.error(B),Promise.reject(B)}function qe(){return re&&l.value!==Tr?Promise.resolve():new Promise((B,ue)=>{he.add([B,ue])})}function ut(B){return re||(re=!B,Q(),he.list().forEach(([ue,ie])=>B?ie(B):ue()),he.reset()),B}function Ve(B,ue,ie,ge){const{scrollBehavior:Ue}=e;if(!Mo||!Ue)return Promise.resolve();const Ke=!ie&&GA(Ip(B.fullPath,0))||(ge||!ie)&&history.state&&history.state.scroll||null;return fs().then(()=>Ue(B,ue,Ke)).then(T=>T&&BA(T)).catch(T=>se(T,B,ue))}const He=B=>o.go(B);let dt;const pt=new Set,ht={currentRoute:l,listening:!0,addRoute:p,removeRoute:h,hasRoute:b,getRoutes:_,resolve:w,options:e,push:z,replace:E,go:He,back:()=>He(-1),forward:()=>He(1),beforeEach:s.add,beforeResolve:i.add,afterEach:a.add,onError:W.add,isReady:qe,install(B){const ue=this;B.component("RouterLink",yO),B.component("RouterView",wO),B.config.globalProperties.$router=ue,Object.defineProperty(B.config.globalProperties,"$route",{enumerable:!0,get:()=>gn(l)}),Mo&&!dt&&l.value===Tr&&(dt=!0,z(o.location).catch(Ue=>{}));const ie={};for(const Ue in Tr)Object.defineProperty(ie,Ue,{get:()=>l.value[Ue],enumerable:!0});B.provide(lm,ue),B.provide(S1,pd(ie)),B.provide(Gu,l);const ge=B.unmount;pt.add(B),B.unmount=function(){pt.delete(B),pt.size<1&&(u=Tr,q&&q(),q=null,l.value=Tr,dt=!1,re=!1),ge()}}};function Me(B){return B.reduce((ue,ie)=>ue.then(()=>P(ie)),Promise.resolve())}return ht}function kO(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let i=0;ils(u,a))?r.push(a):n.push(a));const l=e.matched[i];l&&(t.matched.find(u=>ls(u,l))||o.push(l))}return[n,r,o]}const xO={name:"PageAbout",computed:{config(){return this.$store.state.config},library(){return this.$store.state.library}},methods:{showUpdateDialog(){this.$store.commit(yi,!0)}}},SO={class:"section"},EO={class:"container"},$O={class:"columns is-centered"},TO={class:"column is-four-fifths has-text-centered-mobile"},AO=["textContent"],OO={class:"section"},PO={class:"container"},IO={class:"columns is-centered"},RO={class:"column is-four-fifths"},DO={class:"content"},LO={class:"level is-mobile"},NO={class:"level-left"},MO={class:"level-item"},FO=["textContent"],VO={class:"level-right"},HO={key:0},UO=["textContent"],jO={key:1},qO=["textContent"],BO={class:"table"},WO=["textContent"],GO=["textContent"],KO=["textContent"],ZO=["textContent"],YO=["textContent"],JO=["textContent"],XO=["textContent"],QO=["textContent"],e8=["textContent"],t8={class:"has-text-right"},n8=["textContent"],r8=["textContent"],o8=["textContent"],s8={class:"has-text-right"},i8=["textContent"],a8=["textContent"],l8={class:"section"},c8={class:"container"},u8={class:"columns is-centered"},d8={class:"column is-four-fifths"},m8={class:"content has-text-centered-mobile"},f8=["textContent"],p8=["textContent"],h8=c("a",{href:"https://bulma.io"},"Bulma",-1),_8=c("a",{href:"https://pictogrammers.com/library/mdi/"},"Material Design Icons",-1),g8=c("a",{href:"https://vuejs.org/"},"Vue.js",-1),y8=c("a",{href:"https://github.com/mzabriskie/axios"},"axios",-1),v8=["textContent"];function b8(e,t,n,r,o,s){const i=$("i18n-t");return k(),A("div",null,[c("section",SO,[c("div",EO,[c("div",$O,[c("div",TO,[c("h1",{class:"title is-4",textContent:g(s.config.library_name)},null,8,AO)])])])]),c("section",OO,[c("div",PO,[c("div",IO,[c("div",RO,[c("div",DO,[c("nav",LO,[c("div",NO,[c("div",MO,[c("p",{class:"title is-5",textContent:g(e.$t("page.about.library"))},null,8,FO)])]),c("div",VO,[s.library.updating?(k(),A("div",HO,[c("a",{class:"button is-small is-loading",textContent:g(e.$t("page.about.update"))},null,8,UO)])):(k(),A("div",jO,[c("a",{class:"button is-small",onClick:t[0]||(t[0]=a=>s.showUpdateDialog()),textContent:g(e.$t("page.about.update"))},null,8,qO)]))])]),c("table",BO,[c("tbody",null,[c("tr",null,[c("th",{class:"has-text-left",textContent:g(e.$t("page.about.artists"))},null,8,WO),c("td",{class:"has-text-right",textContent:g(e.$filters.number(s.library.artists))},null,8,GO)]),c("tr",null,[c("th",{class:"has-text-left",textContent:g(e.$t("page.about.albums"))},null,8,KO),c("td",{class:"has-text-right",textContent:g(e.$filters.number(s.library.albums))},null,8,ZO)]),c("tr",null,[c("th",{class:"has-text-left",textContent:g(e.$t("page.about.tracks"))},null,8,YO),c("td",{class:"has-text-right",textContent:g(e.$filters.number(s.library.songs))},null,8,JO)]),c("tr",null,[c("th",{class:"has-text-left",textContent:g(e.$t("page.about.total-playtime"))},null,8,XO),c("td",{class:"has-text-right",textContent:g(e.$filters.durationInDays(s.library.db_playtime*1e3))},null,8,QO)]),c("tr",null,[c("th",{class:"has-text-left",textContent:g(e.$t("page.about.updated"))},null,8,e8),c("td",t8,[c("span",{textContent:g(e.$t("page.about.updated-on",{time:e.$filters.timeFromNow(s.library.updated_at)}))},null,8,n8),gt(" ("),c("span",{class:"has-text-grey",textContent:g(e.$filters.datetime(s.library.updated_at))},null,8,r8),gt(") ")])]),c("tr",null,[c("th",{class:"has-text-left",textContent:g(e.$t("page.about.uptime"))},null,8,o8),c("td",s8,[c("span",{textContent:g(e.$filters.timeFromNow(s.library.started_at,!0))},null,8,i8),gt(" ("),c("span",{class:"has-text-grey",textContent:g(e.$filters.datetime(s.library.started_at))},null,8,a8),gt(") ")])])])])])])])])]),c("section",l8,[c("div",c8,[c("div",u8,[c("div",d8,[c("div",m8,[c("p",{class:"is-size-7",textContent:g(e.$t("page.about.version",{version:s.config.version}))},null,8,f8),c("p",{class:"is-size-7",textContent:g(e.$t("page.about.compiled-with",{options:s.config.buildoptions.join(", ")}))},null,8,p8),y(i,{tag:"p",class:"is-size-7",keypath:"page.about.built-with",scope:"global"},{bulma:S(()=>[h8]),mdi:S(()=>[_8]),vuejs:S(()=>[g8]),axios:S(()=>[y8]),others:S(()=>[c("a",{href:"https://github.com/owntone/owntone-server/network/dependencies",textContent:g(e.$t("page.about.more"))},null,8,v8)]),_:1})])])])])])])}const z8=te(xO,[["render",b8]]),{t:Bc,locale:cm}=Xl.global,E1="GROUP_KEY_NONE";function um(){return{compareFn:null,groupKeyFn:e=>E1}}function Rn(e,t=!1,n="_"){return{compareFn:t?null:(r,o)=>{const s=r[e]||n,i=o[e]||n;return s.localeCompare(i,cm.value)},groupKeyFn:r=>{const o=(r[e]||n).charAt(0);return o.match(new RegExp("\\p{Letter}","gu"))?o.toUpperCase():o.match(new RegExp("\\p{Number}","gu"))?"#":"⌘"}}}function dm(e,{direction:t="asc",defaultValue:n=0}){return{compareFn:(r,o)=>{const s=r[e]||n,i=o[e]||n,a=s-i;return t==="asc"?a:a*-1},groupKeyFn:r=>{const o=r[e]||n;return Math.floor(o/10)}}}function w8(e,t="asc",n=1){return{compareFn:(r,o)=>{const s=r[e]||n,i=o[e]||n,a=s-i;return t==="asc"?a:a*-1},groupKeyFn:r=>r[e]||n}}function zl(e,{direction:t="asc",defaultValue:n="0000"}){return{compareFn:(r,o)=>{const s=r[e]||n,i=o[e]||n,a=s.localeCompare(i,cm.value);return t==="asc"?a:a*-1},groupKeyFn:r=>(r[e]||n).substring(0,4)}}function C8(e,t="0000"){return{compareFn:(n,r)=>{const o=n[e]||t;return(r[e]||t).localeCompare(o,cm.value)},groupKeyFn:n=>{const r=n[e];if(!r)return t;const o=new Date().getTime()-new Date(r).getTime();return o<864e5?Bc("group-by-list.today"):o<6048e5?Bc("group-by-list.last-week"):o<2592e6?Bc("group-by-list.last-month"):r.substring(0,4)}}}class ye{constructor({items:t=[],total:n=0,offset:r=0,limit:o=-1}={}){this.items=t,this.total=n,this.offset=r,this.limit=o,this.count=t.length,this.indices=[],this.group(um())}group(t,n=[]){const r=n?this.items.filter(s=>n.every(i=>i(s))):this.items;this.count=r.length;const o=t.compareFn?[...r].sort(t.compareFn):r;this.indices=[...new Set(o.map(t.groupKeyFn))],this.itemsGrouped=o.reduce((s,i)=>{const a=t.groupKeyFn(i);return s[a]=[...s[a]||[],i],s},{})}*generate(){for(const t in this.itemsGrouped){t!==E1&&(yield{groupKey:t,itemId:t,isItem:!1,item:{}});for(const n of this.itemsGrouped[t])yield{groupKey:t,itemId:n.id,isItem:!0,item:n}}}[Symbol.iterator](){return this.generate()}}const k8={},x8={class:"hero is-light is-bold"},S8={class:"hero-body"},E8={class:"container"},$8={class:"columns is-centered"},T8={class:"column is-four-fifths"},A8={class:"columns is-flex-direction-row-reverse"},O8={class:"column fd-has-cover"},P8={class:"column m-auto is-three-fifths has-text-centered-mobile"},I8={class:"section pt-0"},R8={class:"container"},D8={class:"columns is-centered"},L8={class:"column is-four-fifths"};function N8(e,t){return k(),A(Ce,null,[c("section",x8,[c("div",S8,[c("div",E8,[c("div",$8,[c("div",T8,[c("div",A8,[c("div",O8,[st(e.$slots,"heading-right")]),c("div",P8,[st(e.$slots,"heading-left")])])])])])])]),c("section",I8,[c("div",R8,[c("div",D8,[c("div",L8,[st(e.$slots,"content"),st(e.$slots,"footer")])])])])],64)}const ac=te(k8,[["render",N8]]),M8=e=>{for(var t=0,n=0;n[.2126,.7152,.0722].reduce((t,n,r)=>t+ +("0x"+e.slice(r*2,r*2+2))*n,0)/255,V8=e=>{const t=M8(e.alternate),n=`{},Gn=Array.isArray,_1=/#/g,wA=/&/g,CA=/\//g,kA=/=/g,xA=/\?/g,g1=/\+/g,SA=/%5B/g,EA=/%5D/g,y1=/%5E/g,$A=/%60/g,v1=/%7B/g,TA=/%7C/g,b1=/%7D/g,AA=/%20/g;function am(e){return encodeURI(""+e).replace(TA,"|").replace(SA,"[").replace(EA,"]")}function OA(e){return am(e).replace(v1,"{").replace(b1,"}").replace(y1,"^")}function Bu(e){return am(e).replace(g1,"%2B").replace(AA,"+").replace(_1,"%23").replace(wA,"%26").replace($A,"`").replace(v1,"{").replace(b1,"}").replace(y1,"^")}function PA(e){return Bu(e).replace(kA,"%3D")}function IA(e){return am(e).replace(_1,"%23").replace(xA,"%3F")}function RA(e){return e==null?"":IA(e).replace(CA,"%2F")}function hi(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const DA=/\/$/,LA=e=>e.replace(DA,"");function jc(e,t,n="/"){let r,o={},s="",i="";const a=t.indexOf("#");let l=t.indexOf("?");return a=0&&(l=-1),l>-1&&(r=t.slice(0,l),s=t.slice(l+1,a>-1?a:t.length),o=e(s)),a>-1&&(r=r||t.slice(0,a),i=t.slice(a,t.length)),r=VA(r??t,n),{fullPath:r+(s&&"?")+s+i,path:r,query:o,hash:hi(i)}}function NA(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Op(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function MA(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&ls(t.matched[r],n.matched[o])&&z1(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function ls(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function z1(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!FA(e[n],t[n]))return!1;return!0}function FA(e,t){return Gn(e)?Pp(e,t):Gn(t)?Pp(t,e):e===t}function Pp(e,t){return Gn(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function VA(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let s=n.length-1,i,a;for(i=0;i1&&s--;else break;return n.slice(0,s).join("/")+"/"+r.slice(i).join("/")}var _i;(function(e){e.pop="pop",e.push="push"})(_i||(_i={}));var Ys;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Ys||(Ys={}));function HA(e){if(!e)if(Mo){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),LA(e)}const UA=/^[^#]+#/;function jA(e,t){return e.replace(UA,"#")+t}function qA(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const ic=()=>({left:window.scrollX,top:window.scrollY});function BA(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=qA(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Ip(e,t){return(history.state?history.state.position-t:-1)+e}const Wu=new Map;function WA(e,t){Wu.set(e,t)}function GA(e){const t=Wu.get(e);return Wu.delete(e),t}let KA=()=>location.protocol+"//"+location.host;function w1(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf("#");if(s>-1){let a=o.includes(e.slice(s))?e.slice(s).length:1,l=o.slice(a);return l[0]!=="/"&&(l="/"+l),Op(l,"")}return Op(n,e)+r+o}function ZA(e,t,n,r){let o=[],s=[],i=null;const a=({state:f})=>{const p=w1(e,location),h=n.value,_=t.value;let b=0;if(f){if(n.value=p,t.value=f,i&&i===h){i=null;return}b=_?f.position-_.position:0}else r(p);o.forEach(w=>{w(n.value,h,{delta:b,type:_i.pop,direction:b?b>0?Ys.forward:Ys.back:Ys.unknown})})};function l(){i=n.value}function u(f){o.push(f);const p=()=>{const h=o.indexOf(f);h>-1&&o.splice(h,1)};return s.push(p),p}function m(){const{history:f}=window;f.state&&f.replaceState(at({},f.state,{scroll:ic()}),"")}function d(){for(const f of s)f();s=[],window.removeEventListener("popstate",a),window.removeEventListener("beforeunload",m)}return window.addEventListener("popstate",a),window.addEventListener("beforeunload",m,{passive:!0}),{pauseListeners:l,listen:u,destroy:d}}function Rp(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?ic():null}}function YA(e){const{history:t,location:n}=window,r={value:w1(e,n)},o={value:t.state};o.value||s(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function s(l,u,m){const d=e.indexOf("#"),f=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+l:KA()+e+l;try{t[m?"replaceState":"pushState"](u,"",f),o.value=u}catch(p){console.error(p),n[m?"replace":"assign"](f)}}function i(l,u){const m=at({},t.state,Rp(o.value.back,l,o.value.forward,!0),u,{position:o.value.position});s(l,m,!0),r.value=l}function a(l,u){const m=at({},o.value,t.state,{forward:l,scroll:ic()});s(m.current,m,!0);const d=at({},Rp(r.value,l,null),{position:m.position+1},u);s(l,d,!1),r.value=l}return{location:r,state:o,push:a,replace:i}}function JA(e){e=HA(e);const t=YA(e),n=ZA(e,t.state,t.location,t.replace);function r(s,i=!0){i||n.pauseListeners(),history.go(s)}const o=at({location:"",base:e,go:r,createHref:jA.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function XA(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),JA(e)}function QA(e){return typeof e=="string"||e&&typeof e=="object"}function C1(e){return typeof e=="string"||typeof e=="symbol"}const Tr={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},k1=Symbol("");var Dp;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Dp||(Dp={}));function cs(e,t){return at(new Error,{type:e,[k1]:!0},t)}function dr(e,t){return e instanceof Error&&k1 in e&&(t==null||!!(e.type&t))}const Lp="[^/]+?",eO={sensitive:!1,strict:!1,start:!0,end:!0},tO=/[.+*?^${}()[\]/\\]/g;function nO(e,t){const n=at({},eO,t),r=[];let o=n.start?"^":"";const s=[];for(const u of e){const m=u.length?[]:[90];n.strict&&!u.length&&(o+="/");for(let d=0;dt.length?t.length===1&&t[0]===80?1:-1:0}function oO(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const sO={type:0,value:""},iO=/[a-zA-Z0-9_]/;function aO(e){if(!e)return[[]];if(e==="/")return[[sO]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(p){throw new Error(`ERR (${n})/"${u}": ${p}`)}let n=0,r=n;const o=[];let s;function i(){s&&o.push(s),s=[]}let a=0,l,u="",m="";function d(){u&&(n===0?s.push({type:0,value:u}):n===1||n===2||n===3?(s.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:u,regexp:m,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),u="")}function f(){u+=l}for(;a{i(C)}:Zs}function i(m){if(C1(m)){const d=r.get(m);d&&(r.delete(m),n.splice(n.indexOf(d),1),d.children.forEach(i),d.alias.forEach(i))}else{const d=n.indexOf(m);d>-1&&(n.splice(d,1),m.record.name&&r.delete(m.record.name),m.children.forEach(i),m.alias.forEach(i))}}function a(){return n}function l(m){let d=0;for(;d=0&&(m.record.path!==n[d].record.path||!x1(m,n[d]));)d++;n.splice(d,0,m),m.record.name&&!Fp(m)&&r.set(m.record.name,m)}function u(m,d){let f,p={},h,_;if("name"in m&&m.name){if(f=r.get(m.name),!f)throw cs(1,{location:m});_=f.record.name,p=at(Mp(d.params,f.keys.filter(C=>!C.optional).concat(f.parent?f.parent.keys.filter(C=>C.optional):[]).map(C=>C.name)),m.params&&Mp(m.params,f.keys.map(C=>C.name))),h=f.stringify(p)}else if(m.path!=null)h=m.path,f=n.find(C=>C.re.test(h)),f&&(p=f.parse(h),_=f.record.name);else{if(f=d.name?r.get(d.name):n.find(C=>C.re.test(d.path)),!f)throw cs(1,{location:m,currentLocation:d});_=f.record.name,p=at({},d.params,m.params),h=f.stringify(p)}const b=[];let w=f;for(;w;)b.unshift(w.record),w=w.parent;return{name:_,path:h,params:p,matched:b,meta:mO(b)}}return e.forEach(m=>s(m)),{addRoute:s,resolve:u,removeRoute:i,getRoutes:a,getRecordMatcher:o}}function Mp(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function uO(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:dO(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function dO(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function Fp(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function mO(e){return e.reduce((t,n)=>at(t,n.meta),{})}function Vp(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function x1(e,t){return t.children.some(n=>n===e||x1(e,n))}function fO(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;os&&Bu(s)):[r&&Bu(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function pO(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=Gn(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const hO=Symbol(""),Up=Symbol(""),lm=Symbol(""),S1=Symbol(""),Gu=Symbol("");function $s(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Nr(e,t,n,r,o,s=i=>i()){const i=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((a,l)=>{const u=f=>{f===!1?l(cs(4,{from:n,to:t})):f instanceof Error?l(f):QA(f)?l(cs(2,{from:t,to:f})):(i&&r.enterCallbacks[o]===i&&typeof f=="function"&&i.push(f),a())},m=s(()=>e.call(r&&r.instances[o],t,n,u));let d=Promise.resolve(m);e.length<3&&(d=d.then(u)),d.catch(f=>l(f))})}function qc(e,t,n,r,o=s=>s()){const s=[];for(const i of e)for(const a in i.components){let l=i.components[a];if(!(t!=="beforeRouteEnter"&&!i.instances[a]))if(_O(l)){const m=(l.__vccOpts||l)[t];m&&s.push(Nr(m,n,r,i,a,o))}else{let u=l();s.push(()=>u.then(m=>{if(!m)return Promise.reject(new Error(`Couldn't resolve component "${a}" at "${i.path}"`));const d=zA(m)?m.default:m;i.components[a]=d;const p=(d.__vccOpts||d)[t];return p&&Nr(p,n,r,i,a,o)()}))}}return s}function _O(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function jp(e){const t=jn(lm),n=jn(S1),r=Nt(()=>t.resolve(gn(e.to))),o=Nt(()=>{const{matched:l}=r.value,{length:u}=l,m=l[u-1],d=n.matched;if(!m||!d.length)return-1;const f=d.findIndex(ls.bind(null,m));if(f>-1)return f;const p=qp(l[u-2]);return u>1&&qp(m)===p&&d[d.length-1].path!==p?d.findIndex(ls.bind(null,l[u-2])):f}),s=Nt(()=>o.value>-1&&bO(n.params,r.value.params)),i=Nt(()=>o.value>-1&&o.value===n.matched.length-1&&z1(n.params,r.value.params));function a(l={}){return vO(l)?t[gn(e.replace)?"replace":"push"](gn(e.to)).catch(Zs):Promise.resolve()}return{route:r,href:Nt(()=>r.value.href),isActive:s,isExactActive:i,navigate:a}}const gO=br({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:jp,setup(e,{slots:t}){const n=ms(jp(e)),{options:r}=jn(lm),o=Nt(()=>({[Bp(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Bp(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const s=t.default&&t.default(n);return e.custom?s:er("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},s)}}}),yO=gO;function vO(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function bO(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!Gn(o)||o.length!==r.length||r.some((s,i)=>s!==o[i]))return!1}return!0}function qp(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Bp=(e,t,n)=>e??t??n,zO=br({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=jn(Gu),o=Nt(()=>e.route||r.value),s=jn(Up,0),i=Nt(()=>{let u=gn(s);const{matched:m}=o.value;let d;for(;(d=m[u])&&!d.components;)u++;return u}),a=Nt(()=>o.value.matched[i.value]);js(Up,Nt(()=>i.value+1)),js(hO,a),js(Gu,o);const l=rr();return vn(()=>[l.value,a.value,e.name],([u,m,d],[f,p,h])=>{m&&(m.instances[d]=u,p&&p!==m&&u&&u===f&&(m.leaveGuards.size||(m.leaveGuards=p.leaveGuards),m.updateGuards.size||(m.updateGuards=p.updateGuards))),u&&m&&(!p||!ls(m,p)||!f)&&(m.enterCallbacks[d]||[]).forEach(_=>_(u))},{flush:"post"}),()=>{const u=o.value,m=e.name,d=a.value,f=d&&d.components[m];if(!f)return Wp(n.default,{Component:f,route:u});const p=d.props[m],h=p?p===!0?u.params:typeof p=="function"?p(u):p:null,b=er(f,at({},h,t,{onVnodeUnmounted:w=>{w.component.isUnmounted&&(d.instances[m]=null)},ref:l}));return Wp(n.default,{Component:b,route:u})||b}}});function Wp(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const wO=zO;function CO(e){const t=cO(e.routes,e),n=e.parseQuery||fO,r=e.stringifyQuery||Hp,o=e.history,s=$s(),i=$s(),a=$s(),l=bd(Tr);let u=Tr;Mo&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const m=Uc.bind(null,B=>""+B),d=Uc.bind(null,RA),f=Uc.bind(null,hi);function p(B,ue){let ie,ge;return C1(B)?(ie=t.getRecordMatcher(B),ge=ue):ge=B,t.addRoute(ge,ie)}function h(B){const ue=t.getRecordMatcher(B);ue&&t.removeRoute(ue)}function _(){return t.getRoutes().map(B=>B.record)}function b(B){return!!t.getRecordMatcher(B)}function w(B,ue){if(ue=at({},ue||l.value),typeof B=="string"){const O=jc(n,B,ue.path),H=t.resolve({path:O.path},ue),Y=o.createHref(O.fullPath);return at(O,H,{params:f(H.params),hash:hi(O.hash),redirectedFrom:void 0,href:Y})}let ie;if(B.path!=null)ie=at({},B,{path:jc(n,B.path,ue.path).path});else{const O=at({},B.params);for(const H in O)O[H]==null&&delete O[H];ie=at({},B,{params:d(O)}),ue.params=d(ue.params)}const ge=t.resolve(ie,ue),Ue=B.hash||"";ge.params=m(f(ge.params));const Ke=NA(r,at({},B,{hash:OA(Ue),path:ge.path})),T=o.createHref(Ke);return at({fullPath:Ke,hash:Ue,query:r===Hp?pO(B.query):B.query||{}},ge,{redirectedFrom:void 0,href:T})}function C(B){return typeof B=="string"?jc(n,B,l.value.path):at({},B)}function v(B,ue){if(u!==B)return cs(8,{from:ue,to:B})}function z(B){return M(B)}function E(B){return z(at(C(B),{replace:!0}))}function x(B){const ue=B.matched[B.matched.length-1];if(ue&&ue.redirect){const{redirect:ie}=ue;let ge=typeof ie=="function"?ie(B):ie;return typeof ge=="string"&&(ge=ge.includes("?")||ge.includes("#")?ge=C(ge):{path:ge},ge.params={}),at({query:B.query,hash:B.hash,params:ge.path!=null?{}:B.params},ge)}}function M(B,ue){const ie=u=w(B),ge=l.value,Ue=B.state,Ke=B.force,T=B.replace===!0,O=x(ie);if(O)return M(at(C(O),{state:typeof O=="object"?at({},Ue,O.state):Ue,force:Ke,replace:T}),ue||ie);const H=ie;H.redirectedFrom=ue;let Y;return!Ke&&MA(r,ge,ie)&&(Y=cs(16,{to:H,from:ge}),Ve(ge,ge,!0,!1)),(Y?Promise.resolve(Y):N(H,ge)).catch(K=>dr(K)?dr(K,2)?K:ut(K):se(K,H,ge)).then(K=>{if(K){if(dr(K,2))return M(at({replace:T},C(K.to),{state:typeof K.to=="object"?at({},Ue,K.to.state):Ue,force:Ke}),ue||H)}else K=j(H,ge,!0,T,Ue);return Z(H,ge,K),K})}function D(B,ue){const ie=v(B,ue);return ie?Promise.reject(ie):Promise.resolve()}function P(B){const ue=pt.values().next().value;return ue&&typeof ue.runWithContext=="function"?ue.runWithContext(B):B()}function N(B,ue){let ie;const[ge,Ue,Ke]=kO(B,ue);ie=qc(ge.reverse(),"beforeRouteLeave",B,ue);for(const O of ge)O.leaveGuards.forEach(H=>{ie.push(Nr(H,B,ue))});const T=D.bind(null,B,ue);return ie.push(T),Me(ie).then(()=>{ie=[];for(const O of s.list())ie.push(Nr(O,B,ue));return ie.push(T),Me(ie)}).then(()=>{ie=qc(Ue,"beforeRouteUpdate",B,ue);for(const O of Ue)O.updateGuards.forEach(H=>{ie.push(Nr(H,B,ue))});return ie.push(T),Me(ie)}).then(()=>{ie=[];for(const O of Ke)if(O.beforeEnter)if(Gn(O.beforeEnter))for(const H of O.beforeEnter)ie.push(Nr(H,B,ue));else ie.push(Nr(O.beforeEnter,B,ue));return ie.push(T),Me(ie)}).then(()=>(B.matched.forEach(O=>O.enterCallbacks={}),ie=qc(Ke,"beforeRouteEnter",B,ue,P),ie.push(T),Me(ie))).then(()=>{ie=[];for(const O of i.list())ie.push(Nr(O,B,ue));return ie.push(T),Me(ie)}).catch(O=>dr(O,8)?O:Promise.reject(O))}function Z(B,ue,ie){a.list().forEach(ge=>P(()=>ge(B,ue,ie)))}function j(B,ue,ie,ge,Ue){const Ke=v(B,ue);if(Ke)return Ke;const T=ue===Tr,O=Mo?history.state:{};ie&&(ge||T?o.replace(B.fullPath,at({scroll:T&&O&&O.scroll},Ue)):o.push(B.fullPath,Ue)),l.value=B,Ve(B,ue,ie,T),ut()}let q;function Q(){q||(q=o.listen((B,ue,ie)=>{if(!ht.listening)return;const ge=w(B),Ue=x(ge);if(Ue){M(at(Ue,{replace:!0}),ge).catch(Zs);return}u=ge;const Ke=l.value;Mo&&WA(Ip(Ke.fullPath,ie.delta),ic()),N(ge,Ke).catch(T=>dr(T,12)?T:dr(T,2)?(M(T.to,ge).then(O=>{dr(O,20)&&!ie.delta&&ie.type===_i.pop&&o.go(-1,!1)}).catch(Zs),Promise.reject()):(ie.delta&&o.go(-ie.delta,!1),se(T,ge,Ke))).then(T=>{T=T||j(ge,Ke,!1),T&&(ie.delta&&!dr(T,8)?o.go(-ie.delta,!1):ie.type===_i.pop&&dr(T,20)&&o.go(-1,!1)),Z(ge,Ke,T)}).catch(Zs)}))}let he=$s(),W=$s(),re;function se(B,ue,ie){ut(B);const ge=W.list();return ge.length?ge.forEach(Ue=>Ue(B,ue,ie)):console.error(B),Promise.reject(B)}function qe(){return re&&l.value!==Tr?Promise.resolve():new Promise((B,ue)=>{he.add([B,ue])})}function ut(B){return re||(re=!B,Q(),he.list().forEach(([ue,ie])=>B?ie(B):ue()),he.reset()),B}function Ve(B,ue,ie,ge){const{scrollBehavior:Ue}=e;if(!Mo||!Ue)return Promise.resolve();const Ke=!ie&&GA(Ip(B.fullPath,0))||(ge||!ie)&&history.state&&history.state.scroll||null;return fs().then(()=>Ue(B,ue,Ke)).then(T=>T&&BA(T)).catch(T=>se(T,B,ue))}const He=B=>o.go(B);let dt;const pt=new Set,ht={currentRoute:l,listening:!0,addRoute:p,removeRoute:h,hasRoute:b,getRoutes:_,resolve:w,options:e,push:z,replace:E,go:He,back:()=>He(-1),forward:()=>He(1),beforeEach:s.add,beforeResolve:i.add,afterEach:a.add,onError:W.add,isReady:qe,install(B){const ue=this;B.component("RouterLink",yO),B.component("RouterView",wO),B.config.globalProperties.$router=ue,Object.defineProperty(B.config.globalProperties,"$route",{enumerable:!0,get:()=>gn(l)}),Mo&&!dt&&l.value===Tr&&(dt=!0,z(o.location).catch(Ue=>{}));const ie={};for(const Ue in Tr)Object.defineProperty(ie,Ue,{get:()=>l.value[Ue],enumerable:!0});B.provide(lm,ue),B.provide(S1,pd(ie)),B.provide(Gu,l);const ge=B.unmount;pt.add(B),B.unmount=function(){pt.delete(B),pt.size<1&&(u=Tr,q&&q(),q=null,l.value=Tr,dt=!1,re=!1),ge()}}};function Me(B){return B.reduce((ue,ie)=>ue.then(()=>P(ie)),Promise.resolve())}return ht}function kO(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let i=0;ils(u,a))?r.push(a):n.push(a));const l=e.matched[i];l&&(t.matched.find(u=>ls(u,l))||o.push(l))}return[n,r,o]}const xO={name:"PageAbout",computed:{config(){return this.$store.state.config},library(){return this.$store.state.library}},methods:{showUpdateDialog(){this.$store.commit(yi,!0)}}},SO={class:"section"},EO={class:"container"},$O={class:"columns is-centered"},TO={class:"column is-four-fifths has-text-centered-mobile"},AO=["textContent"],OO={class:"section"},PO={class:"container"},IO={class:"columns is-centered"},RO={class:"column is-four-fifths"},DO={class:"content"},LO={class:"level is-mobile"},NO={class:"level-left"},MO={class:"level-item"},FO=["textContent"],VO={class:"level-right"},HO={key:0},UO=["textContent"],jO={key:1},qO=["textContent"],BO={class:"table"},WO=["textContent"],GO=["textContent"],KO=["textContent"],ZO=["textContent"],YO=["textContent"],JO=["textContent"],XO=["textContent"],QO=["textContent"],e8=["textContent"],t8={class:"has-text-right"},n8=["textContent"],r8=["textContent"],o8=["textContent"],s8={class:"has-text-right"},i8=["textContent"],a8=["textContent"],l8={class:"section"},c8={class:"container"},u8={class:"columns is-centered"},d8={class:"column is-four-fifths"},m8={class:"content has-text-centered-mobile"},f8=["textContent"],p8=["textContent"],h8=c("a",{href:"https://bulma.io"},"Bulma",-1),_8=c("a",{href:"https://pictogrammers.com/library/mdi/"},"Material Design Icons",-1),g8=c("a",{href:"https://vuejs.org/"},"Vue.js",-1),y8=c("a",{href:"https://github.com/mzabriskie/axios"},"axios",-1),v8=["textContent"];function b8(e,t,n,r,o,s){const i=$("i18n-t");return k(),A("div",null,[c("section",SO,[c("div",EO,[c("div",$O,[c("div",TO,[c("h1",{class:"title is-4",textContent:g(s.config.library_name)},null,8,AO)])])])]),c("section",OO,[c("div",PO,[c("div",IO,[c("div",RO,[c("div",DO,[c("nav",LO,[c("div",NO,[c("div",MO,[c("p",{class:"title is-5",textContent:g(e.$t("page.about.library"))},null,8,FO)])]),c("div",VO,[s.library.updating?(k(),A("div",HO,[c("a",{class:"button is-small is-loading",textContent:g(e.$t("page.about.update"))},null,8,UO)])):(k(),A("div",jO,[c("a",{class:"button is-small",onClick:t[0]||(t[0]=a=>s.showUpdateDialog()),textContent:g(e.$t("page.about.update"))},null,8,qO)]))])]),c("table",BO,[c("tbody",null,[c("tr",null,[c("th",{class:"has-text-left",textContent:g(e.$t("page.about.artists"))},null,8,WO),c("td",{class:"has-text-right",textContent:g(e.$filters.number(s.library.artists))},null,8,GO)]),c("tr",null,[c("th",{class:"has-text-left",textContent:g(e.$t("page.about.albums"))},null,8,KO),c("td",{class:"has-text-right",textContent:g(e.$filters.number(s.library.albums))},null,8,ZO)]),c("tr",null,[c("th",{class:"has-text-left",textContent:g(e.$t("page.about.tracks"))},null,8,YO),c("td",{class:"has-text-right",textContent:g(e.$filters.number(s.library.songs))},null,8,JO)]),c("tr",null,[c("th",{class:"has-text-left",textContent:g(e.$t("page.about.total-playtime"))},null,8,XO),c("td",{class:"has-text-right",textContent:g(e.$filters.durationInDays(s.library.db_playtime*1e3))},null,8,QO)]),c("tr",null,[c("th",{class:"has-text-left",textContent:g(e.$t("page.about.updated"))},null,8,e8),c("td",t8,[c("span",{textContent:g(e.$t("page.about.updated-on",{time:e.$filters.timeFromNow(s.library.updated_at)}))},null,8,n8),gt(" ("),c("span",{class:"has-text-grey",textContent:g(e.$filters.datetime(s.library.updated_at))},null,8,r8),gt(") ")])]),c("tr",null,[c("th",{class:"has-text-left",textContent:g(e.$t("page.about.uptime"))},null,8,o8),c("td",s8,[c("span",{textContent:g(e.$filters.timeFromNow(s.library.started_at,!0))},null,8,i8),gt(" ("),c("span",{class:"has-text-grey",textContent:g(e.$filters.datetime(s.library.started_at))},null,8,a8),gt(") ")])])])])])])])])]),c("section",l8,[c("div",c8,[c("div",u8,[c("div",d8,[c("div",m8,[c("p",{class:"is-size-7",textContent:g(e.$t("page.about.version",{version:s.config.version}))},null,8,f8),c("p",{class:"is-size-7",textContent:g(e.$t("page.about.compiled-with",{options:s.config.buildoptions.join(", ")}))},null,8,p8),y(i,{tag:"p",class:"is-size-7",keypath:"page.about.built-with",scope:"global"},{bulma:S(()=>[h8]),mdi:S(()=>[_8]),vuejs:S(()=>[g8]),axios:S(()=>[y8]),others:S(()=>[c("a",{href:"https://github.com/owntone/owntone-server/network/dependencies",textContent:g(e.$t("page.about.more"))},null,8,v8)]),_:1})])])])])])])}const z8=te(xO,[["render",b8]]),{t:Bc,locale:cm}=Xl.global,E1="GROUP_KEY_NONE";function um(){return{compareFn:null,groupKeyFn:e=>E1}}function Rn(e,t=!1,n="_"){return{compareFn:t?null:(r,o)=>{const s=r[e]||n,i=o[e]||n;return s.localeCompare(i,cm.value)},groupKeyFn:r=>{const o=(r[e]||n).charAt(0);return o.match(new RegExp("\\p{Letter}","gu"))?o.toUpperCase():o.match(new RegExp("\\p{Number}","gu"))?"#":"⌘"}}}function dm(e,{direction:t="asc",defaultValue:n=0}){return{compareFn:(r,o)=>{const s=r[e]||n,i=o[e]||n,a=s-i;return t==="asc"?a:a*-1},groupKeyFn:r=>{const o=r[e]||n;return Math.floor(o/10)}}}function w8(e,t="asc",n=1){return{compareFn:(r,o)=>{const s=r[e]||n,i=o[e]||n,a=s-i;return t==="asc"?a:a*-1},groupKeyFn:r=>r[e]||n}}function zl(e,{direction:t="asc",defaultValue:n="0000"}){return{compareFn:(r,o)=>{const s=r[e]||n,i=o[e]||n,a=s.localeCompare(i,cm.value);return t==="asc"?a:a*-1},groupKeyFn:r=>(r[e]||n).substring(0,4)}}function C8(e,t="0000"){return{compareFn:(n,r)=>{const o=n[e]||t;return(r[e]||t).localeCompare(o,cm.value)},groupKeyFn:n=>{const r=n[e];if(!r)return t;const o=new Date().getTime()-new Date(r).getTime();return o<864e5?Bc("group-by-list.today"):o<6048e5?Bc("group-by-list.last-week"):o<2592e6?Bc("group-by-list.last-month"):r.substring(0,4)}}}class ye{constructor({items:t=[],total:n=0,offset:r=0,limit:o=-1}={}){this.items=t,this.total=n,this.offset=r,this.limit=o,this.count=t.length,this.indices=[],this.group(um())}group(t,n=[]){const r=this.items.filter(s=>n.every(i=>i(s)));this.count=r.length;const o=t.compareFn?[...r].sort(t.compareFn):r;this.itemsGrouped=o.reduce((s,i)=>{const a=t.groupKeyFn(i);return s.set(a,[...s.get(a)||[],i]),s},new Map),this.indices=Array.from(this.itemsGrouped.keys())}*generate(){for(const[t,n]of this.itemsGrouped.entries()){t!==E1&&(yield{groupKey:t,itemId:t,isItem:!1,item:{}});for(const r of n)yield{groupKey:t,itemId:r.id,isItem:!0,item:r}}}[Symbol.iterator](){return this.generate()}}const k8={},x8={class:"hero is-light is-bold"},S8={class:"hero-body"},E8={class:"container"},$8={class:"columns is-centered"},T8={class:"column is-four-fifths"},A8={class:"columns is-flex-direction-row-reverse"},O8={class:"column fd-has-cover"},P8={class:"column m-auto is-three-fifths has-text-centered-mobile"},I8={class:"section pt-0"},R8={class:"container"},D8={class:"columns is-centered"},L8={class:"column is-four-fifths"};function N8(e,t){return k(),A(Ce,null,[c("section",x8,[c("div",S8,[c("div",E8,[c("div",$8,[c("div",T8,[c("div",A8,[c("div",O8,[st(e.$slots,"heading-right")]),c("div",P8,[st(e.$slots,"heading-left")])])])])])])]),c("section",I8,[c("div",R8,[c("div",D8,[c("div",L8,[st(e.$slots,"content"),st(e.$slots,"footer")])])])])],64)}const ac=te(k8,[["render",N8]]),M8=e=>{for(var t=0,n=0;n[.2126,.7152,.0722].reduce((t,n,r)=>t+ +("0x"+e.slice(r*2,r*2+2))*n,0)/255,V8=e=>{const t=M8(e.alternate),n=`