@augmentd-labs/canvas-web 2.26.5 → 2.26.6

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.
@@ -1,7 +1,7 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pdf-Ciz5_WNq.js","assets/preload-helper-Czpn1I53.js","assets/markdown-html-XoABNf32.js","assets/rolldown-runtime-C0FnF6B9.js","assets/code-editor-BQnKd3jw.js","assets/sanitize-DrVcFY1Q.js","assets/markdown-it-DRESbtwK.js","assets/punycode.es6-ZbLrB_Dn.js","assets/markdown-html-DtQ7-esK.css","assets/SketchEditor-CWpixOog.js","assets/react-BzqgEMSQ.js","assets/ui-NWo4bzrd.js","assets/utils-BxVxyehK.js","assets/alert-dialog-CDKOX-MP.js","assets/utils-2pl1SbIp.js","assets/blobs-B3DY8Rsp.js","assets/workspace-BYMC2sfI.js","assets/sha256-Cs35JyRg.js","assets/chunk-K2UTITRG-zQFDOW3Q.js","assets/chunk-SRAX5OIU-Dhm3gOdh.js","assets/chunk-6U3AYISY-C6-Mtja1.js","assets/chunk-Z3N5DIM6-D9TMVU7m.js","assets/EditorOverlay-DqlaCJe7.js","assets/SketchEditor-DtRVLazd.css","assets/TextDocumentEditor-BF5NzQ6H.js","assets/text-documents-F17vHvLW.js","assets/LocationTab-BONJQfYM.js","assets/map-BxCwdK0d.js","assets/map-BcsP_QXj.css","assets/subtree-transfer-dialog-CSjPDp4d.js","assets/NextShell-DNv3mVFo.js","assets/NextShell-BT6-_CFY.css"])))=>i.map(i=>d[i]);
2
2
  import{a as e,n as t,o as n,r,t as i}from"./rolldown-runtime-C0FnF6B9.js";import{a,i as o,l as s,n as c,r as l,t as u,u as d}from"./code-editor-BQnKd3jw.js";import{_t as f,gt as p,vt as m,yt as h}from"./react-BzqgEMSQ.js";import{t as g}from"./preload-helper-Czpn1I53.js";import{$ as _,$n as v,$r as y,$t as b,An as x,Ar as S,At as C,B as w,Bn as T,Br as E,Bt as D,C as O,Cn as k,Cr as A,Ct as j,Dn as M,Dr as N,Dt as P,En as F,Er as I,Et as L,F as R,Fr as z,Ft as ee,G as te,Gn as ne,Gr as B,Gt as re,H as ie,Hn as ae,Hr as oe,Ht as V,I as H,Ir as U,It as se,J as W,Jn as ce,Jr as le,Jt as ue,K as de,Kn as fe,Kr as pe,Kt as me,L as G,Ln as he,Lr as ge,Lt as _e,Mn as ve,Mr as K,Mt as q,Nn as ye,Nr as be,Nt as xe,On as Se,Or as Ce,Ot as we,P as Te,Pn as Ee,Pr as De,Pt as Oe,Q as ke,Qn as Ae,Qr as je,Qt as Me,R as Ne,Rn as Pe,Rr as Fe,Rt as Ie,S as Le,Sn as Re,Sr as ze,St as Be,Tn as Ve,Tr as He,Tt as Ue,U as We,Un as Ge,Ur as Ke,Ut as qe,V as Je,Vn as Ye,Vr as Xe,Vt as Ze,W as Qe,Wn as $e,Wr as et,Wt as tt,X as nt,Xn as rt,Xr as it,Xt as at,Y as ot,Yn as st,Yr as ct,Yt as lt,Z as ut,Zn as dt,Zr as ft,Zt as pt,_ as mt,_i as ht,_n as gt,_r as _t,_t as vt,ai as yt,an as bt,ar as xt,at as St,b as Ct,bn as wt,br as Tt,bt as Et,ci as Dt,cn as Ot,cr as kt,ct as At,d as jt,di as Mt,dr as Nt,dt as Pt,ei as Ft,en as It,er as Lt,et as Rt,f as zt,fi as Bt,fn as Vt,fr as Ht,ft as Ut,g as Wt,gi as Gt,gn as Kt,gr as qt,gt as Jt,h as Yt,hi as Xt,hn as Zt,hr as Qt,ht as $t,ii as en,in as tn,ir as nn,it as rn,jn as an,jr as on,jt as sn,kn as cn,kr as ln,kt as un,li as dn,ln as fn,lr as pn,lt as mn,m as hn,mi as gn,mn as _n,mr as vn,mt as yn,ni as bn,nn as xn,nr as Sn,nt as Cn,oi as wn,on as Tn,or as En,ot as Dn,p as On,pi as kn,pr as An,pt as jn,q as Mn,qn as Nn,qr as Pn,qt as Fn,ri as In,rn as Ln,rr as Rn,rt as zn,si as Bn,sn as Vn,sr as Hn,st as Un,tn as Wn,tr as Gn,tt as Kn,u as qn,ui as Jn,un as Yn,ur as Xn,ut as Zn,v as Qn,vn as $n,vr as er,vt as tr,w as nr,wr as rr,wt as ir,x as ar,xn as or,xr as sr,xt as cr,y as lr,yn as ur,yr as dr,yt as fr,z as pr,zn as mr,zr as hr,zt as gr}from"./ui-NWo4bzrd.js";import{i as _r,n as vr,r as yr}from"./utils-BxVxyehK.js";import{n as br,t as J}from"./utils-2pl1SbIp.js";import{_ as xr,a as Sr,b as Y,c as Cr,d as wr,f as Tr,g as Er,h as Dr,i as Or,l as kr,m as Ar,n as jr,o as Mr,p as Nr,r as Pr,s as Fr,t as Ir,u as X,v as Lr,x as Z,y as Rr}from"./alert-dialog-CDKOX-MP.js";import{t as zr}from"./socket-hM4c-ZSl.js";import{a as Br,c as Vr,l as Hr,n as Ur,o as Wr,r as Gr,s as Kr}from"./blobs-B3DY8Rsp.js";import{$ as qr,$t as Jr,A as Yr,At as Xr,B as Zr,Bt as Qr,C as $r,Cn as ei,Ct as ti,D as ni,Dn as ri,Dt as ii,E as ai,En as oi,Et as si,F as ci,Fn as li,Ft as ui,G as di,Gn as fi,Gt as pi,H as mi,Ht as hi,I as gi,In as _i,It as vi,J as yi,Jn as bi,Jt as xi,K as Si,Kn as Ci,Kt as wi,L as Ti,Ln as Ei,Lt as Di,M as Oi,Mn as ki,Mt as Ai,Nn as ji,Nt as Mi,O as Ni,On as Pi,Ot as Fi,P as Ii,Pn as Li,Pt as Ri,Q as zi,Qt as Bi,R as Vi,Rn as Hi,Rt as Ui,S as Wi,Sn as Gi,St as Ki,T as qi,Tn as Ji,Tt as Yi,U as Xi,Un as Zi,Ut as Qi,V as $i,Vn as ea,Vt as ta,W as na,Wt as ra,X as ia,Xt as aa,Y as oa,Yt as sa,Z as ca,Zt as la,_ as ua,_n as da,_t as fa,a as pa,an as ma,at as ha,b as ga,bn as _a,bt as va,c as ya,cn as ba,ct as xa,d as Sa,dn as Ca,dt as wa,en as Ta,et as Ea,f as Da,fn as Oa,ft as ka,g as Aa,gn as ja,gt as Ma,h as Na,hn as Pa,ht as Fa,i as Ia,in as La,it as Ra,j as za,jn as Ba,jt as Va,k as Ha,kn as Ua,kt as Wa,l as Ga,ln as Ka,lt as qa,m as Ja,mn as Ya,mt as Xa,n as Za,nn as Qa,nt as $a,o as eo,on as to,ot as no,p as ro,pn as io,pt as ao,q as oo,qn as so,qt as co,r as lo,rt as uo,s as fo,sn as po,st as mo,t as ho,tn as go,tt as _o,u as vo,un as yo,ut as bo,v as xo,vn as So,vt as Co,w as wo,wn as To,wt as Eo,x as Do,xn as Oo,xt as ko,y as Ao,yn as jo,yt as Mo,z as No,zt as Po}from"./workspace-BYMC2sfI.js";import{_ as Fo,a as Io,c as Lo,d as Ro,f as zo,g as Bo,h as Vo,i as Ho,l as Uo,m as Wo,n as Go,o as Ko,p as qo,r as Jo,s as Yo,t as Xo,u as Zo,v as Qo,y as $o}from"./text-documents-F17vHvLW.js";import{n as es,t as ts}from"./map-BxCwdK0d.js";import{t as ns}from"./search-COMZIxA7.js";import{A as rs,B as is,C as as,D as os,E as ss,F as cs,H as ls,I as us,L as ds,M as fs,N as ps,O as ms,P as hs,R as gs,S as _s,T as vs,V as ys,_ as bs,a as xs,b as Ss,c as Cs,d as ws,f as Ts,g as Es,h as Ds,i as Os,j as ks,k as As,l as js,m as Ms,o as Ns,p as Ps,r as Fs,s as Is,t as Ls,u as Rs,v as zs,w as Bs,x as Vs,y as Hs,z as Us}from"./sha256-Cs35JyRg.js";import{t as Ws}from"./sanitize-DrVcFY1Q.js";import{t as Gs}from"./markdown-it-DRESbtwK.js";import{n as Ks,t as qs}from"./use-theme-Bd8sb5Ox.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var Q=n(d(),1),Js=m(),Ys=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,Xs=/^[\\/]{2}/;function Zs(e,t){return t+e.replace(/\\/g,`/`)}var Qs=(e=>(e.Pop=`POP`,e.Push=`PUSH`,e.Replace=`REPLACE`,e))(Qs||{}),$s=`popstate`;function ec(e){return typeof e==`object`&&!!e&&`pathname`in e&&`search`in e&&`hash`in e&&`state`in e&&`key`in e}function tc(e={}){function t(e,t){let n=t.state?.masked,{pathname:r,search:i,hash:a}=n||e.location;return oc(``,{pathname:r,search:i,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||`default`,n?{pathname:e.location.pathname,search:e.location.search,hash:e.location.hash}:void 0)}function n(e,t){return typeof t==`string`?t:sc(t)}return lc(t,n,null,e)}function nc(e,t){if(e===!1||e==null)throw Error(t)}function rc(e,t){if(!e){typeof console<`u`&&console.warn(t);try{throw Error(t)}catch{}}}function ic(){return Math.random().toString(36).substring(2,10)}function ac(e,t){return{usr:e.state,key:e.key,idx:t,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function oc(e,t,n=null,r,i){return{pathname:typeof e==`string`?e:e.pathname,search:``,hash:``,...typeof t==`string`?cc(t):t,state:n,key:t&&t.key||r||ic(),mask:i}}function sc({pathname:e=`/`,search:t=``,hash:n=``}){return t&&t!==`?`&&(e+=t.charAt(0)===`?`?t:`?`+t),n&&n!==`#`&&(e+=n.charAt(0)===`#`?n:`#`+n),e}function cc(e){let t={};if(e){let n=e.indexOf(`#`);n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf(`?`);r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function lc(e,t,n,r={}){let{window:i=document.defaultView,v5Compat:a=!1}=r,o=i.history,s=`POP`,c=null,l=u();l??(l=0,o.replaceState({...o.state,idx:l},``));function u(){return(o.state||{idx:null}).idx}function d(){s=`POP`;let e=u(),t=e==null?null:e-l;l=e,c&&c({action:s,location:h.location,delta:t})}function f(e,t){s=`PUSH`;let r=ec(e)?e:oc(h.location,e,t);n&&n(r,e),l=u()+1;let d=ac(r,l),f=h.createHref(r.mask||r);try{o.pushState(d,``,f)}catch(e){if(e instanceof DOMException&&e.name===`DataCloneError`)throw e;i.location.assign(f)}a&&c&&c({action:s,location:h.location,delta:1})}function p(e,t){s=`REPLACE`;let r=ec(e)?e:oc(h.location,e,t);n&&n(r,e),l=u();let i=ac(r,l),d=h.createHref(r.mask||r);o.replaceState(i,``,d),a&&c&&c({action:s,location:h.location,delta:0})}function m(e){return uc(i,e)}let h={get action(){return s},get location(){return e(i,o)},listen(e){if(c)throw Error(`A history only accepts one active listener`);return i.addEventListener($s,d),c=e,()=>{i.removeEventListener($s,d),c=null}},createHref(e){return t(i,e)},createURL:m,encodeLocation(e){let t=m(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:f,replace:p,go(e){return o.go(e)}};return h}function uc(e,t,n=!1){let r=`http://localhost`;e&&(r=e.location.origin===`null`?e.location.href:e.location.origin),nc(r,`No window.location.(origin|href) available to create URL`);let i=typeof t==`string`?t:sc(t);return i=i.replace(/ $/,`%20`),!n&&Xs.test(i)&&(i=r+i),new URL(i,r)}function dc(e,t,n=`/`){return fc(e,t,n,!1)}function fc(e,t,n,r,i){let a=jc((typeof t==`string`?cc(t):t).pathname||`/`,n);if(a==null)return null;let o=i??pc(e),s=null,c=Ac(a);for(let e=0;s==null&&e<o.length;++e)s=Ec(o[e],c,r);return s}function pc(e){let t=mc(e);return gc(t),t}function mc(e,t=[],n=[],r=``,i=!1){let a=(e,a,o=i,s)=>{let c={relativePath:s===void 0?e.path||``:s,caseSensitive:e.caseSensitive===!0,childrenIndex:a,route:e};if(c.relativePath.startsWith(`/`)){if(!c.relativePath.startsWith(r)&&o)return;nc(c.relativePath.startsWith(r),`Absolute route path "${c.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),c.relativePath=c.relativePath.slice(r.length)}let l=zc([r,c.relativePath]),u=n.concat(c);e.children&&e.children.length>0&&(nc(e.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${l}".`),mc(e.children,t,u,l,o)),!(e.path==null&&!e.index)&&t.push({path:l,score:wc(l,e.index),routesMeta:u.map((e,t)=>{let[n,r]=kc(e.relativePath,e.caseSensitive,t===u.length-1);return{...e,matcher:n,compiledParams:r}})})};return e.forEach((e,t)=>{if(e.path===``||!e.path?.includes(`?`))a(e,t);else for(let n of hc(e.path))a(e,t,!0,n)}),t}function hc(e){let t=e.split(`/`);if(t.length===0)return[];let[n,...r]=t,i=n.endsWith(`?`),a=n.replace(/\?$/,``);if(r.length===0)return i?[a,``]:[a];let o=hc(r.join(`/`)),s=[];return s.push(...o.map(e=>e===``?a:[a,e].join(`/`))),i&&s.push(...o),s.map(t=>e.startsWith(`/`)&&t===``?`/`:t)}function gc(e){e.sort((e,t)=>e.score===t.score?Tc(e.routesMeta.map(e=>e.childrenIndex),t.routesMeta.map(e=>e.childrenIndex)):t.score-e.score)}var _c=/^:[\w-]+$/,vc=3,yc=2,bc=1,xc=10,Sc=-2,Cc=e=>e===`*`;function wc(e,t){let n=e.split(`/`),r=n.length;return n.some(Cc)&&(r+=Sc),t&&(r+=yc),n.filter(e=>!Cc(e)).reduce((e,t)=>e+(_c.test(t)?vc:t===``?bc:xc),r)}function Tc(e,t){return e.length===t.length&&e.slice(0,-1).every((e,n)=>e===t[n])?e[e.length-1]-t[t.length-1]:0}function Ec(e,t,n=!1){let{routesMeta:r}=e,i={},a=`/`,o=[];for(let e=0;e<r.length;++e){let s=r[e],c=e===r.length-1,l=a===`/`?t:t.slice(a.length)||`/`,u={path:s.relativePath,caseSensitive:s.caseSensitive,end:c},d=s.matcher&&s.compiledParams?Oc(u,l,s.matcher,s.compiledParams):Dc(u,l),f=s.route;if(!d&&c&&n&&!r[r.length-1].route.index&&(d=Dc({path:s.relativePath,caseSensitive:s.caseSensitive,end:!1},l)),!d)return null;Object.assign(i,d.params),o.push({params:i,pathname:zc([a,d.pathname]),pathnameBase:Vc(zc([a,d.pathnameBase])),route:f}),d.pathnameBase!==`/`&&(a=zc([a,d.pathnameBase]))}return o}function Dc(e,t){typeof e==`string`&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=kc(e.path,e.caseSensitive,e.end);return Oc(e,t,n,r)}function Oc(e,t,n,r){let i=t.match(n);if(!i)return null;let a=i[0],o=a.replace(/(.)\/+$/,`$1`),s=i.slice(1);return{params:r.reduce((e,{paramName:t,isOptional:n},r)=>{if(t===`*`){let e=s[r]||``;o=a.slice(0,a.length-e.length).replace(/(.)\/+$/,`$1`)}let i=s[r];return e[t]=n&&!i?void 0:(i||``).replace(/%2F/g,`/`),e},{}),pathname:a,pathnameBase:o,pattern:e}}function kc(e,t=!1,n=!0){rc(e===`*`||!e.endsWith(`*`)||e.endsWith(`/*`),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,`/*`)}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,`/*`)}".`);let r=[],i=`^`+e.replace(/\/*\*?$/,``).replace(/^\/*/,`/`).replace(/[\\.*+^${}|()[\]]/g,`\\$&`).replace(/\/:([\w-]+)(\?)?/g,(e,t,n,i,a)=>{if(r.push({paramName:t,isOptional:n!=null}),n){let t=a.charAt(i+e.length);return t&&t!==`/`?`/([^\\/]*)`:`(?:/([^\\/]*))?`}return`/([^\\/]+)`}).replace(/\/([\w-]+)\?(\/|$)/g,`(/$1)?$2`);return e.endsWith(`*`)?(r.push({paramName:`*`}),i+=e===`*`||e===`/*`?`(.*)$`:`(?:\\/(.+)|\\/*)$`):n?i+=`\\/*$`:e!==``&&e!==`/`&&(i+=`(?:(?=\\/|$))`),[new RegExp(i,t?void 0:`i`),r]}function Ac(e){try{return e.split(`/`).map(e=>decodeURIComponent(e).replace(/\//g,`%2F`)).join(`/`)}catch(t){return rc(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function jc(e,t){if(t===`/`)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith(`/`)?t.length-1:t.length,r=e.charAt(n);return r&&r!==`/`?null:e.slice(n)||`/`}function Mc(e,t=`/`){let{pathname:n,search:r=``,hash:i=``}=typeof e==`string`?cc(e):e,a;return n?(n=Rc(n),a=n.startsWith(`/`)?Nc(n.substring(1),`/`):Nc(n,t)):a=t,{pathname:a,search:Hc(r),hash:Uc(i)}}function Nc(e,t){let n=Bc(t).split(`/`);return e.split(`/`).forEach(e=>{e===`..`?n.length>1&&n.pop():e!==`.`&&n.push(e)}),n.length>1?n.join(`/`):`/`}function Pc(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function Fc(e){return e.filter((e,t)=>t===0||e.route.path&&e.route.path.length>0)}function Ic(e){let t=Fc(e);return t.map((e,n)=>n===t.length-1?e.pathname:e.pathnameBase)}function Lc(e,t,n,r=!1){let i;typeof e==`string`?i=cc(e):(i={...e},nc(!i.pathname||!i.pathname.includes(`?`),Pc(`?`,`pathname`,`search`,i)),nc(!i.pathname||!i.pathname.includes(`#`),Pc(`#`,`pathname`,`hash`,i)),nc(!i.search||!i.search.includes(`#`),Pc(`#`,`search`,`hash`,i)));let a=e===``||i.pathname===``,o=a?`/`:i.pathname,s;if(o==null)s=n;else{let e=t.length-1;if(!r&&o.startsWith(`..`)){let t=o.split(`/`);for(;t[0]===`..`;)t.shift(),--e;i.pathname=t.join(`/`)}s=e>=0?t[e]:`/`}let c=Mc(i,s),l=o&&o!==`/`&&o.endsWith(`/`),u=(a||o===`.`)&&n.endsWith(`/`);return!c.pathname.endsWith(`/`)&&(l||u)&&(c.pathname+=`/`),c}var Rc=e=>e.replace(/[\\/]{2,}/g,`/`),zc=e=>Rc(e.join(`/`)),Bc=e=>e.replace(/\/+$/,``),Vc=e=>Bc(e).replace(/^\/*/,`/`),Hc=e=>!e||e===`?`?``:e.startsWith(`?`)?e:`?`+e,Uc=e=>!e||e===`#`?``:e.startsWith(`#`)?e:`#`+e,Wc=class{constructor(e,t,n,r=!1){this.status=e,this.statusText=t||``,this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function Gc(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.internal==`boolean`&&`data`in e}function Kc(e){return zc(e.map(e=>e.route.path).filter(Boolean))||`/`}var qc=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function Jc(e,t){let n=e;if(typeof n!=`string`||!Ys.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,i=!1;if(qc)try{let e=new URL(window.location.href),r=Xs.test(n)?new URL(Zs(n,e.protocol)):new URL(n),a=jc(r.pathname,t);r.origin===e.origin&&a!=null?n=a+r.search+r.hash:i=!0}catch{rc(!1,`<Link to="${n}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:i,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);var Yc=[`POST`,`PUT`,`PATCH`,`DELETE`];new Set(Yc);var Xc=[`GET`,...Yc];new Set(Xc);var Zc=[`about:`,`blob:`,`chrome:`,`chrome-untrusted:`,`content:`,`data:`,`devtools:`,`file:`,`filesystem:`,`javascript:`];function Qc(e){try{return Zc.includes(new URL(e).protocol)}catch{return!1}}var $c=Q.createContext(null);$c.displayName=`DataRouter`;var el=Q.createContext(null);el.displayName=`DataRouterState`;var tl=Q.createContext(!1);function nl(){return Q.useContext(tl)}var rl=Q.createContext({isTransitioning:!1});rl.displayName=`ViewTransition`;var il=Q.createContext(new Map);il.displayName=`Fetchers`;var al=Q.createContext(null);al.displayName=`Await`;var ol=Q.createContext(null);ol.displayName=`Navigation`;var sl=Q.createContext(null);sl.displayName=`Location`;var cl=Q.createContext({outlet:null,matches:[],isDataRoute:!1});cl.displayName=`Route`;var ll=Q.createContext(null);ll.displayName=`RouteError`;var ul=`REACT_ROUTER_ERROR`,dl=`REDIRECT`,fl=`ROUTE_ERROR_RESPONSE`;function pl(e){if(e.startsWith(`${ul}:${dl}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`&&typeof t.location==`string`&&typeof t.reloadDocument==`boolean`&&typeof t.replace==`boolean`)return t}catch{}}function ml(e){if(e.startsWith(`${ul}:${fl}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`)return new Wc(t.status,t.statusText,t.data)}catch{}}function hl(e,{relative:t}={}){nc(gl(),`useHref() may be used only in the context of a <Router> component.`);let{basename:n,navigator:r}=Q.useContext(ol),{hash:i,pathname:a,search:o}=Tl(e,{relative:t}),s=a;return n!==`/`&&(s=a===`/`?n:zc([n,a])),r.createHref({pathname:s,search:o,hash:i})}function gl(){return Q.useContext(sl)!=null}function _l(){return nc(gl(),`useLocation() may be used only in the context of a <Router> component.`),Q.useContext(sl).location}var vl=`You should call navigate() in a React.useEffect(), not when your component is first rendered.`;function yl(e){Q.useContext(ol).static||Q.useLayoutEffect(e)}function bl(){let{isDataRoute:e}=Q.useContext(cl);return e?Hl():xl()}function xl(){nc(gl(),`useNavigate() may be used only in the context of a <Router> component.`);let e=Q.useContext($c),{basename:t,navigator:n}=Q.useContext(ol),{matches:r}=Q.useContext(cl),{pathname:i}=_l(),a=JSON.stringify(Ic(r)),o=Q.useRef(!1);return yl(()=>{o.current=!0}),Q.useCallback((r,s={})=>{if(rc(o.current,vl),!o.current)return;if(typeof r==`number`){n.go(r);return}let c=Lc(r,JSON.parse(a),i,s.relative===`path`);e==null&&t!==`/`&&(c.pathname=c.pathname===`/`?t:zc([t,c.pathname])),(s.replace?n.replace:n.push)(c,s.state,s)},[t,n,a,i,e])}var Sl=Q.createContext(null);function Cl(e){let t=Q.useContext(cl).outlet;return Q.useMemo(()=>t&&Q.createElement(Sl.Provider,{value:e},t),[t,e])}function wl(){let{matches:e}=Q.useContext(cl);return e[e.length-1]?.params??{}}function Tl(e,{relative:t}={}){let{matches:n}=Q.useContext(cl),{pathname:r}=_l(),i=JSON.stringify(Ic(n));return Q.useMemo(()=>Lc(e,JSON.parse(i),r,t===`path`),[e,i,r,t])}function El(e,t){return Dl(e,t)}function Dl(e,t,n){nc(gl(),`useRoutes() may be used only in the context of a <Router> component.`);let{navigator:r}=Q.useContext(ol),{matches:i}=Q.useContext(cl),a=i[i.length-1],o=a?a.params:{},s=a?a.pathname:`/`,c=a?a.pathnameBase:`/`,l=a&&a.route;{let e=l&&l.path||``;Wl(s,!l||e.endsWith(`*`)||e.endsWith(`*?`),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${s}" (under <Route path="${e}">) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.
3
3
 
4
- Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}/*`}">.`)}let u=_l(),d;if(t){let e=typeof t==`string`?cc(t):t;nc(c===`/`||e.pathname?.startsWith(c),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${c}" but pathname "${e.pathname}" was given in the \`location\` prop.`),d=e}else d=u;let f=d.pathname||`/`,p=f;if(c!==`/`){let e=c.replace(/^\//,``).split(`/`);p=`/`+f.replace(/^\//,``).split(`/`).slice(e.length).join(`/`)}let m=n&&n.state.matches.length?n.state.matches.map(e=>Object.assign(e,{route:n.manifest[e.route.id]||e.route})):dc(e,{pathname:p});rc(l||m!=null,`No routes matched location "${d.pathname}${d.search}${d.hash}" `),rc(m==null||m[m.length-1].route.element!==void 0||m[m.length-1].route.Component!==void 0||m[m.length-1].route.lazy!==void 0,`Matched leaf route at location "${d.pathname}${d.search}${d.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let h=Pl(m&&m.map(e=>Object.assign({},e,{params:Object.assign({},o,e.params),pathname:zc([c,r.encodeLocation?r.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?c:zc([c,r.encodeLocation?r.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),i,n);return t&&h?Q.createElement(sl.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...d},navigationType:`POP`}},h):h}function Ol(){let e=Vl(),t=Gc(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r=`rgba(200,200,200, 0.5)`,i={padding:`0.5rem`,backgroundColor:r},a={padding:`2px 4px`,backgroundColor:r},o=null;return console.error(`Error handled by React Router default ErrorBoundary:`,e),o=Q.createElement(Q.Fragment,null,Q.createElement(`p`,null,`💿 Hey developer 👋`),Q.createElement(`p`,null,`You can provide a way better UX than this when your app throws errors by providing your own `,Q.createElement(`code`,{style:a},`ErrorBoundary`),` or`,` `,Q.createElement(`code`,{style:a},`errorElement`),` prop on your route.`)),Q.createElement(Q.Fragment,null,Q.createElement(`h2`,null,`Unexpected Application Error!`),Q.createElement(`h3`,{style:{fontStyle:`italic`}},t),n?Q.createElement(`pre`,{style:i},n):null,o)}var kl=Q.createElement(Ol,null),Al=class extends Q.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!==`idle`&&e.revalidation===`idle`?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error===void 0?t.error:e.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`React Router caught the following error during render`,e)}render(){let e=this.state.error;if(this.context&&typeof e==`object`&&e&&`digest`in e&&typeof e.digest==`string`){let t=ml(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:Q.createElement(cl.Provider,{value:this.props.routeContext},Q.createElement(ll.Provider,{value:e,children:this.props.component}));return this.context?Q.createElement(Ml,{error:e},t):t}};Al.contextType=tl;var jl=new WeakMap;function Ml({children:e,error:t}){let{basename:n}=Q.useContext(ol);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=pl(t.digest);if(e){let r=jl.get(t);if(r)throw r;let i=Jc(e.location,n),a=i.absoluteURL||i.to;if(Qc(a))throw Error(`Invalid redirect location`);if(qc&&!jl.get(t)){if(i.isExternal||e.reloadDocument)window.location.href=a;else{let n=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(i.to,{replace:e.replace}));throw jl.set(t,n),n}}return Q.createElement(`meta`,{httpEquiv:`refresh`,content:`0;url=${a}`})}}return e}function Nl({routeContext:e,match:t,children:n}){let r=Q.useContext($c);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),Q.createElement(cl.Provider,{value:e},n)}function Pl(e,t=[],n){let r=n?.state;if(e==null){if(!r)return null;if(r.errors)e=r.matches;else if(t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let i=e,a=r?.errors;if(a!=null){let e=i.findIndex(e=>e.route.id&&a?.[e.route.id]!==void 0);nc(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(a).join(`,`)}`),i=i.slice(0,Math.min(i.length,e+1))}let o=!1,s=-1;if(n&&r){o=r.renderFallback;for(let e=0;e<i.length;e++){let t=i[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(s=e),t.route.id){let{loaderData:e,errors:a}=r,c=t.route.loader&&!e.hasOwnProperty(t.route.id)&&(!a||a[t.route.id]===void 0);if(t.route.lazy||c){n.isStatic&&(o=!0),i=s>=0?i.slice(0,s+1):[i[0]];break}}}}let c=n?.onError,l=r&&c?(e,t)=>{c(e,{location:r.location,params:r.matches?.[0]?.params??{},pattern:Kc(r.matches),errorInfo:t})}:void 0;return i.reduceRight((e,n,c)=>{let u,d=!1,f=null,p=null;r&&(u=a&&n.route.id?a[n.route.id]:void 0,f=n.route.errorElement||kl,o&&(s<0&&c===0?(Wl(`route-fallback`,!1,"No `HydrateFallback` element provided to render during initial hydration"),d=!0,p=null):s===c&&(d=!0,p=n.route.hydrateFallbackElement||null)));let m=t.concat(i.slice(0,c+1)),h=()=>{let t;return t=u?f:d?p:n.route.Component?Q.createElement(n.route.Component,null):n.route.element?n.route.element:e,Q.createElement(Nl,{match:n,routeContext:{outlet:e,matches:m,isDataRoute:r!=null},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||c===0)?Q.createElement(Al,{location:r.location,revalidation:r.revalidation,component:f,error:u,children:h(),routeContext:{outlet:null,matches:m,isDataRoute:!0},onError:l}):h()},null)}function Fl(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Il(e){let t=Q.useContext($c);return nc(t,Fl(e)),t}function Ll(e){let t=Q.useContext(el);return nc(t,Fl(e)),t}function Rl(e){let t=Q.useContext(cl);return nc(t,Fl(e)),t}function zl(e){let t=Rl(e),n=t.matches[t.matches.length-1];return nc(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function Bl(){return zl(`useRouteId`)}function Vl(){let e=Q.useContext(ll),t=Ll(`useRouteError`),n=zl(`useRouteError`);return e===void 0?t.errors?.[n]:e}function Hl(){let{router:e}=Il(`useNavigate`),t=zl(`useNavigate`),n=Q.useRef(!1);return yl(()=>{n.current=!0}),Q.useCallback(async(r,i={})=>{rc(n.current,vl),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var Ul={};function Wl(e,t,n){!t&&!Ul[e]&&(Ul[e]=!0,rc(!1,n))}Q.memo(Gl);function Gl({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return Dl(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function Kl({to:e,replace:t,state:n,relative:r}){nc(gl(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:i}=Q.useContext(ol);rc(!i,`<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`);let{matches:a}=Q.useContext(cl),{pathname:o}=_l(),s=bl(),c=Lc(e,Ic(a),o,r===`path`),l=JSON.stringify(c);return Q.useEffect(()=>{s(JSON.parse(l),{replace:t,state:n,relative:r})},[s,l,r,t,n]),null}function ql(e){return Cl(e.context)}function Jl(e){nc(!1,`A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`)}function Yl({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:a=!1,useTransitions:o}){nc(!gl(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let s=e.replace(/^\/*/,`/`),c=Q.useMemo(()=>({basename:s,navigator:i,static:a,useTransitions:o,future:{}}),[s,i,a,o]);typeof n==`string`&&(n=cc(n));let{pathname:l=`/`,search:u=``,hash:d=``,state:f=null,key:p=`default`,mask:m}=n,h=Q.useMemo(()=>{let e=jc(l,s);return e==null?null:{location:{pathname:e,search:u,hash:d,state:f,key:p,mask:m},navigationType:r}},[s,l,u,d,f,p,r,m]);return rc(h!=null,`<Router basename="${s}"> is not able to match the URL "${l}${u}${d}" because it does not start with the basename, so the <Router> won't render anything.`),h==null?null:Q.createElement(ol.Provider,{value:c},Q.createElement(sl.Provider,{children:t,value:h}))}function Xl({children:e,location:t}){return El(Zl(e),t)}Q.Component;function Zl(e,t=[]){let n=[];return Q.Children.forEach(e,(e,r)=>{if(!Q.isValidElement(e))return;let i=[...t,r];if(e.type===Q.Fragment){n.push.apply(n,Zl(e.props.children,i));return}nc(e.type===Jl,`[${typeof e.type==`string`?e.type:e.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`),nc(!e.props.index||!e.props.children,`An index route cannot have child routes.`);let a={id:e.props.id||i.join(`-`),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,middleware:e.props.middleware,loader:e.props.loader,action:e.props.action,hydrateFallbackElement:e.props.hydrateFallbackElement,HydrateFallback:e.props.HydrateFallback,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:e.props.hasErrorBoundary===!0||e.props.ErrorBoundary!=null||e.props.errorElement!=null,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(a.children=Zl(e.props.children,i)),n.push(a)}),n}var Ql=`get`,$l=`application/x-www-form-urlencoded`;function eu(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function tu(e){return eu(e)&&e.tagName.toLowerCase()===`button`}function nu(e){return eu(e)&&e.tagName.toLowerCase()===`form`}function ru(e){return eu(e)&&e.tagName.toLowerCase()===`input`}function iu(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function au(e,t){return e.button===0&&(!t||t===`_self`)&&!iu(e)}function ou(e=``){return new URLSearchParams(typeof e==`string`||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}function su(e,t){let n=ou(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var cu=null;function lu(){if(cu===null)try{new FormData(document.createElement(`form`),0),cu=!1}catch{cu=!0}return cu}var uu=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function du(e){return e!=null&&!uu.has(e)?(rc(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${$l}"`),null):e}function fu(e,t){let n,r,i,a,o;if(nu(e)){let o=e.getAttribute(`action`);r=o?jc(o,t):null,n=e.getAttribute(`method`)||Ql,i=du(e.getAttribute(`enctype`))||$l,a=new FormData(e)}else if(tu(e)||ru(e)&&(e.type===`submit`||e.type===`image`)){let o=e.form;if(o==null)throw Error(`Cannot submit a <button> or <input type="submit"> without a <form>`);let s=e.getAttribute(`formaction`)||o.getAttribute(`action`);if(r=s?jc(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||Ql,i=du(e.getAttribute(`formenctype`))||du(o.getAttribute(`enctype`))||$l,a=new FormData(o,e),!lu()){let{name:t,type:n,value:r}=e;if(n===`image`){let e=t?`${t}.`:``;a.append(`${e}x`,`0`),a.append(`${e}y`,`0`)}else t&&a.append(t,r)}}else if(eu(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=Ql,r=null,i=$l,o=e;return a&&i===`text/plain`&&(o=a,a=void 0),{action:r,method:n.toLowerCase(),encType:i,formData:a,body:o}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);function pu(e,t){if(e===!1||e==null)throw Error(t)}function mu(e,t,n,r){let i=typeof e==`string`?new URL(e,typeof window>`u`?`server://singlefetch/`:window.location.origin):e;return i.pathname=n?i.pathname.endsWith(`/`)?`${i.pathname}_.${r}`:`${i.pathname}.${r}`:i.pathname===`/`?`_root.${r}`:t&&jc(i.pathname,t)===`/`?`${Bc(t)}/_root.${r}`:`${Bc(i.pathname)}.${r}`,i}async function hu(e,t){if(e.id in t)return t[e.id];try{let n=await g(()=>import(e.module),[]);return t[e.id]=n,n}catch(t){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(t),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function gu(e){return e!=null&&typeof e.page==`string`}function _u(e){return e==null?!1:e.href==null?e.rel===`preload`&&typeof e.imageSrcSet==`string`&&typeof e.imageSizes==`string`:typeof e.rel==`string`&&typeof e.href==`string`}async function vu(e,t,n){return Cu((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await hu(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(_u).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function yu(e,t,n,r,i,a){let o=(e,t)=>!n[t]||e.route.id!==n[t].route.id,s=(e,t)=>n[t].pathname!==e.pathname||n[t].route.path?.endsWith(`*`)&&n[t].params[`*`]!==e.params[`*`];return a===`assets`?t.filter((e,t)=>o(e,t)||s(e,t)):a===`data`?t.filter((t,a)=>{let c=r.routes[t.route.id];if(!c||!c.hasLoader)return!1;if(o(t,a)||s(t,a))return!0;if(t.route.shouldRevalidate){let r=t.route.shouldRevalidate({currentUrl:new URL(i.pathname+i.search+i.hash,window.origin),currentParams:n[0]?.params||{},nextUrl:new URL(e,window.origin),nextParams:t.params,defaultShouldRevalidate:!0});if(typeof r==`boolean`)return r}return!0}):[]}function bu(e,t,{includeHydrateFallback:n}={}){return xu(e.map(e=>{let r=t.routes[e.route.id];if(!r)return[];let i=[r.module];return r.clientActionModule&&(i=i.concat(r.clientActionModule)),r.clientLoaderModule&&(i=i.concat(r.clientLoaderModule)),n&&r.hydrateFallbackModule&&(i=i.concat(r.hydrateFallbackModule)),r.imports&&(i=i.concat(r.imports)),i}).flat(1))}function xu(e){return[...new Set(e)]}function Su(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function Cu(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!gu(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(Su(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function wu(){let e=Q.useContext($c);return pu(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function Tu(){let e=Q.useContext(el);return pu(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var Eu=Q.createContext(void 0);Eu.displayName=`FrameworkContext`;function Du(){let e=Q.useContext(Eu);return pu(e,`You must render this element inside a <HydratedRouter> element`),e}function Ou(e,t){let n=Q.useContext(Eu),[r,i]=Q.useState(!1),[a,o]=Q.useState(!1),{onFocus:s,onBlur:c,onMouseEnter:l,onMouseLeave:u,onTouchStart:d}=t,f=Q.useRef(null);Q.useEffect(()=>{if(e===`render`&&o(!0),e===`viewport`){let e=new IntersectionObserver(e=>{e.forEach(e=>{o(e.isIntersecting)})},{threshold:.5});return f.current&&e.observe(f.current),()=>{e.disconnect()}}},[e]),Q.useEffect(()=>{if(r){let e=setTimeout(()=>{o(!0)},100);return()=>{clearTimeout(e)}}},[r]);let p=()=>{i(!0)},m=()=>{i(!1),o(!1)};return n?e===`intent`?[a,f,{onFocus:ku(s,p),onBlur:ku(c,m),onMouseEnter:ku(l,p),onMouseLeave:ku(u,m),onTouchStart:ku(d,p)}]:[a,f,{}]:[!1,f,{}]}function ku(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function Au({page:e,...t}){let n=nl(),{nonce:r}=Du(),{router:i}=wu(),a=Q.useMemo(()=>dc(i.routes,e,i.basename),[i.routes,e,i.basename]);return a?(t.nonce==null&&r&&(t={...t,nonce:r}),n?Q.createElement(Mu,{page:e,matches:a,...t}):Q.createElement(Nu,{page:e,matches:a,...t})):null}function ju(e){let{manifest:t,routeModules:n}=Du(),[r,i]=Q.useState([]);return Q.useEffect(()=>{let r=!1;return vu(e,t,n).then(e=>{r||i(e)}),()=>{r=!0}},[e,t,n]),r}function Mu({page:e,matches:t,...n}){let r=_l(),{future:i}=Du(),{basename:a}=wu(),o=Q.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=mu(e,a,i.v8_trailingSlashAwareDataRequests,`rsc`),o=!1,s=[];for(let e of t)typeof e.route.shouldRevalidate==`function`?o=!0:s.push(e.route.id);return o&&s.length>0&&n.searchParams.set(`_routes`,s.join(`,`)),[n.pathname+n.search]},[a,i.v8_trailingSlashAwareDataRequests,e,r,t]);return Q.createElement(Q.Fragment,null,o.map(e=>Q.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function Nu({page:e,matches:t,...n}){let r=_l(),{future:i,manifest:a,routeModules:o}=Du(),{basename:s}=wu(),{loaderData:c,matches:l}=Tu(),u=Q.useMemo(()=>yu(e,t,l,a,r,`data`),[e,t,l,a,r]),d=Q.useMemo(()=>yu(e,t,l,a,r,`assets`),[e,t,l,a,r]),f=Q.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=new Set,l=!1;if(t.forEach(e=>{let t=a.routes[e.route.id];!t||!t.hasLoader||(!u.some(t=>t.route.id===e.route.id)&&e.route.id in c&&o[e.route.id]?.shouldRevalidate||t.hasClientLoader?l=!0:n.add(e.route.id))}),n.size===0)return[];let d=mu(e,s,i.v8_trailingSlashAwareDataRequests,`data`);return l&&n.size>0&&d.searchParams.set(`_routes`,t.filter(e=>n.has(e.route.id)).map(e=>e.route.id).join(`,`)),[d.pathname+d.search]},[s,i.v8_trailingSlashAwareDataRequests,c,r,a,u,t,e,o]),p=Q.useMemo(()=>bu(d,a),[d,a]),m=ju(d);return Q.createElement(Q.Fragment,null,f.map(e=>Q.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),p.map(e=>Q.createElement(`link`,{key:e,rel:`modulepreload`,href:e,...n})),m.map(({key:e,link:t})=>Q.createElement(`link`,{key:e,nonce:n.nonce,...t,crossOrigin:t.crossOrigin??n.crossOrigin})))}function Pu(...e){return t=>{e.forEach(e=>{typeof e==`function`?e(t):e!=null&&(e.current=t)})}}Q.Component;var Fu=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{Fu&&(window.__reactRouterVersion=`7.18.2`)}catch{}function Iu({basename:e,children:t,useTransitions:n,window:r}){let i=Q.useRef();i.current??=tc({window:r,v5Compat:!0});let a=i.current,[o,s]=Q.useState({action:a.action,location:a.location}),c=Q.useCallback(e=>{n===!1?s(e):Q.startTransition(()=>s(e))},[n]);return Q.useLayoutEffect(()=>a.listen(c),[a,c]),Q.createElement(Yl,{basename:e,children:t,location:o.location,navigationType:o.action,navigator:a,useTransitions:n})}var Lu=Q.forwardRef(function({onClick:e,discover:t=`render`,prefetch:n=`none`,relative:r,reloadDocument:i,replace:a,mask:o,state:s,target:c,to:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f,...p},m){let{basename:h,navigator:g,useTransitions:_}=Q.useContext(ol),v=typeof l==`string`&&Ys.test(l),y=Jc(l,h);l=y.to;let b=hl(l,{relative:r}),x=_l(),S=null;if(o){let e=Lc(o,[],x.mask?x.mask.pathname:`/`,!0);h!==`/`&&(e.pathname=e.pathname===`/`?h:zc([h,e.pathname])),S=g.createHref(e)}let[C,w,T]=Ou(n,p),E=Hu(l,{replace:a,mask:o,state:s,target:c,preventScrollReset:u,relative:r,viewTransition:d,defaultShouldRevalidate:f,useTransitions:_});function D(t){e&&e(t),t.defaultPrevented||E(t)}let O=!(y.isExternal||i),k=Q.createElement(`a`,{...p,...T,href:(O?S:void 0)||y.absoluteURL||b,onClick:O?D:e,ref:Pu(m,w),target:c,"data-discover":!v&&t===`render`?`true`:void 0});return C&&!v?Q.createElement(Q.Fragment,null,k,Q.createElement(Au,{page:b})):k});Lu.displayName=`Link`;var Ru=Q.forwardRef(function({"aria-current":e=`page`,caseSensitive:t=!1,className:n=``,end:r=!1,style:i,to:a,viewTransition:o,children:s,...c},l){let u=Tl(a,{relative:c.relative}),d=_l(),f=Q.useContext(el),{navigator:p,basename:m}=Q.useContext(ol),h=f!=null&&Ju(u)&&o===!0,g=p.encodeLocation?p.encodeLocation(u).pathname:u.pathname,_=d.pathname,v=f&&f.navigation&&f.navigation.location?f.navigation.location.pathname:null;t||(_=_.toLowerCase(),v=v?v.toLowerCase():null,g=g.toLowerCase()),v&&m&&(v=jc(v,m)||v);let y=g!==`/`&&g.endsWith(`/`)?g.length-1:g.length,b=_===g||!r&&_.startsWith(g)&&_.charAt(y)===`/`,x=v!=null&&(v===g||!r&&v.startsWith(g)&&v.charAt(g.length)===`/`),S={isActive:b,isPending:x,isTransitioning:h},C=b?e:void 0,w;w=typeof n==`function`?n(S):[n,b?`active`:null,x?`pending`:null,h?`transitioning`:null].filter(Boolean).join(` `);let T=typeof i==`function`?i(S):i;return Q.createElement(Lu,{...c,"aria-current":C,className:w,ref:l,style:T,to:a,viewTransition:o},typeof s==`function`?s(S):s)});Ru.displayName=`NavLink`;var zu=Q.forwardRef(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:r,replace:i,state:a,method:o=Ql,action:s,onSubmit:c,relative:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f,...p},m)=>{let{useTransitions:h}=Q.useContext(ol),g=Ku(),_=qu(s,{relative:l}),v=o.toLowerCase()===`get`?`get`:`post`,y=typeof s==`string`&&Ys.test(s);return Q.createElement(`form`,{ref:m,method:v,action:_,onSubmit:r?c:e=>{if(c&&c(e),e.defaultPrevented)return;e.preventDefault();let r=e.nativeEvent.submitter,s=r?.getAttribute(`formmethod`)||o,p=()=>g(r||e.currentTarget,{fetcherKey:t,method:s,navigate:n,replace:i,state:a,relative:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f});h&&n!==!1?Q.startTransition(()=>p()):p()},...p,"data-discover":!y&&e===`render`?`true`:void 0})});zu.displayName=`Form`;function Bu(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Vu(e){let t=Q.useContext($c);return nc(t,Bu(e)),t}function Hu(e,{target:t,replace:n,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c,useTransitions:l}={}){let u=bl(),d=_l(),f=Tl(e,{relative:o});return Q.useCallback(p=>{if(au(p,t)){p.preventDefault();let t=n===void 0?sc(d)===sc(f):n,m=()=>u(e,{replace:t,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c});l?Q.startTransition(()=>m()):m()}},[d,u,f,n,r,i,t,e,a,o,s,c,l])}function Uu(e){rc(typeof URLSearchParams<`u`,"You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let t=Q.useRef(ou(e)),n=Q.useRef(!1),r=_l(),i=Q.useMemo(()=>su(r.search,n.current?null:t.current),[r.search]),a=bl();return[i,Q.useCallback((e,t)=>{let r=ou(typeof e==`function`?e(new URLSearchParams(i)):e);n.current=!0,a(`?`+r,t)},[a,i])]}var Wu=0,Gu=()=>`__${String(++Wu)}__`;function Ku(){let{router:e}=Vu(`useSubmit`),{basename:t}=Q.useContext(ol),n=Bl(),r=e.fetch,i=e.navigate;return Q.useCallback(async(e,a={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=fu(e,t);if(a.navigate===!1){let e=a.fetcherKey||Gu();await r(e,n,a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,flushSync:a.flushSync})}else await i(a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,replace:a.replace,state:a.state,fromRouteId:n,flushSync:a.flushSync,viewTransition:a.viewTransition})},[r,i,t,n])}function qu(e,{relative:t}={}){let{basename:n}=Q.useContext(ol),r=Q.useContext(cl);nc(r,`useFormAction must be used inside a RouteContext`);let[i]=r.matches.slice(-1),a={...Tl(e||`.`,{relative:t})},o=_l();if(e==null){a.search=o.search;let e=new URLSearchParams(a.search),t=e.getAll(`index`);if(t.some(e=>e===``)){e.delete(`index`),t.filter(e=>e).forEach(t=>e.append(`index`,t));let n=e.toString();a.search=n?`?${n}`:``}}return(!e||e===`.`)&&i.route.index&&(a.search=a.search?a.search.replace(/^\?/,`?index&`):`?index`),n!==`/`&&(a.pathname=a.pathname===`/`?n:zc([n,a.pathname])),sc(a)}function Ju(e,{relative:t}={}){let n=Q.useContext(rl);nc(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=Vu(`useViewTransitionState`),i=Tl(e,{relative:t});if(!n.isTransitioning)return!1;let a=jc(n.currentLocation.pathname,r)||n.currentLocation.pathname,o=jc(n.nextLocation.pathname,r)||n.nextLocation.pathname;return Dc(i.pathname,o)!=null||Dc(i.pathname,a)!=null}var $=s(),Yu=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(ht,{ref:n,className:J(`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,e),...t}));Yu.displayName=ht.displayName;var Xu=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(`div`,{ref:n,className:J(`rounded-(--card-radius) border bg-card text-card-foreground shadow-elevation-1`,e),...t}));Xu.displayName=`Card`;var Zu=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(`div`,{ref:n,className:J(`flex flex-col space-y-1.5 p-6`,e),...t}));Zu.displayName=`CardHeader`;var Qu=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(`h3`,{ref:n,className:J(`text-2xl font-semibold leading-none tracking-tight`,e),...t}));Qu.displayName=`CardTitle`;var $u=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(`p`,{ref:n,className:J(`text-sm text-muted-foreground`,e),...t}));$u.displayName=`CardDescription`;var ed=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(`div`,{ref:n,className:J(`p-6 pt-0`,e),...t}));ed.displayName=`CardContent`;var td=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(`div`,{ref:n,className:J(`flex items-center p-6 pt-0`,e),...t}));td.displayName=`CardFooter`;var nd=`2.26.5`,rd=e=>{window.particlesJS.load(e,`/js/particles.config.json`,()=>{console.log(`particles.js config loaded for`,e)})};function id(e){(0,Q.useEffect)(()=>{if(window.particlesJS!==void 0)rd(e);else{if(document.getElementById(`particles-js-script`))return;let t=document.createElement(`script`);t.id=`particles-js-script`,t.src=`/js/particles.min.js`,t.onload=()=>{console.log(`particles.js loaded`),rd(e)},document.head.appendChild(t)}return()=>{window.pJS&&window.pJS[e]?.destroy&&window.pJS[e].destroy()}},[e])}var ad=`session.open`,od=`session.set`,sd=`session.ids`,cd=`session.materialize`,ld=`session.close`,ud=`session.delta`;function dd(){let[e,t]=(0,Q.useState)(null),[n,r]=(0,Q.useState)(!0),[i,a]=(0,Q.useState)(null);return(0,Q.useEffect)(()=>{let e=!0;async function n(){try{r(!0),a(null);let n=await X.get(`/ping`,{skipAuth:!0});e&&(n?.version?t(n.version):a(`Invalid server response`))}catch(t){e&&(console.error(`Failed to fetch server version:`,t),a(`Unable to connect to server`))}finally{e&&r(!1)}}n();let i=setInterval(n,3e4);return()=>{e=!1,clearInterval(i)}},[]),{serverVersion:e,isLoading:n,error:i}}var fd=`https://github.com/canvas-ui/canvas-server`,pd=null;function md(){return pd||=X.get(`/ping`,{skipAuth:!0}).then(e=>{let t=e??{};return{sourceUrl:t.sourceUrl||fd,version:t.version??null,commit:t.commit??null,license:t.license??null}}).catch(e=>(console.error(`Failed to fetch server source info:`,e),pd=null,{sourceUrl:fd,version:null,commit:null,license:null})),pd}function hd(){let[e,t]=(0,Q.useState)(null);return(0,Q.useEffect)(()=>{let e=!0;return md().then(n=>{e&&t(n)}),()=>{e=!1}},[]),e}function gd({className:e=``}){let t=hd();if(!t)return null;let n=[t.version?`v${t.version}`:null,t.commit?.slice(0,7)].filter(Boolean).join(` `);return(0,$.jsxs)(`p`,{className:`text-xs text-muted-foreground ${e}`,children:[`Powered by`,` `,(0,$.jsx)(`a`,{href:t.sourceUrl,target:`_blank`,rel:`noreferrer`,className:`underline underline-offset-2 hover:text-foreground`,children:`Canvas`}),n?` ${n}`:``,t.license?`, ${t.license}`:``,`.`,` `,(0,$.jsx)(`a`,{href:t.sourceUrl,target:`_blank`,rel:`noreferrer`,className:`underline underline-offset-2 hover:text-foreground`,children:`Get the source code`}),`.`]})}function _d({children:e}){id(`particle-js`);let{serverVersion:t,isLoading:n,error:r}=dd();return(0,$.jsx)(`div`,{className:`flex min-h-viewport w-full items-center justify-center p-4 flex-col`,children:(0,$.jsxs)(Xu,{className:`flex w-[95vw] h-viewport-modal overflow-hidden`,children:[(0,$.jsxs)(`div`,{className:`hidden md:block w-1/2 relative bg-background`,"data-scheme":`dark`,id:`particle-js`,children:[(0,$.jsxs)(Lu,{className:`absolute top-8 left-8 font-bold text-foreground flex items-center z-raised`,to:`/`,children:[(0,$.jsx)(`img`,{src:`/images/logo-wr_128x128.png`,alt:`Canvas Logo`,className:`mr-2 h-6 w-6 touch-target`}),(0,$.jsx)(`span`,{className:`text-2xl font-bold text-foreground`,children:`Canvas`})]}),(0,$.jsxs)(`div`,{className:`absolute bottom-8 left-8 text-sm text-foreground max-w-[80%] z-raised`,children:[`Web UI: v`,nd,`, Server: `,n?`Loading...`:r?`Unavailable`:t?`v${t}`:`Unknown`]})]}),(0,$.jsx)(`div`,{className:`flex w-full md:w-1/2 flex-col justify-center px-4 py-12 sm:px-6 lg:px-8`,children:(0,$.jsxs)(`div`,{className:`mx-auto w-full max-w-sm`,children:[e,(0,$.jsxs)(`div`,{className:`mt-8 border-t pt-6`,children:[(0,$.jsxs)(`a`,{href:`https://github.com/canvas-ui`,target:`_blank`,className:`text-muted-foreground hover:text-foreground justify-center flex items-center space-x-2`,rel:`noopener noreferrer`,children:[(0,$.jsx)(`svg`,{viewBox:`0 0 24 24`,width:`24`,height:`24`,stroke:`currentColor`,fill:`none`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,className:`w-6 h-6`,children:(0,$.jsx)(`path`,{d:`M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22`})}),(0,$.jsx)(`span`,{children:`View on GitHub`})]}),(0,$.jsx)(gd,{className:`mt-4 text-center`})]})]})})]})})}function vd(){let e=localStorage.getItem(`authToken`);return!e||e===`canvas-server-token`?null:e}var yd=new class{socket=null;connected=!1;authToken=null;handlers=new Map;socketWrappers=new Map;desiredSubscriptions=new Set;baseUrl;connectionId=``;constructor(){this.baseUrl=Rr,this.connectionId=`socket-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}connect(e){let t=e||vd();!t||t===`canvas-server-token`||this.socket&&this.authToken===t||(this.cleanupSocket(),this.authToken=t,this.socket=zr(this.baseUrl,{transports:[`websocket`],autoConnect:!1,reconnection:!0,reconnectionAttempts:1/0,reconnectionDelay:1e3,reconnectionDelayMax:3e4,randomizationFactor:.5,timeout:1e4,forceNew:!0,extraHeaders:{Authorization:`Bearer ${t}`,"X-Connection-ID":this.connectionId},auth:{token:t}}),this.setupDefaultHandlers(),this.registerHandlers(),this.socket.connect())}cleanupSocket(){this.socket?.removeAllListeners(),this.socket?.disconnect(),this.socket=null,this.connected=!1,this.socketWrappers.clear()}setupDefaultHandlers(){this.socket&&(this.socket.on(`connect`,()=>{this.connected=!0;for(let e of this.desiredSubscriptions)this.socket?.emit(`subscribe`,{channel:e})}),this.socket.on(`disconnect`,()=>{this.connected=!1}),this.socket.on(`connect_error`,()=>{this.connected=!1}))}registerHandlers(){this.socket&&this.handlers.forEach((e,t)=>{e.forEach(e=>{this.attach(t,e)})})}attach(e,t){if(!this.socket)return;let n=this.socketWrappers.get(e);if(n||(n=new Map,this.socketWrappers.set(e,n)),n.has(t))return;let r=(...e)=>t(...e);n.set(t,r),this.socket.on(e,r)}detach(e,t){if(!this.socket)return;let n=this.socketWrappers.get(e),r=n?.get(t);r&&(this.socket.off(e,r),n?.delete(t),n&&n.size===0&&this.socketWrappers.delete(e))}on(e,t){this.handlers.has(e)||this.handlers.set(e,new Set);let n=this.handlers.get(e);return n.has(t)?()=>this.off(e,t):(n.add(t),this.socket&&this.attach(e,t),()=>this.off(e,t))}off(e,t){let n=this.handlers.get(e);n&&n.has(t)&&(n.delete(t),n.size===0&&this.handlers.delete(e),this.detach(e,t))}request(e,t,n=1e4){return new Promise((r,i)=>{if(!this.socket||!this.connected){i(Error(`Socket not connected`));return}let a=!1,o=setTimeout(()=>{a||(a=!0,i(Error(`Socket request timed out: ${e}`)))},n);try{this.socket.emit(e,t??{},t=>{a||(a=!0,clearTimeout(o),t?.status===`error`?i(Error(t.message||`${e} failed`)):r(t?.payload??t))})}catch(e){a=!0,clearTimeout(o),i(e instanceof Error?e:Error(String(e)))}})}emit(e,...t){if(e===`subscribe`){let e=t?.[0]?.channel;typeof e==`string`&&e&&this.desiredSubscriptions.add(e)}else if(e===`unsubscribe`){let e=t?.[0]?.channel;typeof e==`string`&&e&&this.desiredSubscriptions.delete(e)}if(this.socket&&this.connected)try{this.socket.emit(e,...t)}catch(t){console.error(`Error emitting event ${e}:`,t),this.reconnect()}else this.connect()}disconnect(){this.cleanupSocket(),this.authToken=null,this.desiredSubscriptions.clear()}isConnected(){return this.connected}retryNow(){this.connected||(this.cleanupSocket(),this.connect())}reconnect(){this.connect()}};async function bd(e,t,n=`auto`){try{let r=await X.post(xr.login,{email:e,password:t,strategy:n},{skipAuth:!0});console.log(`Login response:`,r);let i=r;if(`token`in i)return console.log(`Setting auth token (direct):`,i.token.substring(0,10)+`...`),X.setAuthToken(i.token),yd.connect(i.token),r;if(i&&`payload`in i&&i.payload&&i.payload.token)return console.log(`Setting auth token (nested):`,i.payload.token.substring(0,10)+`...`),X.setAuthToken(i.payload.token),yd.connect(i.payload.token),r;throw console.error(`Invalid login response structure:`,r),Error(`Invalid login response: missing token`)}catch(e){throw console.error(`Login error:`,e),X.clearAuthToken(),e}}async function xd(e,t,n){try{return await X.post(xr.register,{name:e,email:t,password:n},{skipAuth:!0})}catch(e){throw console.error(`Registration failed:`,e),e}}function Sd(e){return e instanceof Error&&/^Network error/i.test(e.message)}function Cd(){let e=localStorage.getItem(`authToken`);if(!e)return!1;if(e.startsWith(`canvas-`))return!0;try{return yr(e).exp*1e3>Date.now()}catch{return!1}}function wd(){let e=localStorage.getItem(`authToken`);if(!e||e.startsWith(`canvas-`))return null;try{let t=yr(e);return t.exp*1e3<Date.now()?(X.clearAuthToken(),null):{id:t.sub,email:t.email,userType:t.userType||`user`}}catch(e){return console.error(`Failed to decode token:`,e),X.clearAuthToken(),null}}async function Td(){try{if(!X.isAuthenticated())return console.log(`Not authenticated, skipping getCurrentUser request`),null;let e=await X.get(xr.me);return console.log(`Current user response:`,e),e&&e?(yd.isConnected()||yd.reconnect(),e):(console.warn(`Invalid user profile response structure:`,e),null)}catch(e){if(console.error(`Failed to get current user:`,e),Sd(e))throw e;return e instanceof Error&&(e.message.includes(`USER_NOT_FOUND_IN_DATABASE`)||e.message.includes(`Your session is invalid`)||e.message.includes(`Authentication required`)||e.message.includes(`user account no longer exists`))?(console.warn(`Authentication error detected, clearing token:`,e.message),X.clearAuthToken(),yd.disconnect(),null):null}}function Ed(){return X.isAuthenticated()}function Dd(){let e=new URL(`${Lr}/oauth/google/login`);e.searchParams.set(`origin`,window.location.origin),window.location.assign(e.toString())}async function Od(e){let t=await X.post(`${Lr}/oauth/google/exchange`,{code:e},{skipAuth:!0});if(!t?.token)throw Error(`Invalid login response: missing token`);X.setAuthToken(t.token),yd.connect(t.token)}async function kd(){try{let e=await X.get(xr.authConfig,{skipAuth:!0});return e||e}catch(e){return console.error(`Failed to get auth config:`,e),{strategies:{local:{enabled:!0},imap:{enabled:!1,domains:[]}}}}}async function Ad(e){try{await X.post(xr.verifyEmailRequest,{email:e},{skipAuth:!0})}catch(e){throw console.error(`Failed to request email verification:`,e),e}}var jd=e=>e?.strategies?.local?.enabled!==!1,Md=e=>e?.allowUserRegistrations!==!1;function Nd(){let e=bl(),[t,n]=Q.useState(!1),[r,i]=Q.useState(``),[a,o]=Q.useState(``),[s,c]=Q.useState(!1),[l,u]=Q.useState({}),[d,p]=Q.useState(null),[m,h]=Q.useState({email:``,password:``,strategy:`auto`});Q.useEffect(()=>{Ed()&&e(`/workspaces`),fetch(`${Lr}/runtime/capabilities`).then(e=>e.ok?e.json():null).then(e=>n(e?.payload?.local===!0)).catch(()=>{}),kd().then(e=>{p(e)}).catch(e=>{console.error(`Failed to load auth config:`,e)})},[e]);let g=()=>{let e={};return m.email?/\S+@\S+\.\S+/.test(m.email)||(e.email=`Email is invalid`):e.email=`Email is required`,m.password||(e.password=`Password is required`),u(e),Object.keys(e).length===0},_=e=>{let{name:t,value:n}=e.target;h(e=>({...e,[t]:n}))};async function v(t){if(t.preventDefault(),g()){c(!0);try{console.log(`Attempting login with:`,m.email,`strategy:`,m.strategy);let t=await bd(m.email,m.password,m.strategy);console.log(`Login successful, received token:`,`token`in t?!!t.token:!!t.payload?.token),u({}),e(`/home`)}catch(e){console.error(`Login error:`,e);let t=`Login failed`;if(e instanceof Error)t=e.message;else if(typeof e==`object`&&e){let n=e;n.message?t=n.message:n.error?t=n.error:n.payload?.message&&(t=n.payload.message)}u({password:t})}finally{c(!1)}}}return t?(0,$.jsx)(_d,{children:(0,$.jsxs)(`form`,{className:`grid gap-4`,onSubmit:async t=>{t.preventDefault(),c(!0),o(``);try{if(X.setAuthToken(r.trim()),!await Td())throw Error(`The local token was not accepted`);e(`/workspaces`)}catch(e){X.clearAuthToken(),o(e instanceof Error?e.message:`Authentication failed`)}finally{c(!1)}},children:[(0,$.jsx)(`h1`,{className:`text-2xl font-semibold`,children:`Connect to your local runtime`}),(0,$.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Enter the token shown by `,(0,$.jsx)(`code`,{children:`canvas runtime token`}),` in the runtime folder.`]}),(0,$.jsx)(Yu,{htmlFor:`local-token`,children:`Local access token`}),(0,$.jsx)(Y,{id:`local-token`,type:`password`,autoComplete:`off`,value:r,onChange:e=>i(e.target.value),required:!0}),a&&(0,$.jsx)(`p`,{role:`alert`,className:`text-sm text-destructive`,children:a}),(0,$.jsx)(Z,{disabled:s,children:s?`Connecting…`:`Connect`})]})}):(0,$.jsx)(_d,{children:(0,$.jsxs)(`div`,{className:`flex flex-col space-y-4`,children:[(0,$.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,$.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Welcome back`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Enter your credentials to access your account`})]}),(0,$.jsx)(`form`,{onSubmit:v,children:(0,$.jsxs)(`div`,{className:`grid gap-4`,children:[d?.strategies?.imap?.enabled&&d.strategies.imap.domains.length>0&&(0,$.jsxs)(`div`,{className:`grid gap-2`,children:[(0,$.jsx)(Yu,{htmlFor:`strategy`,children:`Authentication Method`}),(0,$.jsxs)(`select`,{id:`strategy`,name:`strategy`,value:m.strategy,onChange:_,disabled:s,className:`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50`,children:[(0,$.jsx)(`option`,{value:`auto`,children:`Auto-detect`}),(0,$.jsx)(`option`,{value:`local`,children:`Local Account`}),(0,$.jsx)(`option`,{value:`imap`,children:`Email Server (IMAP)`})]})]}),(0,$.jsxs)(`div`,{className:`grid gap-2`,children:[(0,$.jsx)(Yu,{htmlFor:`email`,children:`Email`}),(0,$.jsx)(Y,{id:`email`,name:`email`,placeholder:`name@example.com`,type:`email`,autoCapitalize:`none`,autoComplete:`email`,autoCorrect:`off`,disabled:s,value:m.email,onChange:_}),l.email&&(0,$.jsx)(`p`,{className:`text-sm text-destructive`,children:l.email})]}),(0,$.jsxs)(`div`,{className:`grid gap-2`,children:[(0,$.jsx)(Yu,{htmlFor:`password`,children:`Password`}),(0,$.jsx)(Y,{id:`password`,name:`password`,type:`password`,disabled:s,value:m.password,onChange:_}),l.password&&(0,$.jsx)(`p`,{className:`text-sm text-destructive`,children:l.password})]}),(0,$.jsxs)(`div`,{className:`flex flex-col space-y-4`,children:[(0,$.jsx)(Z,{type:`submit`,disabled:s,children:s?`Signing in...`:`Sign In`}),d?.strategies?.google?.enabled&&(0,$.jsxs)(Z,{type:`button`,variant:`outline`,disabled:s,onClick:()=>Dd(),children:[(0,$.jsx)(f,{icon:`logos:google-icon`,width:16,height:16,className:`mr-2`}),`Sign in with Google`]}),jd(d)&&Md(d)&&(0,$.jsx)(Z,{variant:`outline`,type:`button`,disabled:s,onClick:()=>e(`/register`),children:`Don't have an account? Sign up`})]})]})})]})})}function Pd(){let e=bl(),{showToast:t}=Hr(),[n,r]=Q.useState(!1),[i,a]=Q.useState({}),[o,s]=Q.useState({name:``,email:``,password:``}),[c,l]=Q.useState(!1),[u,d]=Q.useState(!1),[f,p]=Q.useState(null);Q.useEffect(()=>{(async()=>{let t=await kd(),n=t?.strategies?.local;if(t?.allowUserRegistrations===!1||n?.enabled===!1){e(`/login`,{replace:!0});return}n?.passwordPolicy&&p(n.passwordPolicy),d(!!n?.requireEmailVerification)})()},[e]);let m=Q.useMemo(()=>{if(!f)return null;let e=o.password||``;return{minLength:!f.minLength||e.length>=f.minLength,maxLength:!f.maxLength||e.length<=f.maxLength,uppercase:!f.requireUppercase||/[A-Z]/.test(e),lowercase:!f.requireLowercase||/[a-z]/.test(e),number:!f.requireNumbers||/[0-9]/.test(e),special:!f.requireSpecialChars||/[^A-Za-z0-9]/.test(e)}},[f,o.password]),h=()=>{let e={};if(!o.name)e.name=`Username is required`;else if(o.name.trim().length===0)e.name=`Username cannot be empty`;else{let t=o.name.toLowerCase().trim();t.length<3?e.name=`Username must be at least 3 characters long`:t.length>39?e.name=`Username cannot be longer than 39 characters`:/^[a-z0-9_-]+$/.test(t)?[`admin`,`administrator`,`root`,`system`,`support`,`help`,`api`,`www`,`mail`,`ftp`,`localhost`,`test`,`demo`,`canvas`,`universe`,`workspace`,`context`,`user`,`users`].includes(t)&&(e.name=`Username '${t}' is reserved and cannot be used`):e.name=`Username can only contain lowercase letters, numbers, underscores, and hyphens`}if(o.email?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o.email)||(e.email=`Please enter a valid email address`):e.email=`Email is required`,!o.password)e.password=`Password is required`;else if(f){let t=o.password,n=[];f.minLength&&t.length<f.minLength&&n.push(`at least ${f.minLength} characters`),f.maxLength&&t.length>f.maxLength&&n.push(`no more than ${f.maxLength} characters`),f.requireUppercase&&!/[A-Z]/.test(t)&&n.push(`an uppercase letter`),f.requireLowercase&&!/[a-z]/.test(t)&&n.push(`a lowercase letter`),f.requireNumbers&&!/[0-9]/.test(t)&&n.push(`a number`),f.requireSpecialChars&&!/[^A-Za-z0-9]/.test(t)&&n.push(`a special character`),n.length&&(e.password=`Password must contain ${n.join(`, `).replace(/, ([^,]*)$/,` and $1`)}.`)}else o.password.length<8&&(e.password=`Password must be at least 8 characters long`);return a(e),Object.keys(e).length===0},g=e=>{let t={...o,[e.target.id]:e.target.value};s(t),(e.target.id===`name`||e.target.id===`email`||e.target.id===`password`)&&h()};return c?(0,$.jsxs)(_d,{children:[(0,$.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,$.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Registration Successful!`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:u?`Check your email for a verification link to activate your account.`:`Your account has been created.`})]}),(0,$.jsx)(`div`,{className:`space-y-6 text-center pt-6`,children:!u&&(0,$.jsx)(Z,{asChild:!0,className:`w-full`,children:(0,$.jsx)(Lu,{to:`/login`,children:`Go to Login`})})})]}):(0,$.jsxs)(_d,{children:[(0,$.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,$.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Create an account`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Enter your email below to create your account`})]}),(0,$.jsxs)(`form`,{onSubmit:async e=>{if(e.preventDefault(),h()){r(!0);try{let e=await xd(o.name,o.email,o.password);console.log(`Registration successful:`,e),t({title:`Registration Successful`,description:u?`Check your email for a verification link before logging in.`:`You can now log in with your credentials.`,variant:`default`}),l(!0),s({name:``,email:``,password:``}),a({})}catch(e){console.error(`Registration failed:`,e);let n=e?.message||`Registration failed`;n.toLowerCase().includes(`password`)?a({...i,password:n}):a({...i,email:n}),t({title:`Registration Failed`,description:n,variant:`destructive`})}finally{r(!1)}}},className:`space-y-4 pt-6`,children:[(0,$.jsxs)(`div`,{className:`space-y-2`,children:[(0,$.jsx)(Yu,{htmlFor:`name`,children:`Username`}),(0,$.jsx)(Y,{id:`name`,type:`text`,placeholder:`Enter your username (e.g., john_doe)`,value:o.name,onChange:g,disabled:n,className:i.name?`border-destructive`:``}),i.name&&(0,$.jsx)(`p`,{className:`text-sm text-destructive`,children:i.name}),(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`3-39 characters, lowercase letters, numbers, underscores, and hyphens only`})]}),(0,$.jsxs)(`div`,{className:`space-y-2`,children:[(0,$.jsx)(Yu,{htmlFor:`email`,children:`Email`}),(0,$.jsx)(Y,{id:`email`,type:`email`,placeholder:`name@example.com`,value:o.email,onChange:g,disabled:n,className:i.email?`border-destructive`:``}),i.email&&(0,$.jsx)(`p`,{className:`text-sm text-destructive`,children:i.email})]}),(0,$.jsxs)(`div`,{className:`space-y-2`,children:[(0,$.jsx)(Yu,{htmlFor:`password`,children:`Password`}),(0,$.jsx)(Y,{id:`password`,type:`password`,placeholder:`Enter your password`,value:o.password,onChange:g,disabled:n,className:i.password?`border-destructive`:``}),i.password&&(0,$.jsx)(`p`,{className:`text-sm text-destructive`,children:i.password}),f&&m&&(0,$.jsxs)(`ul`,{className:`text-xs list-disc pl-4 space-y-1`,children:[(0,$.jsxs)(`li`,{className:m.minLength?`text-success`:`text-muted-foreground`,children:[`At least `,f.minLength,` characters`]}),f.requireUppercase&&(0,$.jsx)(`li`,{className:m.uppercase?`text-success`:`text-muted-foreground`,children:`At least one uppercase letter`}),f.requireLowercase&&(0,$.jsx)(`li`,{className:m.lowercase?`text-success`:`text-muted-foreground`,children:`At least one lowercase letter`}),f.requireNumbers&&(0,$.jsx)(`li`,{className:m.number?`text-success`:`text-muted-foreground`,children:`At least one number`}),f.requireSpecialChars&&(0,$.jsx)(`li`,{className:m.special?`text-success`:`text-muted-foreground`,children:`At least one special character`}),f.maxLength&&(0,$.jsxs)(`li`,{className:m.maxLength?`text-success`:`text-muted-foreground`,children:[`No more than `,f.maxLength,` characters`]})]})]}),(0,$.jsx)(Z,{type:`submit`,className:`w-full`,disabled:n,children:n?`Creating Account...`:`Create Account`})]}),(0,$.jsxs)(`div`,{className:`mt-4 text-center text-sm`,children:[`Already have an account?`,` `,(0,$.jsx)(Lu,{to:`/login`,className:`underline`,children:`Sign in`})]}),(0,$.jsxs)(`div`,{className:`px-8 py-4 text-center text-sm text-muted-foreground border-t mt-6`,children:[`By clicking continue, you agree to our`,` `,(0,$.jsx)(Lu,{to:`/terms`,className:`underline underline-offset-4 hover:text-primary`,children:`Terms of Service`}),` `,`and`,` `,(0,$.jsx)(Lu,{to:`/privacy`,className:`underline underline-offset-4 hover:text-primary`,children:`Privacy Policy`}),`.`]})]})}function Fd(){let e=bl(),[t]=Uu(),[n,r]=Q.useState(t.get(`error`)),i=Q.useRef(!1);return Q.useEffect(()=>{let n=t.get(`code`);!n||i.current||(i.current=!0,Od(n).then(()=>e(`/home`,{replace:!0})).catch(e=>r(e instanceof Error?e.message:`Google sign-in failed`)))},[t,e]),(0,$.jsx)(_d,{children:(0,$.jsx)(`div`,{className:`flex flex-col space-y-4 text-center`,children:n?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Google sign-in failed`}),(0,$.jsx)(`p`,{className:`text-sm text-destructive`,children:n}),(0,$.jsx)(Z,{type:`button`,variant:`outline`,onClick:()=>e(`/login`,{replace:!0}),children:`Back to sign in`})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Signing you in…`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Completing Google sign-in.`})]})})})}function Id({className:e=`h-5 w-5`,...t}){return(0,$.jsxs)(`svg`,{className:`animate-spin ${e}`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,...t,children:[(0,$.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,$.jsx)(`path`,{className:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z`})]})}function Ld({children:e}){let[t,n]=(0,Q.useState)(`loading`);return(0,Q.useEffect)(()=>{(async()=>{try{if(!Ed()){console.log(`No authentication token found, redirecting to login`),n(`unauthenticated`);return}let e=await Td();e?(console.log(`User authenticated:`,e.email),n(`authenticated`)):(console.log(`User not authenticated or token expired`),n(`unauthenticated`))}catch(e){if(console.error(`Authentication check failed:`,e),Sd(e)){n(Cd()?`authenticated`:`unauthenticated`);return}e instanceof Error&&e.message.includes(`Authentication required`)&&(console.log(`Clearing invalid token from ProtectedRoute`),X.clearAuthToken()),n(`unauthenticated`)}})()},[]),t===`loading`?(0,$.jsx)(`div`,{className:`flex h-screen items-center justify-center`,children:(0,$.jsx)(Id,{className:`h-8 w-8`})}):t===`unauthenticated`?(0,$.jsx)(Kl,{to:`/login`,replace:!0}):(0,$.jsx)($.Fragment,{children:e})}function Rd({children:e}){let[t,n]=(0,Q.useState)(null);return(0,Q.useEffect)(()=>{(async()=>{try{await X.get(`/auth/me`),n(!0)}catch(e){e instanceof Error&&e.message.includes(`Authentication required`)&&(console.log(`Clearing invalid token from PublicRoute`),X.clearAuthToken()),n(!1)}})()},[]),t===null?null:t?(0,$.jsx)(Kl,{to:`/workspaces`,replace:!0}):(0,$.jsx)($.Fragment,{children:e})}var zd=i(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?r(e):typeof define==`function`&&define.amd?define([`exports`],r):(n=typeof globalThis<`u`?globalThis:n||self,r(n[`fast-equals`]={}))})(e,(function(e){function t(e){return function(t,n,r,i,a,o,s){return e(t,n,s)}}function n(e){return function(t,n,r,i){if(!t||!n||typeof t!=`object`||typeof n!=`object`)return e(t,n,r,i);var a=i.get(t),o=i.get(n);if(a&&o)return a===n&&o===t;i.set(t,n),i.set(n,t);var s=e(t,n,r,i);return i.delete(t),i.delete(n),s}}function r(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n}function i(e){return e.constructor===Object||e.constructor==null}function a(e){return typeof e.then==`function`}function o(e,t){return e===t||e!==e&&t!==t}var s=Object.prototype.toString;function c(e){var t=e.areArraysEqual,n=e.areDatesEqual,r=e.areMapsEqual,c=e.areObjectsEqual,l=e.areRegExpsEqual,u=e.areSetsEqual,d=e.createIsNestedEqual,f=d(p);function p(e,d,p){if(e===d)return!0;if(!e||!d||typeof e!=`object`||typeof d!=`object`)return e!==e&&d!==d;if(i(e)&&i(d))return c(e,d,f,p);var m=Array.isArray(e),h=Array.isArray(d);if(m||h)return m===h&&t(e,d,f,p);var g=s.call(e);return g===s.call(d)?g===`[object Date]`?n(e,d,f,p):g===`[object RegExp]`?l(e,d,f,p):g===`[object Map]`?r(e,d,f,p):g===`[object Set]`?u(e,d,f,p):g===`[object Object]`||g===`[object Arguments]`?a(e)||a(d)?!1:c(e,d,f,p):g===`[object Boolean]`||g===`[object Number]`||g===`[object String]`?o(e.valueOf(),d.valueOf()):!1:!1}return p}function l(e,t,n,r){var i=e.length;if(t.length!==i)return!1;for(;i-->0;)if(!n(e[i],t[i],i,i,e,t,r))return!1;return!0}var u=n(l);function d(e,t){return o(e.valueOf(),t.valueOf())}function f(e,t,n,r){var i=e.size===t.size;if(!i)return!1;if(!e.size)return!0;var a={},o=0;return e.forEach(function(s,c){if(i){var l=!1,u=0;t.forEach(function(i,d){!l&&!a[u]&&(l=n(c,d,o,u,e,t,r)&&n(s,i,c,d,e,t,r))&&(a[u]=!0),u++}),o++,i=l}}),i}var p=n(f),m=`_owner`,h=Object.prototype.hasOwnProperty;function g(e,t,n,r){var i=Object.keys(e),a=i.length;if(Object.keys(t).length!==a)return!1;for(var o;a-->0;){if(o=i[a],o===m){var s=!!e.$$typeof,c=!!t.$$typeof;if((s||c)&&s!==c)return!1}if(!h.call(t,o)||!n(e[o],t[o],o,o,e,t,r))return!1}return!0}var _=n(g);function v(e,t){return e.source===t.source&&e.flags===t.flags}function y(e,t,n,r){var i=e.size===t.size;if(!i)return!1;if(!e.size)return!0;var a={};return e.forEach(function(o,s){if(i){var c=!1,l=0;t.forEach(function(i,u){!c&&!a[l]&&(c=n(o,i,s,u,e,t,r))&&(a[l]=!0),l++}),i=c}}),i}var b=n(y),x=Object.freeze({areArraysEqual:l,areDatesEqual:d,areMapsEqual:f,areObjectsEqual:g,areRegExpsEqual:v,areSetsEqual:y,createIsNestedEqual:t}),S=Object.freeze({areArraysEqual:u,areDatesEqual:d,areMapsEqual:p,areObjectsEqual:_,areRegExpsEqual:v,areSetsEqual:b,createIsNestedEqual:t}),C=c(x);function w(e,t){return C(e,t,void 0)}var T=c(r(x,{createIsNestedEqual:function(){return o}}));function E(e,t){return T(e,t,void 0)}var D=c(S);function O(e,t){return D(e,t,new WeakMap)}var k=c(r(S,{createIsNestedEqual:function(){return o}}));function A(e,t){return k(e,t,new WeakMap)}function j(e){return c(r(x,e(x)))}function M(e){var t=c(r(S,e(S)));return(function(e,n,r){return r===void 0&&(r=new WeakMap),t(e,n,r)})}e.circularDeepEqual=O,e.circularShallowEqual=A,e.createCustomCircularEqual=M,e.createCustomEqual=j,e.deepEqual=w,e.sameValueZeroEqual=o,e.shallowEqual=E,Object.defineProperty(e,"__esModule",{value:!0})}))})),Bd=i(((e,t)=>{t.exports=function(e,t,n){return e===t||e.className===t.className&&n(e.style,t.style)&&e.width===t.width&&e.autoSize===t.autoSize&&e.cols===t.cols&&e.draggableCancel===t.draggableCancel&&e.draggableHandle===t.draggableHandle&&n(e.verticalCompact,t.verticalCompact)&&n(e.compactType,t.compactType)&&n(e.layout,t.layout)&&n(e.margin,t.margin)&&n(e.containerPadding,t.containerPadding)&&e.rowHeight===t.rowHeight&&e.maxRows===t.maxRows&&e.isBounded===t.isBounded&&e.isDraggable===t.isDraggable&&e.isResizable===t.isResizable&&e.allowOverlap===t.allowOverlap&&e.preventCollision===t.preventCollision&&e.useCSSTransforms===t.useCSSTransforms&&e.transformScale===t.transformScale&&e.isDroppable===t.isDroppable&&n(e.resizeHandles,t.resizeHandles)&&n(e.resizeHandle,t.resizeHandle)&&e.onLayoutChange===t.onLayoutChange&&e.onDragStart===t.onDragStart&&e.onDrag===t.onDrag&&e.onDragStop===t.onDragStop&&e.onResizeStart===t.onResizeStart&&e.onResize===t.onResize&&e.onResizeStop===t.onResizeStop&&e.onDrop===t.onDrop&&n(e.droppingItem,t.droppingItem)&&n(e.innerRef,t.innerRef)}})),Vd=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.bottom=l,e.childrenEqual=h,e.cloneLayout=u,e.cloneLayoutItem=m,e.collides=_,e.compact=v,e.compactItem=x,e.compactType=oe,e.correctBounds=S,e.fastPositionEqual=g,e.fastRGLPropsEqual=void 0,e.getAllCollisions=T,e.getFirstCollision=w,e.getLayoutItem=C,e.getStatics=E,e.modifyLayout=f,e.moveElement=D,e.moveElementAwayFromCollision=O,e.noop=void 0,e.perc=k,e.resizeItemInDirection=z,e.setTopLeft=te,e.setTransform=ee,e.sortLayoutItems=ne,e.sortLayoutItemsByColRow=re,e.sortLayoutItemsByRowCol=B,e.synchronizeLayoutWithChildren=ie,e.validateLayout=ae,e.withLayoutItem=p;var t=zd(),n=r(d());function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?i(Object(n),!0).forEach(function(t){o(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function o(e,t,n){return(t=s(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e){var t=c(e,`string`);return typeof t==`symbol`?t:t+``}function c(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function l(e){let t=0,n;for(let r=0,i=e.length;r<i;r++)n=e[r].y+e[r].h,n>t&&(t=n);return t}function u(e){let t=Array(e.length);for(let n=0,r=e.length;n<r;n++)t[n]=m(e[n]);return t}function f(e,t){let n=Array(e.length);for(let r=0,i=e.length;r<i;r++)t.i===e[r].i?n[r]=t:n[r]=e[r];return n}function p(e,t,n){let r=C(e,t);return r?(r=n(m(r)),e=f(e,r),[e,r]):[e,null]}function m(e){return{w:e.w,h:e.h,x:e.x,y:e.y,i:e.i,minW:e.minW,maxW:e.maxW,minH:e.minH,maxH:e.maxH,moved:!!e.moved,static:!!e.static,isDraggable:e.isDraggable,isResizable:e.isResizable,resizeHandles:e.resizeHandles,isBounded:e.isBounded}}function h(e,r){return(0,t.deepEqual)(n.default.Children.map(e,e=>e?.key),n.default.Children.map(r,e=>e?.key))&&(0,t.deepEqual)(n.default.Children.map(e,e=>e?.props[`data-grid`]),n.default.Children.map(r,e=>e?.props[`data-grid`]))}e.fastRGLPropsEqual=Bd();function g(e,t){return e.left===t.left&&e.top===t.top&&e.width===t.width&&e.height===t.height}function _(e,t){return!(e.i===t.i||e.x+e.w<=t.x||e.x>=t.x+t.w||e.y+e.h<=t.y||e.y>=t.y+t.h)}function v(e,t,n,r){let i=E(e),a=l(i),o=ne(e,t),s=Array(e.length);for(let c=0,l=o.length;c<l;c++){let l=m(o[c]);l.static||(l=x(i,l,t,n,o,r,a),a=Math.max(a,l.y+l.h),i.push(l)),s[e.indexOf(o[c])]=l,l.moved=!1}return s}var y={x:`w`,y:`h`};function b(e,t,n,r){let i=y[r];t[r]+=1;let a=e.map(e=>e.i).indexOf(t.i);for(let o=a+1;o<e.length;o++){let a=e[o];if(!a.static){if(a.y>t.y+t.h)break;_(t,a)&&b(e,a,n+t[i],r)}}t[r]=n}function x(e,t,n,r,i,a,o){let s=n===`vertical`,c=n===`horizontal`;if(s)for(t.y=Math.min(typeof o==`number`?o:l(e),t.y);t.y>0&&!w(e,t);)t.y--;else if(c)for(;t.x>0&&!w(e,t);)t.x--;let u;for(;(u=w(e,t))&&!(n===null&&a);)if(c?b(i,t,u.x+u.w,`x`):b(i,t,u.y+u.h,`y`),c&&t.x+t.w>r)for(t.x=r-t.w,t.y++;t.x>0&&!w(e,t);)t.x--;return t.y=Math.max(t.y,0),t.x=Math.max(t.x,0),t}function S(e,t){let n=E(e);for(let r=0,i=e.length;r<i;r++){let i=e[r];if(i.x+i.w>t.cols&&(i.x=t.cols-i.w),i.x<0&&(i.x=0,i.w=t.cols),!i.static)n.push(i);else for(;w(n,i);)i.y++}return e}function C(e,t){for(let n=0,r=e.length;n<r;n++)if(e[n].i===t)return e[n]}function w(e,t){for(let n=0,r=e.length;n<r;n++)if(_(e[n],t))return e[n]}function T(e,t){return e.filter(e=>_(e,t))}function E(e){return e.filter(e=>e.static)}function D(e,t,n,r,i,a,o,s,c){if(t.static&&t.isDraggable!==!0||t.y===r&&t.x===n)return e;`${t.i}${String(n)}${String(r)}${t.x}${t.y}`;let l=t.x,d=t.y;typeof n==`number`&&(t.x=n),typeof r==`number`&&(t.y=r),t.moved=!0;let f=ne(e,o);(o===`vertical`&&typeof r==`number`?d>=r:o===`horizontal`&&typeof n==`number`&&l>=n)&&(f=f.reverse());let p=T(f,t),m=p.length>0;if(m&&c)return u(e);if(m&&a)return`${t.i}`,t.x=l,t.y=d,t.moved=!1,e;for(let n=0,r=p.length;n<r;n++){let r=p[n];`${t.i}${t.x}${t.y}${r.i}${r.x}${r.y}`,!r.moved&&(e=r.static?O(e,r,t,i,o,s):O(e,t,r,i,o,s))}return e}function O(e,t,n,r,i,a){let o=i===`horizontal`,s=i===`vertical`,c=t.static;if(r){r=!1;let l={x:o?Math.max(t.x-n.w,0):n.x,y:s?Math.max(t.y-n.h,0):n.y,w:n.w,h:n.h,i:`-1`},u=w(e,l),d=u&&u.y+u.h>t.y,f=u&&t.x+t.w>u.x;if(!u)return`${n.i}${l.x}${l.y}`,D(e,n,o?l.x:void 0,s?l.y:void 0,r,c,i,a);if(d&&s)return D(e,n,void 0,n.y+1,r,c,i,a);if(d&&i==null)return t.y=n.y,n.y+=n.h,e;if(f&&o)return D(e,t,n.x,void 0,r,c,i,a)}let l=o?n.x+1:void 0,u=s?n.y+1:void 0;return l==null&&u==null?e:D(e,n,o?n.x+1:void 0,s?n.y+1:void 0,r,c,i,a)}function k(e){return e*100+`%`}var A=(e,t,n,r)=>e+n>r?t:n,j=(e,t,n)=>e<0?t:n,M=e=>Math.max(0,e),N=e=>Math.max(0,e),P=(e,t,n)=>{let{left:r,height:i,width:a}=t,o=e.top-(i-e.height);return{left:r,width:a,height:j(o,e.height,i),top:N(o)}},F=(e,t,n)=>{let{top:r,left:i,height:a,width:o}=t;return{top:r,height:a,width:A(e.left,e.width,o,n),left:M(i)}},I=(e,t,n)=>{let{top:r,height:i,width:a}=t,o=e.left-(a-e.width);return{height:i,width:o<0?e.width:A(e.left,e.width,a,n),top:N(r),left:M(o)}},L=(e,t,n)=>{let{top:r,left:i,height:a,width:o}=t;return{width:o,left:i,height:j(r,e.height,a),top:N(r)}},R={n:P,ne:function(){return P(arguments.length<=0?void 0:arguments[0],F(...arguments),arguments.length<=2?void 0:arguments[2])},e:F,se:function(){return L(arguments.length<=0?void 0:arguments[0],F(...arguments),arguments.length<=2?void 0:arguments[2])},s:L,sw:function(){return L(arguments.length<=0?void 0:arguments[0],I(...arguments),arguments.length<=2?void 0:arguments[2])},w:I,nw:function(){return P(arguments.length<=0?void 0:arguments[0],I(...arguments),arguments.length<=2?void 0:arguments[2])}};function z(e,t,n,r){let i=R[e];return i?i(t,a(a({},t),n),r):n}function ee(e){let{top:t,left:n,width:r,height:i}=e,a=`translate(${n}px,${t}px)`;return{transform:a,WebkitTransform:a,MozTransform:a,msTransform:a,OTransform:a,width:`${r}px`,height:`${i}px`,position:`absolute`}}function te(e){let{top:t,left:n,width:r,height:i}=e;return{top:`${t}px`,left:`${n}px`,width:`${r}px`,height:`${i}px`,position:`absolute`}}function ne(e,t){return t===`horizontal`?re(e):t===`vertical`?B(e):e}function B(e){return e.slice(0).sort(function(e,t){return e.y>t.y||e.y===t.y&&e.x>t.x?1:e.y===t.y&&e.x===t.x?0:-1})}function re(e){return e.slice(0).sort(function(e,t){return e.x>t.x||e.x===t.x&&e.y>t.y?1:-1})}function ie(e,t,r,i,o){e||=[];let s=[];n.default.Children.forEach(t,t=>{if(t?.key==null)return;let n=C(e,String(t.key)),r=t.props[`data-grid`];n&&r==null?s.push(m(n)):r?s.push(m(a(a({},r),{},{i:t.key}))):s.push(m({w:1,h:1,x:0,y:l(s),i:String(t.key)}))});let c=S(s,{cols:r});return o?c:v(c,i,r)}function ae(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:`Layout`,n=[`x`,`y`,`w`,`h`];if(!Array.isArray(e))throw Error(t+` must be an array!`);for(let r=0,i=e.length;r<i;r++){let i=e[r];for(let e=0;e<n.length;e++){let a=n[e],o=i[a];if(typeof o!=`number`||Number.isNaN(o))throw Error(`ReactGridLayout: ${t}[${r}].${a} must be a number! Received: ${o} (${typeof o})`)}if(i.i!==void 0&&typeof i.i!=`string`)throw Error(`ReactGridLayout: ${t}[${r}].i must be a string! Received: ${i.i} (${typeof i.i})`)}}function oe(e){let{verticalCompact:t,compactType:n}=e||{};return t===!1?null:n}e.noop=()=>{}})),Hd=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.calcGridColWidth=t,e.calcGridItemPosition=r,e.calcGridItemWHPx=n,e.calcWH=a,e.calcXY=i,e.clamp=o;function t(e){let{margin:t,containerPadding:n,containerWidth:r,cols:i}=e;return(r-t[0]*(i-1)-n[0]*2)/i}function n(e,t,n){return Number.isFinite(e)?Math.round(t*e+Math.max(0,e-1)*n):e}function r(e,r,i,a,o,s){let{margin:c,containerPadding:l,rowHeight:u}=e,d=t(e),f={};return s&&s.resizing?(f.width=Math.round(s.resizing.width),f.height=Math.round(s.resizing.height)):(f.width=n(a,d,c[0]),f.height=n(o,u,c[1])),s&&s.dragging?(f.top=Math.round(s.dragging.top),f.left=Math.round(s.dragging.left)):s&&s.resizing&&typeof s.resizing.top==`number`&&typeof s.resizing.left==`number`?(f.top=Math.round(s.resizing.top),f.left=Math.round(s.resizing.left)):(f.top=Math.round((u+c[1])*i+l[1]),f.left=Math.round((d+c[0])*r+l[0])),f}function i(e,n,r,i,a){let{margin:s,containerPadding:c,cols:l,rowHeight:u,maxRows:d}=e,f=t(e),p=Math.round((r-c[0])/(f+s[0])),m=Math.round((n-c[1])/(u+s[1]));return p=o(p,0,l-i),m=o(m,0,d-a),{x:p,y:m}}function a(e,n,r,i,a,s){let{margin:c,maxRows:l,cols:u,rowHeight:d}=e,f=t(e),p=Math.round((n+c[0])/(f+c[0])),m=Math.round((r+c[1])/(d+c[1])),h=o(p,0,u-i),g=o(m,0,l-a);return[`sw`,`w`,`nw`].indexOf(s)!==-1&&(h=o(p,0,u)),[`nw`,`n`,`ne`].indexOf(s)!==-1&&(g=o(m,0,l)),{w:h,h:g}}function o(e,t,n){return Math.max(Math.min(e,n),t)}})),Ud=i(((e,t)=>{t.exports=`SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED`})),Wd=i(((e,t)=>{var n=Ud();function r(){}function i(){}i.resetWarningCache=r,t.exports=function(){function e(e,t,r,i,a,o){if(o!==n){var s=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name=`Invariant Violation`,s}}e.isRequired=e;function t(){return e}var a={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:r};return a.PropTypes=a,a}})),Gd=i(((e,t)=>{t.exports=Wd()()})),Kd=i(((e,t)=>{var n=Object.create,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t)=>{for(var n in t)r(e,n,{get:t[n],enumerable:!0})},l=(e,t,n,o)=>{if(t&&typeof t==`object`||typeof t==`function`)for(let c of a(t))!s.call(e,c)&&c!==n&&r(e,c,{get:()=>t[c],enumerable:!(o=i(t,c))||o.enumerable});return e},u=(e,t,i)=>(i=e==null?{}:n(o(e)),l(t||!e||!e.__esModule?r(i,`default`,{value:e,enumerable:!0}):i,e)),f=e=>l(r({},`__esModule`,{value:!0}),e),p={};c(p,{DraggableCore:()=>K,default:()=>q}),t.exports=f(p);var m=u(d()),g=u(Gd()),_=u(h()),v=vr();function y(e,t){for(let n=0,r=e.length;n<r;n++)if(t.apply(t,[e[n],n,e]))return e[n]}function b(e){return typeof e==`function`||Object.prototype.toString.call(e)===`[object Function]`}function x(e){return typeof e==`number`&&!isNaN(e)}function S(e){return parseInt(e,10)}function C(e,t,n){if(e[t])return Error(`Invalid prop ${t} passed to ${n} - do not set this, set it on the child.`)}var w=[`Moz`,`Webkit`,`O`,`ms`];function T(e=`transform`){if(typeof window>`u`)return``;let t=window.document?.documentElement?.style;if(!t||e in t)return``;for(let n=0;n<w.length;n++)if(E(e,w[n])in t)return w[n];return``}function E(e,t){return t?`${t}${D(e)}`:e}function D(e){let t=``,n=!0;for(let r=0;r<e.length;r++)n?(t+=e[r].toUpperCase(),n=!1):e[r]===`-`?n=!0:t+=e[r];return t}var O=T(),k=``;function A(e,t){k||=y([`matches`,`webkitMatchesSelector`,`mozMatchesSelector`,`msMatchesSelector`,`oMatchesSelector`],function(t){return b(e[t])})??``;let n=e[k];return b(n)?!!n.call(e,t):!1}function j(e,t,n){let r=e;do{if(A(r,t))return!0;if(r===n)return!1;r=r.parentNode}while(r);return!1}function M(e,t,n,r){if(!e)return;let i={capture:!0,...r},a=n;e.addEventListener?e.addEventListener(t,a,i):e.attachEvent?e.attachEvent(`on`+t,a):e[`on`+t]=a}function N(e,t,n,r){if(!e)return;let i={capture:!0,...r},a=n;e.removeEventListener?e.removeEventListener(t,a,i):e.detachEvent?e.detachEvent(`on`+t,a):e[`on`+t]=null}function P(e){let t=e.clientHeight,n=e.ownerDocument.defaultView.getComputedStyle(e);return t+=S(n.borderTopWidth),t+=S(n.borderBottomWidth),t}function F(e){let t=e.clientWidth,n=e.ownerDocument.defaultView.getComputedStyle(e);return t+=S(n.borderLeftWidth),t+=S(n.borderRightWidth),t}function I(e){let t=e.clientHeight,n=e.ownerDocument.defaultView.getComputedStyle(e);return t-=S(n.paddingTop),t-=S(n.paddingBottom),t}function L(e){let t=e.clientWidth,n=e.ownerDocument.defaultView.getComputedStyle(e);return t-=S(n.paddingLeft),t-=S(n.paddingRight),t}function R(e,t,n){let r=t===t.ownerDocument.body?{left:0,top:0}:t.getBoundingClientRect();return{x:(e.clientX+t.scrollLeft-r.left)/n,y:(e.clientY+t.scrollTop-r.top)/n}}function z(e,t){let n=te(e,t,`px`);return{[E(`transform`,O)]:n}}function ee(e,t){return te(e,t,``)}function te({x:e,y:t},n,r){let i=`translate(${e}${r},${t}${r})`;return n&&(i=`translate(${`${typeof n.x==`string`?n.x:n.x+r}`}, ${`${typeof n.y==`string`?n.y:n.y+r}`})`+i),i}function ne(e,t){return e.targetTouches&&y(e.targetTouches,e=>t===e.identifier)||e.changedTouches&&y(e.changedTouches,e=>t===e.identifier)}function B(e){if(e.targetTouches&&e.targetTouches[0])return e.targetTouches[0].identifier;if(e.changedTouches&&e.changedTouches[0])return e.changedTouches[0].identifier}function re(){return typeof __webpack_nonce__<`u`?__webpack_nonce__:void 0}function ie(e,t){if(!e)return;let n=e.getElementById(`react-draggable-style-el`);if(!n){n=e.createElement(`style`),n.type=`text/css`,n.id=`react-draggable-style-el`;let r=t??re();r&&n.setAttribute(`nonce`,r),n.innerHTML=`.react-draggable-transparent-selection *::-moz-selection {all: inherit;}
4
+ Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}/*`}">.`)}let u=_l(),d;if(t){let e=typeof t==`string`?cc(t):t;nc(c===`/`||e.pathname?.startsWith(c),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${c}" but pathname "${e.pathname}" was given in the \`location\` prop.`),d=e}else d=u;let f=d.pathname||`/`,p=f;if(c!==`/`){let e=c.replace(/^\//,``).split(`/`);p=`/`+f.replace(/^\//,``).split(`/`).slice(e.length).join(`/`)}let m=n&&n.state.matches.length?n.state.matches.map(e=>Object.assign(e,{route:n.manifest[e.route.id]||e.route})):dc(e,{pathname:p});rc(l||m!=null,`No routes matched location "${d.pathname}${d.search}${d.hash}" `),rc(m==null||m[m.length-1].route.element!==void 0||m[m.length-1].route.Component!==void 0||m[m.length-1].route.lazy!==void 0,`Matched leaf route at location "${d.pathname}${d.search}${d.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let h=Pl(m&&m.map(e=>Object.assign({},e,{params:Object.assign({},o,e.params),pathname:zc([c,r.encodeLocation?r.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?c:zc([c,r.encodeLocation?r.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),i,n);return t&&h?Q.createElement(sl.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...d},navigationType:`POP`}},h):h}function Ol(){let e=Vl(),t=Gc(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r=`rgba(200,200,200, 0.5)`,i={padding:`0.5rem`,backgroundColor:r},a={padding:`2px 4px`,backgroundColor:r},o=null;return console.error(`Error handled by React Router default ErrorBoundary:`,e),o=Q.createElement(Q.Fragment,null,Q.createElement(`p`,null,`💿 Hey developer 👋`),Q.createElement(`p`,null,`You can provide a way better UX than this when your app throws errors by providing your own `,Q.createElement(`code`,{style:a},`ErrorBoundary`),` or`,` `,Q.createElement(`code`,{style:a},`errorElement`),` prop on your route.`)),Q.createElement(Q.Fragment,null,Q.createElement(`h2`,null,`Unexpected Application Error!`),Q.createElement(`h3`,{style:{fontStyle:`italic`}},t),n?Q.createElement(`pre`,{style:i},n):null,o)}var kl=Q.createElement(Ol,null),Al=class extends Q.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!==`idle`&&e.revalidation===`idle`?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error===void 0?t.error:e.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`React Router caught the following error during render`,e)}render(){let e=this.state.error;if(this.context&&typeof e==`object`&&e&&`digest`in e&&typeof e.digest==`string`){let t=ml(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:Q.createElement(cl.Provider,{value:this.props.routeContext},Q.createElement(ll.Provider,{value:e,children:this.props.component}));return this.context?Q.createElement(Ml,{error:e},t):t}};Al.contextType=tl;var jl=new WeakMap;function Ml({children:e,error:t}){let{basename:n}=Q.useContext(ol);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=pl(t.digest);if(e){let r=jl.get(t);if(r)throw r;let i=Jc(e.location,n),a=i.absoluteURL||i.to;if(Qc(a))throw Error(`Invalid redirect location`);if(qc&&!jl.get(t)){if(i.isExternal||e.reloadDocument)window.location.href=a;else{let n=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(i.to,{replace:e.replace}));throw jl.set(t,n),n}}return Q.createElement(`meta`,{httpEquiv:`refresh`,content:`0;url=${a}`})}}return e}function Nl({routeContext:e,match:t,children:n}){let r=Q.useContext($c);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),Q.createElement(cl.Provider,{value:e},n)}function Pl(e,t=[],n){let r=n?.state;if(e==null){if(!r)return null;if(r.errors)e=r.matches;else if(t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let i=e,a=r?.errors;if(a!=null){let e=i.findIndex(e=>e.route.id&&a?.[e.route.id]!==void 0);nc(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(a).join(`,`)}`),i=i.slice(0,Math.min(i.length,e+1))}let o=!1,s=-1;if(n&&r){o=r.renderFallback;for(let e=0;e<i.length;e++){let t=i[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(s=e),t.route.id){let{loaderData:e,errors:a}=r,c=t.route.loader&&!e.hasOwnProperty(t.route.id)&&(!a||a[t.route.id]===void 0);if(t.route.lazy||c){n.isStatic&&(o=!0),i=s>=0?i.slice(0,s+1):[i[0]];break}}}}let c=n?.onError,l=r&&c?(e,t)=>{c(e,{location:r.location,params:r.matches?.[0]?.params??{},pattern:Kc(r.matches),errorInfo:t})}:void 0;return i.reduceRight((e,n,c)=>{let u,d=!1,f=null,p=null;r&&(u=a&&n.route.id?a[n.route.id]:void 0,f=n.route.errorElement||kl,o&&(s<0&&c===0?(Wl(`route-fallback`,!1,"No `HydrateFallback` element provided to render during initial hydration"),d=!0,p=null):s===c&&(d=!0,p=n.route.hydrateFallbackElement||null)));let m=t.concat(i.slice(0,c+1)),h=()=>{let t;return t=u?f:d?p:n.route.Component?Q.createElement(n.route.Component,null):n.route.element?n.route.element:e,Q.createElement(Nl,{match:n,routeContext:{outlet:e,matches:m,isDataRoute:r!=null},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||c===0)?Q.createElement(Al,{location:r.location,revalidation:r.revalidation,component:f,error:u,children:h(),routeContext:{outlet:null,matches:m,isDataRoute:!0},onError:l}):h()},null)}function Fl(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Il(e){let t=Q.useContext($c);return nc(t,Fl(e)),t}function Ll(e){let t=Q.useContext(el);return nc(t,Fl(e)),t}function Rl(e){let t=Q.useContext(cl);return nc(t,Fl(e)),t}function zl(e){let t=Rl(e),n=t.matches[t.matches.length-1];return nc(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function Bl(){return zl(`useRouteId`)}function Vl(){let e=Q.useContext(ll),t=Ll(`useRouteError`),n=zl(`useRouteError`);return e===void 0?t.errors?.[n]:e}function Hl(){let{router:e}=Il(`useNavigate`),t=zl(`useNavigate`),n=Q.useRef(!1);return yl(()=>{n.current=!0}),Q.useCallback(async(r,i={})=>{rc(n.current,vl),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var Ul={};function Wl(e,t,n){!t&&!Ul[e]&&(Ul[e]=!0,rc(!1,n))}Q.memo(Gl);function Gl({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return Dl(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function Kl({to:e,replace:t,state:n,relative:r}){nc(gl(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:i}=Q.useContext(ol);rc(!i,`<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`);let{matches:a}=Q.useContext(cl),{pathname:o}=_l(),s=bl(),c=Lc(e,Ic(a),o,r===`path`),l=JSON.stringify(c);return Q.useEffect(()=>{s(JSON.parse(l),{replace:t,state:n,relative:r})},[s,l,r,t,n]),null}function ql(e){return Cl(e.context)}function Jl(e){nc(!1,`A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`)}function Yl({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:a=!1,useTransitions:o}){nc(!gl(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let s=e.replace(/^\/*/,`/`),c=Q.useMemo(()=>({basename:s,navigator:i,static:a,useTransitions:o,future:{}}),[s,i,a,o]);typeof n==`string`&&(n=cc(n));let{pathname:l=`/`,search:u=``,hash:d=``,state:f=null,key:p=`default`,mask:m}=n,h=Q.useMemo(()=>{let e=jc(l,s);return e==null?null:{location:{pathname:e,search:u,hash:d,state:f,key:p,mask:m},navigationType:r}},[s,l,u,d,f,p,r,m]);return rc(h!=null,`<Router basename="${s}"> is not able to match the URL "${l}${u}${d}" because it does not start with the basename, so the <Router> won't render anything.`),h==null?null:Q.createElement(ol.Provider,{value:c},Q.createElement(sl.Provider,{children:t,value:h}))}function Xl({children:e,location:t}){return El(Zl(e),t)}Q.Component;function Zl(e,t=[]){let n=[];return Q.Children.forEach(e,(e,r)=>{if(!Q.isValidElement(e))return;let i=[...t,r];if(e.type===Q.Fragment){n.push.apply(n,Zl(e.props.children,i));return}nc(e.type===Jl,`[${typeof e.type==`string`?e.type:e.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`),nc(!e.props.index||!e.props.children,`An index route cannot have child routes.`);let a={id:e.props.id||i.join(`-`),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,middleware:e.props.middleware,loader:e.props.loader,action:e.props.action,hydrateFallbackElement:e.props.hydrateFallbackElement,HydrateFallback:e.props.HydrateFallback,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:e.props.hasErrorBoundary===!0||e.props.ErrorBoundary!=null||e.props.errorElement!=null,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(a.children=Zl(e.props.children,i)),n.push(a)}),n}var Ql=`get`,$l=`application/x-www-form-urlencoded`;function eu(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function tu(e){return eu(e)&&e.tagName.toLowerCase()===`button`}function nu(e){return eu(e)&&e.tagName.toLowerCase()===`form`}function ru(e){return eu(e)&&e.tagName.toLowerCase()===`input`}function iu(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function au(e,t){return e.button===0&&(!t||t===`_self`)&&!iu(e)}function ou(e=``){return new URLSearchParams(typeof e==`string`||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}function su(e,t){let n=ou(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var cu=null;function lu(){if(cu===null)try{new FormData(document.createElement(`form`),0),cu=!1}catch{cu=!0}return cu}var uu=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function du(e){return e!=null&&!uu.has(e)?(rc(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${$l}"`),null):e}function fu(e,t){let n,r,i,a,o;if(nu(e)){let o=e.getAttribute(`action`);r=o?jc(o,t):null,n=e.getAttribute(`method`)||Ql,i=du(e.getAttribute(`enctype`))||$l,a=new FormData(e)}else if(tu(e)||ru(e)&&(e.type===`submit`||e.type===`image`)){let o=e.form;if(o==null)throw Error(`Cannot submit a <button> or <input type="submit"> without a <form>`);let s=e.getAttribute(`formaction`)||o.getAttribute(`action`);if(r=s?jc(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||Ql,i=du(e.getAttribute(`formenctype`))||du(o.getAttribute(`enctype`))||$l,a=new FormData(o,e),!lu()){let{name:t,type:n,value:r}=e;if(n===`image`){let e=t?`${t}.`:``;a.append(`${e}x`,`0`),a.append(`${e}y`,`0`)}else t&&a.append(t,r)}}else if(eu(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=Ql,r=null,i=$l,o=e;return a&&i===`text/plain`&&(o=a,a=void 0),{action:r,method:n.toLowerCase(),encType:i,formData:a,body:o}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);function pu(e,t){if(e===!1||e==null)throw Error(t)}function mu(e,t,n,r){let i=typeof e==`string`?new URL(e,typeof window>`u`?`server://singlefetch/`:window.location.origin):e;return i.pathname=n?i.pathname.endsWith(`/`)?`${i.pathname}_.${r}`:`${i.pathname}.${r}`:i.pathname===`/`?`_root.${r}`:t&&jc(i.pathname,t)===`/`?`${Bc(t)}/_root.${r}`:`${Bc(i.pathname)}.${r}`,i}async function hu(e,t){if(e.id in t)return t[e.id];try{let n=await g(()=>import(e.module),[]);return t[e.id]=n,n}catch(t){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(t),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function gu(e){return e!=null&&typeof e.page==`string`}function _u(e){return e==null?!1:e.href==null?e.rel===`preload`&&typeof e.imageSrcSet==`string`&&typeof e.imageSizes==`string`:typeof e.rel==`string`&&typeof e.href==`string`}async function vu(e,t,n){return Cu((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await hu(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(_u).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function yu(e,t,n,r,i,a){let o=(e,t)=>!n[t]||e.route.id!==n[t].route.id,s=(e,t)=>n[t].pathname!==e.pathname||n[t].route.path?.endsWith(`*`)&&n[t].params[`*`]!==e.params[`*`];return a===`assets`?t.filter((e,t)=>o(e,t)||s(e,t)):a===`data`?t.filter((t,a)=>{let c=r.routes[t.route.id];if(!c||!c.hasLoader)return!1;if(o(t,a)||s(t,a))return!0;if(t.route.shouldRevalidate){let r=t.route.shouldRevalidate({currentUrl:new URL(i.pathname+i.search+i.hash,window.origin),currentParams:n[0]?.params||{},nextUrl:new URL(e,window.origin),nextParams:t.params,defaultShouldRevalidate:!0});if(typeof r==`boolean`)return r}return!0}):[]}function bu(e,t,{includeHydrateFallback:n}={}){return xu(e.map(e=>{let r=t.routes[e.route.id];if(!r)return[];let i=[r.module];return r.clientActionModule&&(i=i.concat(r.clientActionModule)),r.clientLoaderModule&&(i=i.concat(r.clientLoaderModule)),n&&r.hydrateFallbackModule&&(i=i.concat(r.hydrateFallbackModule)),r.imports&&(i=i.concat(r.imports)),i}).flat(1))}function xu(e){return[...new Set(e)]}function Su(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function Cu(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!gu(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(Su(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function wu(){let e=Q.useContext($c);return pu(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function Tu(){let e=Q.useContext(el);return pu(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var Eu=Q.createContext(void 0);Eu.displayName=`FrameworkContext`;function Du(){let e=Q.useContext(Eu);return pu(e,`You must render this element inside a <HydratedRouter> element`),e}function Ou(e,t){let n=Q.useContext(Eu),[r,i]=Q.useState(!1),[a,o]=Q.useState(!1),{onFocus:s,onBlur:c,onMouseEnter:l,onMouseLeave:u,onTouchStart:d}=t,f=Q.useRef(null);Q.useEffect(()=>{if(e===`render`&&o(!0),e===`viewport`){let e=new IntersectionObserver(e=>{e.forEach(e=>{o(e.isIntersecting)})},{threshold:.5});return f.current&&e.observe(f.current),()=>{e.disconnect()}}},[e]),Q.useEffect(()=>{if(r){let e=setTimeout(()=>{o(!0)},100);return()=>{clearTimeout(e)}}},[r]);let p=()=>{i(!0)},m=()=>{i(!1),o(!1)};return n?e===`intent`?[a,f,{onFocus:ku(s,p),onBlur:ku(c,m),onMouseEnter:ku(l,p),onMouseLeave:ku(u,m),onTouchStart:ku(d,p)}]:[a,f,{}]:[!1,f,{}]}function ku(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function Au({page:e,...t}){let n=nl(),{nonce:r}=Du(),{router:i}=wu(),a=Q.useMemo(()=>dc(i.routes,e,i.basename),[i.routes,e,i.basename]);return a?(t.nonce==null&&r&&(t={...t,nonce:r}),n?Q.createElement(Mu,{page:e,matches:a,...t}):Q.createElement(Nu,{page:e,matches:a,...t})):null}function ju(e){let{manifest:t,routeModules:n}=Du(),[r,i]=Q.useState([]);return Q.useEffect(()=>{let r=!1;return vu(e,t,n).then(e=>{r||i(e)}),()=>{r=!0}},[e,t,n]),r}function Mu({page:e,matches:t,...n}){let r=_l(),{future:i}=Du(),{basename:a}=wu(),o=Q.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=mu(e,a,i.v8_trailingSlashAwareDataRequests,`rsc`),o=!1,s=[];for(let e of t)typeof e.route.shouldRevalidate==`function`?o=!0:s.push(e.route.id);return o&&s.length>0&&n.searchParams.set(`_routes`,s.join(`,`)),[n.pathname+n.search]},[a,i.v8_trailingSlashAwareDataRequests,e,r,t]);return Q.createElement(Q.Fragment,null,o.map(e=>Q.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function Nu({page:e,matches:t,...n}){let r=_l(),{future:i,manifest:a,routeModules:o}=Du(),{basename:s}=wu(),{loaderData:c,matches:l}=Tu(),u=Q.useMemo(()=>yu(e,t,l,a,r,`data`),[e,t,l,a,r]),d=Q.useMemo(()=>yu(e,t,l,a,r,`assets`),[e,t,l,a,r]),f=Q.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=new Set,l=!1;if(t.forEach(e=>{let t=a.routes[e.route.id];!t||!t.hasLoader||(!u.some(t=>t.route.id===e.route.id)&&e.route.id in c&&o[e.route.id]?.shouldRevalidate||t.hasClientLoader?l=!0:n.add(e.route.id))}),n.size===0)return[];let d=mu(e,s,i.v8_trailingSlashAwareDataRequests,`data`);return l&&n.size>0&&d.searchParams.set(`_routes`,t.filter(e=>n.has(e.route.id)).map(e=>e.route.id).join(`,`)),[d.pathname+d.search]},[s,i.v8_trailingSlashAwareDataRequests,c,r,a,u,t,e,o]),p=Q.useMemo(()=>bu(d,a),[d,a]),m=ju(d);return Q.createElement(Q.Fragment,null,f.map(e=>Q.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),p.map(e=>Q.createElement(`link`,{key:e,rel:`modulepreload`,href:e,...n})),m.map(({key:e,link:t})=>Q.createElement(`link`,{key:e,nonce:n.nonce,...t,crossOrigin:t.crossOrigin??n.crossOrigin})))}function Pu(...e){return t=>{e.forEach(e=>{typeof e==`function`?e(t):e!=null&&(e.current=t)})}}Q.Component;var Fu=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{Fu&&(window.__reactRouterVersion=`7.18.2`)}catch{}function Iu({basename:e,children:t,useTransitions:n,window:r}){let i=Q.useRef();i.current??=tc({window:r,v5Compat:!0});let a=i.current,[o,s]=Q.useState({action:a.action,location:a.location}),c=Q.useCallback(e=>{n===!1?s(e):Q.startTransition(()=>s(e))},[n]);return Q.useLayoutEffect(()=>a.listen(c),[a,c]),Q.createElement(Yl,{basename:e,children:t,location:o.location,navigationType:o.action,navigator:a,useTransitions:n})}var Lu=Q.forwardRef(function({onClick:e,discover:t=`render`,prefetch:n=`none`,relative:r,reloadDocument:i,replace:a,mask:o,state:s,target:c,to:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f,...p},m){let{basename:h,navigator:g,useTransitions:_}=Q.useContext(ol),v=typeof l==`string`&&Ys.test(l),y=Jc(l,h);l=y.to;let b=hl(l,{relative:r}),x=_l(),S=null;if(o){let e=Lc(o,[],x.mask?x.mask.pathname:`/`,!0);h!==`/`&&(e.pathname=e.pathname===`/`?h:zc([h,e.pathname])),S=g.createHref(e)}let[C,w,T]=Ou(n,p),E=Hu(l,{replace:a,mask:o,state:s,target:c,preventScrollReset:u,relative:r,viewTransition:d,defaultShouldRevalidate:f,useTransitions:_});function D(t){e&&e(t),t.defaultPrevented||E(t)}let O=!(y.isExternal||i),k=Q.createElement(`a`,{...p,...T,href:(O?S:void 0)||y.absoluteURL||b,onClick:O?D:e,ref:Pu(m,w),target:c,"data-discover":!v&&t===`render`?`true`:void 0});return C&&!v?Q.createElement(Q.Fragment,null,k,Q.createElement(Au,{page:b})):k});Lu.displayName=`Link`;var Ru=Q.forwardRef(function({"aria-current":e=`page`,caseSensitive:t=!1,className:n=``,end:r=!1,style:i,to:a,viewTransition:o,children:s,...c},l){let u=Tl(a,{relative:c.relative}),d=_l(),f=Q.useContext(el),{navigator:p,basename:m}=Q.useContext(ol),h=f!=null&&Ju(u)&&o===!0,g=p.encodeLocation?p.encodeLocation(u).pathname:u.pathname,_=d.pathname,v=f&&f.navigation&&f.navigation.location?f.navigation.location.pathname:null;t||(_=_.toLowerCase(),v=v?v.toLowerCase():null,g=g.toLowerCase()),v&&m&&(v=jc(v,m)||v);let y=g!==`/`&&g.endsWith(`/`)?g.length-1:g.length,b=_===g||!r&&_.startsWith(g)&&_.charAt(y)===`/`,x=v!=null&&(v===g||!r&&v.startsWith(g)&&v.charAt(g.length)===`/`),S={isActive:b,isPending:x,isTransitioning:h},C=b?e:void 0,w;w=typeof n==`function`?n(S):[n,b?`active`:null,x?`pending`:null,h?`transitioning`:null].filter(Boolean).join(` `);let T=typeof i==`function`?i(S):i;return Q.createElement(Lu,{...c,"aria-current":C,className:w,ref:l,style:T,to:a,viewTransition:o},typeof s==`function`?s(S):s)});Ru.displayName=`NavLink`;var zu=Q.forwardRef(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:r,replace:i,state:a,method:o=Ql,action:s,onSubmit:c,relative:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f,...p},m)=>{let{useTransitions:h}=Q.useContext(ol),g=Ku(),_=qu(s,{relative:l}),v=o.toLowerCase()===`get`?`get`:`post`,y=typeof s==`string`&&Ys.test(s);return Q.createElement(`form`,{ref:m,method:v,action:_,onSubmit:r?c:e=>{if(c&&c(e),e.defaultPrevented)return;e.preventDefault();let r=e.nativeEvent.submitter,s=r?.getAttribute(`formmethod`)||o,p=()=>g(r||e.currentTarget,{fetcherKey:t,method:s,navigate:n,replace:i,state:a,relative:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f});h&&n!==!1?Q.startTransition(()=>p()):p()},...p,"data-discover":!y&&e===`render`?`true`:void 0})});zu.displayName=`Form`;function Bu(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Vu(e){let t=Q.useContext($c);return nc(t,Bu(e)),t}function Hu(e,{target:t,replace:n,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c,useTransitions:l}={}){let u=bl(),d=_l(),f=Tl(e,{relative:o});return Q.useCallback(p=>{if(au(p,t)){p.preventDefault();let t=n===void 0?sc(d)===sc(f):n,m=()=>u(e,{replace:t,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c});l?Q.startTransition(()=>m()):m()}},[d,u,f,n,r,i,t,e,a,o,s,c,l])}function Uu(e){rc(typeof URLSearchParams<`u`,"You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let t=Q.useRef(ou(e)),n=Q.useRef(!1),r=_l(),i=Q.useMemo(()=>su(r.search,n.current?null:t.current),[r.search]),a=bl();return[i,Q.useCallback((e,t)=>{let r=ou(typeof e==`function`?e(new URLSearchParams(i)):e);n.current=!0,a(`?`+r,t)},[a,i])]}var Wu=0,Gu=()=>`__${String(++Wu)}__`;function Ku(){let{router:e}=Vu(`useSubmit`),{basename:t}=Q.useContext(ol),n=Bl(),r=e.fetch,i=e.navigate;return Q.useCallback(async(e,a={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=fu(e,t);if(a.navigate===!1){let e=a.fetcherKey||Gu();await r(e,n,a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,flushSync:a.flushSync})}else await i(a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,replace:a.replace,state:a.state,fromRouteId:n,flushSync:a.flushSync,viewTransition:a.viewTransition})},[r,i,t,n])}function qu(e,{relative:t}={}){let{basename:n}=Q.useContext(ol),r=Q.useContext(cl);nc(r,`useFormAction must be used inside a RouteContext`);let[i]=r.matches.slice(-1),a={...Tl(e||`.`,{relative:t})},o=_l();if(e==null){a.search=o.search;let e=new URLSearchParams(a.search),t=e.getAll(`index`);if(t.some(e=>e===``)){e.delete(`index`),t.filter(e=>e).forEach(t=>e.append(`index`,t));let n=e.toString();a.search=n?`?${n}`:``}}return(!e||e===`.`)&&i.route.index&&(a.search=a.search?a.search.replace(/^\?/,`?index&`):`?index`),n!==`/`&&(a.pathname=a.pathname===`/`?n:zc([n,a.pathname])),sc(a)}function Ju(e,{relative:t}={}){let n=Q.useContext(rl);nc(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=Vu(`useViewTransitionState`),i=Tl(e,{relative:t});if(!n.isTransitioning)return!1;let a=jc(n.currentLocation.pathname,r)||n.currentLocation.pathname,o=jc(n.nextLocation.pathname,r)||n.nextLocation.pathname;return Dc(i.pathname,o)!=null||Dc(i.pathname,a)!=null}var $=s(),Yu=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(ht,{ref:n,className:J(`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,e),...t}));Yu.displayName=ht.displayName;var Xu=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(`div`,{ref:n,className:J(`rounded-(--card-radius) border bg-card text-card-foreground shadow-elevation-1`,e),...t}));Xu.displayName=`Card`;var Zu=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(`div`,{ref:n,className:J(`flex flex-col space-y-1.5 p-6`,e),...t}));Zu.displayName=`CardHeader`;var Qu=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(`h3`,{ref:n,className:J(`text-2xl font-semibold leading-none tracking-tight`,e),...t}));Qu.displayName=`CardTitle`;var $u=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(`p`,{ref:n,className:J(`text-sm text-muted-foreground`,e),...t}));$u.displayName=`CardDescription`;var ed=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(`div`,{ref:n,className:J(`p-6 pt-0`,e),...t}));ed.displayName=`CardContent`;var td=Q.forwardRef(({className:e,...t},n)=>(0,$.jsx)(`div`,{ref:n,className:J(`flex items-center p-6 pt-0`,e),...t}));td.displayName=`CardFooter`;var nd=`2.26.6`,rd=e=>{window.particlesJS.load(e,`/js/particles.config.json`,()=>{console.log(`particles.js config loaded for`,e)})};function id(e){(0,Q.useEffect)(()=>{if(window.particlesJS!==void 0)rd(e);else{if(document.getElementById(`particles-js-script`))return;let t=document.createElement(`script`);t.id=`particles-js-script`,t.src=`/js/particles.min.js`,t.onload=()=>{console.log(`particles.js loaded`),rd(e)},document.head.appendChild(t)}return()=>{window.pJS&&window.pJS[e]?.destroy&&window.pJS[e].destroy()}},[e])}var ad=`session.open`,od=`session.set`,sd=`session.ids`,cd=`session.materialize`,ld=`session.close`,ud=`session.delta`;function dd(){let[e,t]=(0,Q.useState)(null),[n,r]=(0,Q.useState)(!0),[i,a]=(0,Q.useState)(null);return(0,Q.useEffect)(()=>{let e=!0;async function n(){try{r(!0),a(null);let n=await X.get(`/ping`,{skipAuth:!0});e&&(n?.version?t(n.version):a(`Invalid server response`))}catch(t){e&&(console.error(`Failed to fetch server version:`,t),a(`Unable to connect to server`))}finally{e&&r(!1)}}n();let i=setInterval(n,3e4);return()=>{e=!1,clearInterval(i)}},[]),{serverVersion:e,isLoading:n,error:i}}var fd=`https://github.com/canvas-ui/canvas-server`,pd=null;function md(){return pd||=X.get(`/ping`,{skipAuth:!0}).then(e=>{let t=e??{};return{sourceUrl:t.sourceUrl||fd,version:t.version??null,commit:t.commit??null,license:t.license??null}}).catch(e=>(console.error(`Failed to fetch server source info:`,e),pd=null,{sourceUrl:fd,version:null,commit:null,license:null})),pd}function hd(){let[e,t]=(0,Q.useState)(null);return(0,Q.useEffect)(()=>{let e=!0;return md().then(n=>{e&&t(n)}),()=>{e=!1}},[]),e}function gd({className:e=``}){let t=hd();if(!t)return null;let n=[t.version?`v${t.version}`:null,t.commit?.slice(0,7)].filter(Boolean).join(` `);return(0,$.jsxs)(`p`,{className:`text-xs text-muted-foreground ${e}`,children:[`Powered by`,` `,(0,$.jsx)(`a`,{href:t.sourceUrl,target:`_blank`,rel:`noreferrer`,className:`underline underline-offset-2 hover:text-foreground`,children:`Canvas`}),n?` ${n}`:``,t.license?`, ${t.license}`:``,`.`,` `,(0,$.jsx)(`a`,{href:t.sourceUrl,target:`_blank`,rel:`noreferrer`,className:`underline underline-offset-2 hover:text-foreground`,children:`Get the source code`}),`.`]})}function _d({children:e}){id(`particle-js`);let{serverVersion:t,isLoading:n,error:r}=dd();return(0,$.jsx)(`div`,{className:`flex min-h-viewport w-full items-center justify-center p-4 flex-col`,children:(0,$.jsxs)(Xu,{className:`flex w-[95vw] h-viewport-modal overflow-hidden`,children:[(0,$.jsxs)(`div`,{className:`hidden md:block w-1/2 relative bg-background`,"data-scheme":`dark`,id:`particle-js`,children:[(0,$.jsxs)(Lu,{className:`absolute top-8 left-8 font-bold text-foreground flex items-center z-raised`,to:`/`,children:[(0,$.jsx)(`img`,{src:`/images/logo-wr_128x128.png`,alt:`Canvas Logo`,className:`mr-2 h-6 w-6 touch-target`}),(0,$.jsx)(`span`,{className:`text-2xl font-bold text-foreground`,children:`Canvas`})]}),(0,$.jsxs)(`div`,{className:`absolute bottom-8 left-8 text-sm text-foreground max-w-[80%] z-raised`,children:[`Web UI: v`,nd,`, Server: `,n?`Loading...`:r?`Unavailable`:t?`v${t}`:`Unknown`]})]}),(0,$.jsx)(`div`,{className:`flex w-full md:w-1/2 flex-col justify-center px-4 py-12 sm:px-6 lg:px-8`,children:(0,$.jsxs)(`div`,{className:`mx-auto w-full max-w-sm`,children:[e,(0,$.jsxs)(`div`,{className:`mt-8 border-t pt-6`,children:[(0,$.jsxs)(`a`,{href:`https://github.com/canvas-ui`,target:`_blank`,className:`text-muted-foreground hover:text-foreground justify-center flex items-center space-x-2`,rel:`noopener noreferrer`,children:[(0,$.jsx)(`svg`,{viewBox:`0 0 24 24`,width:`24`,height:`24`,stroke:`currentColor`,fill:`none`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,className:`w-6 h-6`,children:(0,$.jsx)(`path`,{d:`M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22`})}),(0,$.jsx)(`span`,{children:`View on GitHub`})]}),(0,$.jsx)(gd,{className:`mt-4 text-center`})]})]})})]})})}function vd(){let e=localStorage.getItem(`authToken`);return!e||e===`canvas-server-token`?null:e}var yd=new class{socket=null;connected=!1;authToken=null;handlers=new Map;socketWrappers=new Map;desiredSubscriptions=new Set;baseUrl;connectionId=``;constructor(){this.baseUrl=Rr,this.connectionId=`socket-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}connect(e){let t=e||vd();!t||t===`canvas-server-token`||this.socket&&this.authToken===t||(this.cleanupSocket(),this.authToken=t,this.socket=zr(this.baseUrl,{transports:[`websocket`],autoConnect:!1,reconnection:!0,reconnectionAttempts:1/0,reconnectionDelay:1e3,reconnectionDelayMax:3e4,randomizationFactor:.5,timeout:1e4,forceNew:!0,extraHeaders:{Authorization:`Bearer ${t}`,"X-Connection-ID":this.connectionId},auth:{token:t}}),this.setupDefaultHandlers(),this.registerHandlers(),this.socket.connect())}cleanupSocket(){this.socket?.removeAllListeners(),this.socket?.disconnect(),this.socket=null,this.connected=!1,this.socketWrappers.clear()}setupDefaultHandlers(){this.socket&&(this.socket.on(`connect`,()=>{this.connected=!0;for(let e of this.desiredSubscriptions)this.socket?.emit(`subscribe`,{channel:e})}),this.socket.on(`disconnect`,()=>{this.connected=!1}),this.socket.on(`connect_error`,()=>{this.connected=!1}))}registerHandlers(){this.socket&&this.handlers.forEach((e,t)=>{e.forEach(e=>{this.attach(t,e)})})}attach(e,t){if(!this.socket)return;let n=this.socketWrappers.get(e);if(n||(n=new Map,this.socketWrappers.set(e,n)),n.has(t))return;let r=(...e)=>t(...e);n.set(t,r),this.socket.on(e,r)}detach(e,t){if(!this.socket)return;let n=this.socketWrappers.get(e),r=n?.get(t);r&&(this.socket.off(e,r),n?.delete(t),n&&n.size===0&&this.socketWrappers.delete(e))}on(e,t){this.handlers.has(e)||this.handlers.set(e,new Set);let n=this.handlers.get(e);return n.has(t)?()=>this.off(e,t):(n.add(t),this.socket&&this.attach(e,t),()=>this.off(e,t))}off(e,t){let n=this.handlers.get(e);n&&n.has(t)&&(n.delete(t),n.size===0&&this.handlers.delete(e),this.detach(e,t))}request(e,t,n=1e4){return new Promise((r,i)=>{if(!this.socket||!this.connected){i(Error(`Socket not connected`));return}let a=!1,o=setTimeout(()=>{a||(a=!0,i(Error(`Socket request timed out: ${e}`)))},n);try{this.socket.emit(e,t??{},t=>{a||(a=!0,clearTimeout(o),t?.status===`error`?i(Error(t.message||`${e} failed`)):r(t?.payload??t))})}catch(e){a=!0,clearTimeout(o),i(e instanceof Error?e:Error(String(e)))}})}emit(e,...t){if(e===`subscribe`){let e=t?.[0]?.channel;typeof e==`string`&&e&&this.desiredSubscriptions.add(e)}else if(e===`unsubscribe`){let e=t?.[0]?.channel;typeof e==`string`&&e&&this.desiredSubscriptions.delete(e)}if(this.socket&&this.connected)try{this.socket.emit(e,...t)}catch(t){console.error(`Error emitting event ${e}:`,t),this.reconnect()}else this.connect()}disconnect(){this.cleanupSocket(),this.authToken=null,this.desiredSubscriptions.clear()}isConnected(){return this.connected}retryNow(){this.connected||(this.cleanupSocket(),this.connect())}reconnect(){this.connect()}};async function bd(e,t,n=`auto`){try{let r=await X.post(xr.login,{email:e,password:t,strategy:n},{skipAuth:!0});console.log(`Login response:`,r);let i=r;if(`token`in i)return console.log(`Setting auth token (direct):`,i.token.substring(0,10)+`...`),X.setAuthToken(i.token),yd.connect(i.token),r;if(i&&`payload`in i&&i.payload&&i.payload.token)return console.log(`Setting auth token (nested):`,i.payload.token.substring(0,10)+`...`),X.setAuthToken(i.payload.token),yd.connect(i.payload.token),r;throw console.error(`Invalid login response structure:`,r),Error(`Invalid login response: missing token`)}catch(e){throw console.error(`Login error:`,e),X.clearAuthToken(),e}}async function xd(e,t,n){try{return await X.post(xr.register,{name:e,email:t,password:n},{skipAuth:!0})}catch(e){throw console.error(`Registration failed:`,e),e}}function Sd(e){return e instanceof Error&&/^Network error/i.test(e.message)}function Cd(){let e=localStorage.getItem(`authToken`);if(!e)return!1;if(e.startsWith(`canvas-`))return!0;try{return yr(e).exp*1e3>Date.now()}catch{return!1}}function wd(){let e=localStorage.getItem(`authToken`);if(!e||e.startsWith(`canvas-`))return null;try{let t=yr(e);return t.exp*1e3<Date.now()?(X.clearAuthToken(),null):{id:t.sub,email:t.email,userType:t.userType||`user`}}catch(e){return console.error(`Failed to decode token:`,e),X.clearAuthToken(),null}}async function Td(){try{if(!X.isAuthenticated())return console.log(`Not authenticated, skipping getCurrentUser request`),null;let e=await X.get(xr.me);return console.log(`Current user response:`,e),e&&e?(yd.isConnected()||yd.reconnect(),e):(console.warn(`Invalid user profile response structure:`,e),null)}catch(e){if(console.error(`Failed to get current user:`,e),Sd(e))throw e;return e instanceof Error&&(e.message.includes(`USER_NOT_FOUND_IN_DATABASE`)||e.message.includes(`Your session is invalid`)||e.message.includes(`Authentication required`)||e.message.includes(`user account no longer exists`))?(console.warn(`Authentication error detected, clearing token:`,e.message),X.clearAuthToken(),yd.disconnect(),null):null}}function Ed(){return X.isAuthenticated()}function Dd(){let e=new URL(`${Lr}/oauth/google/login`);e.searchParams.set(`origin`,window.location.origin),window.location.assign(e.toString())}async function Od(e){let t=await X.post(`${Lr}/oauth/google/exchange`,{code:e},{skipAuth:!0});if(!t?.token)throw Error(`Invalid login response: missing token`);X.setAuthToken(t.token),yd.connect(t.token)}async function kd(){try{let e=await X.get(xr.authConfig,{skipAuth:!0});return e||e}catch(e){return console.error(`Failed to get auth config:`,e),{strategies:{local:{enabled:!0},imap:{enabled:!1,domains:[]}}}}}async function Ad(e){try{await X.post(xr.verifyEmailRequest,{email:e},{skipAuth:!0})}catch(e){throw console.error(`Failed to request email verification:`,e),e}}var jd=e=>e?.strategies?.local?.enabled!==!1,Md=e=>e?.allowUserRegistrations!==!1;function Nd(){let e=bl(),[t,n]=Q.useState(!1),[r,i]=Q.useState(``),[a,o]=Q.useState(``),[s,c]=Q.useState(!1),[l,u]=Q.useState({}),[d,p]=Q.useState(null),[m,h]=Q.useState({email:``,password:``,strategy:`auto`});Q.useEffect(()=>{Cd()&&e(`/workspaces`),fetch(`${Lr}/runtime/capabilities`).then(e=>e.ok?e.json():null).then(e=>n(e?.payload?.local===!0)).catch(()=>{}),kd().then(e=>{p(e)}).catch(e=>{console.error(`Failed to load auth config:`,e)})},[e]);let g=()=>{let e={};return m.email?/\S+@\S+\.\S+/.test(m.email)||(e.email=`Email is invalid`):e.email=`Email is required`,m.password||(e.password=`Password is required`),u(e),Object.keys(e).length===0},_=e=>{let{name:t,value:n}=e.target;h(e=>({...e,[t]:n}))};async function v(t){if(t.preventDefault(),g()){c(!0);try{console.log(`Attempting login with:`,m.email,`strategy:`,m.strategy);let t=await bd(m.email,m.password,m.strategy);console.log(`Login successful, received token:`,`token`in t?!!t.token:!!t.payload?.token),u({}),e(`/home`)}catch(e){console.error(`Login error:`,e);let t=`Login failed`;if(e instanceof Error)t=e.message;else if(typeof e==`object`&&e){let n=e;n.message?t=n.message:n.error?t=n.error:n.payload?.message&&(t=n.payload.message)}u({password:t})}finally{c(!1)}}}return t?(0,$.jsx)(_d,{children:(0,$.jsxs)(`form`,{className:`grid gap-4`,onSubmit:async t=>{t.preventDefault(),c(!0),o(``);try{if(X.setAuthToken(r.trim()),!await Td())throw Error(`The local token was not accepted`);e(`/workspaces`)}catch(e){X.clearAuthToken(),o(e instanceof Error?e.message:`Authentication failed`)}finally{c(!1)}},children:[(0,$.jsx)(`h1`,{className:`text-2xl font-semibold`,children:`Connect to your local runtime`}),(0,$.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Enter the token shown by `,(0,$.jsx)(`code`,{children:`canvas runtime token`}),` in the runtime folder.`]}),(0,$.jsx)(Yu,{htmlFor:`local-token`,children:`Local access token`}),(0,$.jsx)(Y,{id:`local-token`,type:`password`,autoComplete:`off`,value:r,onChange:e=>i(e.target.value),required:!0}),a&&(0,$.jsx)(`p`,{role:`alert`,className:`text-sm text-destructive`,children:a}),(0,$.jsx)(Z,{disabled:s,children:s?`Connecting…`:`Connect`})]})}):(0,$.jsx)(_d,{children:(0,$.jsxs)(`div`,{className:`flex flex-col space-y-4`,children:[(0,$.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,$.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Welcome back`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Enter your credentials to access your account`})]}),(0,$.jsx)(`form`,{onSubmit:v,children:(0,$.jsxs)(`div`,{className:`grid gap-4`,children:[d?.strategies?.imap?.enabled&&d.strategies.imap.domains.length>0&&(0,$.jsxs)(`div`,{className:`grid gap-2`,children:[(0,$.jsx)(Yu,{htmlFor:`strategy`,children:`Authentication Method`}),(0,$.jsxs)(`select`,{id:`strategy`,name:`strategy`,value:m.strategy,onChange:_,disabled:s,className:`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50`,children:[(0,$.jsx)(`option`,{value:`auto`,children:`Auto-detect`}),(0,$.jsx)(`option`,{value:`local`,children:`Local Account`}),(0,$.jsx)(`option`,{value:`imap`,children:`Email Server (IMAP)`})]})]}),(0,$.jsxs)(`div`,{className:`grid gap-2`,children:[(0,$.jsx)(Yu,{htmlFor:`email`,children:`Email`}),(0,$.jsx)(Y,{id:`email`,name:`email`,placeholder:`name@example.com`,type:`email`,autoCapitalize:`none`,autoComplete:`email`,autoCorrect:`off`,disabled:s,value:m.email,onChange:_}),l.email&&(0,$.jsx)(`p`,{className:`text-sm text-destructive`,children:l.email})]}),(0,$.jsxs)(`div`,{className:`grid gap-2`,children:[(0,$.jsx)(Yu,{htmlFor:`password`,children:`Password`}),(0,$.jsx)(Y,{id:`password`,name:`password`,type:`password`,disabled:s,value:m.password,onChange:_}),l.password&&(0,$.jsx)(`p`,{className:`text-sm text-destructive`,children:l.password})]}),(0,$.jsxs)(`div`,{className:`flex flex-col space-y-4`,children:[(0,$.jsx)(Z,{type:`submit`,disabled:s,children:s?`Signing in...`:`Sign In`}),d?.strategies?.google?.enabled&&(0,$.jsxs)(Z,{type:`button`,variant:`outline`,disabled:s,onClick:()=>Dd(),children:[(0,$.jsx)(f,{icon:`logos:google-icon`,width:16,height:16,className:`mr-2`}),`Sign in with Google`]}),jd(d)&&Md(d)&&(0,$.jsx)(Z,{variant:`outline`,type:`button`,disabled:s,onClick:()=>e(`/register`),children:`Don't have an account? Sign up`})]})]})})]})})}function Pd(){let e=bl(),{showToast:t}=Hr(),[n,r]=Q.useState(!1),[i,a]=Q.useState({}),[o,s]=Q.useState({name:``,email:``,password:``}),[c,l]=Q.useState(!1),[u,d]=Q.useState(!1),[f,p]=Q.useState(null);Q.useEffect(()=>{(async()=>{let t=await kd(),n=t?.strategies?.local;if(t?.allowUserRegistrations===!1||n?.enabled===!1){e(`/login`,{replace:!0});return}n?.passwordPolicy&&p(n.passwordPolicy),d(!!n?.requireEmailVerification)})()},[e]);let m=Q.useMemo(()=>{if(!f)return null;let e=o.password||``;return{minLength:!f.minLength||e.length>=f.minLength,maxLength:!f.maxLength||e.length<=f.maxLength,uppercase:!f.requireUppercase||/[A-Z]/.test(e),lowercase:!f.requireLowercase||/[a-z]/.test(e),number:!f.requireNumbers||/[0-9]/.test(e),special:!f.requireSpecialChars||/[^A-Za-z0-9]/.test(e)}},[f,o.password]),h=()=>{let e={};if(!o.name)e.name=`Username is required`;else if(o.name.trim().length===0)e.name=`Username cannot be empty`;else{let t=o.name.toLowerCase().trim();t.length<3?e.name=`Username must be at least 3 characters long`:t.length>39?e.name=`Username cannot be longer than 39 characters`:/^[a-z0-9_-]+$/.test(t)?[`admin`,`administrator`,`root`,`system`,`support`,`help`,`api`,`www`,`mail`,`ftp`,`localhost`,`test`,`demo`,`canvas`,`universe`,`workspace`,`context`,`user`,`users`].includes(t)&&(e.name=`Username '${t}' is reserved and cannot be used`):e.name=`Username can only contain lowercase letters, numbers, underscores, and hyphens`}if(o.email?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o.email)||(e.email=`Please enter a valid email address`):e.email=`Email is required`,!o.password)e.password=`Password is required`;else if(f){let t=o.password,n=[];f.minLength&&t.length<f.minLength&&n.push(`at least ${f.minLength} characters`),f.maxLength&&t.length>f.maxLength&&n.push(`no more than ${f.maxLength} characters`),f.requireUppercase&&!/[A-Z]/.test(t)&&n.push(`an uppercase letter`),f.requireLowercase&&!/[a-z]/.test(t)&&n.push(`a lowercase letter`),f.requireNumbers&&!/[0-9]/.test(t)&&n.push(`a number`),f.requireSpecialChars&&!/[^A-Za-z0-9]/.test(t)&&n.push(`a special character`),n.length&&(e.password=`Password must contain ${n.join(`, `).replace(/, ([^,]*)$/,` and $1`)}.`)}else o.password.length<8&&(e.password=`Password must be at least 8 characters long`);return a(e),Object.keys(e).length===0},g=e=>{let t={...o,[e.target.id]:e.target.value};s(t),(e.target.id===`name`||e.target.id===`email`||e.target.id===`password`)&&h()};return c?(0,$.jsxs)(_d,{children:[(0,$.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,$.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Registration Successful!`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:u?`Check your email for a verification link to activate your account.`:`Your account has been created.`})]}),(0,$.jsx)(`div`,{className:`space-y-6 text-center pt-6`,children:!u&&(0,$.jsx)(Z,{asChild:!0,className:`w-full`,children:(0,$.jsx)(Lu,{to:`/login`,children:`Go to Login`})})})]}):(0,$.jsxs)(_d,{children:[(0,$.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,$.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Create an account`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Enter your email below to create your account`})]}),(0,$.jsxs)(`form`,{onSubmit:async e=>{if(e.preventDefault(),h()){r(!0);try{let e=await xd(o.name,o.email,o.password);console.log(`Registration successful:`,e),t({title:`Registration Successful`,description:u?`Check your email for a verification link before logging in.`:`You can now log in with your credentials.`,variant:`default`}),l(!0),s({name:``,email:``,password:``}),a({})}catch(e){console.error(`Registration failed:`,e);let n=e?.message||`Registration failed`;n.toLowerCase().includes(`password`)?a({...i,password:n}):a({...i,email:n}),t({title:`Registration Failed`,description:n,variant:`destructive`})}finally{r(!1)}}},className:`space-y-4 pt-6`,children:[(0,$.jsxs)(`div`,{className:`space-y-2`,children:[(0,$.jsx)(Yu,{htmlFor:`name`,children:`Username`}),(0,$.jsx)(Y,{id:`name`,type:`text`,placeholder:`Enter your username (e.g., john_doe)`,value:o.name,onChange:g,disabled:n,className:i.name?`border-destructive`:``}),i.name&&(0,$.jsx)(`p`,{className:`text-sm text-destructive`,children:i.name}),(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`3-39 characters, lowercase letters, numbers, underscores, and hyphens only`})]}),(0,$.jsxs)(`div`,{className:`space-y-2`,children:[(0,$.jsx)(Yu,{htmlFor:`email`,children:`Email`}),(0,$.jsx)(Y,{id:`email`,type:`email`,placeholder:`name@example.com`,value:o.email,onChange:g,disabled:n,className:i.email?`border-destructive`:``}),i.email&&(0,$.jsx)(`p`,{className:`text-sm text-destructive`,children:i.email})]}),(0,$.jsxs)(`div`,{className:`space-y-2`,children:[(0,$.jsx)(Yu,{htmlFor:`password`,children:`Password`}),(0,$.jsx)(Y,{id:`password`,type:`password`,placeholder:`Enter your password`,value:o.password,onChange:g,disabled:n,className:i.password?`border-destructive`:``}),i.password&&(0,$.jsx)(`p`,{className:`text-sm text-destructive`,children:i.password}),f&&m&&(0,$.jsxs)(`ul`,{className:`text-xs list-disc pl-4 space-y-1`,children:[(0,$.jsxs)(`li`,{className:m.minLength?`text-success`:`text-muted-foreground`,children:[`At least `,f.minLength,` characters`]}),f.requireUppercase&&(0,$.jsx)(`li`,{className:m.uppercase?`text-success`:`text-muted-foreground`,children:`At least one uppercase letter`}),f.requireLowercase&&(0,$.jsx)(`li`,{className:m.lowercase?`text-success`:`text-muted-foreground`,children:`At least one lowercase letter`}),f.requireNumbers&&(0,$.jsx)(`li`,{className:m.number?`text-success`:`text-muted-foreground`,children:`At least one number`}),f.requireSpecialChars&&(0,$.jsx)(`li`,{className:m.special?`text-success`:`text-muted-foreground`,children:`At least one special character`}),f.maxLength&&(0,$.jsxs)(`li`,{className:m.maxLength?`text-success`:`text-muted-foreground`,children:[`No more than `,f.maxLength,` characters`]})]})]}),(0,$.jsx)(Z,{type:`submit`,className:`w-full`,disabled:n,children:n?`Creating Account...`:`Create Account`})]}),(0,$.jsxs)(`div`,{className:`mt-4 text-center text-sm`,children:[`Already have an account?`,` `,(0,$.jsx)(Lu,{to:`/login`,className:`underline`,children:`Sign in`})]}),(0,$.jsxs)(`div`,{className:`px-8 py-4 text-center text-sm text-muted-foreground border-t mt-6`,children:[`By clicking continue, you agree to our`,` `,(0,$.jsx)(Lu,{to:`/terms`,className:`underline underline-offset-4 hover:text-primary`,children:`Terms of Service`}),` `,`and`,` `,(0,$.jsx)(Lu,{to:`/privacy`,className:`underline underline-offset-4 hover:text-primary`,children:`Privacy Policy`}),`.`]})]})}function Fd(){let e=bl(),[t]=Uu(),[n,r]=Q.useState(t.get(`error`)),i=Q.useRef(!1);return Q.useEffect(()=>{let n=t.get(`code`);!n||i.current||(i.current=!0,Od(n).then(()=>e(`/home`,{replace:!0})).catch(e=>r(e instanceof Error?e.message:`Google sign-in failed`)))},[t,e]),(0,$.jsx)(_d,{children:(0,$.jsx)(`div`,{className:`flex flex-col space-y-4 text-center`,children:n?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Google sign-in failed`}),(0,$.jsx)(`p`,{className:`text-sm text-destructive`,children:n}),(0,$.jsx)(Z,{type:`button`,variant:`outline`,onClick:()=>e(`/login`,{replace:!0}),children:`Back to sign in`})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Signing you in…`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Completing Google sign-in.`})]})})})}function Id({className:e=`h-5 w-5`,...t}){return(0,$.jsxs)(`svg`,{className:`animate-spin ${e}`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,...t,children:[(0,$.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,$.jsx)(`path`,{className:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z`})]})}function Ld({children:e}){let[t,n]=(0,Q.useState)(`loading`);return(0,Q.useEffect)(()=>{(async()=>{try{if(!Ed()){console.log(`No authentication token found, redirecting to login`),n(`unauthenticated`);return}let e=await Td();e?(console.log(`User authenticated:`,e.email),n(`authenticated`)):(console.log(`User not authenticated or token expired`),n(`unauthenticated`))}catch(e){if(console.error(`Authentication check failed:`,e),Sd(e)){if(Cd()){n(`authenticated`);return}X.clearAuthToken(),n(`unauthenticated`);return}e instanceof Error&&e.message.includes(`Authentication required`)&&(console.log(`Clearing invalid token from ProtectedRoute`),X.clearAuthToken()),n(`unauthenticated`)}})()},[]),t===`loading`?(0,$.jsx)(`div`,{className:`flex h-screen items-center justify-center`,children:(0,$.jsx)(Id,{className:`h-8 w-8`})}):t===`unauthenticated`?(0,$.jsx)(Kl,{to:`/login`,replace:!0}):(0,$.jsx)($.Fragment,{children:e})}function Rd({children:e}){let[t,n]=(0,Q.useState)(null);return(0,Q.useEffect)(()=>{(async()=>{try{await X.get(`/auth/me`),n(!0)}catch(e){e instanceof Error&&e.message.includes(`Authentication required`)&&(console.log(`Clearing invalid token from PublicRoute`),X.clearAuthToken()),n(!1)}})()},[]),t===null?null:t?(0,$.jsx)(Kl,{to:`/workspaces`,replace:!0}):(0,$.jsx)($.Fragment,{children:e})}var zd=i(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?r(e):typeof define==`function`&&define.amd?define([`exports`],r):(n=typeof globalThis<`u`?globalThis:n||self,r(n[`fast-equals`]={}))})(e,(function(e){function t(e){return function(t,n,r,i,a,o,s){return e(t,n,s)}}function n(e){return function(t,n,r,i){if(!t||!n||typeof t!=`object`||typeof n!=`object`)return e(t,n,r,i);var a=i.get(t),o=i.get(n);if(a&&o)return a===n&&o===t;i.set(t,n),i.set(n,t);var s=e(t,n,r,i);return i.delete(t),i.delete(n),s}}function r(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n}function i(e){return e.constructor===Object||e.constructor==null}function a(e){return typeof e.then==`function`}function o(e,t){return e===t||e!==e&&t!==t}var s=Object.prototype.toString;function c(e){var t=e.areArraysEqual,n=e.areDatesEqual,r=e.areMapsEqual,c=e.areObjectsEqual,l=e.areRegExpsEqual,u=e.areSetsEqual,d=e.createIsNestedEqual,f=d(p);function p(e,d,p){if(e===d)return!0;if(!e||!d||typeof e!=`object`||typeof d!=`object`)return e!==e&&d!==d;if(i(e)&&i(d))return c(e,d,f,p);var m=Array.isArray(e),h=Array.isArray(d);if(m||h)return m===h&&t(e,d,f,p);var g=s.call(e);return g===s.call(d)?g===`[object Date]`?n(e,d,f,p):g===`[object RegExp]`?l(e,d,f,p):g===`[object Map]`?r(e,d,f,p):g===`[object Set]`?u(e,d,f,p):g===`[object Object]`||g===`[object Arguments]`?a(e)||a(d)?!1:c(e,d,f,p):g===`[object Boolean]`||g===`[object Number]`||g===`[object String]`?o(e.valueOf(),d.valueOf()):!1:!1}return p}function l(e,t,n,r){var i=e.length;if(t.length!==i)return!1;for(;i-->0;)if(!n(e[i],t[i],i,i,e,t,r))return!1;return!0}var u=n(l);function d(e,t){return o(e.valueOf(),t.valueOf())}function f(e,t,n,r){var i=e.size===t.size;if(!i)return!1;if(!e.size)return!0;var a={},o=0;return e.forEach(function(s,c){if(i){var l=!1,u=0;t.forEach(function(i,d){!l&&!a[u]&&(l=n(c,d,o,u,e,t,r)&&n(s,i,c,d,e,t,r))&&(a[u]=!0),u++}),o++,i=l}}),i}var p=n(f),m=`_owner`,h=Object.prototype.hasOwnProperty;function g(e,t,n,r){var i=Object.keys(e),a=i.length;if(Object.keys(t).length!==a)return!1;for(var o;a-->0;){if(o=i[a],o===m){var s=!!e.$$typeof,c=!!t.$$typeof;if((s||c)&&s!==c)return!1}if(!h.call(t,o)||!n(e[o],t[o],o,o,e,t,r))return!1}return!0}var _=n(g);function v(e,t){return e.source===t.source&&e.flags===t.flags}function y(e,t,n,r){var i=e.size===t.size;if(!i)return!1;if(!e.size)return!0;var a={};return e.forEach(function(o,s){if(i){var c=!1,l=0;t.forEach(function(i,u){!c&&!a[l]&&(c=n(o,i,s,u,e,t,r))&&(a[l]=!0),l++}),i=c}}),i}var b=n(y),x=Object.freeze({areArraysEqual:l,areDatesEqual:d,areMapsEqual:f,areObjectsEqual:g,areRegExpsEqual:v,areSetsEqual:y,createIsNestedEqual:t}),S=Object.freeze({areArraysEqual:u,areDatesEqual:d,areMapsEqual:p,areObjectsEqual:_,areRegExpsEqual:v,areSetsEqual:b,createIsNestedEqual:t}),C=c(x);function w(e,t){return C(e,t,void 0)}var T=c(r(x,{createIsNestedEqual:function(){return o}}));function E(e,t){return T(e,t,void 0)}var D=c(S);function O(e,t){return D(e,t,new WeakMap)}var k=c(r(S,{createIsNestedEqual:function(){return o}}));function A(e,t){return k(e,t,new WeakMap)}function j(e){return c(r(x,e(x)))}function M(e){var t=c(r(S,e(S)));return(function(e,n,r){return r===void 0&&(r=new WeakMap),t(e,n,r)})}e.circularDeepEqual=O,e.circularShallowEqual=A,e.createCustomCircularEqual=M,e.createCustomEqual=j,e.deepEqual=w,e.sameValueZeroEqual=o,e.shallowEqual=E,Object.defineProperty(e,"__esModule",{value:!0})}))})),Bd=i(((e,t)=>{t.exports=function(e,t,n){return e===t||e.className===t.className&&n(e.style,t.style)&&e.width===t.width&&e.autoSize===t.autoSize&&e.cols===t.cols&&e.draggableCancel===t.draggableCancel&&e.draggableHandle===t.draggableHandle&&n(e.verticalCompact,t.verticalCompact)&&n(e.compactType,t.compactType)&&n(e.layout,t.layout)&&n(e.margin,t.margin)&&n(e.containerPadding,t.containerPadding)&&e.rowHeight===t.rowHeight&&e.maxRows===t.maxRows&&e.isBounded===t.isBounded&&e.isDraggable===t.isDraggable&&e.isResizable===t.isResizable&&e.allowOverlap===t.allowOverlap&&e.preventCollision===t.preventCollision&&e.useCSSTransforms===t.useCSSTransforms&&e.transformScale===t.transformScale&&e.isDroppable===t.isDroppable&&n(e.resizeHandles,t.resizeHandles)&&n(e.resizeHandle,t.resizeHandle)&&e.onLayoutChange===t.onLayoutChange&&e.onDragStart===t.onDragStart&&e.onDrag===t.onDrag&&e.onDragStop===t.onDragStop&&e.onResizeStart===t.onResizeStart&&e.onResize===t.onResize&&e.onResizeStop===t.onResizeStop&&e.onDrop===t.onDrop&&n(e.droppingItem,t.droppingItem)&&n(e.innerRef,t.innerRef)}})),Vd=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.bottom=l,e.childrenEqual=h,e.cloneLayout=u,e.cloneLayoutItem=m,e.collides=_,e.compact=v,e.compactItem=x,e.compactType=oe,e.correctBounds=S,e.fastPositionEqual=g,e.fastRGLPropsEqual=void 0,e.getAllCollisions=T,e.getFirstCollision=w,e.getLayoutItem=C,e.getStatics=E,e.modifyLayout=f,e.moveElement=D,e.moveElementAwayFromCollision=O,e.noop=void 0,e.perc=k,e.resizeItemInDirection=z,e.setTopLeft=te,e.setTransform=ee,e.sortLayoutItems=ne,e.sortLayoutItemsByColRow=re,e.sortLayoutItemsByRowCol=B,e.synchronizeLayoutWithChildren=ie,e.validateLayout=ae,e.withLayoutItem=p;var t=zd(),n=r(d());function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?i(Object(n),!0).forEach(function(t){o(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function o(e,t,n){return(t=s(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e){var t=c(e,`string`);return typeof t==`symbol`?t:t+``}function c(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function l(e){let t=0,n;for(let r=0,i=e.length;r<i;r++)n=e[r].y+e[r].h,n>t&&(t=n);return t}function u(e){let t=Array(e.length);for(let n=0,r=e.length;n<r;n++)t[n]=m(e[n]);return t}function f(e,t){let n=Array(e.length);for(let r=0,i=e.length;r<i;r++)t.i===e[r].i?n[r]=t:n[r]=e[r];return n}function p(e,t,n){let r=C(e,t);return r?(r=n(m(r)),e=f(e,r),[e,r]):[e,null]}function m(e){return{w:e.w,h:e.h,x:e.x,y:e.y,i:e.i,minW:e.minW,maxW:e.maxW,minH:e.minH,maxH:e.maxH,moved:!!e.moved,static:!!e.static,isDraggable:e.isDraggable,isResizable:e.isResizable,resizeHandles:e.resizeHandles,isBounded:e.isBounded}}function h(e,r){return(0,t.deepEqual)(n.default.Children.map(e,e=>e?.key),n.default.Children.map(r,e=>e?.key))&&(0,t.deepEqual)(n.default.Children.map(e,e=>e?.props[`data-grid`]),n.default.Children.map(r,e=>e?.props[`data-grid`]))}e.fastRGLPropsEqual=Bd();function g(e,t){return e.left===t.left&&e.top===t.top&&e.width===t.width&&e.height===t.height}function _(e,t){return!(e.i===t.i||e.x+e.w<=t.x||e.x>=t.x+t.w||e.y+e.h<=t.y||e.y>=t.y+t.h)}function v(e,t,n,r){let i=E(e),a=l(i),o=ne(e,t),s=Array(e.length);for(let c=0,l=o.length;c<l;c++){let l=m(o[c]);l.static||(l=x(i,l,t,n,o,r,a),a=Math.max(a,l.y+l.h),i.push(l)),s[e.indexOf(o[c])]=l,l.moved=!1}return s}var y={x:`w`,y:`h`};function b(e,t,n,r){let i=y[r];t[r]+=1;let a=e.map(e=>e.i).indexOf(t.i);for(let o=a+1;o<e.length;o++){let a=e[o];if(!a.static){if(a.y>t.y+t.h)break;_(t,a)&&b(e,a,n+t[i],r)}}t[r]=n}function x(e,t,n,r,i,a,o){let s=n===`vertical`,c=n===`horizontal`;if(s)for(t.y=Math.min(typeof o==`number`?o:l(e),t.y);t.y>0&&!w(e,t);)t.y--;else if(c)for(;t.x>0&&!w(e,t);)t.x--;let u;for(;(u=w(e,t))&&!(n===null&&a);)if(c?b(i,t,u.x+u.w,`x`):b(i,t,u.y+u.h,`y`),c&&t.x+t.w>r)for(t.x=r-t.w,t.y++;t.x>0&&!w(e,t);)t.x--;return t.y=Math.max(t.y,0),t.x=Math.max(t.x,0),t}function S(e,t){let n=E(e);for(let r=0,i=e.length;r<i;r++){let i=e[r];if(i.x+i.w>t.cols&&(i.x=t.cols-i.w),i.x<0&&(i.x=0,i.w=t.cols),!i.static)n.push(i);else for(;w(n,i);)i.y++}return e}function C(e,t){for(let n=0,r=e.length;n<r;n++)if(e[n].i===t)return e[n]}function w(e,t){for(let n=0,r=e.length;n<r;n++)if(_(e[n],t))return e[n]}function T(e,t){return e.filter(e=>_(e,t))}function E(e){return e.filter(e=>e.static)}function D(e,t,n,r,i,a,o,s,c){if(t.static&&t.isDraggable!==!0||t.y===r&&t.x===n)return e;`${t.i}${String(n)}${String(r)}${t.x}${t.y}`;let l=t.x,d=t.y;typeof n==`number`&&(t.x=n),typeof r==`number`&&(t.y=r),t.moved=!0;let f=ne(e,o);(o===`vertical`&&typeof r==`number`?d>=r:o===`horizontal`&&typeof n==`number`&&l>=n)&&(f=f.reverse());let p=T(f,t),m=p.length>0;if(m&&c)return u(e);if(m&&a)return`${t.i}`,t.x=l,t.y=d,t.moved=!1,e;for(let n=0,r=p.length;n<r;n++){let r=p[n];`${t.i}${t.x}${t.y}${r.i}${r.x}${r.y}`,!r.moved&&(e=r.static?O(e,r,t,i,o,s):O(e,t,r,i,o,s))}return e}function O(e,t,n,r,i,a){let o=i===`horizontal`,s=i===`vertical`,c=t.static;if(r){r=!1;let l={x:o?Math.max(t.x-n.w,0):n.x,y:s?Math.max(t.y-n.h,0):n.y,w:n.w,h:n.h,i:`-1`},u=w(e,l),d=u&&u.y+u.h>t.y,f=u&&t.x+t.w>u.x;if(!u)return`${n.i}${l.x}${l.y}`,D(e,n,o?l.x:void 0,s?l.y:void 0,r,c,i,a);if(d&&s)return D(e,n,void 0,n.y+1,r,c,i,a);if(d&&i==null)return t.y=n.y,n.y+=n.h,e;if(f&&o)return D(e,t,n.x,void 0,r,c,i,a)}let l=o?n.x+1:void 0,u=s?n.y+1:void 0;return l==null&&u==null?e:D(e,n,o?n.x+1:void 0,s?n.y+1:void 0,r,c,i,a)}function k(e){return e*100+`%`}var A=(e,t,n,r)=>e+n>r?t:n,j=(e,t,n)=>e<0?t:n,M=e=>Math.max(0,e),N=e=>Math.max(0,e),P=(e,t,n)=>{let{left:r,height:i,width:a}=t,o=e.top-(i-e.height);return{left:r,width:a,height:j(o,e.height,i),top:N(o)}},F=(e,t,n)=>{let{top:r,left:i,height:a,width:o}=t;return{top:r,height:a,width:A(e.left,e.width,o,n),left:M(i)}},I=(e,t,n)=>{let{top:r,height:i,width:a}=t,o=e.left-(a-e.width);return{height:i,width:o<0?e.width:A(e.left,e.width,a,n),top:N(r),left:M(o)}},L=(e,t,n)=>{let{top:r,left:i,height:a,width:o}=t;return{width:o,left:i,height:j(r,e.height,a),top:N(r)}},R={n:P,ne:function(){return P(arguments.length<=0?void 0:arguments[0],F(...arguments),arguments.length<=2?void 0:arguments[2])},e:F,se:function(){return L(arguments.length<=0?void 0:arguments[0],F(...arguments),arguments.length<=2?void 0:arguments[2])},s:L,sw:function(){return L(arguments.length<=0?void 0:arguments[0],I(...arguments),arguments.length<=2?void 0:arguments[2])},w:I,nw:function(){return P(arguments.length<=0?void 0:arguments[0],I(...arguments),arguments.length<=2?void 0:arguments[2])}};function z(e,t,n,r){let i=R[e];return i?i(t,a(a({},t),n),r):n}function ee(e){let{top:t,left:n,width:r,height:i}=e,a=`translate(${n}px,${t}px)`;return{transform:a,WebkitTransform:a,MozTransform:a,msTransform:a,OTransform:a,width:`${r}px`,height:`${i}px`,position:`absolute`}}function te(e){let{top:t,left:n,width:r,height:i}=e;return{top:`${t}px`,left:`${n}px`,width:`${r}px`,height:`${i}px`,position:`absolute`}}function ne(e,t){return t===`horizontal`?re(e):t===`vertical`?B(e):e}function B(e){return e.slice(0).sort(function(e,t){return e.y>t.y||e.y===t.y&&e.x>t.x?1:e.y===t.y&&e.x===t.x?0:-1})}function re(e){return e.slice(0).sort(function(e,t){return e.x>t.x||e.x===t.x&&e.y>t.y?1:-1})}function ie(e,t,r,i,o){e||=[];let s=[];n.default.Children.forEach(t,t=>{if(t?.key==null)return;let n=C(e,String(t.key)),r=t.props[`data-grid`];n&&r==null?s.push(m(n)):r?s.push(m(a(a({},r),{},{i:t.key}))):s.push(m({w:1,h:1,x:0,y:l(s),i:String(t.key)}))});let c=S(s,{cols:r});return o?c:v(c,i,r)}function ae(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:`Layout`,n=[`x`,`y`,`w`,`h`];if(!Array.isArray(e))throw Error(t+` must be an array!`);for(let r=0,i=e.length;r<i;r++){let i=e[r];for(let e=0;e<n.length;e++){let a=n[e],o=i[a];if(typeof o!=`number`||Number.isNaN(o))throw Error(`ReactGridLayout: ${t}[${r}].${a} must be a number! Received: ${o} (${typeof o})`)}if(i.i!==void 0&&typeof i.i!=`string`)throw Error(`ReactGridLayout: ${t}[${r}].i must be a string! Received: ${i.i} (${typeof i.i})`)}}function oe(e){let{verticalCompact:t,compactType:n}=e||{};return t===!1?null:n}e.noop=()=>{}})),Hd=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.calcGridColWidth=t,e.calcGridItemPosition=r,e.calcGridItemWHPx=n,e.calcWH=a,e.calcXY=i,e.clamp=o;function t(e){let{margin:t,containerPadding:n,containerWidth:r,cols:i}=e;return(r-t[0]*(i-1)-n[0]*2)/i}function n(e,t,n){return Number.isFinite(e)?Math.round(t*e+Math.max(0,e-1)*n):e}function r(e,r,i,a,o,s){let{margin:c,containerPadding:l,rowHeight:u}=e,d=t(e),f={};return s&&s.resizing?(f.width=Math.round(s.resizing.width),f.height=Math.round(s.resizing.height)):(f.width=n(a,d,c[0]),f.height=n(o,u,c[1])),s&&s.dragging?(f.top=Math.round(s.dragging.top),f.left=Math.round(s.dragging.left)):s&&s.resizing&&typeof s.resizing.top==`number`&&typeof s.resizing.left==`number`?(f.top=Math.round(s.resizing.top),f.left=Math.round(s.resizing.left)):(f.top=Math.round((u+c[1])*i+l[1]),f.left=Math.round((d+c[0])*r+l[0])),f}function i(e,n,r,i,a){let{margin:s,containerPadding:c,cols:l,rowHeight:u,maxRows:d}=e,f=t(e),p=Math.round((r-c[0])/(f+s[0])),m=Math.round((n-c[1])/(u+s[1]));return p=o(p,0,l-i),m=o(m,0,d-a),{x:p,y:m}}function a(e,n,r,i,a,s){let{margin:c,maxRows:l,cols:u,rowHeight:d}=e,f=t(e),p=Math.round((n+c[0])/(f+c[0])),m=Math.round((r+c[1])/(d+c[1])),h=o(p,0,u-i),g=o(m,0,l-a);return[`sw`,`w`,`nw`].indexOf(s)!==-1&&(h=o(p,0,u)),[`nw`,`n`,`ne`].indexOf(s)!==-1&&(g=o(m,0,l)),{w:h,h:g}}function o(e,t,n){return Math.max(Math.min(e,n),t)}})),Ud=i(((e,t)=>{t.exports=`SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED`})),Wd=i(((e,t)=>{var n=Ud();function r(){}function i(){}i.resetWarningCache=r,t.exports=function(){function e(e,t,r,i,a,o){if(o!==n){var s=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name=`Invariant Violation`,s}}e.isRequired=e;function t(){return e}var a={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:r};return a.PropTypes=a,a}})),Gd=i(((e,t)=>{t.exports=Wd()()})),Kd=i(((e,t)=>{var n=Object.create,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t)=>{for(var n in t)r(e,n,{get:t[n],enumerable:!0})},l=(e,t,n,o)=>{if(t&&typeof t==`object`||typeof t==`function`)for(let c of a(t))!s.call(e,c)&&c!==n&&r(e,c,{get:()=>t[c],enumerable:!(o=i(t,c))||o.enumerable});return e},u=(e,t,i)=>(i=e==null?{}:n(o(e)),l(t||!e||!e.__esModule?r(i,`default`,{value:e,enumerable:!0}):i,e)),f=e=>l(r({},`__esModule`,{value:!0}),e),p={};c(p,{DraggableCore:()=>K,default:()=>q}),t.exports=f(p);var m=u(d()),g=u(Gd()),_=u(h()),v=vr();function y(e,t){for(let n=0,r=e.length;n<r;n++)if(t.apply(t,[e[n],n,e]))return e[n]}function b(e){return typeof e==`function`||Object.prototype.toString.call(e)===`[object Function]`}function x(e){return typeof e==`number`&&!isNaN(e)}function S(e){return parseInt(e,10)}function C(e,t,n){if(e[t])return Error(`Invalid prop ${t} passed to ${n} - do not set this, set it on the child.`)}var w=[`Moz`,`Webkit`,`O`,`ms`];function T(e=`transform`){if(typeof window>`u`)return``;let t=window.document?.documentElement?.style;if(!t||e in t)return``;for(let n=0;n<w.length;n++)if(E(e,w[n])in t)return w[n];return``}function E(e,t){return t?`${t}${D(e)}`:e}function D(e){let t=``,n=!0;for(let r=0;r<e.length;r++)n?(t+=e[r].toUpperCase(),n=!1):e[r]===`-`?n=!0:t+=e[r];return t}var O=T(),k=``;function A(e,t){k||=y([`matches`,`webkitMatchesSelector`,`mozMatchesSelector`,`msMatchesSelector`,`oMatchesSelector`],function(t){return b(e[t])})??``;let n=e[k];return b(n)?!!n.call(e,t):!1}function j(e,t,n){let r=e;do{if(A(r,t))return!0;if(r===n)return!1;r=r.parentNode}while(r);return!1}function M(e,t,n,r){if(!e)return;let i={capture:!0,...r},a=n;e.addEventListener?e.addEventListener(t,a,i):e.attachEvent?e.attachEvent(`on`+t,a):e[`on`+t]=a}function N(e,t,n,r){if(!e)return;let i={capture:!0,...r},a=n;e.removeEventListener?e.removeEventListener(t,a,i):e.detachEvent?e.detachEvent(`on`+t,a):e[`on`+t]=null}function P(e){let t=e.clientHeight,n=e.ownerDocument.defaultView.getComputedStyle(e);return t+=S(n.borderTopWidth),t+=S(n.borderBottomWidth),t}function F(e){let t=e.clientWidth,n=e.ownerDocument.defaultView.getComputedStyle(e);return t+=S(n.borderLeftWidth),t+=S(n.borderRightWidth),t}function I(e){let t=e.clientHeight,n=e.ownerDocument.defaultView.getComputedStyle(e);return t-=S(n.paddingTop),t-=S(n.paddingBottom),t}function L(e){let t=e.clientWidth,n=e.ownerDocument.defaultView.getComputedStyle(e);return t-=S(n.paddingLeft),t-=S(n.paddingRight),t}function R(e,t,n){let r=t===t.ownerDocument.body?{left:0,top:0}:t.getBoundingClientRect();return{x:(e.clientX+t.scrollLeft-r.left)/n,y:(e.clientY+t.scrollTop-r.top)/n}}function z(e,t){let n=te(e,t,`px`);return{[E(`transform`,O)]:n}}function ee(e,t){return te(e,t,``)}function te({x:e,y:t},n,r){let i=`translate(${e}${r},${t}${r})`;return n&&(i=`translate(${`${typeof n.x==`string`?n.x:n.x+r}`}, ${`${typeof n.y==`string`?n.y:n.y+r}`})`+i),i}function ne(e,t){return e.targetTouches&&y(e.targetTouches,e=>t===e.identifier)||e.changedTouches&&y(e.changedTouches,e=>t===e.identifier)}function B(e){if(e.targetTouches&&e.targetTouches[0])return e.targetTouches[0].identifier;if(e.changedTouches&&e.changedTouches[0])return e.changedTouches[0].identifier}function re(){return typeof __webpack_nonce__<`u`?__webpack_nonce__:void 0}function ie(e,t){if(!e)return;let n=e.getElementById(`react-draggable-style-el`);if(!n){n=e.createElement(`style`),n.type=`text/css`,n.id=`react-draggable-style-el`;let r=t??re();r&&n.setAttribute(`nonce`,r),n.innerHTML=`.react-draggable-transparent-selection *::-moz-selection {all: inherit;}
5
5
  `,n.innerHTML+=`.react-draggable-transparent-selection *::selection {all: inherit;}
6
6
  `,e.getElementsByTagName(`head`)[0].appendChild(n)}e.body&&V(e.body,`react-draggable-transparent-selection`)}function ae(e){window.requestAnimationFrame?window.requestAnimationFrame(()=>{oe(e)}):oe(e)}function oe(e){if(e)try{e.body&&H(e.body,`react-draggable-transparent-selection`);let t=e.selection;if(t)t.empty();else{let t=(e.defaultView||window).getSelection();t&&t.type!==`Caret`&&t.removeAllRanges()}}catch{}}function V(e,t){e.classList?e.classList.add(t):e.className.match(RegExp(`(?:^|\\s)${t}(?!\\S)`))||(e.className+=` ${t}`)}function H(e,t){e.classList?e.classList.remove(t):e.className=e.className.replace(RegExp(`(?:^|\\s)${t}(?!\\S)`,`g`),``)}function U(e,t,n){if(!e.props.bounds)return[t,n];let{bounds:r}=e.props;r=typeof r==`string`?r:fe(r);let i=pe(e);if(typeof r==`string`){let{ownerDocument:e}=i,t=e.defaultView;if(!t)throw Error(`Cannot resolve the owner window of the draggable node.`);let n;if(n=r===`parent`?i.parentNode:i.getRootNode().querySelector(r),!(n instanceof t.HTMLElement))throw Error(`Bounds selector "`+r+`" could not find an element.`);let a=n,o=t.getComputedStyle(i),s=t.getComputedStyle(a);r={left:-i.offsetLeft+S(s.paddingLeft)+S(o.marginLeft),top:-i.offsetTop+S(s.paddingTop)+S(o.marginTop),right:L(a)-F(i)-i.offsetLeft+S(s.paddingRight)-S(o.marginRight),bottom:I(a)-P(i)-i.offsetTop+S(s.paddingBottom)-S(o.marginBottom)}}return x(r.right)&&(t=Math.min(t,r.right)),x(r.bottom)&&(n=Math.min(n,r.bottom)),x(r.left)&&(t=Math.max(t,r.left)),x(r.top)&&(n=Math.max(n,r.top)),[t,n]}function se(e,t,n){return[Math.round(t/e[0])*e[0],Math.round(n/e[1])*e[1]]}function W(e){return e.props.axis===`both`||e.props.axis===`x`}function ce(e){return e.props.axis===`both`||e.props.axis===`y`}function le(e,t,n){let r=typeof t==`number`?ne(e,t):null;if(typeof t==`number`&&!r)return null;let i=pe(n),a=n.props.offsetParent||i.offsetParent||i.ownerDocument.body;return R(r||e,a,n.props.scale)}function ue(e,t,n){let r=!x(e.lastX),i=pe(e);return r?{node:i,deltaX:0,deltaY:0,lastX:t,lastY:n,x:t,y:n}:{node:i,deltaX:t-e.lastX,deltaY:n-e.lastY,lastX:e.lastX,lastY:e.lastY,x:t,y:n}}function de(e,t){let n=e.props.scale;return{node:t.node,x:e.state.x+t.deltaX/n,y:e.state.y+t.deltaY/n,deltaX:t.deltaX/n,deltaY:t.deltaY/n,lastX:e.state.x,lastY:e.state.y}}function fe(e){return{left:e.left,top:e.top,right:e.right,bottom:e.bottom}}function pe(e){let t=e.findDOMNode();if(!t)throw Error(`<DraggableCore>: Unmounted during event!`);return t}var me=u(d()),G=u(Gd()),he=u(h()),ge=typeof process<`u`&&{}.DRAGGABLE_DEBUG?console.log.bind(console):function(){},_e={touch:{start:`touchstart`,move:`touchmove`,stop:`touchend`},mouse:{start:`mousedown`,move:`mousemove`,stop:`mouseup`}},ve=_e.mouse,K=class extends me.Component{constructor(){super(...arguments),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,this.touchIdentifier=null,this.mounted=!1,this.handleDragStart=e=>{if(this.props.onMouseDown(e),!this.props.allowAnyClick&&(typeof e.button==`number`&&e.button!==0||e.ctrlKey))return!1;let t=this.findDOMNode();if(!t||!t.ownerDocument||!t.ownerDocument.body)throw Error(`<DraggableCore> not mounted on DragStart!`);let{ownerDocument:n}=t;if(this.props.disabled||!(e.target instanceof n.defaultView.Node)||this.props.handle&&!j(e.target,this.props.handle,t)||this.props.cancel&&j(e.target,this.props.cancel,t))return;e.type===`touchstart`&&!this.props.allowMobileScroll&&e.preventDefault();let r=B(e);this.touchIdentifier=r;let i=le(e,r,this);if(i==null)return;let{x:a,y:o}=i,s=ue(this,a,o);ge(`DraggableCore: handleDragStart: %j`,s),ge(`calling`,this.props.onStart),this.props.onStart(e,s)!==!1&&this.mounted!==!1&&(this.props.enableUserSelectHack&&ie(n,this.props.nonce),this.dragging=!0,this.lastX=a,this.lastY=o,M(n,ve.move,this.handleDrag),M(n,ve.stop,this.handleDragStop))},this.handleDrag=e=>{let t=le(e,this.touchIdentifier,this);if(t==null)return;let{x:n,y:r}=t;if(Array.isArray(this.props.grid)){let e=n-this.lastX,t=r-this.lastY;if([e,t]=se(this.props.grid,e,t),!e&&!t)return;n=this.lastX+e,r=this.lastY+t}let i=ue(this,n,r);if(ge(`DraggableCore: handleDrag: %j`,i),this.props.onDrag(e,i)===!1||this.mounted===!1){try{this.handleDragStop(new MouseEvent(`mouseup`))}catch{let e=document.createEvent(`MouseEvents`);e.initMouseEvent(`mouseup`,!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),this.handleDragStop(e)}return}this.lastX=n,this.lastY=r},this.handleDragStop=e=>{if(!this.dragging)return;let t=le(e,this.touchIdentifier,this);if(t==null)return;let{x:n,y:r}=t;if(Array.isArray(this.props.grid)){let e=n-this.lastX||0,t=r-this.lastY||0;[e,t]=se(this.props.grid,e,t),n=this.lastX+e,r=this.lastY+t}let i=ue(this,n,r);if(this.props.onStop(e,i)===!1||this.mounted===!1)return!1;let a=this.findDOMNode();a&&this.props.enableUserSelectHack&&ae(a.ownerDocument),ge(`DraggableCore: handleDragStop: %j`,i),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,a&&(ge(`DraggableCore: Removing handlers`),N(a.ownerDocument,ve.move,this.handleDrag),N(a.ownerDocument,ve.stop,this.handleDragStop))},this.onMouseDown=e=>(ve=_e.mouse,this.handleDragStart(e)),this.onMouseUp=e=>(ve=_e.mouse,this.handleDragStop(e)),this.onTouchStart=e=>(ve=_e.touch,this.handleDragStart(e)),this.onTouchEnd=e=>(ve=_e.touch,this.handleDragStop(e))}componentDidMount(){this.mounted=!0;let e=this.findDOMNode();e&&M(e,_e.touch.start,this.onTouchStart,{passive:!1})}componentWillUnmount(){this.mounted=!1;let e=this.findDOMNode();if(e){let{ownerDocument:t}=e;N(t,_e.mouse.move,this.handleDrag),N(t,_e.touch.move,this.handleDrag),N(t,_e.mouse.stop,this.handleDragStop),N(t,_e.touch.stop,this.handleDragStop),N(e,_e.touch.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&ae(t)}}findDOMNode(){if(this.props?.nodeRef)return this.props.nodeRef.current;let e=he.default;return typeof e.findDOMNode==`function`?e.findDOMNode(this):(ge(`react-draggable: ReactDOM.findDOMNode is not available in React 19+. You must provide a nodeRef prop. See: https://github.com/react-grid-layout/react-draggable#noderef`),null)}render(){return me.cloneElement(me.Children.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}};K.displayName=`DraggableCore`,K.propTypes={allowAnyClick:G.default.bool,allowMobileScroll:G.default.bool,children:G.default.node.isRequired,disabled:G.default.bool,enableUserSelectHack:G.default.bool,offsetParent:function(e,t){if(e[t]&&e[t].nodeType!==1)throw Error(`Draggable's offsetParent must be a DOM Node.`)},grid:G.default.arrayOf(G.default.number),handle:G.default.string,cancel:G.default.string,nodeRef:G.default.object,nonce:G.default.string,onStart:G.default.func,onDrag:G.default.func,onStop:G.default.func,onMouseDown:G.default.func,scale:G.default.number,className:C,style:C,transform:C},K.defaultProps={allowAnyClick:!1,allowMobileScroll:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1};var q=class extends m.Component{constructor(e){super(e),this.onDragStart=(e,t)=>{if(ge(`Draggable: onDragStart: %j`,t),this.props.onStart(e,de(this,t))===!1)return!1;this.setState({dragging:!0,dragged:!0})},this.onDrag=(e,t)=>{if(!this.state.dragging)return!1;ge(`Draggable: onDrag: %j`,t);let n=de(this,t),r={x:n.x,y:n.y,slackX:0,slackY:0};if(this.props.bounds){let{x:e,y:t}=r;r.x+=this.state.slackX,r.y+=this.state.slackY;let[i,a]=U(this,r.x,r.y);r.x=i,r.y=a,r.slackX=this.state.slackX+(e-r.x),r.slackY=this.state.slackY+(t-r.y),n.x=r.x,n.y=r.y,n.deltaX=r.x-this.state.x,n.deltaY=r.y-this.state.y}if(this.props.onDrag(e,n)===!1)return!1;this.setState(r)},this.onDragStop=(e,t)=>{if(!this.state.dragging||this.props.onStop(e,de(this,t))===!1)return!1;ge(`Draggable: onDragStop: %j`,t);let n={dragging:!1,slackX:0,slackY:0};if(this.props.position){let{x:e,y:t}=this.props.position;n.x=e,n.y=t}this.setState(n)},this.state={dragging:!1,dragged:!1,x:e.position?e.position.x:e.defaultPosition.x,y:e.position?e.position.y:e.defaultPosition.y,prevPropsPosition:{...e.position},slackX:0,slackY:0,isElementSVG:!1},e.position&&!(e.onDrag||e.onStop)&&console.warn("A `position` was applied to this <Draggable>, without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element.")}static getDerivedStateFromProps({position:e},{prevPropsPosition:t}){return e&&(!t||e.x!==t.x||e.y!==t.y)?(ge(`Draggable: getDerivedStateFromProps %j`,{position:e,prevPropsPosition:t}),{x:e.x,y:e.y,prevPropsPosition:{...e}}):null}componentDidMount(){window.SVGElement!==void 0&&this.findDOMNode()instanceof window.SVGElement&&this.setState({isElementSVG:!0})}componentWillUnmount(){this.state.dragging&&this.setState({dragging:!1})}findDOMNode(){if(this.props?.nodeRef)return this.props.nodeRef.current;let e=_.default;return typeof e.findDOMNode==`function`?e.findDOMNode(this):null}render(){let{axis:e,bounds:t,children:n,defaultPosition:r,defaultClassName:i,defaultClassNameDragging:a,defaultClassNameDragged:o,position:s,positionOffset:c,scale:l,...u}=this.props,d={},f=null,p=!s||this.state.dragging,h=s||r,g={x:W(this)&&p?this.state.x:h.x,y:ce(this)&&p?this.state.y:h.y};this.state.isElementSVG?f=ee(g,c):d=z(g,c);let _=m.Children.only(n),y=(0,v.clsx)(_.props.className||``,i,{[a]:this.state.dragging,[o]:this.state.dragged});return m.createElement(K,{...u,onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop},m.cloneElement(_,{className:y,style:{..._.props.style,...d},transform:f}))}};q.displayName=`Draggable`,q.propTypes={...K.propTypes,axis:g.default.oneOf([`both`,`x`,`y`,`none`]),bounds:g.default.oneOfType([g.default.shape({left:g.default.number,right:g.default.number,top:g.default.number,bottom:g.default.number}),g.default.string,g.default.oneOf([!1])]),defaultClassName:g.default.string,defaultClassNameDragging:g.default.string,defaultClassNameDragged:g.default.string,defaultPosition:g.default.shape({x:g.default.number,y:g.default.number}),positionOffset:g.default.shape({x:g.default.oneOfType([g.default.number,g.default.string]),y:g.default.oneOfType([g.default.number,g.default.string])}),position:g.default.shape({x:g.default.number,y:g.default.number}),className:C,style:C,transform:C},q.defaultProps={...K.defaultProps,axis:`both`,bounds:!1,defaultClassName:`react-draggable`,defaultClassNameDragging:`react-draggable-dragging`,defaultClassNameDragged:`react-draggable-dragged`,defaultPosition:{x:0,y:0},scale:1},0&&(t.exports={DraggableCore:K})})),qd=i(((e,t)=>{var n=Kd(),r=n.DraggableCore,i=n.default||n;t.exports=i,t.exports.default=i,t.exports.DraggableCore=r})),Jd=i((e=>{e.__esModule=!0,e.cloneElement=c;var t=n(d());function n(e){return e&&e.__esModule?e:{default:e}}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?r(Object(n),!0).forEach(function(t){a(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function a(e,t,n){return(t=o(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e){var t=s(e,`string`);return typeof t==`symbol`?t:t+``}function s(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function c(e,n){return n.style&&e.props.style&&(n.style=i(i({},e.props.style),n.style)),n.className&&e.props.className&&(n.className=e.props.className+` `+n.className),t.default.cloneElement(e,n)}})),Yd=i((e=>{e.__esModule=!0,e.resizableProps=void 0;var t=n(Gd());qd();function n(e){return e&&e.__esModule?e:{default:e}}e.resizableProps={axis:t.default.oneOf([`both`,`x`,`y`,`none`]),className:t.default.string,children:t.default.element.isRequired,draggableOpts:t.default.shape({allowAnyClick:t.default.bool,cancel:t.default.string,children:t.default.node,disabled:t.default.bool,enableUserSelectHack:t.default.bool,offsetParent:typeof Element<`u`?t.default.instanceOf(Element):t.default.any,grid:t.default.arrayOf(t.default.number),handle:t.default.string,nodeRef:t.default.object,onStart:t.default.func,onDrag:t.default.func,onStop:t.default.func,onMouseDown:t.default.func,scale:t.default.number}),height:function(){var e=[...arguments];let n=e[0];return n.axis===`both`||n.axis===`y`?t.default.number.isRequired(...e):t.default.number(...e)},handle:t.default.oneOfType([t.default.node,t.default.func]),handleSize:t.default.arrayOf(t.default.number),lockAspectRatio:t.default.bool,maxConstraints:t.default.arrayOf(t.default.number),minConstraints:t.default.arrayOf(t.default.number),onResizeStop:t.default.func,onResizeStart:t.default.func,onResize:t.default.func,resizeHandles:t.default.arrayOf(t.default.oneOf([`s`,`w`,`e`,`n`,`sw`,`nw`,`se`,`ne`])),transformScale:t.default.number,width:function(){var e=[...arguments];let n=e[0];return n.axis===`both`||n.axis===`x`?t.default.number.isRequired(...e):t.default.number(...e)}}})),Xd=i((e=>{e.__esModule=!0,e.default=void 0;var t=o(d()),n=qd(),r=Jd(),i=Yd(),a=[`children`,`className`,`draggableOpts`,`width`,`height`,`handle`,`handleSize`,`lockAspectRatio`,`axis`,`minConstraints`,`maxConstraints`,`onResize`,`onResizeStop`,`onResizeStart`,`resizeHandles`,`transformScale`];function o(e,t){if(typeof WeakMap==`function`)var n=new WeakMap,r=new WeakMap;return(o=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(e===null||typeof e!=`object`&&typeof e!=`function`)return o;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,o)}for(let t in e)t!=="default"&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},s.apply(null,arguments)}function c(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?l(Object(n),!0).forEach(function(t){f(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function f(e,t,n){return(t=p(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e){var t=m(e,`string`);return typeof t==`symbol`?t:t+``}function m(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var h=class extends t.Component{constructor(){super(...arguments),this.handleRefs={},this.lastHandleRect=null,this.slack=null,this.lastSize=null}componentWillUnmount(){this.resetData()}resetData(){this.lastHandleRect=this.slack=this.lastSize=null}runConstraints(e,t){let n=this.props,r=n.minConstraints,i=n.maxConstraints,a=n.lockAspectRatio;if(!r&&!i&&!a)return[e,t];if(a){let n=this.props.width/this.props.height,r=e-this.props.width,i=t-this.props.height;Math.abs(r)>Math.abs(i*n)?t=e/n:e=t*n}let o=e,s=t,c=this.slack||[0,0],l=c[0],u=c[1];return e+=l,t+=u,r&&(e=Math.max(r[0],e),t=Math.max(r[1],t)),i&&(e=Math.min(i[0],e),t=Math.min(i[1],t)),this.slack=[l+(o-e),u+(s-t)],[e,t]}resizeHandler(e,t){return(n,r)=>{let i=r.node,a=r.deltaX,o=r.deltaY;e===`onResizeStart`&&this.resetData();let s=(this.props.axis===`both`||this.props.axis===`x`)&&t!==`n`&&t!==`s`,c=(this.props.axis===`both`||this.props.axis===`y`)&&t!==`e`&&t!==`w`;if(!s&&!c)return;let l=t[0],u=t[t.length-1],d=i.getBoundingClientRect();if(this.lastHandleRect!=null){if(u===`w`){let e=d.left-this.lastHandleRect.left;a+=e}if(l===`n`){let e=d.top-this.lastHandleRect.top;o+=e}}this.lastHandleRect=d,u===`w`&&(a=-a),l===`n`&&(o=-o);let f=this.lastSize?.width??this.props.width,p=this.lastSize?.height??this.props.height,m=f+(s?a/this.props.transformScale:0),h=p+(c?o/this.props.transformScale:0);var g=this.runConstraints(m,h);if(m=g[0],h=g[1],e===`onResizeStop`&&this.lastSize){var _=this.lastSize;m=_.width,h=_.height}let v=m!==f||h!==p;e!==`onResizeStop`&&(this.lastSize={width:m,height:h});let y=typeof this.props[e]==`function`?this.props[e]:null;y&&!(e===`onResize`&&!v)&&(n.persist==null||n.persist(),y(n,{node:i,size:{width:m,height:h},handle:t})),e===`onResizeStop`&&this.resetData()}}renderResizeHandle(e,n){let r=this.props.handle;if(!r)return t.createElement(`span`,{className:`react-resizable-handle react-resizable-handle-`+e,ref:n});if(typeof r==`function`)return r(e,n);let i=typeof r.type==`string`,a=u({ref:n},i?{}:{handleAxis:e});return t.cloneElement(r,a)}render(){let e=this.props,i=e.children,o=e.className,l=e.draggableOpts;e.width,e.height,e.handle,e.handleSize,e.lockAspectRatio,e.axis,e.minConstraints,e.maxConstraints,e.onResize,e.onResizeStop,e.onResizeStart;let d=e.resizeHandles;e.transformScale;let f=c(e,a);return(0,r.cloneElement)(i,u(u({},f),{},{className:(o?o+` `:``)+`react-resizable`,children:[...t.Children.toArray(i.props.children),...d.map(e=>{let r=this.handleRefs[e]??(this.handleRefs[e]=t.createRef());return t.createElement(n.DraggableCore,s({},l,{nodeRef:r,key:`resizableHandle-`+e,onStop:this.resizeHandler(`onResizeStop`,e),onStart:this.resizeHandler(`onResizeStart`,e),onDrag:this.resizeHandler(`onResize`,e)}),this.renderResizeHandle(e,r))})]}))}};e.default=h,h.propTypes=i.resizableProps,h.defaultProps={axis:`both`,handleSize:[20,20],lockAspectRatio:!1,minConstraints:[20,20],maxConstraints:[1/0,1/0],resizeHandles:[`se`],transformScale:1}})),Zd=i((e=>{e.__esModule=!0,e.default=void 0;var t=s(d()),n=o(Gd()),r=o(Xd()),i=Yd(),a=[`handle`,`handleSize`,`onResize`,`onResizeStart`,`onResizeStop`,`draggableOpts`,`minConstraints`,`maxConstraints`,`lockAspectRatio`,`axis`,`width`,`height`,`resizeHandles`,`style`,`transformScale`];function o(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(typeof WeakMap==`function`)var n=new WeakMap,r=new WeakMap;return(s=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(e===null||typeof e!=`object`&&typeof e!=`function`)return o;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,o)}for(let t in e)t!=="default"&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},c.apply(null,arguments)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?l(Object(n),!0).forEach(function(t){f(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function f(e,t,n){return(t=p(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e){var t=m(e,`string`);return typeof t==`symbol`?t:t+``}function m(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function h(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}var g=class extends t.Component{constructor(){super(...arguments),this.state={width:this.props.width,height:this.props.height,propsWidth:this.props.width,propsHeight:this.props.height},this.onResize=(e,t)=>{let n=t.size;this.props.onResize?(e.persist==null||e.persist(),this.setState(n,()=>this.props.onResize&&this.props.onResize(e,t))):this.setState(n)}}static getDerivedStateFromProps(e,t){return t.propsWidth!==e.width||t.propsHeight!==e.height?{width:e.width,height:e.height,propsWidth:e.width,propsHeight:e.height}:null}render(){let e=this.props,n=e.handle,i=e.handleSize;e.onResize;let o=e.onResizeStart,s=e.onResizeStop,l=e.draggableOpts,d=e.minConstraints,f=e.maxConstraints,p=e.lockAspectRatio,m=e.axis;e.width,e.height;let g=e.resizeHandles,_=e.style,v=e.transformScale,y=h(e,a);return t.createElement(r.default,{axis:m,draggableOpts:l,handle:n,handleSize:i,height:this.state.height,lockAspectRatio:p,maxConstraints:f,minConstraints:d,onResizeStart:o,onResize:this.onResize,onResizeStop:s,resizeHandles:g,transformScale:v,width:this.state.width},t.createElement(`div`,c({},y,{style:u(u({},_),{},{width:this.state.width+`px`,height:this.state.height+`px`})})))}};e.default=g,g.propTypes=u(u({},i.resizableProps),{},{children:n.default.element})})),Qd=i(((e,t)=>{t.exports=function(){throw Error(`Don't instantiate Resizable directly! Use require('react-resizable').Resizable`)},t.exports.Resizable=Xd().default,t.exports.ResizableBox=Zd().default})),$d=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.resizeHandleType=e.resizeHandleAxesType=e.default=void 0;var t=r(Gd()),n=r(d());function r(e){return e&&e.__esModule?e:{default:e}}var i=e.resizeHandleAxesType=t.default.arrayOf(t.default.oneOf([`s`,`w`,`e`,`n`,`sw`,`nw`,`se`,`ne`])),a=e.resizeHandleType=t.default.oneOfType([t.default.node,t.default.func]);e.default={className:t.default.string,style:t.default.object,width:t.default.number,autoSize:t.default.bool,cols:t.default.number,draggableCancel:t.default.string,draggableHandle:t.default.string,verticalCompact:function(e){e.verticalCompact},compactType:t.default.oneOf([`vertical`,`horizontal`]),layout:function(e){var t=e.layout;t!==void 0&&Vd().validateLayout(t,`layout`)},margin:t.default.arrayOf(t.default.number),containerPadding:t.default.arrayOf(t.default.number),rowHeight:t.default.number,maxRows:t.default.number,isBounded:t.default.bool,isDraggable:t.default.bool,isResizable:t.default.bool,allowOverlap:t.default.bool,preventCollision:t.default.bool,useCSSTransforms:t.default.bool,transformScale:t.default.number,isDroppable:t.default.bool,resizeHandles:i,resizeHandle:a,onLayoutChange:t.default.func,onDragStart:t.default.func,onDrag:t.default.func,onDragStop:t.default.func,onResizeStart:t.default.func,onResize:t.default.func,onResizeStop:t.default.func,onDrop:t.default.func,droppingItem:t.default.shape({i:t.default.string.isRequired,w:t.default.number.isRequired,h:t.default.number.isRequired}),children:function(e,t){let r=e[t],i={};n.default.Children.forEach(r,function(e){if(e?.key!=null){if(i[e.key])throw Error(`Duplicate child key "`+e.key+`" found! This will cause problems in ReactGridLayout.`);i[e.key]=!0}})},innerRef:t.default.any}})),ef=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=u(d()),n=h(),r=u(Gd()),i=qd(),a=Qd(),o=Vd(),s=Hd(),c=$d(),l=u(vr());function u(e){return e&&e.__esModule?e:{default:e}}function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?f(Object(n),!0).forEach(function(t){m(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function m(e,t,n){return(t=g(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function g(e){var t=_(e,`string`);return typeof t==`symbol`?t:t+``}function _(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var v=class extends t.default.Component{constructor(){super(...arguments),m(this,`state`,{resizing:null,dragging:null,className:``}),m(this,`elementRef`,t.default.createRef()),m(this,`onDragStart`,(e,t)=>{let{node:n}=t,{onDragStart:r,transformScale:i}=this.props;if(!r)return;let a={top:0,left:0},{offsetParent:o}=n;if(!o)return;let c=o.getBoundingClientRect(),l=n.getBoundingClientRect(),u=l.left/i,d=c.left/i,f=l.top/i,p=c.top/i;a.left=u-d+o.scrollLeft,a.top=f-p+o.scrollTop,this.setState({dragging:a});let{x:m,y:h}=(0,s.calcXY)(this.getPositionParams(),a.top,a.left,this.props.w,this.props.h);return r.call(this,this.props.i,m,h,{e,node:n,newPosition:a})}),m(this,`onDrag`,(e,t,r)=>{let{node:i,deltaX:a,deltaY:o}=t,{onDrag:c}=this.props;if(!c)return;if(!this.state.dragging)throw Error(`onDrag called before onDragStart.`);let l=this.state.dragging.top+o,u=this.state.dragging.left+a,{isBounded:d,i:f,w:p,h:m,containerWidth:h}=this.props,g=this.getPositionParams();if(d){let{offsetParent:e}=i;if(e){let{margin:t,rowHeight:n}=this.props,r=e.clientHeight-(0,s.calcGridItemWHPx)(m,n,t[1]);l=(0,s.clamp)(l,0,r);let i=(0,s.calcGridColWidth)(g),a=h-(0,s.calcGridItemWHPx)(p,i,t[0]);u=(0,s.clamp)(u,0,a)}}let _={top:l,left:u};r?this.setState({dragging:_}):(0,n.flushSync)(()=>{this.setState({dragging:_})});let{x:v,y}=(0,s.calcXY)(g,l,u,p,m);return c.call(this,f,v,y,{e,node:i,newPosition:_})}),m(this,`onDragStop`,(e,t)=>{let{node:n}=t,{onDragStop:r}=this.props;if(!r)return;if(!this.state.dragging)throw Error(`onDragEnd called before onDragStart.`);let{w:i,h:a,i:o}=this.props,{left:c,top:l}=this.state.dragging,u={top:l,left:c};this.setState({dragging:null});let{x:d,y:f}=(0,s.calcXY)(this.getPositionParams(),l,c,i,a);return r.call(this,o,d,f,{e,node:n,newPosition:u})}),m(this,`onResizeStop`,(e,t,n)=>this.onResizeHandler(e,t,n,`onResizeStop`)),m(this,`onResizeStart`,(e,t,n)=>this.onResizeHandler(e,t,n,`onResizeStart`)),m(this,`onResize`,(e,t,n)=>this.onResizeHandler(e,t,n,`onResize`))}shouldComponentUpdate(e,t){if(this.props.children!==e.children||this.props.droppingPosition!==e.droppingPosition)return!0;let n=(0,s.calcGridItemPosition)(this.getPositionParams(this.props),this.props.x,this.props.y,this.props.w,this.props.h,this.state),r=(0,s.calcGridItemPosition)(this.getPositionParams(e),e.x,e.y,e.w,e.h,t);return!(0,o.fastPositionEqual)(n,r)||this.props.useCSSTransforms!==e.useCSSTransforms}componentDidMount(){this.moveDroppingItem({})}componentDidUpdate(e){this.moveDroppingItem(e)}moveDroppingItem(e){let{droppingPosition:t}=this.props;if(!t)return;let n=this.elementRef.current;if(!n)return;let r=e.droppingPosition||{left:0,top:0},{dragging:i}=this.state,a=i&&t.left!==r.left||t.top!==r.top;if(!i)this.onDragStart(t.e,{node:n,deltaX:t.left,deltaY:t.top});else if(a){let e=t.left-i.left,r=t.top-i.top;this.onDrag(t.e,{node:n,deltaX:e,deltaY:r},!0)}}getPositionParams(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.props;return{cols:e.cols,containerPadding:e.containerPadding,containerWidth:e.containerWidth,margin:e.margin,maxRows:e.maxRows,rowHeight:e.rowHeight}}createStyle(e){let{usePercentages:t,containerWidth:n,useCSSTransforms:r}=this.props,i;return r?i=(0,o.setTransform)(e):(i=(0,o.setTopLeft)(e),t&&(i.left=(0,o.perc)(e.left/n),i.width=(0,o.perc)(e.width/n))),i}mixinDraggable(e,n){return t.default.createElement(i.DraggableCore,{disabled:!n,onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop,handle:this.props.handle,cancel:`.react-resizable-handle`+(this.props.cancel?`,`+this.props.cancel:``),scale:this.props.transformScale,nodeRef:this.elementRef},e)}curryResizeHandler(e,t){return(n,r)=>t(n,r,e)}mixinResizable(e,n,r){let{cols:i,minW:o,minH:c,maxW:l,maxH:u,transformScale:d,resizeHandles:f,resizeHandle:p}=this.props,m=this.getPositionParams(),h=(0,s.calcGridItemPosition)(m,0,0,i,0).width,g=(0,s.calcGridItemPosition)(m,0,0,o,c),_=(0,s.calcGridItemPosition)(m,0,0,l,u),v=[g.width,g.height],y=[Math.min(_.width,h),Math.min(_.height,1/0)];return t.default.createElement(a.Resizable,{draggableOpts:{disabled:!r},className:r?void 0:`react-resizable-hide`,width:n.width,height:n.height,minConstraints:v,maxConstraints:y,onResizeStop:this.curryResizeHandler(n,this.onResizeStop),onResizeStart:this.curryResizeHandler(n,this.onResizeStart),onResize:this.curryResizeHandler(n,this.onResize),transformScale:d,resizeHandles:f,handle:p},e)}onResizeHandler(e,t,r,i){let{node:a,size:c,handle:l}=t,u=this.props[i];if(!u)return;let{x:d,y:f,i:p,maxH:m,minH:h,containerWidth:g}=this.props,{minW:_,maxW:v}=this.props,y=c;a&&(y=(0,o.resizeItemInDirection)(l,r,c,g),(0,n.flushSync)(()=>{this.setState({resizing:i===`onResizeStop`?null:y})}));let{w:b,h:x}=(0,s.calcWH)(this.getPositionParams(),y.width,y.height,d,f,l);b=(0,s.clamp)(b,Math.max(_,1),v),x=(0,s.clamp)(x,h,m),u.call(this,p,b,x,{e,node:a,size:y,handle:l})}render(){let{x:e,y:n,w:r,h:i,isDraggable:a,isResizable:o,droppingPosition:c,useCSSTransforms:u}=this.props,d=(0,s.calcGridItemPosition)(this.getPositionParams(),e,n,r,i,this.state),f=t.default.Children.only(this.props.children),m=t.default.cloneElement(f,{ref:this.elementRef,className:(0,l.default)(`react-grid-item`,f.props.className,this.props.className,{static:this.props.static,resizing:!!this.state.resizing,"react-draggable":a,"react-draggable-dragging":!!this.state.dragging,dropping:!!c,cssTransforms:u}),style:p(p(p({},this.props.style),f.props.style),this.createStyle(d))});return m=this.mixinResizable(m,d,o),m=this.mixinDraggable(m,a),m}};e.default=v,m(v,`propTypes`,{children:r.default.element,cols:r.default.number.isRequired,containerWidth:r.default.number.isRequired,rowHeight:r.default.number.isRequired,margin:r.default.array.isRequired,maxRows:r.default.number.isRequired,containerPadding:r.default.array.isRequired,x:r.default.number.isRequired,y:r.default.number.isRequired,w:r.default.number.isRequired,h:r.default.number.isRequired,minW:function(e,t){let n=e[t];if(typeof n!=`number`)return Error(`minWidth not Number`);if(n>e.w||n>e.maxW)return Error(`minWidth larger than item width/maxWidth`)},maxW:function(e,t){let n=e[t];if(typeof n!=`number`)return Error(`maxWidth not Number`);if(n<e.w||n<e.minW)return Error(`maxWidth smaller than item width/minWidth`)},minH:function(e,t){let n=e[t];if(typeof n!=`number`)return Error(`minHeight not Number`);if(n>e.h||n>e.maxH)return Error(`minHeight larger than item height/maxHeight`)},maxH:function(e,t){let n=e[t];if(typeof n!=`number`)return Error(`maxHeight not Number`);if(n<e.h||n<e.minH)return Error(`maxHeight smaller than item height/minHeight`)},i:r.default.string.isRequired,resizeHandles:c.resizeHandleAxesType,resizeHandle:c.resizeHandleType,onDragStop:r.default.func,onDragStart:r.default.func,onDrag:r.default.func,onResizeStop:r.default.func,onResizeStart:r.default.func,onResize:r.default.func,isDraggable:r.default.bool.isRequired,isResizable:r.default.bool.isRequired,isBounded:r.default.bool.isRequired,static:r.default.bool,useCSSTransforms:r.default.bool.isRequired,transformScale:r.default.number,className:r.default.string,handle:r.default.string,cancel:r.default.string,droppingPosition:r.default.shape({e:r.default.object.isRequired,left:r.default.number.isRequired,top:r.default.number.isRequired})}),m(v,`defaultProps`,{className:``,cancel:``,handle:``,minH:1,minW:1,maxH:1/0,maxW:1/0,transformScale:1})})),tf=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=l(d()),n=zd(),r=c(vr()),i=Vd(),a=Hd(),o=c(ef()),s=c($d());function c(e){return e&&e.__esModule?e:{default:e}}function l(e,t){if(typeof WeakMap==`function`)var n=new WeakMap,r=new WeakMap;return(l=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(e===null||typeof e!=`object`&&typeof e!=`function`)return o;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,o)}for(let t in e)t!=="default"&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function f(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?u(Object(n),!0).forEach(function(t){p(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function p(e,t,n){return(t=m(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){var t=h(e,`string`);return typeof t==`symbol`?t:t+``}function h(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var g=`react-grid-layout`,_=!1;try{_=/firefox/i.test(navigator.userAgent)}catch{}var v=class extends t.Component{constructor(){super(...arguments),p(this,`state`,{activeDrag:null,layout:(0,i.synchronizeLayoutWithChildren)(this.props.layout,this.props.children,this.props.cols,(0,i.compactType)(this.props),this.props.allowOverlap),mounted:!1,oldDragItem:null,oldLayout:null,oldResizeItem:null,resizing:!1,droppingDOMNode:null,children:[]}),p(this,`dragEnterCounter`,0),p(this,`onDragStart`,(e,t,n,r)=>{let{e:a,node:o}=r,{layout:s}=this.state,c=(0,i.getLayoutItem)(s,e);if(!c)return;let l={w:c.w,h:c.h,x:c.x,y:c.y,placeholder:!0,i:e};return this.setState({oldDragItem:(0,i.cloneLayoutItem)(c),oldLayout:s,activeDrag:l}),this.props.onDragStart(s,c,c,null,a,o)}),p(this,`onDrag`,(e,t,n,r)=>{let{e:a,node:o}=r,{oldDragItem:s}=this.state,{layout:c}=this.state,{cols:l,allowOverlap:u,preventCollision:d}=this.props,f=(0,i.getLayoutItem)(c,e);if(!f)return;let p={w:f.w,h:f.h,x:f.x,y:f.y,placeholder:!0,i:e};c=(0,i.moveElement)(c,f,t,n,!0,d,(0,i.compactType)(this.props),l,u),this.props.onDrag(c,s,f,p,a,o),this.setState({layout:u?c:(0,i.compact)(c,(0,i.compactType)(this.props),l),activeDrag:p})}),p(this,`onDragStop`,(e,t,n,r)=>{let{e:a,node:o}=r;if(!this.state.activeDrag)return;let{oldDragItem:s}=this.state,{layout:c}=this.state,{cols:l,preventCollision:u,allowOverlap:d}=this.props,f=(0,i.getLayoutItem)(c,e);if(!f)return;c=(0,i.moveElement)(c,f,t,n,!0,u,(0,i.compactType)(this.props),l,d);let p=d?c:(0,i.compact)(c,(0,i.compactType)(this.props),l);this.props.onDragStop(p,s,f,null,a,o);let{oldLayout:m}=this.state;this.setState({activeDrag:null,layout:p,oldDragItem:null,oldLayout:null}),this.onLayoutMaybeChanged(p,m)}),p(this,`onResizeStart`,(e,t,n,r)=>{let{e:a,node:o}=r,{layout:s}=this.state,c=(0,i.getLayoutItem)(s,e);c&&(this.setState({oldResizeItem:(0,i.cloneLayoutItem)(c),oldLayout:this.state.layout,resizing:!0}),this.props.onResizeStart(s,c,c,null,a,o))}),p(this,`onResize`,(e,t,n,r)=>{let{e:a,node:o,size:s,handle:c}=r,{oldResizeItem:l}=this.state,{layout:u}=this.state,{cols:d,preventCollision:p,allowOverlap:m}=this.props,h=!1,g,_,v,[y,b]=(0,i.withLayoutItem)(u,e,e=>{let r;return _=e.x,v=e.y,[`sw`,`w`,`nw`,`n`,`ne`].indexOf(c)!==-1&&([`sw`,`nw`,`w`].indexOf(c)!==-1&&(_=e.x+(e.w-t),t=e.x!==_&&_<0?e.w:t,_=_<0?0:_),[`ne`,`n`,`nw`].indexOf(c)!==-1&&(v=e.y+(e.h-n),n=e.y!==v&&v<0?e.h:n,v=v<0?0:v),h=!0),p&&!m&&(r=(0,i.getAllCollisions)(u,f(f({},e),{},{w:t,h:n,x:_,y:v})).filter(t=>t.i!==e.i).length>0,r&&(v=e.y,n=e.h,_=e.x,t=e.w,h=!1)),e.w=t,e.h=n,e});if(!b)return;g=y,h&&(g=(0,i.moveElement)(y,b,_,v,!0,this.props.preventCollision,(0,i.compactType)(this.props),d,m));let x={w:b.w,h:b.h,x:b.x,y:b.y,static:!0,i:e};this.props.onResize(g,l,b,x,a,o),this.setState({layout:m?g:(0,i.compact)(g,(0,i.compactType)(this.props),d),activeDrag:x})}),p(this,`onResizeStop`,(e,t,n,r)=>{let{e:a,node:o}=r,{layout:s,oldResizeItem:c}=this.state,{cols:l,allowOverlap:u}=this.props,d=(0,i.getLayoutItem)(s,e),f=u?s:(0,i.compact)(s,(0,i.compactType)(this.props),l);this.props.onResizeStop(f,c,d,null,a,o);let{oldLayout:p}=this.state;this.setState({activeDrag:null,layout:f,oldResizeItem:null,oldLayout:null,resizing:!1}),this.onLayoutMaybeChanged(f,p)}),p(this,`onDragOver`,e=>{var n;if(e.preventDefault(),e.stopPropagation(),_&&!((n=e.nativeEvent.target)!=null&&n.classList.contains(g)))return!1;let{droppingItem:r,onDropDragOver:i,margin:o,cols:s,rowHeight:c,maxRows:l,width:u,containerPadding:d,transformScale:p}=this.props,m=i?.(e);if(m===!1)return this.state.droppingDOMNode&&this.removeDroppingPlaceholder(),!1;let h=f(f({},r),m),{layout:v}=this.state,y=e.currentTarget.getBoundingClientRect(),b=e.clientX-y.left,x=e.clientY-y.top,S={left:b/p,top:x/p,e};if(!this.state.droppingDOMNode){let e={cols:s,margin:o,maxRows:l,rowHeight:c,containerWidth:u,containerPadding:d||o},n=(0,a.calcXY)(e,x,b,h.w,h.h);this.setState({droppingDOMNode:t.createElement(`div`,{key:h.i}),droppingPosition:S,layout:[...v,f(f({},h),{},{x:n.x,y:n.y,static:!1,isDraggable:!0})]})}else if(this.state.droppingPosition){let{left:e,top:t}=this.state.droppingPosition;(e!=b||t!=x)&&this.setState({droppingPosition:S})}}),p(this,`removeDroppingPlaceholder`,()=>{let{droppingItem:e,cols:t}=this.props,{layout:n}=this.state,r=(0,i.compact)(n.filter(t=>t.i!==e.i),(0,i.compactType)(this.props),t,this.props.allowOverlap);this.setState({layout:r,droppingDOMNode:null,activeDrag:null,droppingPosition:void 0})}),p(this,`onDragLeave`,e=>{e.preventDefault(),e.stopPropagation(),this.dragEnterCounter--,this.dragEnterCounter===0&&this.removeDroppingPlaceholder()}),p(this,`onDragEnter`,e=>{e.preventDefault(),e.stopPropagation(),this.dragEnterCounter++}),p(this,`onDrop`,e=>{e.preventDefault(),e.stopPropagation();let{droppingItem:t}=this.props,{layout:n}=this.state,r=n.find(e=>e.i===t.i);this.dragEnterCounter=0,this.removeDroppingPlaceholder(),this.props.onDrop(n,r,e)})}componentDidMount(){this.setState({mounted:!0}),this.onLayoutMaybeChanged(this.state.layout,this.props.layout)}static getDerivedStateFromProps(e,t){let r;return t.activeDrag?null:(!(0,n.deepEqual)(e.layout,t.propsLayout)||e.compactType!==t.compactType?r=e.layout:(0,i.childrenEqual)(e.children,t.children)||(r=t.layout),r?{layout:(0,i.synchronizeLayoutWithChildren)(r,e.children,e.cols,(0,i.compactType)(e),e.allowOverlap),compactType:e.compactType,children:e.children,propsLayout:e.layout}:null)}shouldComponentUpdate(e,t){return this.props.children!==e.children||!(0,i.fastRGLPropsEqual)(this.props,e,n.deepEqual)||this.state.activeDrag!==t.activeDrag||this.state.mounted!==t.mounted||this.state.droppingPosition!==t.droppingPosition}componentDidUpdate(e,t){if(!this.state.activeDrag){let e=this.state.layout,n=t.layout;this.onLayoutMaybeChanged(e,n)}}containerHeight(){if(!this.props.autoSize)return;let e=(0,i.bottom)(this.state.layout),t=this.props.containerPadding?this.props.containerPadding[1]:this.props.margin[1];return e*this.props.rowHeight+(e-1)*this.props.margin[1]+t*2+`px`}onLayoutMaybeChanged(e,t){t||=this.state.layout,(0,n.deepEqual)(t,e)||this.props.onLayoutChange(e)}placeholder(){let{activeDrag:e}=this.state;if(!e)return null;let{width:n,cols:r,margin:i,containerPadding:a,rowHeight:s,maxRows:c,useCSSTransforms:l,transformScale:u}=this.props;return t.createElement(o.default,{w:e.w,h:e.h,x:e.x,y:e.y,i:e.i,className:`react-grid-placeholder ${this.state.resizing?`placeholder-resizing`:``}`,containerWidth:n,cols:r,margin:i,containerPadding:a||i,maxRows:c,rowHeight:s,isDraggable:!1,isResizable:!1,isBounded:!1,useCSSTransforms:l,transformScale:u},t.createElement(`div`,null))}processGridItem(e,n){if(!e||!e.key)return;let r=(0,i.getLayoutItem)(this.state.layout,String(e.key));if(!r)return null;let{width:a,cols:s,margin:c,containerPadding:l,rowHeight:u,maxRows:d,isDraggable:f,isResizable:p,isBounded:m,useCSSTransforms:h,transformScale:g,draggableCancel:_,draggableHandle:v,resizeHandles:y,resizeHandle:b}=this.props,{mounted:x,droppingPosition:S}=this.state,C=typeof r.isDraggable==`boolean`?r.isDraggable:!r.static&&f,w=typeof r.isResizable==`boolean`?r.isResizable:!r.static&&p,T=r.resizeHandles||y,E=C&&m&&r.isBounded!==!1;return t.createElement(o.default,{containerWidth:a,cols:s,margin:c,containerPadding:l||c,maxRows:d,rowHeight:u,cancel:_,handle:v,onDragStop:this.onDragStop,onDragStart:this.onDragStart,onDrag:this.onDrag,onResizeStart:this.onResizeStart,onResize:this.onResize,onResizeStop:this.onResizeStop,isDraggable:C,isResizable:w,isBounded:E,useCSSTransforms:h&&x,usePercentages:!x,transformScale:g,w:r.w,h:r.h,x:r.x,y:r.y,i:r.i,minH:r.minH,minW:r.minW,maxH:r.maxH,maxW:r.maxW,static:r.static,droppingPosition:n?S:void 0,resizeHandles:T,resizeHandle:b},e)}render(){let{className:e,style:n,isDroppable:a,innerRef:o}=this.props,s=(0,r.default)(g,e),c=f({height:this.containerHeight()},n);return t.createElement(`div`,{ref:o,className:s,style:c,onDrop:a?this.onDrop:i.noop,onDragLeave:a?this.onDragLeave:i.noop,onDragEnter:a?this.onDragEnter:i.noop,onDragOver:a?this.onDragOver:i.noop},t.Children.map(this.props.children,e=>this.processGridItem(e)),a&&this.state.droppingDOMNode&&this.processGridItem(this.state.droppingDOMNode,!0),this.placeholder())}};e.default=v,p(v,`displayName`,`ReactGridLayout`),p(v,`propTypes`,s.default),p(v,`defaultProps`,{autoSize:!0,cols:12,className:``,style:{},draggableHandle:``,draggableCancel:``,containerPadding:null,rowHeight:150,maxRows:1/0,layout:[],margin:[10,10],isBounded:!1,isDraggable:!0,isResizable:!0,allowOverlap:!1,isDroppable:!1,useCSSTransforms:!0,transformScale:1,verticalCompact:!0,compactType:`vertical`,preventCollision:!1,droppingItem:{i:`__dropping-elem__`,h:1,w:1},resizeHandles:[`se`],onLayoutChange:i.noop,onDragStart:i.noop,onDrag:i.noop,onDragStop:i.noop,onResizeStart:i.noop,onResize:i.noop,onResizeStop:i.noop,onDrop:i.noop,onDropDragOver:i.noop})})),nf=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.findOrGenerateResponsiveLayout=i,e.getBreakpointFromWidth=n,e.getColsFromBreakpoint=r,e.sortBreakpoints=a;var t=Vd();function n(e,t){let n=a(e),r=n[0];for(let i=1,a=n.length;i<a;i++){let a=n[i];t>e[a]&&(r=a)}return r}function r(e,t){if(!t[e])throw Error("ResponsiveReactGridLayout: `cols` entry for breakpoint "+e+` is missing!`);return t[e]}function i(e,n,r,i,o,s){if(e[r])return(0,t.cloneLayout)(e[r]);let c=e[i],l=a(n),u=l.slice(l.indexOf(r));for(let t=0,n=u.length;t<n;t++){let n=u[t];if(e[n]){c=e[n];break}}return c=(0,t.cloneLayout)(c||[]),(0,t.compact)((0,t.correctBounds)(c,{cols:o}),s,o)}function a(e){return Object.keys(e).sort(function(t,n){return e[t]-e[n]})}})),rf=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=l(d()),n=c(Gd()),r=zd(),i=Vd(),a=nf(),o=c(tf()),s=[`breakpoint`,`breakpoints`,`cols`,`layouts`,`margin`,`containerPadding`,`onBreakpointChange`,`onLayoutChange`,`onWidthChange`];function c(e){return e&&e.__esModule?e:{default:e}}function l(e,t){if(typeof WeakMap==`function`)var n=new WeakMap,r=new WeakMap;return(l=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(e===null||typeof e!=`object`&&typeof e!=`function`)return o;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,o)}for(let t in e)t!=="default"&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u.apply(null,arguments)}function f(e,t){if(e==null)return{};var n,r,i=p(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function p(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function m(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function h(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?m(Object(n),!0).forEach(function(t){g(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function g(e,t,n){return(t=_(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _(e){var t=v(e,`string`);return typeof t==`symbol`?t:t+``}function v(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var y=e=>Object.prototype.toString.call(e);function b(e,t){return e==null?null:Array.isArray(e)?e:e[t]}var x=class extends t.Component{constructor(){super(...arguments),g(this,`state`,this.generateInitialState()),g(this,`onLayoutChange`,e=>{this.props.onLayoutChange(e,h(h({},this.props.layouts),{},{[this.state.breakpoint]:e}))})}generateInitialState(){let{width:e,breakpoints:t,layouts:n,cols:r}=this.props,i=(0,a.getBreakpointFromWidth)(t,e),o=(0,a.getColsFromBreakpoint)(i,r),s=this.props.verticalCompact===!1?null:this.props.compactType;return{layout:(0,a.findOrGenerateResponsiveLayout)(n,t,i,i,o,s),breakpoint:i,cols:o}}static getDerivedStateFromProps(e,t){if(!(0,r.deepEqual)(e.layouts,t.layouts)){let{breakpoint:n,cols:r}=t;return{layout:(0,a.findOrGenerateResponsiveLayout)(e.layouts,e.breakpoints,n,n,r,e.compactType),layouts:e.layouts}}return null}componentDidUpdate(e){(this.props.width!=e.width||this.props.breakpoint!==e.breakpoint||!(0,r.deepEqual)(this.props.breakpoints,e.breakpoints)||!(0,r.deepEqual)(this.props.cols,e.cols))&&this.onWidthChange(e)}onWidthChange(e){let{breakpoints:t,cols:n,layouts:r,compactType:o}=this.props,s=this.props.breakpoint||(0,a.getBreakpointFromWidth)(this.props.breakpoints,this.props.width),c=this.state.breakpoint,l=(0,a.getColsFromBreakpoint)(s,n),u=h({},r);if(c!==s||e.breakpoints!==t||e.cols!==n){c in u||(u[c]=(0,i.cloneLayout)(this.state.layout));let e=(0,a.findOrGenerateResponsiveLayout)(u,t,s,c,l,o);e=(0,i.synchronizeLayoutWithChildren)(e,this.props.children,l,o,this.props.allowOverlap),u[s]=e,this.props.onBreakpointChange(s,l),this.props.onLayoutChange(e,u),this.setState({breakpoint:s,layout:e,cols:l})}let d=b(this.props.margin,s),f=b(this.props.containerPadding,s);this.props.onWidthChange(this.props.width,d,l,f)}render(){let e=this.props,{breakpoint:n,breakpoints:r,cols:i,layouts:a,margin:c,containerPadding:l,onBreakpointChange:d,onLayoutChange:p,onWidthChange:m}=e,h=f(e,s);return t.createElement(o.default,u({},h,{margin:b(c,this.state.breakpoint),containerPadding:b(l,this.state.breakpoint),onLayoutChange:this.onLayoutChange,layout:this.state.layout,cols:this.state.cols}))}};e.default=x,g(x,`propTypes`,{breakpoint:n.default.string,breakpoints:n.default.object,allowOverlap:n.default.bool,cols:n.default.object,margin:n.default.oneOfType([n.default.array,n.default.object]),containerPadding:n.default.oneOfType([n.default.array,n.default.object]),layouts(e,t){if(y(e[t])!==`[object Object]`)throw Error(`Layout property must be an object. Received: `+y(e[t]));Object.keys(e[t]).forEach(t=>{if(!(t in e.breakpoints))throw Error(`Each key in layouts must align with a key in breakpoints.`);(0,i.validateLayout)(e.layouts[t],`layouts.`+t)})},width:n.default.number.isRequired,onBreakpointChange:n.default.func,onLayoutChange:n.default.func,onWidthChange:n.default.func}),g(x,`defaultProps`,{breakpoints:{lg:1200,md:996,sm:768,xs:480,xxs:0},cols:{lg:12,md:10,sm:6,xs:4,xxs:2},containerPadding:{lg:null,md:null,sm:null,xs:null,xxs:null},layouts:{},margin:[10,10],allowOverlap:!1,onBreakpointChange:i.noop,onLayoutChange:i.noop,onWidthChange:i.noop})})),af=r({default:()=>Pf});function of(e,t){var n=!1,r=!1,i=0;function a(){n&&(n=!1,e()),r&&s()}function o(){yf(a)}function s(){var e=Date.now();if(n){if(e-i<bf)return;r=!0}else n=!0,r=!1,setTimeout(o,t);i=e}return s}function sf(e){return parseFloat(e)||0}function cf(e){return[...arguments].slice(1).reduce(function(t,n){var r=e[`border-`+n+`-width`];return t+sf(r)},0)}function lf(e){for(var t=[`top`,`right`,`bottom`,`left`],n={},r=0,i=t;r<i.length;r++){var a=i[r],o=e[`padding-`+a];n[a]=sf(o)}return n}function uf(e){var t=e.getBBox();return hf(0,0,t.width,t.height)}function df(e){var t=e.clientWidth,n=e.clientHeight;if(!t&&!n)return Df;var r=Ef(e).getComputedStyle(e),i=lf(r),a=i.left+i.right,o=i.top+i.bottom,s=sf(r.width),c=sf(r.height);if(r.boxSizing===`border-box`&&(Math.round(s+a)!==t&&(s-=cf(r,`left`,`right`)+a),Math.round(c+o)!==n&&(c-=cf(r,`top`,`bottom`)+o)),!ff(e)){var l=Math.round(s+a)-t,u=Math.round(c+o)-n;Math.abs(l)!==1&&(s-=l),Math.abs(u)!==1&&(c-=u)}return hf(i.left,i.top,s,c)}function ff(e){return e===Ef(e).document.documentElement}function pf(e){return _f?Of(e)?uf(e):df(e):Df}function mf(e){var t=e.x,n=e.y,r=e.width,i=e.height,a=Object.create((typeof DOMRectReadOnly<`u`?DOMRectReadOnly:Object).prototype);return Tf(a,{x:t,y:n,width:r,height:i,top:n,right:t+r,bottom:i+n,left:t}),a}function hf(e,t,n,r){return{x:e,y:t,width:n,height:r}}var gf,_f,vf,yf,bf,xf,Sf,Cf,wf,Tf,Ef,Df,Of,kf,Af,jf,Mf,Nf,Pf,Ff=t((()=>{gf=(function(){if(typeof Map<`u`)return Map;function e(e,t){var n=-1;return e.some(function(e,r){return e[0]===t&&(n=r,!0)}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var n=e(this.__entries__,t),r=this.__entries__[n];return r&&r[1]},t.prototype.set=function(t,n){var r=e(this.__entries__,t);~r?this.__entries__[r][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,r=e(n,t);~r&&n.splice(r,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){t===void 0&&(t=null);for(var n=0,r=this.__entries__;n<r.length;n++){var i=r[n];e.call(t,i[1],i[0])}},t}()})(),_f=typeof window<`u`&&typeof document<`u`&&window.document===document,vf=(function(){return typeof global<`u`&&global.Math===Math?global:typeof self<`u`&&self.Math===Math?self:typeof window<`u`&&window.Math===Math?window:Function(`return this`)()})(),yf=(function(){return typeof requestAnimationFrame==`function`?requestAnimationFrame.bind(vf):function(e){return setTimeout(function(){return e(Date.now())},1e3/60)}})(),bf=2,xf=20,Sf=[`top`,`right`,`bottom`,`left`,`width`,`height`,`size`,`weight`],Cf=typeof MutationObserver<`u`,wf=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=of(this.refresh.bind(this),xf)}return e.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},e.prototype.removeObserver=function(e){var t=this.observers_,n=t.indexOf(e);~n&&t.splice(n,1),!t.length&&this.connected_&&this.disconnect_()},e.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},e.prototype.updateObservers_=function(){var e=this.observers_.filter(function(e){return e.gatherActive(),e.hasActive()});return e.forEach(function(e){return e.broadcastActive()}),e.length>0},e.prototype.connect_=function(){!_f||this.connected_||(document.addEventListener(`transitionend`,this.onTransitionEnd_),window.addEventListener(`resize`,this.refresh),Cf?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener(`DOMSubtreeModified`,this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!_f||!this.connected_||(document.removeEventListener(`transitionend`,this.onTransitionEnd_),window.removeEventListener(`resize`,this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener(`DOMSubtreeModified`,this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=t===void 0?``:t;Sf.some(function(e){return!!~n.indexOf(e)})&&this.refresh()},e.getInstance=function(){return this.instance_||=new e,this.instance_},e.instance_=null,e}(),Tf=(function(e,t){for(var n=0,r=Object.keys(t);n<r.length;n++){var i=r[n];Object.defineProperty(e,i,{value:t[i],enumerable:!1,writable:!1,configurable:!0})}return e}),Ef=(function(e){return e&&e.ownerDocument&&e.ownerDocument.defaultView||vf}),Df=hf(0,0,0,0),Of=(function(){return typeof SVGGraphicsElement<`u`?function(e){return e instanceof Ef(e).SVGGraphicsElement}:function(e){return e instanceof Ef(e).SVGElement&&typeof e.getBBox==`function`}})(),kf=function(){function e(e){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=hf(0,0,0,0),this.target=e}return e.prototype.isActive=function(){var e=pf(this.target);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},e.prototype.broadcastRect=function(){var e=this.contentRect_;return this.broadcastWidth=e.width,this.broadcastHeight=e.height,e},e}(),Af=function(){function e(e,t){var n=mf(t);Tf(this,{target:e,contentRect:n})}return e}(),jf=function(){function e(e,t,n){if(this.activeObservations_=[],this.observations_=new gf,typeof e!=`function`)throw TypeError(`The callback provided as parameter 1 is not a function.`);this.callback_=e,this.controller_=t,this.callbackCtx_=n}return e.prototype.observe=function(e){if(!arguments.length)throw TypeError(`1 argument required, but only 0 present.`);if(!(typeof Element>`u`||!(Element instanceof Object))){if(!(e instanceof Ef(e).Element))throw TypeError(`parameter 1 is not of type "Element".`);var t=this.observations_;t.has(e)||(t.set(e,new kf(e)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(e){if(!arguments.length)throw TypeError(`1 argument required, but only 0 present.`);if(!(typeof Element>`u`||!(Element instanceof Object))){if(!(e instanceof Ef(e).Element))throw TypeError(`parameter 1 is not of type "Element".`);var t=this.observations_;t.has(e)&&(t.delete(e),t.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach(function(t){t.isActive()&&e.activeObservations_.push(t)})},e.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,t=this.activeObservations_.map(function(e){return new Af(e.target,e.broadcastRect())});this.callback_.call(e,t,e),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),Mf=typeof WeakMap<`u`?new WeakMap:new gf,Nf=function(){function e(t){if(!(this instanceof e))throw TypeError(`Cannot call a class as a function.`);if(!arguments.length)throw TypeError(`1 argument required, but only 0 present.`);var n=new jf(t,wf.getInstance(),this);Mf.set(this,n)}return e}(),[`observe`,`unobserve`,`disconnect`].forEach(function(e){Nf.prototype[e]=function(){var t;return(t=Mf.get(this))[e].apply(t,arguments)}}),Pf=(function(){return vf.ResizeObserver===void 0?Nf:vf.ResizeObserver})()})),If=i((t=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=_;var n=c(d()),r=s(Gd()),i=s((Ff(),e(af))),a=s(vr()),o=[`measureBeforeMount`];function s(e){return e&&e.__esModule?e:{default:e}}function c(e,t){if(typeof WeakMap==`function`)var n=new WeakMap,r=new WeakMap;return(c=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(e===null||typeof e!=`object`&&typeof e!=`function`)return o;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,o)}for(let t in e)t!=="default"&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l.apply(null,arguments)}function u(e,t){if(e==null)return{};var n,r,i=f(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function f(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function p(e,t,n){return(t=m(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){var t=h(e,`string`);return typeof t==`symbol`?t:t+``}function h(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var g=`react-grid-layout`;function _(e){var t;return t=class extends n.Component{constructor(){super(...arguments),p(this,`state`,{width:1280}),p(this,`elementRef`,n.createRef()),p(this,`mounted`,!1),p(this,`resizeObserver`,void 0)}componentDidMount(){this.mounted=!0,this.resizeObserver=new i.default(e=>{if(this.elementRef.current instanceof HTMLElement){let t=e[0].contentRect.width;this.setState({width:t})}});let e=this.elementRef.current;e instanceof HTMLElement&&this.resizeObserver.observe(e)}componentWillUnmount(){this.mounted=!1;let e=this.elementRef.current;e instanceof HTMLElement&&this.resizeObserver.unobserve(e),this.resizeObserver.disconnect()}render(){let t=this.props,{measureBeforeMount:r}=t,i=u(t,o);return r&&!this.mounted?n.createElement(`div`,{className:(0,a.default)(this.props.className,g),style:this.props.style,ref:this.elementRef}):n.createElement(e,l({innerRef:this.elementRef},i,this.state))}},p(t,`defaultProps`,{measureBeforeMount:!1}),p(t,`propTypes`,{measureBeforeMount:r.default.bool}),t}})),Lf=n(i(((e,t)=>{t.exports=tf().default,t.exports.utils=Vd(),t.exports.calculateUtils=Hd(),t.exports.Responsive=rf().default,t.exports.Responsive.utils=nf(),t.exports.WidthProvider=If().default}))(),1),Rf=new Map;function zf(e){Rf.set(e.type,e)}function Bf(e){return Rf.get(e)}function Vf(){return[...Rf.values()]}async function Hf(e,t,n){let r={successful:[],failed:[],pending:[]},i=[...new Set(e)],a=0;n.onProgress(0,i.length);for(let e of i){if(n.shouldStop())break;try{let n=await t([e]);r.successful.push(...n.successful),r.failed.push(...n.failed)}catch(t){r.failed.push({id:e,reason:t instanceof Error?t.message:String(t)}),a++,n.onProgress(a,i.length);break}a++,n.onProgress(a,i.length)}return r.pending=i.slice(a),r}function Uf(e){return`/workspaces/${e}/hooks`}async function Wf(e){return await X.get(Uf(e))||[]}async function Gf(e,t){return(await X.get(`${Uf(e)}/${t}`))?.content??``}async function Kf(e,t,n){await X.put(`${Uf(e)}/${t}`,{content:n})}async function qf(e,t){await X.delete(`${Uf(e)}/${t}`)}var Jf=[`example-`,`disabled-`,`_`];function Yf(e){let t=e.lastIndexOf(`/`);return{dir:t===-1?``:e.slice(0,t+1),base:t===-1?e:e.slice(t+1)}}function Xf(e){return Jf.find(t=>e.startsWith(t))??null}function Zf(e){return Xf(Yf(e).base)===null}function Qf(e){return Yf(e).base.startsWith(`example-`)}function $f(e){let{dir:t,base:n}=Yf(e),r=Xf(n);return t+(r?n.slice(r.length):`disabled-${n}`)}async function ep(e,t,n){if(Zf(t)===n)return t;let r=$f(t);return await Kf(e,r,await Gf(e,t)),await qf(e,t),r}function tp(e){let t={};for(let n of e){let e;e=n.path.includes(`/`)?n.path.split(`/`)[0]:/^(?:example-|disabled-|_)?rules\.json$/.test(n.path)?`rules`:n.path.replace(/\.js$/,``),(t[e]||=[]).push(n)}return t}function np(e){let t=e.when?.event;return Array.isArray(t)?t.map(String):t?[String(t)]:[]}function rp(e){let t=e.when?.eventPathExact??e.when?.pathExact??e.when?.path;return Array.isArray(t)?t.map(String):typeof t==`string`?[t]:[]}function ip(e){let t=String(e||``).split(`/`).filter(Boolean);return t[0]===`workspace`&&t.length>=2?{backend:`workspace:${t[1]}`,rel:t.slice(2).join(`/`)}:t[0]===`device`?t.length>=3?{backend:t[2],rel:t.slice(3).join(`/`)}:null:t.length>=2?{backend:t[1],rel:t.slice(2).join(`/`)}:null}function ap(e){let t=new URLSearchParams;return e.kind&&e.kind!==`mirror`&&t.set(`addRuleKind`,e.kind),e.path&&t.set(`addRulePath`,e.path),e.target&&t.set(`addRuleTarget`,e.target),e.storeTo&&t.set(`addRuleStoreTo`,e.storeTo),e.storeFolder&&t.set(`addRuleStoreFolder`,e.storeFolder),t}function op(e){return String(e||``).replace(/^[a-z]+:/i,``).split(`/`).filter(Boolean).join(`/`)}var sp=`rules.json`;async function cp(e){try{let t=await Gf(e,sp),n=JSON.parse(t||`{}`);return Array.isArray(n.rules)?n.rules:[]}catch{return[]}}async function lp(e,t){await Kf(e,sp,JSON.stringify({$schema:`canvas.hook-rules/v1`,rules:t},null,2)+`
7
7
  `)}async function up(e,t={}){let n=new URLSearchParams;t.status&&n.set(`status`,t.status),t.handler&&n.set(`handler`,t.handler),t.limit&&n.set(`limit`,String(t.limit));let r=n.toString();return await X.get(`${Uf(e)}/pending${r?`?${r}`:``}`)||[]}async function dp(e,t){return await X.post(`${Uf(e)}/pending/decisions`,t)}async function fp(e,t){return await X.get(`${Uf(e)}/runs/${encodeURIComponent(t)}`)}async function pp(e,t={}){let n=new URLSearchParams;t.limit&&n.set(`limit`,String(t.limit)),t.handler&&n.set(`handler`,t.handler),t.event&&n.set(`event`,t.event),t.failed&&n.set(`failed`,`true`);let r=n.toString();return await X.get(`${Uf(e)}/runs${r?`?${r}`:``}`)||[]}var mp=1e4,hp=`canvas.hooks.backfillLimit`;function gp(e){let t=Math.floor(Number(e));return!Number.isFinite(t)||t<1?100:Math.min(t,mp)}function _p(){try{let e=localStorage.getItem(hp);return e?gp(e):100}catch{return 100}}function vp(e){let t=gp(e);try{localStorage.setItem(hp,String(t))}catch{}return t}function yp(e){if(e.includes(`/`)){let t=e.split(`/`)[0];return t===`lib`||t===`rules`?null:t}return e.endsWith(`.js`)?e.replace(/\.js$/,``).replace(/^(?:example-|disabled-|_)/,``):null}async function bp(e,t){return await X.post(`${Uf(e)}/backfill`,t)}async function xp(e,t){return await X.post(`${Uf(e)}/run`,t)}async function Sp(e,t){return await X.post(`${Uf(e)}/runs/${t}/replay`,{})}async function Cp(e){return await X.get(`${Uf(e)}/meta`)}async function wp(e,t){return await X.post(`${Uf(e)}/generate`,t)}async function Tp(e,t){let n=await Gf(e,sp),r=JSON.parse(n),i=Array.isArray(r)?r:r?.rules;if(!Array.isArray(i))throw Error(`The workspace rules file is invalid. Fix it in Rules before adding a rule.`);let a=(Array.isArray(t)?t:[t]).filter(e=>!i.some(t=>t.id===e.id));if(!a.length)return;let o=Array.isArray(r)?[...i,...a]:{...r,rules:[...i,...a]};await Kf(e,sp,JSON.stringify(o,null,2)+`
@@ -26,7 +26,7 @@ Preview: {{doc.data.bodyPreview}}`,value:t.b,onChange:e=>r({b:e.target.value})})
26
26
  `).trim():``:``}function ek(e){if(!e)return;let t=$O(e),n={...e.api?{api:e.api}:{},...e.provider?{provider:e.provider}:{},...e.model?{model:e.model}:{},...e.stopReason?{stopReason:e.stopReason}:{},...e.timestamp===void 0?{}:{timestamp:e.timestamp},...e.responseId?{responseId:e.responseId}:{},...e.usage?{usage:e.usage}:{},...e.metadata?.toolCalls?{toolCalls:e.metadata.toolCalls}:{},...t?{reasoning:t}:{}};return Object.keys(n).length>0?n:void 0}function tk(e){if(typeof e==`number`)return new Date(e).toISOString();if(typeof e==`string`){let t=new Date(e);if(!Number.isNaN(t.getTime()))return t.toISOString()}return new Date().toISOString()}function nk(e=[]){return e.filter(e=>e?.role===`user`||e?.role===`assistant`).map(e=>({role:e.role,content:QO(e),timestamp:tk(e.timestamp),...e.role===`assistant`?{metadata:ek(e)}:{}})).filter(e=>e.content||e.metadata?.reasoning)}function rk(e){return{mode:e?.mode,sessionId:e?.sessionId,sessionFile:e?.sessionFile,thinkingLevel:e?.thinkingLevel,model:e?.model,messages:nk(e?.messages||[])}}function ik(e){return{current:rk(e?.current),sessions:e?.sessions}}new class{connectors=new Map;wsService=null;messageCallbacks=new Map;constructor(){this.initializeWebSocketFallback()}async initializeWebSocketFallback(){try{let e=`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}/ws`;this.wsService=new ZO(e)}catch(e){console.warn(`WebSocket fallback not available:`,e)}}registerAgent(e){if(e.type===`anthropic`){let t=new XO(e.apiKey||``,e.endpoint||`${Lr}/agents/${e.id}`);this.connectors.set(e.id,t)}}async sendMessage(e,t,n={}){let{onMessage:r,onError:i,onComplete:a,useWebSocketFallback:o=!1}=n,s=`msg_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;r&&this.messageCallbacks.set(s,r);try{if(o&&this.wsService){await this.sendMessageViaWebSocket(e,s,t,r,i),a&&a();return}let n=this.connectors.get(e);n?await n.chatStream(t,{agentId:e,messageId:s,onMessage:e=>{let t={id:e.messageId,agentId:e.agentId,content:e.content||``,timestamp:new Date,type:`agent`,streaming:!e.done,error:e.error};r&&r(t)},onError:n=>{if(console.error(`Agent connector error:`,n),n.message.includes(`getReader is not a function`)&&this.wsService){console.log(`Falling back to WebSocket streaming...`),this.sendMessageViaWebSocket(e,s,t,r,i);return}i&&i(n)},onComplete:a}):await this.sendMessageViaAPI(e,s,t,r,i,a)}catch(e){console.error(`Agent communication error:`,e),i&&i(e instanceof Error?e:Error(String(e)))}finally{this.messageCallbacks.delete(s)}}async sendMessageViaAPI(e,t,n,r,i,a){try{await X.stream(`${Lr}/agents/${e}/chat/stream`,{message:n,messageId:t},{onChunk:n=>{try{let i=JSON.parse(n),a={id:t,agentId:e,content:i.content||n,timestamp:new Date,type:`agent`,streaming:!i.done,error:i.error};r&&r(a)}catch{r&&r({id:t,agentId:e,content:n,timestamp:new Date,type:`agent`,streaming:!0})}},onError:e=>{console.error(`API streaming error:`,e),i&&i(e)},onComplete:a})}catch(e){i&&i(e instanceof Error?e:Error(String(e)))}}async sendMessageViaWebSocket(e,t,n,r,i){if(!this.wsService){i&&i(Error(`WebSocket service not available`));return}try{this.wsService.socket?.readyState!==WebSocket.OPEN&&await this.wsService.connect(),this.wsService.startChatStream(e,t,n,e=>{let t={id:e.messageId,agentId:e.agentId,content:e.content||``,timestamp:new Date,type:`agent`,streaming:!e.done,error:e.error};r&&r(t)},i)}catch(e){i&&i(e instanceof Error?e:Error(String(e)))}}async getAvailableAgents(){try{return(await X.get(`${Lr}/agents`)).agents||[]}catch(e){return console.error(`Failed to fetch available agents:`,e),[]}}async createAgent(e){let t=await X.post(`${Lr}/agents`,e);return this.registerAgent(t),t}dispose(){this.connectors.clear(),this.messageCallbacks.clear(),this.wsService&&this.wsService.disconnect()}};async function ak(e){return await X.get(`${Lr}/agents/${e}/access`)||null}async function ok(e,t){return await X.put(`${Lr}/agents/${e}/access`,t)}async function sk(e){return await X.post(`${Lr}/agents/${e}/access/token`)}async function ck(e){await X.delete(`${Lr}/agents/${e}/access`)}async function lk(e){return await X.get(`${Lr}/agents/${e}/tools`)||{tools:[],config:{}}}async function uk(){try{return await X.get(`${Lr}/agents`)||[]}catch(e){return console.error(`Failed to list agents:`,e),[]}}async function dk(e){return await X.get(`${Lr}/agents/${e}`)}async function fk(e){return rk(await X.get(`${Lr}/agents/${e}/session`))}async function pk(e){return await X.get(`${Lr}/agents/${e}/sessions`)}async function mk(e,t){return ik(await X.post(`${Lr}/agents/${e}/sessions`,t))}async function hk(e,t){return ik(await X.put(`${Lr}/agents/${e}/session`,t))}async function gk(e,t,n){return ik(await X.patch(`${Lr}/agents/${e}/sessions/${t}`,n))}async function _k(e,t){return ik(await X.delete(`${Lr}/agents/${e}/sessions/${t}`))}async function vk(e){return await X.get(`${Lr}/agents/${e}/skills`)||[]}async function yk(e,t){return await X.post(`${Lr}/agents/${e}/skills`,t)||[]}async function bk(e,t){return await X.delete(`${Lr}/agents/${e}/skills/${encodeURIComponent(t)}`)||[]}async function xk(e){return await X.post(`${Lr}/agents`,e)}async function Sk(e,t){return await X.put(`${Lr}/agents/${e}`,t)}async function Ck(e){await X.delete(`${Lr}/agents/${e}`)}async function wk(e){return await X.post(`${Lr}/agents/${e}/start`)}async function Tk(e){return await X.post(`${Lr}/agents/${e}/stop`)}async function Ek(e){return await X.get(`${Lr}/agents/${e}/status`)}async function Dk(e,t,n={}){let{onStart:r,onMessage:i,onError:a,onComplete:o,context:s,mcpContext:c,maxTokens:l,temperature:u,images:d}=n,f=``;await X.stream(`${Lr}/agents/${e}/prompt/stream`,{message:t,images:d,context:s,mcpContext:c,maxTokens:l,temperature:u},{onOpen:()=>{r?.()},onChunk:e=>{f+=e;let t=f.split(`
27
27
 
28
28
  `);f=t.pop()||``;for(let e of t){let t=e.split(`
29
- `).map(e=>e.trim()).filter(Boolean);for(let e of t){if(!e.startsWith(`data: `))continue;let t=e.slice(6).trim();if(t!==`[DONE]`)try{let e=JSON.parse(t);if(!i)continue;if(e.type===`chunk`)i(e.delta||``,!1,e.metadata||{});else if(e.type===`thinking`)i(``,!1,{...e.metadata||{},reasoningDelta:e.delta||``});else if(e.type===`complete`){let t=Array.isArray(e.messages)?[...e.messages].reverse().find(e=>e?.role===`assistant`):null;i(``,!0,{...e.metadata||{},...ek(t)||{}})}else e.type===`error`&&a&&a(Error(e.error||`Prompt stream failed`))}catch{}}}},onError:a,onComplete:o})}async function Ok(e,t){let{message:n,onMessage:r,onError:i,onComplete:a,context:o,mcpContext:s,maxTokens:c,temperature:l,images:u}=t;try{let t=await X.post(`${Lr}/agents/${e}/prompt`,{message:n,images:u,context:o,mcpContext:s,maxTokens:c,temperature:l}),i=Array.isArray(t.messages)?[...t.messages].reverse().find(e=>e?.role===`assistant`):null,d={content:QO(i),metadata:ek(i)};return r&&r(d.content,!0,d.metadata),a&&a(),d}catch(e){throw i&&i(e),e}}function kk(e){return e.map(e=>({...e,timestamp:typeof e.timestamp==`string`?e.timestamp:new Date().toISOString()}))}async function Ak(){return await X.get(`${Lr}/voice/status`)}async function jk(e,t,n={}){let r=new FormData,i=(t.type.split(`/`)[1]||`webm`).split(`;`)[0];r.append(`file`,t,`voice.${i}`);let a=new URLSearchParams;n.tts===!1&&a.set(`tts`,`false`),n.voice&&a.set(`voice`,n.voice);let o=a.toString()?`?${a.toString()}`:``;return await X.post(`${Lr}/agents/${e}/voice${o}`,r)}var Mk=[{id:`workspace`,label:`Workspace`,path:`workspaces`,description:`Files, search, devices and sharing for one workspace. These settings override account defaults.`,sections:HO,load:async()=>(await Ri()).map(e=>({id:e.name,label:e.label||e.name}))},{id:`context`,label:`Context`,path:`contexts`,description:`Choose the tree and path a context opens, and who can access that view. File storage belongs to its workspace.`,sections:GO,load:async()=>(await _s()).map(e=>({id:e.id,label:e.name||e.id}))},{id:`agent`,label:`Agent`,path:`agents`,description:`Configure one assistant: its instructions, chat model, tools and access to Canvas.`,sections:qO,load:async()=>(await uk()).map(e=>({id:e.id,label:e.label||e.name}))}];function Nk({to:e,label:t,description:n,icon:r}){return(0,$.jsxs)(Lu,{to:e,className:`group flex items-start gap-3 rounded-lg border bg-card p-4 transition-colors hover:border-primary/50 hover:bg-accent/30 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary`,children:[(0,$.jsx)(r,{className:`mt-0.5 h-5 w-5 shrink-0 text-muted-foreground`}),(0,$.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,$.jsx)(`span`,{className:`block text-sm font-semibold`,children:t}),(0,$.jsx)(`span`,{className:`mt-1 block text-sm leading-relaxed text-muted-foreground`,children:n})]}),(0,$.jsx)(Dt,{className:`mt-0.5 h-4 w-4 shrink-0 text-muted-foreground group-hover:text-primary`})]})}function Pk({group:e,query:t}){let[n,r]=(0,Q.useState)([]),[i,a]=(0,Q.useState)(``),[o,s]=(0,Q.useState)(`loading`),[c,l]=(0,Q.useState)(0);(0,Q.useEffect)(()=>{let t=!1;return e.load().then(e=>{t||(r(e),s(`ready`))}).catch(()=>{t||s(`error`)}),()=>{t=!0}},[e,c]);let u=e.sections.filter(n=>hT(t,e.label,n.label,n.description));return u.length?(0,$.jsxs)(`section`,{id:e.id,className:`scroll-mt-6 space-y-3`,children:[(0,$.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.label}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,$.jsxs)(`label`,{className:`block max-w-md text-sm font-medium`,children:[`Choose a `,e.label.toLowerCase(),(0,$.jsxs)(`select`,{className:`mt-2 h-10 w-full rounded-md border bg-background px-3 text-sm`,value:i,disabled:o!==`ready`||!n.length,onChange:e=>a(e.target.value),children:[(0,$.jsx)(`option`,{value:``,children:o===`loading`?`Loading…`:o===`error`?`Unable to load list`:n.length?`Select ${e.label.toLowerCase()}…`:`No ${e.path} available`}),n.map(e=>(0,$.jsx)(`option`,{value:e.id,children:e.label},e.id))]})]}),o===`error`&&(0,$.jsxs)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,children:[`The list could not be loaded. `,(0,$.jsx)(`button`,{type:`button`,className:`underline`,onClick:()=>{s(`loading`),l(e=>e+1)},children:`Retry`})]}),(0,$.jsxs)(`details`,{open:!!(i||t.trim()),children:[(0,$.jsx)(`summary`,{className:`cursor-pointer py-2 text-sm text-muted-foreground`,children:i?`Settings for ${n.find(e=>e.id===i)?.label||i}`:`What you can configure (${u.length})`}),(0,$.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fit,minmax(min(100%,16rem),1fr))] gap-3`,children:u.map(t=>i?(0,$.jsx)(Nk,{to:`/${e.path}/${encodeURIComponent(i)}/settings/${t.id}`,...t},t.id):(0,$.jsxs)(`div`,{className:`rounded-lg border border-dashed p-4`,children:[(0,$.jsx)(`p`,{className:`text-sm font-medium`,children:t.label}),(0,$.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:t.description})]},t.id))})]})]}):null}function Fk(){let{state:e}=RT(),[t,n]=(0,Q.useState)(``),r=pT.filter(t=>t.id!==`server`||e.user?.userType===`admin`).map(e=>({...e,items:e.items.filter(n=>hT(t,e.label,n.label,n.description))})).filter(e=>e.items.length),i=Mk.some(e=>e.sections.some(n=>hT(t,e.label,n.label,n.description)));return(0,$.jsxs)(`div`,{className:`mx-auto max-w-6xl space-y-8 pb-8 max-md:pb-rail-stack`,children:[(0,$.jsx)(Zw,{title:`Settings`,description:`Start with what you want to change. Each section explains where your changes apply.`}),(0,$.jsx)(Y,{type:`search`,className:`max-w-xl`,"aria-label":`Search all settings`,placeholder:`Find a setting: offline, folders, models, sharing…`,value:t,onChange:e=>n(e.target.value)}),r.filter(e=>e.id===`device`||e.id===`account`).map(e=>(0,$.jsxs)(`section`,{className:`space-y-3`,children:[(0,$.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.label}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,$.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fit,minmax(min(100%,16rem),1fr))] gap-3`,children:e.items.map(e=>(0,$.jsx)(Nk,{to:e.path,...e},e.path))})]},e.id)),Mk.map(e=>(0,$.jsx)(Pk,{group:e,query:t},e.id)),r.filter(e=>e.id===`server`||e.id===`information`).map(e=>(0,$.jsxs)(`section`,{className:`space-y-3`,children:[(0,$.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.label}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,$.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fit,minmax(min(100%,16rem),1fr))] gap-3`,children:e.items.map(e=>(0,$.jsx)(Nk,{to:e.path,...e},e.path))})]},e.id)),!r.length&&!i&&(0,$.jsxs)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,children:[`No settings match “`,t,`”. Try a shorter phrase or clear the search.`]})]})}var Ik=[{id:`canvas_1`,title:`Canvas Deep`,scheme:`dark`,background:`#032940`,accent:`#f2f2f2`,sources:[{type:`image/svg+xml`,src:`files/canvas_1.svg`},{type:`image/avif`,src:`files/canvas_1.avif`},{type:`image/webp`,src:`files/canvas_1.webp`}],thumb:`thumbs/canvas_1.webp`,author:`Canvas`,license:`LicenseRef-Canvas-Brand`},{id:`canvas_3`,title:`Canvas Mono Dark`,scheme:`dark`,background:`#000000`,accent:`#ffffff`,sources:[{type:`image/svg+xml`,src:`files/canvas_3.svg`},{type:`image/avif`,src:`files/canvas_3.avif`},{type:`image/webp`,src:`files/canvas_3.webp`}],thumb:`thumbs/canvas_3.webp`,author:`Canvas`,license:`LicenseRef-Canvas-Brand`},{id:`w1`,title:`Frost`,scheme:`dark`,background:`#164a6f`,accent:`#9ad9f0`,sources:[{type:`image/avif`,src:`files/w1.avif`},{type:`image/webp`,src:`files/w1.webp`},{type:`image/jpeg`,src:`files/w1.jpg`}],thumb:`thumbs/w1.webp`,author:`Peter Cui Bide`,source:`https://petercui.deviantart.com`,license:`LicenseRef-Attribution-Only`}],Lk=`/wallpapers`;function Rk(e){return Ik.find(t=>t.id===e)}function zk(e,t={}){let n=typeof e==`string`?Rk(e):e;if(!n)return null;let{base:r=Lk,types:i}=t,a=(i?n.sources.find(e=>i.includes(e.type)):n.sources[0])??n.sources[n.sources.length-1];return`${r.replace(/\/$/,``)}/${a.src}`}function Bk(e,t=Lk){let n=typeof e==`string`?Rk(e):e;return n?`${t.replace(/\/$/,``)}/${n.thumb}`:null}var Vk=[{id:`cover`,label:`Scale and Crop`,description:`Fills the screen, cropping edges as needed`},{id:`fill`,label:`Fill`,description:`Stretches to the exact screen size`},{id:`center`,label:`Centered`,description:`Original size, centered on the desk`}],Hk=`canvas:wallpaper`,Uk=`canvas-wallpaper`,Wk=`settings`,Gk=`builtin:`,Kk=Ik;function qk(e){return Bk(e)??``}function Jk(e){return`${Gk}${e}`}function Yk(e){return e?.startsWith(Gk)?e.slice(8):null}function Xk(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.image!=`string`&&t.image!==null?null:{image:t.image,fit:t.fit===`fill`||t.fit===`center`?t.fit:`cover`}}function Zk(){try{let e=localStorage.getItem(Hk);if(e){let t=Xk(JSON.parse(e));if(t)return t}}catch{}return{image:null,fit:`cover`}}var Qk=Zk(),$k=null;function eA(){return Qk}async function tA(e){let t=await new Promise((e,t)=>{let n=indexedDB.open(Uk,1),r=!1;n.onupgradeneeded=()=>n.result.createObjectStore(Wk),n.onsuccess=()=>{if(r){n.result.close();return}n.result.onversionchange=()=>n.result.close(),e(n.result)},n.onerror=()=>t(n.error),n.onblocked=()=>{r=!0,t(Error(`Close other Canvas tabs and try again.`))}});try{return await new Promise((n,r)=>{let i=t.transaction(Wk,e?`readwrite`:`readonly`),a=i.objectStore(Wk),o=e?a.put(e,Hk):a.get(Hk);i.oncomplete=()=>n(o.result),i.onerror=()=>r(i.error),i.onabort=()=>r(i.error)})}finally{t.close()}}function nA(){try{localStorage.removeItem(Hk)}catch{}}function rA(){return $k||=(async()=>{try{let e=Xk(await tA());e?Qk=e:await tA(Qk),nA()}catch{}return dA(Qk),Qk})(),$k.then(()=>Qk)}async function iA(e){await rA(),await tA(e),Qk=e,nA(),dA(e)}function aA(e){if(e.size>10485760)return Promise.reject(Error(`Image too large. Choose one up to 10 MB.`));let t=e.type||(/\.gif$/i.test(e.name)?`image/gif`:``);return t.startsWith(`image/`)?new Promise((n,r)=>{let i=new FileReader;i.onload=()=>n(String(i.result)),i.onerror=()=>r(Error(`Could not read the image. Try selecting it again.`)),i.onabort=()=>r(Error(`Reading the image was cancelled.`)),i.readAsDataURL(e.type?e:e.slice(0,e.size,t))}):Promise.reject(Error(`Pick an image file (animated GIFs are supported).`))}var oA=typeof CSS<`u`&&CSS.supports(`background-image`,`image-set(url("a.avif") type("image/avif"))`);function sA(e){if(!e)return null;let t=Yk(e);if(t===null)return`url("${e}")`;let n=Rk(t);if(!n)return null;let r=`url("${zk(n,{types:[n.sources[n.sources.length-1].type]})}")`;return!oA||n.sources.length===1?r:`image-set(${n.sources.map(e=>`url("${zk(n,{types:[e.type]})}") type("${e.type}")`).join(`, `)})`}function cA(e){return e===`fill`?`100% 100%`:e===`center`?`auto`:`cover`}var lA=null;function uA(e){let t=e.indexOf(`,`);if(t<0)throw Error(`Invalid wallpaper data URL`);let n=e.slice(5,t),r=e.slice(t+1),i;if(n.endsWith(`;base64`)){let e=atob(r);i=new Uint8Array(e.length);for(let t=0;t<e.length;t++)i[t]=e.charCodeAt(t)}else i=new TextEncoder().encode(decodeURIComponent(r));return new Blob([i],{type:n.split(`;`)[0]})}function dA(e=eA()){let t=document.documentElement.style,n=lA,r=e.image;if(r?.startsWith(`data:`))try{lA?.dataUrl!==r&&(lA={dataUrl:r,objectUrl:URL.createObjectURL(uA(r))}),r=lA.objectUrl}catch{lA=null,r=null}else lA=null;let i=sA(r);i?(t.setProperty(`--wallpaper-image`,i),t.setProperty(`--wallpaper-size`,cA(e.fit))):(t.removeProperty(`--wallpaper-image`),t.removeProperty(`--wallpaper-size`)),n&&n!==lA&&URL.revokeObjectURL(n.objectUrl)}var fA=[{id:`cards`,name:`Cards`,description:`Nested cards with connector lines. Each level indents.`},{id:`accordion-mobile`,name:`Accordion on phones (beta)`,description:`Experimental. Full-width accordion rows on a phone, cards on wider screens.`},{id:`accordion`,name:`Accordion (beta)`,description:`Experimental. Full-width rows at every depth; a depth rail, tint and colour swatch replace the indent, and open parents stick to the top while you scroll.`}],pA=`canvas:treeStyle`;function mA(){try{let e=localStorage.getItem(pA);return e===`accordion`||e===`accordion-mobile`?e:`cards`}catch{return`cards`}}var hA=mA(),gA=new Set;function _A(){return hA}function vA(e){try{e===`cards`?localStorage.removeItem(pA):localStorage.setItem(pA,e)}catch{}hA=e;for(let e of gA)e()}function yA(e){gA.add(e);let t=t=>{(t.key===pA||t.key===null)&&(hA=mA(),e())};return window.addEventListener(`storage`,t),()=>{gA.delete(e),window.removeEventListener(`storage`,t)}}function bA(){return(0,Q.useSyncExternalStore)(yA,_A,()=>`cards`)}function xA(){let e=bA(),t=p_();return e===`accordion`||e===`accordion-mobile`&&t}var SA=[{id:`canvas`,name:`Canvas`,description:`Black and white with a teal accent. Sheets of paper on a grey desk.`,swatches:[`oklch(1 0 0)`,`oklch(0 0 0)`,`oklch(0.704 0.135 183)`]},{id:`nord`,name:`Nord`,description:`Cool arctic blues, lower contrast, softer corners.`,swatches:[`oklch(0.976 0.006 251)`,`oklch(0.588 0.056 244)`,`oklch(0.686 0.062 213)`]},{id:`contrast`,name:`High Contrast`,description:`WCAG AAA text contrast, square corners, hard borders, no shadows.`,swatches:[`oklch(1 0 0)`,`oklch(0 0 0)`,`oklch(0.32 0.16 258)`]},{id:`frost`,name:`Frosted Glass`,description:`Translucent, blurred surfaces over a soft backdrop. Best with a wallpaper.`,swatches:[`oklch(0.92 0.008 250)`,`oklch(0.31 0.025 255)`,`oklch(0.55 0.05 250)`]},{id:`terminal`,name:`Terminal`,description:`Monospaced and dense. Tighter rows and chrome for large displays.`,swatches:[`oklch(0.17 0.006 152)`,`oklch(0.8 0.19 148)`,`oklch(0.75 0.12 220)`]},{id:`halflife`,name:`Half-Life`,description:`Lambda orange on black steel. Square corners; the left rail is orange.`,swatches:[`oklch(0.724 0.181 52)`,`oklch(0 0 0)`,`oklch(1 0 0)`]}],CA=SA.map(e=>e.id),wA=[{id:`system`,name:`System`},{id:`light`,name:`Light`},{id:`dark`,name:`Dark`}],TA=[{id:`auto`,name:`Auto`,description:`Match the pointer: touch on phones, mouse on desktop`},{id:`compact`,name:`Compact`,description:`Maximum rows per screen`},{id:`comfortable`,name:`Comfortable`,description:`Balanced for mouse use`},{id:`touch`,name:`Touch`,description:`Large targets for finger input`}],EA={theme:`canvas`,scheme:`light`,density:`auto`},DA=`canvas.ui.theme`;function OA(e){return typeof e==`string`&&CA.includes(e)}function kA(e){return e===`light`||e===`dark`||e===`system`}function AA(e){return e===`auto`||e===`compact`||e===`comfortable`||e===`touch`}function jA(e){let t=typeof e==`object`&&e?e:{};return{theme:OA(t.theme)?t.theme:EA.theme,scheme:kA(t.scheme)?t.scheme:EA.scheme,density:AA(t.density)?t.density:EA.density}}var MA=`(prefers-color-scheme: dark)`;function NA(){return typeof document<`u`}function PA(){return typeof window>`u`||typeof window.matchMedia!=`function`?!1:window.matchMedia(MA).matches}function FA(e){return e===`system`?PA()?`dark`:`light`:e}function IA(e){if(typeof window>`u`||typeof window.matchMedia!=`function`)return()=>{};let t=window.matchMedia(MA),n=t=>e(t.matches?`dark`:`light`);return t.addEventListener(`change`,n),()=>t.removeEventListener(`change`,n)}function LA(e){return IA(e)}function RA(){return PA()?`dark`:`light`}function zA(){return`light`}function BA(e){let t=getComputedStyle(e).getPropertyValue(`--background`).trim();if(!t)return;let n=document.querySelector(`meta[name="theme-color"]`);n||(n=document.createElement(`meta`),n.name=`theme-color`,document.head.appendChild(n)),n.content=t}function VA(e,t=NA()?document.documentElement:void 0){let n=FA(e.scheme);return t?(t.dataset.theme=e.theme,t.dataset.scheme=n,t.dataset.density=e.density,BA(t),n):n}function HA(e,t=NA()?document.documentElement:void 0){if(!t||typeof window>`u`)return VA(e,t);let n=document.createElement(`style`);n.appendChild(document.createTextNode(`*,*::before,*::after{transition:none!important;animation:none!important}`)),document.head.appendChild(n);let r=VA(e,t);return window.getComputedStyle(n).opacity,document.head.removeChild(n),r}function UA(e){let t=e??KA();if(!t)return EA;try{let e=t.getItem(DA);return e?jA(JSON.parse(e)):EA}catch{return EA}}function WA(e,t){let n=t??KA();if(n)try{n.setItem(DA,JSON.stringify(e))}catch{}}function GA(e){let t=e??KA();if(t)try{t.removeItem(DA)}catch{}}function KA(){try{return typeof localStorage<`u`?localStorage:void 0}catch{return}}function qA({children:e,initial:t,storage:n,persist:r=!0}){let[i,a]=(0,Q.useState)(()=>({...UA(n),...t})),o=(0,Q.useSyncExternalStore)(LA,RA,zA),s=i.scheme===`system`?o:i.scheme;(0,Q.useEffect)(()=>{HA({...i,scheme:s})},[i,s]),(0,Q.useEffect)(()=>{r&&WA(i,n)},[i,r,n]);let c=(0,Q.useCallback)(e=>{a(t=>t.theme===e?t:{...t,theme:e})},[]),l=(0,Q.useCallback)(e=>{a(t=>t.scheme===e?t:{...t,scheme:e})},[]),u=(0,Q.useCallback)(e=>{a(t=>t.density===e?t:{...t,density:e})},[]),d=(0,Q.useCallback)(()=>{a(e=>({...e,scheme:(e.scheme===`system`?RA():e.scheme)===`dark`?`light`:`dark`}))},[]),f=(0,Q.useCallback)(()=>{GA(n),a(EA)},[n]),p=(0,Q.useMemo)(()=>({...i,resolvedScheme:s,setTheme:c,setScheme:l,setDensity:u,toggleScheme:d,reset:f}),[i,s,c,l,u,d,f]);return(0,$.jsx)(Ks.Provider,{value:p,children:e})}var JA={system:Fn,light:Rt,dark:me};function YA(){let{theme:e,scheme:t,density:n,resolvedScheme:r,setTheme:i,setScheme:a,setDensity:o,reset:s}=qs(),c=Zg(),l=TT(),u=bA(),d=PT();return(0,$.jsxs)(`div`,{className:`space-y-8`,children:[(0,$.jsxs)(`section`,{children:[(0,$.jsx)($A,{title:`Theme`,description:`Palette, shape and typography. Each theme defines its own light and dark variants.`}),(0,$.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-3`,children:SA.map(t=>{let n=t.id===e;return(0,$.jsxs)(`button`,{type:`button`,onClick:()=>i(t.id),"aria-pressed":n,className:J(`focus-ring group flex flex-col gap-3 rounded-lg border p-4 text-left transition-colors`,n?`border-primary bg-accent`:`border-border hover:border-muted-foreground/40 hover:bg-accent/50`),children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,$.jsx)(`span`,{className:`text-sm font-medium`,children:t.name}),n&&(0,$.jsx)(oe,{className:`size-4 shrink-0 text-primary`})]}),(0,$.jsx)(`div`,{className:`flex gap-1.5`,"aria-hidden":!0,children:t.swatches.map(e=>(0,$.jsx)(`span`,{className:`size-6 rounded-full border border-border`,style:{backgroundColor:e}},e))}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:t.description})]},t.id)})})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)($A,{title:`Colour scheme`,description:t===`system`?`Following your system setting, currently ${r}.`:`Overrides your system setting.`}),(0,$.jsx)(ej,{options:wA.map(e=>{let t=JA[e.id];return{id:e.id,label:e.name,icon:(0,$.jsx)(t,{className:`size-4 shrink-0`})}}),value:t,onChange:a})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)($A,{title:`Density`,description:`Controls row height, hit-target size and shell spacing across the whole app.`}),(0,$.jsx)(ej,{options:TA.map(e=>({id:e.id,label:e.name,title:e.description})),value:n,onChange:o}),(0,$.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:TA.find(e=>e.id===n)?.description})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)($A,{title:`Layout`,description:`How menus and content share the screen. Device-local, like the wallpaper.`}),(0,$.jsx)(ej,{options:gT.map(e=>({id:e.id,label:e.name,title:e.description})),value:l,onChange:CT}),(0,$.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:gT.find(e=>e.id===l)?.description}),l===`strip`&&(0,$.jsxs)(`div`,{className:`mt-4`,children:[(0,$.jsx)(`p`,{className:`mb-2 text-sm font-medium`,children:`Navigation keys`}),(0,$.jsx)(ej,{options:ET.map(e=>({id:e.id,label:e.name,title:e.description})),value:d,onChange:MT}),(0,$.jsxs)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:[ET.find(e=>e.id===d)?.description,` `,`Left and right walk the columns, up and down switch pin rows.`]})]})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)($A,{title:`Tree style`,description:`How workspace and context trees are drawn in the menu. Device-local.`}),(0,$.jsx)(ej,{options:fA.map(e=>({id:e.id,label:e.name,title:e.description})),value:u,onChange:vA}),(0,$.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:fA.find(e=>e.id===u)?.description})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)($A,{title:`Open documents`,description:`Choose how documents open from lists, tiles and boards. Saved on this device.`}),(0,$.jsx)(ej,{options:[{id:`modal`,label:`Modal`},{id:`side`,label:`Side reading pane`}],value:c,onChange:Yg}),(0,$.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:`The reading pane opens beside the content and updates as you select another document. On small screens it opens as a drawer.`})]}),(0,$.jsx)(XA,{}),(0,$.jsx)(`section`,{children:(0,$.jsx)(`button`,{type:`button`,onClick:()=>{s(),Yg(`modal`)},className:`focus-ring rounded-md text-sm text-muted-foreground underline-offset-4 hover:text-foreground hover:underline`,children:`Reset to defaults`})})]})}function XA(){let[e,t]=(0,Q.useState)(eA),[n,r]=(0,Q.useState)(null),[i,a]=(0,Q.useState)(!0),[o,s]=(0,Q.useState)(!1),c=(0,Q.useRef)(!1);(0,Q.useEffect)(()=>{let e=!1;return rA().then(()=>{e||(t(eA()),a(!1))}),()=>{e=!0}},[]);let l=async(e,n)=>{if(!c.current){c.current=!0,s(!0);try{let i=n?{...e,image:await aA(n)}:e;await iA(i),t(i),r(null)}catch(e){r(e instanceof Error&&e.name!==`QuotaExceededError`?e.message:`Could not store the wallpaper. Free some browser storage or try a smaller image.`)}finally{c.current=!1,s(!1)}}},u=t=>{t&&l(e,t)},d=e.image!==null&&Yk(e.image)===null,f=sA(e.image);return(0,$.jsx)(`section`,{children:(0,$.jsxs)(`fieldset`,{disabled:i||o,className:`min-w-0`,children:[(0,$.jsx)($A,{title:`Wallpaper`,description:`Background image for the desk behind all panels. Without one, the theme's desk color shows (the default).`}),(0,$.jsxs)(`div`,{role:`radiogroup`,"aria-label":`Wallpaper`,className:`grid grid-cols-3 gap-3 sm:grid-cols-4 lg:grid-cols-6`,children:[(0,$.jsx)(QA,{label:`None`,isActive:e.image===null,onSelect:()=>l({...e,image:null}),children:(0,$.jsx)(`span`,{className:`flex size-full items-center justify-center surface-desk text-xs text-muted-foreground`,style:{backgroundImage:`none`},children:`None`})}),Kk.map(t=>(0,$.jsx)(QA,{label:t.title,title:`${t.title} — suits the ${t.scheme} scheme`,isActive:Yk(e.image)===t.id,onSelect:()=>l({...e,image:Jk(t.id)}),children:(0,$.jsx)(`img`,{src:qk(t),alt:``,loading:`lazy`,className:`size-full object-cover`,style:{backgroundColor:t.background}})},t.id)),d&&(0,$.jsx)(QA,{label:`Your image`,isActive:!0,onSelect:()=>{},children:(0,$.jsx)(`img`,{src:e.image??void 0,alt:``,className:`size-full object-cover`})})]}),(0,$.jsx)(ZA,{}),(0,$.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-3`,children:[(0,$.jsx)(`div`,{className:`h-20 w-32 shrink-0 rounded-md border surface-desk`,style:f?{backgroundImage:f,backgroundSize:cA(e.fit),backgroundPosition:`center`,backgroundRepeat:`no-repeat`}:void 0,"aria-hidden":!0}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,$.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,$.jsxs)(`label`,{className:`focus-ring inline-flex cursor-pointer items-center rounded-md border px-3 py-1.5 text-sm hover:bg-accent/50`,children:[d?`Change image…`:`Use your own image…`,(0,$.jsx)(`input`,{type:`file`,accept:`image/*,.gif`,className:`hidden`,onChange:e=>{u(e.target.files?.[0]),e.target.value=``}})]}),e.image&&(0,$.jsx)(`button`,{type:`button`,onClick:()=>l({...e,image:null}),className:`focus-ring rounded-md border px-3 py-1.5 text-sm text-muted-foreground hover:bg-accent/50 hover:text-foreground`,children:`Remove`})]}),(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Images and animated GIFs up to 10 MB. Stored on this device.`}),(0,$.jsx)(ej,{options:Vk.map(e=>({id:e.id,label:e.label,title:e.description})),value:e.fit,onChange:t=>l({...e,fit:t})}),n&&(0,$.jsx)(`p`,{className:`text-xs text-destructive`,children:n}),o&&(0,$.jsx)(`p`,{role:`status`,className:`text-xs text-muted-foreground`,children:`Saving wallpaper…`})]})]})]})})}function ZA(){let e=Kk.filter(e=>e.author!==`Canvas`);return e.length===0?null:(0,$.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:e.map((e,t)=>(0,$.jsxs)(`span`,{children:[t>0&&` · `,e.title,` © `,e.author,e.source&&(0,$.jsxs)($.Fragment,{children:[` `,(0,$.jsx)(`a`,{href:e.source,target:`_blank`,rel:`noreferrer noopener`,className:`focus-ring underline underline-offset-2 hover:text-foreground`,children:new URL(e.source).hostname})]})]},e.id))})}function QA({label:e,title:t,isActive:n,onSelect:r,children:i}){return(0,$.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":n,"aria-label":e,title:t??e,onClick:r,className:J(`focus-ring group relative aspect-video overflow-hidden rounded-md border transition-colors`,n?`border-primary ring-1 ring-primary`:`border-border hover:border-muted-foreground/40`),children:[i,n&&(0,$.jsx)(`span`,{className:`absolute right-1 top-1 rounded-full bg-primary p-0.5 text-primary-foreground`,children:(0,$.jsx)(oe,{className:`size-3`})})]})}function $A({title:e,description:t}){return(0,$.jsxs)(`div`,{className:`mb-3`,children:[(0,$.jsx)(`h2`,{className:`text-base font-semibold`,children:e}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t})]})}function ej({options:e,value:t,onChange:n}){return(0,$.jsx)(`div`,{role:`radiogroup`,className:`inline-flex flex-wrap gap-1 rounded-lg bg-muted p-1`,children:e.map(e=>{let r=e.id===t;return(0,$.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":r,title:e.title,onClick:()=>n(e.id),className:J(`focus-ring flex h-control items-center gap-2 rounded-md px-3 text-sm transition-colors`,r?`bg-card text-foreground shadow-elevation-1`:`text-muted-foreground hover:text-foreground`),children:[e.icon,e.label]},e.id)})})}function tj(){return(0,$.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,$.jsx)(Zw,{className:`mb-6`,title:`Appearance`,onBack:MO(),description:`Theme, colour scheme and density. Changes apply immediately and are remembered on this device.`}),(0,$.jsx)(YA,{})]})}var nj={previousTree:`Alt+Q`,nextTree:`Alt+W`},rj=`canvas:key-bindings`,ij=/^(Alt|Alt\+Shift|Ctrl\+Shift|Meta\+Shift)\+[A-Z]$/;function aj(){try{let e=JSON.parse(localStorage.getItem(rj)||`{}`),t={...nj};for(let n of Object.keys(t))(e[n]===``||ij.test(e[n]))&&(t[n]=e[n]);return t.previousTree&&t.previousTree===t.nextTree?{...nj}:t}catch{return{...nj}}}function oj(e){localStorage.setItem(rj,JSON.stringify(e))}function sj(e){return/^Key[A-Z]$/.test(e.code)?[e.ctrlKey&&`Ctrl`,e.altKey&&`Alt`,e.metaKey&&`Meta`,e.shiftKey&&`Shift`,e.code.slice(3)].filter(Boolean).join(`+`):``}function cj(e,t,n){return e[(Math.max(0,e.indexOf(t))+n+e.length)%e.length]}function lj(e,t){return Math.abs(e)>=48&&Math.abs(e)>Math.abs(t)*1.5?e<0?1:-1:0}function uj(){let[e,t]=(0,Q.useState)(aj),[n,r]=(0,Q.useState)(``),i=e=>{if(e.previousTree&&e.previousTree===e.nextTree){r(`Choose a different shortcut: that combination is already assigned.`);return}try{oj(e),t(e),r(`Saved on this device.`)}catch{r(`Could not save shortcuts in this browser.`)}};return(0,$.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,$.jsx)(Zw,{className:`mb-6`,title:`Key bindings`,onBack:MO(),description:`Web UI shortcuts, saved on this device and available offline.`}),(0,$.jsxs)(`section`,{className:`space-y-4 rounded-lg border p-4`,children:[(0,$.jsx)(`h2`,{className:`font-medium`,children:`Tree navigation`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Cycle the open workspace menu’s tabs in their displayed order, including Pins and Layers. Swipe left for next or right for previous over the tab bar. Shortcuts pause while typing or using a dialog.`}),[`previousTree`,`nextTree`].map(t=>(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,$.jsx)(`label`,{htmlFor:t,className:`min-w-32 text-sm`,children:t===`previousTree`?`Previous tree`:`Next tree`}),(0,$.jsxs)(`select`,{id:t,className:`rounded-md border bg-background p-2 text-sm`,value:e[t].split(`+`).slice(0,-1).join(`+`),onChange:n=>i({...e,[t]:n.target.value?`${n.target.value}+${e[t].slice(-1)||nj[t].slice(-1)}`:``}),children:[(0,$.jsx)(`option`,{value:``,children:`Disabled`}),[`Alt`,`Alt+Shift`,`Ctrl+Shift`,`Meta+Shift`].map(e=>(0,$.jsx)(`option`,{value:e,children:e},e))]}),(0,$.jsx)(`select`,{"aria-label":`${t===`previousTree`?`Previous`:`Next`} tree key`,disabled:!e[t],className:`rounded-md border bg-background p-2 text-sm disabled:opacity-50`,value:e[t].slice(-1)||nj[t].slice(-1),onChange:n=>i({...e,[t]:`${e[t].split(`+`).slice(0,-1).join(`+`)}+${n.target.value}`}),children:`ABCDEFGHIJKLMNOPQRSTUVWXYZ`.split(``).map(e=>(0,$.jsx)(`option`,{value:e,children:e},e))})]},t)),(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Browsers and operating systems may reserve combinations. Choose another if a shortcut does not reach Canvas. Letters refer to physical keyboard positions (Q/W on a US keyboard); Meta is Command on Mac.`}),(0,$.jsx)(`button`,{type:`button`,className:`rounded-md border px-3 py-2 text-sm hover:bg-accent`,onClick:()=>i({...nj}),children:`Restore defaults`}),(0,$.jsx)(`p`,{role:`status`,className:`text-sm`,children:n})]})]})}var dj=`offline-content-v1`,fj=`offline-api-v1`,pj=1073741824,mj={enabled:!1,budgetBytes:4*pj,excludedWorkspaces:[]},hj=1e3;function gj(e){return(e.startsWith(`/`)?e:`/${e}`).replace(/\/+$/,``)||`/`}function _j(e,t,n){return`${e}:${t}:${gj(n)}`}var vj=`canvas-offline`,yj=2,bj=null;function xj(){return bj||(bj=new Promise((e,t)=>{let n=indexedDB.open(vj,yj);n.onupgradeneeded=e=>{let t=n.result;if(t.objectStoreNames.contains(`config`)||t.createObjectStore(`config`),t.objectStoreNames.contains(`entries`)||t.createObjectStore(`entries`,{keyPath:`url`}),e.oldVersion>=1&&t.objectStoreNames.contains(`pins`)){t.deleteObjectStore(`pins`);let e=n.transaction.objectStore(`entries`).openCursor();e.onsuccess=()=>{let t=e.result;if(!t)return;let n=t.value;n.pinned&&t.update({...n,pinned:!1}),t.continue()}}t.objectStoreNames.contains(`scopes`)||t.createObjectStore(`scopes`,{keyPath:`id`})},n.onsuccess=()=>{n.result.onversionchange=()=>{n.result.close(),bj=null},e(n.result)},n.onerror=()=>{bj=null,t(n.error)}}),bj)}function Sj(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error),e.onabort=()=>n(e.error)})}function Cj(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}async function wj(e,t){return Cj((await xj()).transaction(e).objectStore(e).get(t))}async function Tj(e){return Cj((await xj()).transaction(e).objectStore(e).getAll())}async function Ej(e,t,n){let r=(await xj()).transaction(e,`readwrite`);return r.objectStore(e).put(t,n),Sj(r)}async function Dj(e,t){let n=(await xj()).transaction(e,`readwrite`);return n.objectStore(e).delete(t),Sj(n)}async function Oj(e){let t=(await xj()).transaction(e,`readwrite`);return t.objectStore(e).clear(),Sj(t)}async function kj(){try{let e=await wj(`config`,`settings`);return e?{...mj,...e}:mj}catch{return mj}}async function Aj(e){await Ej(`config`,e,`settings`)}async function jj(e,t){let n=(await xj()).transaction(`entries`,`readwrite`),r=n.objectStore(`entries`);for(let n of e){let e=r.get(n);e.onsuccess=()=>{let i=e.result;i?r.put({...i,pinned:t}):t&&r.put({url:n,kind:`content`,size:0,lastAccess:Date.now(),pinned:t})}}return Sj(n)}async function Mj(e){let t=await Tj(`entries`),n=t.filter(e=>e.kind===`api`).sort((e,t)=>e.lastAccess-t.lastAccess),r=n.slice(0,Math.max(0,n.length-hj)),i=t.filter(e=>e.kind===`content`),a=i.reduce((e,t)=>e+t.size,0),o=i.filter(e=>!e.pinned).sort((e,t)=>e.lastAccess-t.lastAccess),s=[];for(let t of o){if(a<=e)break;s.push(t),a-=t.size}if(!r.length&&!s.length)return;let[c,l]=await Promise.all([caches.open(fj),caches.open(dj)]);await Promise.all([...r.map(async e=>{await c.delete(e.url),await Dj(`entries`,e.url)}),...s.map(async e=>{await l.delete(e.url),await Dj(`entries`,e.url)})])}async function Nj(){let e=await Tj(`entries`),t=e.filter(e=>e.kind===`content`);return{contentBytes:t.reduce((e,t)=>e+t.size,0),contentCount:t.length,pinnedBytes:t.filter(e=>e.pinned).reduce((e,t)=>e+t.size,0),apiCount:e.length-t.length}}async function Pj(){await Promise.all([caches.delete(dj),caches.delete(fj)]),await Oj(`entries`),await Oj(`scopes`)}async function Fj(){return Tj(`scopes`)}async function Ij(e){return wj(`scopes`,e)}async function Lj(e){await Ej(`scopes`,e)}async function Rj(e){let t=await wj(`scopes`,e);await Dj(`scopes`,e),t?.urls.length&&await zj(t.urls)}async function zj(e){let t=await Tj(`scopes`),n=new Set(t.flatMap(e=>e.urls)),r=e.filter(e=>!n.has(e));r.length&&await jj(r,!1)}var Bj=3,Vj=`data/schema/file`,Hj=128;async function Uj({workspaceRef:e,path:t,treeName:n,treeType:r},i){let a=await kj();if(!a.enabled)throw Error(`Enable the offline cache first`);if(a.excludedWorkspaces.includes(e))throw Error(`Workspace "${e}" is excluded from offline caching`);let o=_j(e,n,t),s=gj(t),c=await Ij(o),l=((await Ra(e,s,[],{limit:1e4,treeName:n,treeType:r})).payload??[]).filter(e=>e.schema===Vj),u=[],d=0,f=0,p=!1,m=l.length;i?.({done:f,total:m,bytes:d});let h=0;await Promise.all(Array.from({length:Math.min(Bj,l.length)},async()=>{for(;h<l.length;){let t=l[h++];if(d>=a.budgetBytes*.9){p=!0;return}try{let{blob:n}=await No(e,t.id);d+=n.size,u.push(`${xr.workspaces}/${e}/documents/${t.id}/content`);try{await Zr(e,t.id,Hj),u.push(`${xr.workspaces}/${e}/documents/${t.id}/thumbnail?size=${Hj}`)}catch{}}catch{}f+=1,i?.({done:f,total:m,bytes:d})}})),await jj(u,!0);let g={id:o,workspaceRef:e,treeName:n,treeType:r,path:s,urls:u,bytes:d,warmedAt:Date.now(),...p?{truncated:!0}:{}};if(await Lj(g),c){let e=new Set(u),t=c.urls.filter(t=>!e.has(t));t.length&&await zj(t)}return g}var Wj=[{label:`1 GB`,bytes:1*pj},{label:`2 GB`,bytes:2*pj},{label:`4 GB`,bytes:4*pj},{label:`8 GB`,bytes:8*pj}];function Gj(e){return e<1048576?`${(e/1024).toFixed(0)} KB`:e<1073741824?`${(e/1048576).toFixed(1)} MB`:`${(e/pj).toFixed(2)} GB`}function Kj(){navigator.serviceWorker?.controller?.postMessage({type:`OFFLINE_SETTINGS_CHANGED`})}function qj(){let{showSuccessToast:e,showErrorToast:t}=Kr(),[n,r]=(0,Q.useState)(null),[i,a]=(0,Q.useState)(null),[o,s]=(0,Q.useState)(null),[c,l]=(0,Q.useState)([]),[u,d]=(0,Q.useState)([]),[f,p]=(0,Q.useState)({}),[m,h]=(0,Q.useState)(!1),[g,_]=(0,Q.useState)(!1),v=(0,Q.useCallback)(()=>{kj().then(r).catch(()=>{}),Nj().then(a).catch(()=>{}),Fj().then(e=>d(e.sort((e,t)=>e.id.localeCompare(t.id)))).catch(()=>{}),navigator.storage?.persisted?.().then(s).catch(()=>{})},[]);(0,Q.useEffect)(()=>{v(),Ri().then(e=>l(e.map(e=>e.name).filter(Boolean).sort())).catch(()=>{})},[v]);let y=async e=>{r(e),await Aj(e),Kj(),e.enabled&&navigator.storage?.persist?.().then(s).catch(()=>{}),Mj(e.budgetBytes).then(v).catch(()=>{})},b=e=>{if(!n)return;let t=n.excludedWorkspaces.includes(e)?n.excludedWorkspaces.filter(t=>t!==e):[...n.excludedWorkspaces,e];y({...n,excludedWorkspaces:t})},x=async()=>{h(!0);try{await Pj(),e(`Offline cache cleared`),v()}catch(e){t(e instanceof Error?e.message:`Failed to clear cache`)}finally{h(!1)}},S=async n=>{let r=_j(n.workspaceRef,n.treeName,n.path);p(e=>({...e,[r]:{done:0,total:0,bytes:0}}));try{let t=await Uj(n,e=>p(t=>({...t,[r]:e})));e(t.truncated?`Pinned ${Gj(t.bytes)} — stopped at the size budget`:`Pinned ${t.workspaceRef}:/${t.path} (${Gj(t.bytes)})`)}catch(e){t(e instanceof Error?e.message:`Failed to pin`)}finally{p(e=>{let{[r]:t,...n}=e;return n}),v()}},C=(e,t)=>{_(!1);for(let n of e)S({workspaceRef:t.workspaceName,path:n,treeName:t.treeName,treeType:t.treeType})},w=e=>({workspaceRef:e.workspaceRef,path:e.path,treeName:e.treeName||`context`,treeType:e.treeType||`context`}),T=async e=>{await Rj(e),v()};return n?(0,$.jsxs)(`div`,{className:`space-y-8`,children:[(0,$.jsxs)(`section`,{children:[(0,$.jsx)(Jj,{title:`Offline cache`,description:`Keep documents you open (and scopes you pin) readable without a connection. Cached on this device only; least-recently-used files are evicted when the size budget fills. Video streaming is not cached.`}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,$.jsxs)(`button`,{type:`button`,onClick:()=>y({...n,enabled:!n.enabled}),"aria-pressed":n.enabled,className:J(`focus-ring flex items-center gap-3 rounded-lg border p-4 text-left transition-colors`,n.enabled?`border-primary bg-accent`:`border-input hover:bg-muted/40`),children:[(0,$.jsx)(mr,{className:`h-5 w-5 shrink-0 text-muted-foreground`}),(0,$.jsxs)(`span`,{className:`flex-1`,children:[(0,$.jsx)(`span`,{className:`block text-sm font-medium`,children:n.enabled?`Enabled`:`Disabled`}),(0,$.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:n.enabled?o===!1?`Storage is not persistent — the browser may still evict the cache under disk pressure`:`Documents are cached as you browse`:`Nothing is cached for offline use`})]}),n.enabled&&(0,$.jsx)(oe,{className:`h-4 w-4 shrink-0 text-primary`})]}),n.enabled&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`p`,{className:`mb-2 text-sm font-medium`,children:`Size budget`}),(0,$.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:Wj.map(e=>(0,$.jsx)(Z,{variant:n.budgetBytes===e.bytes?`default`:`outline`,size:`sm`,onClick:()=>y({...n,budgetBytes:e.bytes}),children:e.label},e.bytes))})]}),i&&(0,$.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,$.jsxs)(`div`,{className:`flex items-baseline justify-between text-sm`,children:[(0,$.jsxs)(`span`,{children:[Gj(i.contentBytes),` of `,Gj(n.budgetBytes),` used`]}),(0,$.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[i.contentCount,` file(s)`,i.pinnedBytes>0?`, ${Gj(i.pinnedBytes)} pinned`:``]})]}),(0,$.jsx)(`div`,{className:`h-2 w-full overflow-hidden rounded-full bg-muted`,children:(0,$.jsx)(`div`,{className:`h-full rounded-full bg-primary`,style:{width:`${Math.min(100,i.contentBytes/n.budgetBytes*100)}%`}})})]}),(0,$.jsx)(`div`,{children:(0,$.jsxs)(Z,{variant:`outline`,size:`sm`,onClick:x,disabled:m,children:[m?(0,$.jsx)(Yn,{className:`mr-1.5 h-3.5 w-3.5 animate-spin`}):(0,$.jsx)(nt,{className:`mr-1.5 h-3.5 w-3.5`}),`Clear offline cache`]})})]})]})]}),n.enabled&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`section`,{children:[(0,$.jsx)(Jj,{title:`Pinned scopes`,description:`A pinned scope — a workspace, or one of its tree paths — is downloaded up front and never evicted. Scopes resolve fresh on every re-warm, so moved contexts and reorganized trees are picked up; documents that left a scope return to normal eviction.`}),(0,$.jsx)(`div`,{className:`mb-3`,children:(0,$.jsxs)(Z,{size:`sm`,onClick:()=>_(!0),disabled:!!Object.keys(f).length,children:[(0,$.jsx)(Oe,{className:`mr-1.5 h-3.5 w-3.5`}),`Pin a path…`]})}),(0,$.jsxs)(`ul`,{className:`space-y-1`,children:[u.map(e=>{let t=f[e.id];return(0,$.jsxs)(`li`,{className:`flex items-center gap-3 rounded-md border border-input px-3 py-2 text-sm`,children:[(0,$.jsxs)(`span`,{className:`flex-1 truncate font-mono text-xs sm:text-sm`,children:[e.workspaceRef,`://`,e.path.replace(/^\//,``),e.treeName&&e.treeName!==`context`&&(0,$.jsx)(`span`,{className:`ml-1.5 rounded bg-muted px-1 py-0.5 font-sans text-[10px] text-muted-foreground`,children:e.treeName})]}),t?(0,$.jsxs)(`span`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,$.jsx)(Yn,{className:`h-3.5 w-3.5 animate-spin`}),t.total>0?`${t.done}/${t.total} · ${Gj(t.bytes)}`:`listing…`]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[Gj(e.bytes),e.truncated?` (partial)`:``]}),(0,$.jsx)(Z,{variant:`ghost`,size:`sm`,onClick:()=>S(w(e)),"aria-label":`Re-warm ${e.id}`,title:`Re-warm: re-resolve the scope and download anything new`,children:(0,$.jsx)(P,{className:`h-3.5 w-3.5`})}),(0,$.jsx)(Z,{variant:`ghost`,size:`sm`,onClick:()=>T(e.id),"aria-label":`Unpin ${e.id}`,children:(0,$.jsx)(G,{className:`h-3.5 w-3.5`})})]})]},e.id)}),u.length===0&&(0,$.jsx)(`li`,{className:`rounded-md border border-dashed border-input px-3 py-4 text-center text-sm text-muted-foreground`,children:`Nothing pinned — everything relies on browse-caching and LRU`})]})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)(Jj,{title:`Workspace caching`,description:`Excluded workspaces are never cached — not even as you browse — and are not served from cache.`}),(0,$.jsx)(`ul`,{className:`space-y-1`,children:c.map(e=>{let t=n.excludedWorkspaces.includes(e);return(0,$.jsxs)(`li`,{className:`flex items-center gap-3 rounded-md border border-input px-3 py-2 text-sm`,children:[(0,$.jsx)(`span`,{className:J(`flex-1 truncate`,t&&`text-muted-foreground line-through`),children:e}),t&&(0,$.jsx)(In,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,$.jsx)(Z,{variant:t?`outline`:`ghost`,size:`sm`,onClick:()=>b(e),children:t?`Include`:`Exclude`})]},e)})})]})]}),g&&(0,$.jsx)(rm,{onClose:()=>_(!1),children:(0,$.jsx)(ch,{sizeClassName:`h-full w-[380px] max-w-[90vw] max-md:w-full`,multiple:!1,tabs:[`context`,`directory`],title:`Pin for offline…`,confirmLabel:`Pin path`,onConfirm:C,onClose:()=>_(!1)})})]}):null}function Jj({title:e,description:t}){return(0,$.jsxs)(`div`,{className:`mb-4`,children:[(0,$.jsx)(`h2`,{className:`text-base font-semibold`,children:e}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t})]})}function Yj(){return(0,$.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,$.jsx)(Zw,{className:`mb-6`,title:`Offline`,onBack:MO(),description:`Per-device offline cache: browse notes, files, photos and saved websites without a connection.`}),(0,$.jsx)(qj,{})]})}function Xj(e){let t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60);return t>0?`${t}d ${n}h ${r}m`:n>0?`${n}h ${r}m`:`${r}m`}function Zj({name:e,version:t,detail:n}){return(0,$.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 px-4 py-2.5`,children:[(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`div`,{className:`text-sm font-medium truncate`,children:e}),n&&(0,$.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:n})]}),(0,$.jsx)(`code`,{className:`text-xs text-muted-foreground shrink-0`,children:t})]})}function Qj(){let[e,t]=(0,Q.useState)(null),[n,r]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{let e=!0;return X.get(`/ping`,{skipAuth:!0}).then(n=>{e&&t(n??{})}).catch(t=>{e&&r(t instanceof Error?t.message:`Failed to reach the server`)}),()=>{e=!1}},[]);let i=[e?.commit?`commit ${e.commit.slice(0,7)}`:null,typeof e?.uptime==`number`?`up ${Xj(e.uptime)}`:null].filter(Boolean).join(` · `),a=Object.entries(e?.components??{}).sort(([e],[t])=>e.localeCompare(t));return(0,$.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,$.jsx)(Zw,{className:`mb-6`,title:`About`,onBack:MO(),description:`Versions of every Canvas component this installation is running.`}),(0,$.jsxs)(`div`,{className:`space-y-6`,children:[(0,$.jsxs)(`section`,{className:`rounded-md border border-border divide-y divide-border`,children:[(0,$.jsx)(Zj,{name:`Canvas Web`,detail:`this interface`,version:`v2.26.5`}),e?.version&&(0,$.jsx)(Zj,{name:e.productName||e.appName||`Canvas Server`,detail:i||void 0,version:`v${e.version}`})]}),a.length>0&&(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h2`,{className:`mb-2 px-1 text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:`Server components`}),(0,$.jsx)(`div`,{className:`rounded-md border border-border divide-y divide-border`,children:a.map(([e,t])=>(0,$.jsx)(Zj,{name:e,version:`v${t}`},e))})]}),n&&(0,$.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Server details unavailable: `,n]}),e?.sourceUrl&&(0,$.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[e.license?`Licensed ${e.license}. `:``,(0,$.jsx)(`a`,{href:e.sourceUrl,target:`_blank`,rel:`noreferrer`,className:`underline underline-offset-2 hover:text-foreground`,children:`Get the source code`}),`.`]})]})]})}var $j=[`onnx`,`clip`,`blip`,`openai`],eM=[`onnx`,`clip`,`blip`,`ollama`,`vllm`],tM=[{id:`openai`,baseUrl:`https://api.openai.com/v1`,label:`OpenAI`},{id:`vllm`,baseUrl:`http://127.0.0.1:8000/v1`,label:`vLLM`},{id:`ollama`,baseUrl:`http://127.0.0.1:11434/v1`,label:`Ollama`}],nM=e=>`${xr.workspaces}/${encodeURIComponent(e)}/inferd`;function rM(e,t){let n={};for(let[r,i]of Object.entries(e.providers||{})){let e={...i};delete e.apiKeySet,delete e.headerNames,t.has(r)&&i.apiKey?e.apiKey=i.apiKey:delete e.apiKey,n[r]=e}return{...e,providers:n}}async function iM(e){return await X.get(`${nM(e)}/status`)}async function aM(e,t={}){let n={};return t.force!==void 0&&(n.force=t.force),await X.post(`${nM(e)}/summarize/images`,n)}async function oM(e){return await X.post(`${nM(e)}/summarize/images/stop`,{})}async function sM(e){return await X.get(`${nM(e)}/config`)}async function cM(e,t){return await X.put(`${nM(e)}/config`,t)}async function lM(e,t={}){let n={};return t.space&&(n.space=t.space),t.reindex!==void 0&&(n.reindex=t.reindex),t.scope&&(n.scope=t.scope),await X.post(`${nM(e)}/reindex`,n)}async function uM(e){return await X.get(`${nM(e)}/vector-tables`)}async function dM(e,t){return await X.delete(`${nM(e)}/vector-tables/${encodeURIComponent(t)}`)}async function fM(){return await X.get(`${xr.inferd}/config`)}async function pM(e){return await X.put(`${xr.inferd}/config`,e)}async function mM(){return await X.get(`${xr.inferd}/defaults`)}async function hM(e){return await X.put(`${xr.inferd}/defaults`,e)}async function gM(e,t){let n={...e};return delete n.apiKeySet,delete n.headerNames,(await X.post(`${xr.inferd}/test`,{provider:n,...t?{model:t}:{},probe:!0})).cached??null}async function _M(e,t,n=`text`){let r={...e};return delete r.apiKeySet,delete r.headerNames,await X.post(`${xr.inferd}/test`,{provider:r,...t?{model:t}:{},modality:n})}var vM=`h-8 w-full rounded-md border bg-background px-2 text-sm outline-none focus:ring-2 focus:ring-ring`,yM=`font-semibold uppercase tracking-[0.08em]`,bM={openai:{url:{key:`baseUrl`,label:`Base URL`,placeholder:`http://gpu.local:8000/v1`,hint:`OpenAI-compatible embeddings endpoint — Ollama, vLLM, TEI, infinity, LM Studio and OpenAI itself all speak this. A trailing /v1 is optional; both http://host:8000 and http://host:8000/v1 work.`},apiKey:"Sent as `Authorization: Bearer …`. Leave empty for servers that do not check it.",imageInput:!0,timeoutMs:!0,headers:!0,where:e=>e.baseUrl||`no endpoint set`},ollama:{url:{key:`host`,label:`Host (legacy)`,placeholder:`http://127.0.0.1:11434`,hint:`Written by an older version. Switch the type to openai — the host becomes the base URL and the /v1 suffix is added for you.`},apiKey:"Sent as `Authorization: Bearer …`.",where:e=>e.host||`http://127.0.0.1:11434`},onnx:{cacheDir:`Where downloaded weights are cached on the server. Empty uses the server default.`,note:`Runs in-process on the server. No endpoint and no credentials.`,where:()=>`in-process`},clip:{cacheDir:`Where downloaded weights are cached on the server. Empty uses the server default.`,note:`Runs in-process on the server. No endpoint and no credentials.`,where:()=>`in-process`}},xM=[`baseUrl`,`host`,`apiKey`,`cacheDir`,`imageInput`,`timeoutMs`],SM=[{value:`data-uri`,label:`data-uri (default)`,hint:"Images ride in the ordinary `input` array as data URIs (infinity, TEI-style servers)."},{value:`messages`,label:`messages`,hint:`vLLM's multimodal shape: one request per image, wrapped in a chat message.`}],CM=12e4;function wM(e){if(typeof e!=`string`||e.trim()===``)return null;let t;try{t=new URL(e.trim())}catch{return`Must be an absolute URL including the scheme, e.g. http://127.0.0.1:11434`}return t.protocol!==`http:`&&t.protocol!==`https:`?`Unsupported scheme '${t.protocol.replace(`:`,``)}'. Use http or https.`:null}function TM({title:e,hint:t}){return(0,$.jsxs)(`div`,{className:`mb-2`,children:[(0,$.jsx)(`h3`,{className:J(`text-[11px] text-muted-foreground`,yM),children:e}),(0,$.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:t})]})}function EM({overridden:e,source:t}){return e?(0,$.jsx)(`span`,{className:`rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary`,title:`Set on this layer; it wins over anything inherited`,children:`overridden`}):(0,$.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground`,title:t?`Inherited: ${t}`:`Inherited from a lower config layer`,children:`inherited`})}function DM({label:e,value:t,inheritedValue:n,onChange:r,type:i=`text`,placeholder:a,disabled:o,hint:s,error:c,mono:l}){let u=t!==void 0&&t!==``;return(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`label`,{className:`text-xs font-medium`,children:e}),(0,$.jsx)(EM,{overridden:u,source:n===void 0?void 0:String(n)}),u&&!o&&(0,$.jsx)(`button`,{type:`button`,onClick:()=>r(``),className:`text-[10px] text-muted-foreground underline hover:text-foreground`,title:`Clear the override and fall back to the inherited value`,children:`reset`})]}),(0,$.jsx)(Y,{type:i,value:t??``,disabled:o,onChange:e=>r(e.target.value),placeholder:a??(n===void 0?`—`:String(n)),className:J(`h-8 text-sm`,l&&`font-mono`,c&&`border-destructive focus-visible:ring-destructive`)}),c&&(0,$.jsx)(`p`,{className:`text-[11px] font-medium text-destructive`,children:c}),s&&(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:s})]})}function OM({label:e,checked:t,overridden:n,disabled:r,onChange:i}){return(0,$.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,$.jsx)(`input`,{type:`checkbox`,disabled:r,checked:t,onChange:e=>i(e.target.checked)}),e,(0,$.jsx)(EM,{overridden:n})]})}function kM({storedNames:e,value:t,disabled:n,onChange:r}){let i=t!==void 0,[a,o]=(0,Q.useState)([]),s=e=>{o(e),r(Object.fromEntries(e.filter(([e])=>e.trim()!==``)))};return(0,$.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,$.jsx)(`label`,{className:`text-xs font-medium`,children:`Custom headers`}),i?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{className:`rounded bg-warning-subtle px-1.5 py-0.5 text-[10px] font-medium text-warning`,children:`will replace stored`}),!n&&(0,$.jsx)(`button`,{type:`button`,onClick:()=>{o([]),r(void 0)},className:`text-[10px] text-muted-foreground underline hover:text-foreground`,children:`cancel`})]}):(0,$.jsx)(EM,{overridden:!1,source:e?.join(`, `)})]}),!i&&(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:e?.length?(0,$.jsxs)($.Fragment,{children:[`Stored: `,(0,$.jsx)(`span`,{className:`font-mono`,children:e.join(`, `)}),` (values are never sent back)`]}):`None set.`}),!n&&(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>{o([[``,``]]),r({})},children:e?.length?`Replace headers`:`Add headers`})]}),i&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Saving replaces every stored header, so re-enter the ones you want to keep.`}),a.map(([e,t],r)=>(0,$.jsxs)(`div`,{className:`flex gap-2`,children:[(0,$.jsx)(Y,{value:e,disabled:n,placeholder:`X-Tenant`,className:`h-8 font-mono text-sm`,onChange:e=>s(a.map((t,n)=>n===r?[e.target.value,t[1]]:t))}),(0,$.jsx)(Y,{value:t,disabled:n,placeholder:`value`,className:`h-8 font-mono text-sm`,onChange:e=>s(a.map((t,n)=>n===r?[t[0],e.target.value]:t))}),(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`ghost`,disabled:n,"aria-label":`Remove header ${e||r+1}`,onClick:()=>s(a.filter((e,t)=>t!==r)),children:(0,$.jsx)(nt,{className:`h-3.5 w-3.5`})})]},r)),!n&&(0,$.jsxs)(Z,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>s([...a,[``,``]]),children:[(0,$.jsx)(sn,{className:`mr-1.5 h-3.5 w-3.5`}),`Add header`]})]})]})}function AM({open:e,onClick:t,label:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-expanded":e,title:n,"aria-label":n,className:`flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground`,children:(0,$.jsx)(Xe,{className:J(`h-4 w-4 transition-transform motion-reduce:transition-none`,e&&`rotate-180`)})})}var jM={configured:`bg-success`,"needs-fill":`bg-warning`,unresolved:`bg-destructive`,unset:`bg-muted-foreground/30`};function MM({value:e,effective:t,inherited:n,resolvedSpaces:r,invalid:i,attention:a,onFill:o,saving:s=!1,disabled:c=!1,saveLabel:l=`Save`,onSave:u}){let{showToast:d}=Hr(),[f,p]=(0,Q.useState)(()=>structuredClone(e)),[m,h]=(0,Q.useState)(new Set),[g,_]=(0,Q.useState)(null),[v,y]=(0,Q.useState)(!1),[b,x]=(0,Q.useState)(``),[S,C]=(0,Q.useState)(``),[w,T]=(0,Q.useState)(null),E=(0,Q.useMemo)(()=>[...new Set([...Object.keys(t.spaces||{}),...Object.keys(f.spaces||{})])].sort(),[t.spaces,f.spaces]),D=(0,Q.useMemo)(()=>[...new Set([...Object.keys(t.providers||{}),...Object.keys(f.providers||{})])].sort(),[t.providers,f.providers]),O=(e,t,n)=>{p(r=>{let i={...r.spaces||{}},a={...i[e]||{}};if(n===``)delete a[t];else if(t===`dim`||t===`maxLength`||t===`dimensions`){let e=Number(n);if(Number.isNaN(e))return r;a[t]=e}else a[t]=n;return Object.keys(a).length===0?delete i[e]:i[e]=a,{...r,spaces:i}})},k=(e,t,n)=>{p(r=>{let i={...r.spaces||{}},a={...i[e]||{}};return n===void 0?delete a[t]:a[t]=n,Object.keys(a).length===0?delete i[e]:i[e]=a,{...r,spaces:i}})},A=(e,t,n)=>{t===`apiKey`&&h(t=>{let r=new Set(t);return n===``?r.delete(e):r.add(e),r}),p(r=>{let i={...r.providers||{}},a={...i[e]||{}};if(n===``)delete a[t];else if(t===`timeoutMs`){let e=Number(n);if(Number.isNaN(e))return r;a[t]=e}else a[t]=n;return Object.keys(a).length===0?delete i[e]:i[e]=a,{...r,providers:i}})},j=(e,t,n)=>{p(r=>{let i={...r.providers||{}},a={...i[e]||{}};return n===void 0?delete a[t]:a[t]=n,Object.keys(a).length===0?delete i[e]:i[e]=a,{...r,providers:i}})},M=e=>{p(t=>{let n={...t.providers||{}};return delete n[e],{...t,providers:n}}),h(t=>{let n=new Set(t);return n.delete(e),n})},N=()=>{let e=S.trim();if(e){if(E.includes(e)){d({title:`Space exists`,description:`'${e}' already has a row below.`,variant:`destructive`});return}p(t=>({...t,spaces:{...t.spaces||{},[e]:{}}})),C(``),T(`space:${e}`)}},P=(e,t)=>{if(e){if(D.includes(e)){d({title:`Backend exists`,description:`'${e}' is already declared. Open it below to edit.`,variant:`destructive`});return}p(n=>({...n,providers:{...n.providers||{},[e]:{type:`openai`,...t?{baseUrl:t}:{}}}})),x(``),T(`provider:${e}`)}},F=e=>({...t.providers?.[e]||{},...f.providers?.[e]||{}}),I=async e=>{let n=f.spaces?.[e]?.provider??t.spaces?.[e]?.provider,r=f.spaces?.[e]?.model??t.spaces?.[e]?.model;if(!n){d({title:`No backend`,description:`Space '${e}' has no backend to test.`,variant:`destructive`});return}let i=F(n),a=i.type?bM[i.type]?.url?.key:void 0,o=a?wM(i[a]):null;if(o){d({title:`Backend '${n}'`,description:o,variant:`destructive`});return}_(e);try{try{await gM(i,r)===!1&&(y(!0),d({title:`Downloading model`,description:`'${r??`the configured model`}' is not in the server's cache yet; downloading now. A first test can take a few minutes; the model is then cached for good.`}))}catch{}let n=await _M(i,r,e),a=f.spaces?.[e]?.dim??t.spaces?.[e]?.dim,o=n.dim>0&&a!==void 0&&n.dim!==a;(o||n.dim>0&&a===void 0)&&O(e,`dim`,String(n.dim)),d({title:o?`Backend answered; dimensions corrected`:`Backend answered`,description:o?`Returned ${n.dim}-d but '${e}' was set to ${a}-d. Dimensions updated to ${n.dim}; save to apply. (${n.latencyMs} ms)`:`${n.dim}-d in ${n.latencyMs} ms`})}catch(e){d({title:`Test failed`,description:e instanceof Error?e.message:`Backend unreachable`,variant:`destructive`})}finally{_(null),y(!1)}},L=(0,Q.useMemo)(()=>{let e=[];for(let[n,r]of Object.entries(f.providers||{})){let i=r.type??t.providers?.[n]?.type,a=i?bM[i]?.url?.key:void 0;if(!a)continue;let o=wM(r[a]);o&&e.push(`${n}: ${o}`)}return e},[f.providers,t.providers]),R=(0,Q.useMemo)(()=>JSON.stringify(f)!==JSON.stringify(e)||m.size>0,[f,e,m]),z=async()=>{if(L.length>0){d({title:`Fix the endpoint first`,description:L.join(` · `),variant:`destructive`});return}await u(rM(f,m)),h(new Set)},ee=e=>T(t=>t===e?null:e);return(0,$.jsxs)(`div`,{className:`space-y-6`,children:[i&&(0,$.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive-subtle p-3 text-xs`,children:[(0,$.jsx)(W,{className:`mt-0.5 h-4 w-4 shrink-0 text-destructive`}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`p`,{className:`font-medium text-destructive`,children:`Stored config does not resolve; defaults are standing in`}),(0,$.jsx)(`p`,{className:`mt-0.5 font-mono text-[11px] text-muted-foreground`,children:i})]})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)(TM,{title:`Search models`,hint:`Choose a provider and model for each kind of content. After switching models, fill the new index to make existing documents searchable. Previous model indexes are preserved.`}),E.length===0?(0,$.jsxs)(`div`,{className:`rounded-lg border border-dashed p-6 text-center`,children:[(0,$.jsx)(`p`,{className:`text-sm font-medium`,children:`No spaces on this layer`}),(0,$.jsx)(`p`,{className:`mx-auto mt-1 max-w-sm text-xs text-muted-foreground`,children:`A space needs a backend, a model and a dimension count. Add one below to start embedding.`})]}):(0,$.jsx)(`div`,{className:`divide-y overflow-hidden rounded-lg border`,children:E.map(e=>{let s=f.spaces?.[e]||{},l=t.spaces?.[e]||{},u=n.spaces?.[e]||{},d=r?.[e],p=`space:${e}`,m=w===p,h=s.model??l.model,_=s.provider??l.provider,y=s.dim??l.dim,b=s.chunk??l.chunk??!1,x=a?.includes(e)??!1;return(0,$.jsxs)(`div`,{className:`relative`,children:[(0,$.jsx)(`span`,{className:J(`absolute inset-y-0 left-0 w-[3px]`,jM[i?`unresolved`:x?`needs-fill`:h?`configured`:`unset`]),"aria-hidden":!0}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-2 py-3 pl-4 pr-3 sm:flex-row sm:items-start sm:gap-3`,children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2 gap-y-1`,children:[(0,$.jsx)(`span`,{className:J(`text-[11px]`,yM),children:e}),(0,$.jsx)(`span`,{className:`truncate font-mono text-sm`,children:h||`no model set`}),_&&(0,$.jsxs)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground`,children:[`via `,_]}),y!==void 0&&(0,$.jsxs)(`span`,{className:`text-xs tabular-nums text-muted-foreground`,children:[y,`-d`]}),b&&(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`chunked`})]}),r&&h&&(0,$.jsxs)(`p`,{className:`mt-1 truncate font-mono text-[11px] text-muted-foreground`,title:`Vector table backing this space`,children:[`└─ `,d?.table??(0,$.jsx)(`span`,{className:`not-italic`,children:`not created yet`})]}),x&&(0,$.jsx)(`p`,{className:`mt-1 text-[11px] text-warning`,children:`New table, nothing embedded in it yet; dense search stays thin for this space until it is filled. Reverting the model is still instant.`})]}),(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 max-sm:justify-end`,children:[x&&o&&(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`outline`,onClick:()=>o(e),children:`Fill`}),(0,$.jsxs)(Z,{type:`button`,size:`sm`,variant:`ghost`,disabled:c||g!==null,onClick:()=>I(e),title:`Round-trip a real embedding call against this backend and report the dimensions it returns`,children:[(0,$.jsx)(H,{className:`mr-1.5 h-3.5 w-3.5`}),g===e?v?`Downloading…`:`Testing…`:`Test`]}),(0,$.jsx)(AM,{open:m,onClick:()=>ee(p),label:`Edit ${e}`})]})]}),m&&(0,$.jsxs)(`div`,{className:`border-t bg-muted/40 py-4 pl-4 pr-3`,children:[(0,$.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`label`,{className:`text-xs font-medium`,children:`Backend`}),(0,$.jsx)(EM,{overridden:s.provider!==void 0,source:u.provider})]}),(0,$.jsxs)(`select`,{className:vM,disabled:c,value:s.provider??``,onChange:t=>O(e,`provider`,t.target.value),children:[(0,$.jsx)(`option`,{value:``,children:l.provider?`inherited: ${l.provider}`:`inherited`}),D.map(e=>(0,$.jsx)(`option`,{value:e,children:e},e))]})]}),(0,$.jsx)(DM,{label:`Model`,mono:!0,value:s.model,inheritedValue:l.model,onChange:t=>O(e,`model`,t),disabled:c}),(0,$.jsx)(DM,{label:`Dimensions`,type:`number`,value:s.dim,inheritedValue:l.dim,onChange:t=>O(e,`dim`,t),disabled:c,hint:`Sizes the vector table. Test asks the backend and fills in what it really returns.`}),(0,$.jsx)(DM,{label:`Max length`,type:`number`,value:s.maxLength,inheritedValue:l.maxLength,onChange:t=>O(e,`maxLength`,t),disabled:c})]}),(0,$.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-4`,children:[(0,$.jsx)(OM,{label:`Chunk long inputs`,checked:b,overridden:s.chunk!==void 0,disabled:c,onChange:t=>k(e,`chunk`,t)}),(0,$.jsx)(OM,{label:`Build ANN index`,checked:s.annIndex??l.annIndex??!0,overridden:s.annIndex!==void 0,disabled:c,onChange:t=>k(e,`annIndex`,t)})]})]})]},e)})}),!c&&(0,$.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[(0,$.jsx)(Y,{value:S,onChange:e=>C(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),N())},placeholder:`new space name (e.g. audio)`,className:`h-8 w-full max-w-xs text-sm sm:w-auto`}),(0,$.jsxs)(Z,{type:`button`,size:`sm`,variant:`ghost`,onClick:N,children:[(0,$.jsx)(sn,{className:`mr-1.5 h-3.5 w-3.5`}),`Add space`]})]})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)(TM,{title:`Model providers`,hint:`Connect a service here, then select it under Search models above. Built-in providers work without an extra connection. Provider changes take effect when you save.`}),(0,$.jsx)(`div`,{className:`divide-y overflow-hidden rounded-lg border`,children:D.map(e=>{let n=f.providers?.[e]||{},r=t.providers?.[e]||{},i=eM.includes(e),a=f.providers?.[e]!==void 0,o=`provider:${e}`,s=w===o,l=n.type??r.type,u=l?bM[l]:void 0,d=u?.url?wM(n[u.url.key]):null,p={...r,...n},h=xM.filter(e=>!(n[e]===void 0||e===u?.url?.key||e===`apiKey`&&u?.apiKey||e===`cacheDir`&&u?.cacheDir)),g=E.filter(n=>(f.spaces?.[n]?.provider??t.spaces?.[n]?.provider)===e);return(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex flex-col gap-2 px-4 py-3 sm:flex-row sm:items-start sm:gap-3`,children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2 gap-y-1`,children:[(0,$.jsx)(`span`,{className:`font-mono text-sm font-semibold`,children:e}),(0,$.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground`,children:l??`no type`}),i&&(0,$.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:`built-in`}),p.apiKeySet&&!m.has(e)&&(0,$.jsx)(`span`,{className:`text-[10px] font-medium text-success`,children:`key set`}),d&&(0,$.jsx)(`span`,{className:`text-[10px] font-medium text-destructive`,children:`check endpoint`})]}),(0,$.jsx)(`p`,{className:`mt-1 truncate font-mono text-[11px] text-muted-foreground`,children:u?u.where(p):`—`}),g.length>0&&(0,$.jsxs)(`p`,{className:`mt-1 text-[11px] text-muted-foreground`,children:[`used by `,g.join(`, `)]})]}),(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 max-sm:justify-end`,children:[a&&!i&&!c&&(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>M(e),title:`Remove this override`,children:(0,$.jsx)(nt,{className:`h-3.5 w-3.5`})}),(0,$.jsx)(AM,{open:s,onClick:()=>ee(o),label:`Edit ${e}`})]})]}),s&&(0,$.jsxs)(`div`,{className:`border-t bg-muted/40 px-4 py-4`,children:[(0,$.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`label`,{className:`text-xs font-medium`,children:`Type`}),(0,$.jsx)(EM,{overridden:n.type!==void 0,source:r.type})]}),(0,$.jsxs)(`select`,{className:vM,disabled:c,value:n.type??``,onChange:t=>A(e,`type`,t.target.value),children:[(0,$.jsx)(`option`,{value:``,children:r.type?`inherited: ${r.type}`:`inherited`}),$j.map(e=>(0,$.jsx)(`option`,{value:e,children:e},e)),l&&!$j.includes(l)&&(0,$.jsxs)(`option`,{value:l,children:[l,` (legacy)`]})]}),u?.note&&(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:u.note})]}),u?.url&&(0,$.jsx)(DM,{label:u.url.label,mono:!0,value:n[u.url.key],inheritedValue:r[u.url.key],onChange:t=>A(e,u.url.key,t),disabled:c,placeholder:r[u.url.key]??u.url.placeholder,hint:u.url.hint,error:d??void 0}),u?.cacheDir&&(0,$.jsx)(DM,{label:`Cache directory`,mono:!0,value:n.cacheDir,inheritedValue:r.cacheDir,onChange:t=>A(e,`cacheDir`,t),disabled:c,placeholder:r.cacheDir??`server default`,hint:u.cacheDir}),u?.imageInput&&(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`label`,{className:`text-xs font-medium`,children:`Image input shape`}),(0,$.jsx)(EM,{overridden:n.imageInput!==void 0,source:r.imageInput})]}),(0,$.jsxs)(`select`,{className:vM,disabled:c,value:n.imageInput??``,onChange:t=>A(e,`imageInput`,t.target.value),children:[(0,$.jsx)(`option`,{value:``,children:r.imageInput?`inherited: ${r.imageInput}`:`inherited: data-uri`}),SM.map(e=>(0,$.jsx)(`option`,{value:e.value,children:e.label},e.value))]}),(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:SM.find(e=>e.value===(n.imageInput??r.imageInput??`data-uri`))?.hint})]}),u?.timeoutMs&&(0,$.jsx)(DM,{label:`Request timeout (ms)`,type:`number`,value:n.timeoutMs,inheritedValue:r.timeoutMs??CM,onChange:t=>A(e,`timeoutMs`,t),disabled:c,hint:`How long to wait for a batch before giving up. Raise it for a slow or cold GPU host.`}),u?.apiKey&&(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`label`,{className:`text-xs font-medium`,children:`API key`}),m.has(e)&&(0,$.jsx)(`span`,{className:`rounded bg-warning-subtle px-1.5 py-0.5 text-[10px] font-medium text-warning`,children:`will be written`})]}),(0,$.jsx)(Y,{type:`password`,autoComplete:`new-password`,disabled:c,value:n.apiKey??``,onChange:t=>A(e,`apiKey`,t.target.value),placeholder:r.apiKeySet?`•••••••• (stored; leave empty to keep)`:`unset`,className:`h-8 text-sm`}),(0,$.jsxs)(`p`,{className:`text-[11px] text-muted-foreground`,children:[u.apiKey,` Write-only: the stored key is never sent back, and leaving this empty keeps whatever is stored.`]})]})]}),u?.headers&&(0,$.jsx)(kM,{disabled:c,storedNames:r.headerNames,value:n.headers,onChange:t=>j(e,`headers`,t)}),h.length>0&&!c&&(0,$.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2 rounded-md border border-dashed p-2 text-[11px] text-muted-foreground`,children:[(0,$.jsxs)(`span`,{children:[`Not used by type `,(0,$.jsx)(`span`,{className:`font-mono`,children:l}),`:`,` `,(0,$.jsx)(`span`,{className:`font-mono`,children:h.join(`, `)})]}),(0,$.jsx)(`button`,{type:`button`,className:`underline hover:text-foreground`,onClick:()=>h.forEach(t=>A(e,t,``)),children:`clear`})]}),r.headerNames&&r.headerNames.length>0&&(0,$.jsxs)(`p`,{className:`mt-3 text-[11px] text-muted-foreground`,children:[`Stored custom headers: `,(0,$.jsx)(`span`,{className:`font-mono`,children:r.headerNames.join(`, `)}),` (values not shown)`]})]})]},e)})}),!c&&(0,$.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[(0,$.jsx)(Y,{value:b,onChange:e=>x(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),P(b.trim()))},placeholder:`new backend name (e.g. gpu)`,className:`h-8 w-full max-w-xs text-sm sm:w-auto`}),(0,$.jsxs)(Z,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>P(b.trim()),children:[(0,$.jsx)(sn,{className:`mr-1.5 h-3.5 w-3.5`}),`Add backend`]}),tM.filter(e=>!D.includes(e.id)).map(e=>(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`outline`,onClick:()=>P(e.id,e.baseUrl),title:`Add an openai-type backend '${e.id}' pointed at ${e.baseUrl}`,children:e.label},e.id))]})]}),!c&&(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 border-t pt-4`,children:[(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:R?`default`:`outline`,onClick:z,disabled:s||!R||L.length>0,children:s?`Saving…`:l}),(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`ghost`,disabled:s||!R,onClick:()=>{p(structuredClone(e)),h(new Set)},children:`Discard changes`}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:L.length>0?(0,$.jsxs)(`span`,{className:`font-medium text-destructive`,children:[L.length,` endpoint `,L.length===1?`needs`:`need`,` fixing`]}):R?`Unsaved changes`:`Everything saved`})]})]})}function NM(){let{showToast:e}=Hr(),[t,n]=(0,Q.useState)(null),[r,i]=(0,Q.useState)(!0),[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(null),l=(0,Q.useCallback)(()=>fM().then(e=>{n(e),c(null)}).catch(e=>c(e instanceof Error?e.message:`Failed to load embedding defaults`)).finally(()=>i(!1)),[]);(0,Q.useEffect)(()=>{l()},[l]);let u=()=>{i(!0),l()};return(0,$.jsxs)(`div`,{className:`mx-auto max-w-4xl p-6`,children:[(0,$.jsx)(Zw,{compact:!0,className:`mb-6`,title:`Search & AI defaults`,onBack:MO(),description:`Your account · Choose the embedding models used for text and image search. Workspace settings override these defaults. Running workspaces adopt new defaults when restarted.`,actions:(0,$.jsxs)(Z,{type:`button`,size:`sm`,variant:`outline`,onClick:u,disabled:r,children:[(0,$.jsx)(P,{className:`mr-2 h-3.5 w-3.5`}),`Refresh`]})}),r?(0,$.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,$.jsx)(P,{className:`h-4 w-4 animate-spin`}),`Loading…`]}):s||!t?(0,$.jsxs)(`div`,{className:`space-y-3`,children:[(0,$.jsxs)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/5 p-4 text-sm`,children:[(0,$.jsx)(`p`,{className:`font-medium text-destructive`,children:`Embedding defaults unavailable`}),(0,$.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:s||`No config returned.`})]}),(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`outline`,onClick:u,children:`Retry`})]}):(0,$.jsx)(MM,{value:t.user||{},effective:t.effective||{},inherited:t.serverDefaults||{},invalid:t.invalid,saving:a,saveLabel:`Save defaults`,onSave:async t=>{o(!0);try{let n=await pM(t);e({title:`Defaults saved`,description:n.restartRequired?`${n.workspaces.length} running workspace(s) keep their current tables until restarted. Set the config on a workspace directly to change it live.`:`New workspaces will inherit this.`}),await l()}catch(t){e({title:`Save failed`,description:t instanceof Error?t.message:`Failed to save`,variant:`destructive`})}finally{o(!1)}}},JSON.stringify(t.user))]})}function PM(){let e=_l(),{showToast:t}=Hr(),n=new URLSearchParams(e.search),r=e=>{try{let t=new URL(e);return t.pathname.includes(`/rest/v2/workspaces/`)&&!t.pathname.includes(`/rest/v2/pub/`)?t.pathname=t.pathname.replace(`/rest/v2/workspaces/`,`/rest/v2/pub/workspaces/`):t.pathname.includes(`/rest/v2/contexts/`)&&!t.pathname.includes(`/rest/v2/pub/`)&&(t.pathname=t.pathname.replace(`/rest/v2/contexts/`,`/rest/v2/pub/contexts/`)),t.toString()}catch{return e}},i=r(n.get(`url`)||``),a=sessionStorage.getItem(`sharedToken:last`)||``,[o,s]=(0,Q.useState)(i),[c,l]=(0,Q.useState)(a),[u,d]=(0,Q.useState)(null),[f,p]=(0,Q.useState)([]),[m,h]=(0,Q.useState)(!1),g=(0,Q.useMemo)(()=>{try{let e=new URL(o);return e.pathname.includes(`/pub/workspaces/`)?`workspace`:e.pathname.includes(`/pub/contexts/`)?`context`:`unknown`}catch{return`unknown`}},[o]),_=()=>({Authorization:`Bearer ${c.trim()}`}),v=async()=>{if(!(!o||!c)){h(!0);try{let e=r(o),t=await X.get(e,{skipAuth:!0,headers:_()});d(t);let n=await X.get(`${e}/documents`,{skipAuth:!0,headers:_()}),i=Array.isArray(n)?n:Array.isArray(n?.data)?n.data:[];p(Array.isArray(i)?i:[])}catch(e){let n=o.includes(`/rest/v2/workspaces/`)?`Ensure the URL uses /rest/v2/pub/workspaces/<workspace-id> and the token matches that workspace.`:o.includes(`/rest/v2/contexts/`)?`Ensure the URL uses /rest/v2/pub/contexts/<context-id>.`:void 0;t({title:`Error`,description:`${e instanceof Error?e.message:`Failed to load shared resource`}${n?`: ${n}`:``}`,variant:`destructive`}),d(null),p([])}finally{h(!1)}}},y=(0,Q.useRef)(v);return(0,Q.useEffect)(()=>{y.current()},[]),(0,$.jsxs)(`div`,{className:`space-y-4`,children:[(0,$.jsx)(Zw,{onBack:MO(),title:`Shared Resource Viewer`,description:`Open a resource someone shared with you.`}),(0,$.jsxs)(`div`,{className:`grid gap-2 md:grid-cols-3`,children:[(0,$.jsx)(Y,{value:o,onChange:e=>s(e.target.value),placeholder:`Full pub URL`}),(0,$.jsx)(Y,{value:c,onChange:e=>l(e.target.value),placeholder:`Access token (canvas-...)`}),(0,$.jsx)(Z,{onClick:v,disabled:m||!o||!c,children:`Load`})]}),(0,$.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[`Type: `,g]}),m?(0,$.jsx)(`div`,{className:`text-center py-8 text-muted-foreground`,children:`Loading...`}):(0,$.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,$.jsxs)(`div`,{className:`border rounded p-3`,children:[(0,$.jsx)(`h2`,{className:`font-semibold mb-2`,children:`Metadata`}),(0,$.jsx)(`pre`,{className:`text-xs overflow-auto max-h-80`,children:JSON.stringify(u,null,2)})]}),(0,$.jsxs)(`div`,{className:`border rounded p-3`,children:[(0,$.jsxs)(`h2`,{className:`font-semibold mb-2`,children:[`Documents (`,f.length,`)`]}),f.length===0?(0,$.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`No documents`}):(0,$.jsx)(`ul`,{className:`space-y-2 text-sm`,children:f.slice(0,100).map((e,t)=>(0,$.jsxs)(`li`,{className:`border rounded p-2`,children:[(0,$.jsx)(`div`,{className:`font-mono text-xs`,children:e.id}),(0,$.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e.schema})]},t))})]})]}),(0,$.jsx)(gd,{className:`mt-8`})]})}function FM(e={}){let t=new URLSearchParams;e.tail&&t.set(`tail`,String(e.tail)),e.level&&t.set(`level`,e.level),e.module&&t.set(`module`,e.module);let n=t.toString();return n?`?${n}`:``}function IM(){let e=localStorage.getItem(`authToken`);if(!e)throw Error(`Authentication required`);let t=localStorage.getItem(`appName`)||window.location.hostname;return{Authorization:`Bearer ${e}`,"X-App-Name":t,Accept:`text/event-stream`}}var LM={users:{async listUsers(e){let t=new URLSearchParams;e?.status&&t.append(`status`,e.status),e?.userType&&t.append(`userType`,e.userType);let n=t.toString(),r=n?`${xr.admin.users}?${n}`:xr.admin.users;return await X.get(r)},async getUser(e){return await X.get(`${xr.admin.users}/${e}`)},async createUser(e){return await X.post(xr.admin.users,e)},async updateUser(e,t){return await X.put(`${xr.admin.users}/${e}`,t)},async deleteUser(e){await X.delete(`${xr.admin.users}/${e}`)}},workspaces:{async listAllWorkspaces(){return await X.get(xr.admin.workspaces)},async createWorkspace(e){return await X.post(xr.admin.workspaces,e)},async deleteWorkspace(e){await X.delete(`${xr.admin.workspaces}/${e}`)}},logs:{async getLogs(e={}){return(await X.get(`${xr.admin.logs}${FM(e)}`)).logs||[]},async streamLogs(e={},t={}){let{signal:n,onEntry:r,onError:i}=t;try{let t=await fetch(`${xr.admin.logsStream}${FM(e)}`,{method:`GET`,headers:IM(),credentials:`include`,signal:n});if(!t.ok)throw Error(`Failed to open log stream (${t.status})`);if(!t.body)throw Error(`Streaming is not supported by this browser`);let i=t.body.getReader(),a=new TextDecoder,o=``,s=e=>{let t=e.split(`
29
+ `).map(e=>e.trim()).filter(Boolean);for(let e of t){if(!e.startsWith(`data: `))continue;let t=e.slice(6).trim();if(t!==`[DONE]`)try{let e=JSON.parse(t);if(!i)continue;if(e.type===`chunk`)i(e.delta||``,!1,e.metadata||{});else if(e.type===`thinking`)i(``,!1,{...e.metadata||{},reasoningDelta:e.delta||``});else if(e.type===`complete`){let t=Array.isArray(e.messages)?[...e.messages].reverse().find(e=>e?.role===`assistant`):null;i(``,!0,{...e.metadata||{},...ek(t)||{}})}else e.type===`error`&&a&&a(Error(e.error||`Prompt stream failed`))}catch{}}}},onError:a,onComplete:o})}async function Ok(e,t){let{message:n,onMessage:r,onError:i,onComplete:a,context:o,mcpContext:s,maxTokens:c,temperature:l,images:u}=t;try{let t=await X.post(`${Lr}/agents/${e}/prompt`,{message:n,images:u,context:o,mcpContext:s,maxTokens:c,temperature:l}),i=Array.isArray(t.messages)?[...t.messages].reverse().find(e=>e?.role===`assistant`):null,d={content:QO(i),metadata:ek(i)};return r&&r(d.content,!0,d.metadata),a&&a(),d}catch(e){throw i&&i(e),e}}function kk(e){return e.map(e=>({...e,timestamp:typeof e.timestamp==`string`?e.timestamp:new Date().toISOString()}))}async function Ak(){return await X.get(`${Lr}/voice/status`)}async function jk(e,t,n={}){let r=new FormData,i=(t.type.split(`/`)[1]||`webm`).split(`;`)[0];r.append(`file`,t,`voice.${i}`);let a=new URLSearchParams;n.tts===!1&&a.set(`tts`,`false`),n.voice&&a.set(`voice`,n.voice);let o=a.toString()?`?${a.toString()}`:``;return await X.post(`${Lr}/agents/${e}/voice${o}`,r)}var Mk=[{id:`workspace`,label:`Workspace`,path:`workspaces`,description:`Files, search, devices and sharing for one workspace. These settings override account defaults.`,sections:HO,load:async()=>(await Ri()).map(e=>({id:e.name,label:e.label||e.name}))},{id:`context`,label:`Context`,path:`contexts`,description:`Choose the tree and path a context opens, and who can access that view. File storage belongs to its workspace.`,sections:GO,load:async()=>(await _s()).map(e=>({id:e.id,label:e.name||e.id}))},{id:`agent`,label:`Agent`,path:`agents`,description:`Configure one assistant: its instructions, chat model, tools and access to Canvas.`,sections:qO,load:async()=>(await uk()).map(e=>({id:e.id,label:e.label||e.name}))}];function Nk({to:e,label:t,description:n,icon:r}){return(0,$.jsxs)(Lu,{to:e,className:`group flex items-start gap-3 rounded-lg border bg-card p-4 transition-colors hover:border-primary/50 hover:bg-accent/30 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary`,children:[(0,$.jsx)(r,{className:`mt-0.5 h-5 w-5 shrink-0 text-muted-foreground`}),(0,$.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,$.jsx)(`span`,{className:`block text-sm font-semibold`,children:t}),(0,$.jsx)(`span`,{className:`mt-1 block text-sm leading-relaxed text-muted-foreground`,children:n})]}),(0,$.jsx)(Dt,{className:`mt-0.5 h-4 w-4 shrink-0 text-muted-foreground group-hover:text-primary`})]})}function Pk({group:e,query:t}){let[n,r]=(0,Q.useState)([]),[i,a]=(0,Q.useState)(``),[o,s]=(0,Q.useState)(`loading`),[c,l]=(0,Q.useState)(0);(0,Q.useEffect)(()=>{let t=!1;return e.load().then(e=>{t||(r(e),s(`ready`))}).catch(()=>{t||s(`error`)}),()=>{t=!0}},[e,c]);let u=e.sections.filter(n=>hT(t,e.label,n.label,n.description));return u.length?(0,$.jsxs)(`section`,{id:e.id,className:`scroll-mt-6 space-y-3`,children:[(0,$.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.label}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,$.jsxs)(`label`,{className:`block max-w-md text-sm font-medium`,children:[`Choose a `,e.label.toLowerCase(),(0,$.jsxs)(`select`,{className:`mt-2 h-10 w-full rounded-md border bg-background px-3 text-sm`,value:i,disabled:o!==`ready`||!n.length,onChange:e=>a(e.target.value),children:[(0,$.jsx)(`option`,{value:``,children:o===`loading`?`Loading…`:o===`error`?`Unable to load list`:n.length?`Select ${e.label.toLowerCase()}…`:`No ${e.path} available`}),n.map(e=>(0,$.jsx)(`option`,{value:e.id,children:e.label},e.id))]})]}),o===`error`&&(0,$.jsxs)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,children:[`The list could not be loaded. `,(0,$.jsx)(`button`,{type:`button`,className:`underline`,onClick:()=>{s(`loading`),l(e=>e+1)},children:`Retry`})]}),(0,$.jsxs)(`details`,{open:!!(i||t.trim()),children:[(0,$.jsx)(`summary`,{className:`cursor-pointer py-2 text-sm text-muted-foreground`,children:i?`Settings for ${n.find(e=>e.id===i)?.label||i}`:`What you can configure (${u.length})`}),(0,$.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fit,minmax(min(100%,16rem),1fr))] gap-3`,children:u.map(t=>i?(0,$.jsx)(Nk,{to:`/${e.path}/${encodeURIComponent(i)}/settings/${t.id}`,...t},t.id):(0,$.jsxs)(`div`,{className:`rounded-lg border border-dashed p-4`,children:[(0,$.jsx)(`p`,{className:`text-sm font-medium`,children:t.label}),(0,$.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:t.description})]},t.id))})]})]}):null}function Fk(){let{state:e}=RT(),[t,n]=(0,Q.useState)(``),r=pT.filter(t=>t.id!==`server`||e.user?.userType===`admin`).map(e=>({...e,items:e.items.filter(n=>hT(t,e.label,n.label,n.description))})).filter(e=>e.items.length),i=Mk.some(e=>e.sections.some(n=>hT(t,e.label,n.label,n.description)));return(0,$.jsxs)(`div`,{className:`mx-auto max-w-6xl space-y-8 pb-8 max-md:pb-rail-stack`,children:[(0,$.jsx)(Zw,{title:`Settings`,description:`Start with what you want to change. Each section explains where your changes apply.`}),(0,$.jsx)(Y,{type:`search`,className:`max-w-xl`,"aria-label":`Search all settings`,placeholder:`Find a setting: offline, folders, models, sharing…`,value:t,onChange:e=>n(e.target.value)}),r.filter(e=>e.id===`device`||e.id===`account`).map(e=>(0,$.jsxs)(`section`,{className:`space-y-3`,children:[(0,$.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.label}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,$.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fit,minmax(min(100%,16rem),1fr))] gap-3`,children:e.items.map(e=>(0,$.jsx)(Nk,{to:e.path,...e},e.path))})]},e.id)),Mk.map(e=>(0,$.jsx)(Pk,{group:e,query:t},e.id)),r.filter(e=>e.id===`server`||e.id===`information`).map(e=>(0,$.jsxs)(`section`,{className:`space-y-3`,children:[(0,$.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.label}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,$.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fit,minmax(min(100%,16rem),1fr))] gap-3`,children:e.items.map(e=>(0,$.jsx)(Nk,{to:e.path,...e},e.path))})]},e.id)),!r.length&&!i&&(0,$.jsxs)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,children:[`No settings match “`,t,`”. Try a shorter phrase or clear the search.`]})]})}var Ik=[{id:`canvas_1`,title:`Canvas Deep`,scheme:`dark`,background:`#032940`,accent:`#f2f2f2`,sources:[{type:`image/svg+xml`,src:`files/canvas_1.svg`},{type:`image/avif`,src:`files/canvas_1.avif`},{type:`image/webp`,src:`files/canvas_1.webp`}],thumb:`thumbs/canvas_1.webp`,author:`Canvas`,license:`LicenseRef-Canvas-Brand`},{id:`canvas_3`,title:`Canvas Mono Dark`,scheme:`dark`,background:`#000000`,accent:`#ffffff`,sources:[{type:`image/svg+xml`,src:`files/canvas_3.svg`},{type:`image/avif`,src:`files/canvas_3.avif`},{type:`image/webp`,src:`files/canvas_3.webp`}],thumb:`thumbs/canvas_3.webp`,author:`Canvas`,license:`LicenseRef-Canvas-Brand`},{id:`w1`,title:`Frost`,scheme:`dark`,background:`#164a6f`,accent:`#9ad9f0`,sources:[{type:`image/avif`,src:`files/w1.avif`},{type:`image/webp`,src:`files/w1.webp`},{type:`image/jpeg`,src:`files/w1.jpg`}],thumb:`thumbs/w1.webp`,author:`Peter Cui Bide`,source:`https://petercui.deviantart.com`,license:`LicenseRef-Attribution-Only`}],Lk=`/wallpapers`;function Rk(e){return Ik.find(t=>t.id===e)}function zk(e,t={}){let n=typeof e==`string`?Rk(e):e;if(!n)return null;let{base:r=Lk,types:i}=t,a=(i?n.sources.find(e=>i.includes(e.type)):n.sources[0])??n.sources[n.sources.length-1];return`${r.replace(/\/$/,``)}/${a.src}`}function Bk(e,t=Lk){let n=typeof e==`string`?Rk(e):e;return n?`${t.replace(/\/$/,``)}/${n.thumb}`:null}var Vk=[{id:`cover`,label:`Scale and Crop`,description:`Fills the screen, cropping edges as needed`},{id:`fill`,label:`Fill`,description:`Stretches to the exact screen size`},{id:`center`,label:`Centered`,description:`Original size, centered on the desk`}],Hk=`canvas:wallpaper`,Uk=`canvas-wallpaper`,Wk=`settings`,Gk=`builtin:`,Kk=Ik;function qk(e){return Bk(e)??``}function Jk(e){return`${Gk}${e}`}function Yk(e){return e?.startsWith(Gk)?e.slice(8):null}function Xk(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.image!=`string`&&t.image!==null?null:{image:t.image,fit:t.fit===`fill`||t.fit===`center`?t.fit:`cover`}}function Zk(){try{let e=localStorage.getItem(Hk);if(e){let t=Xk(JSON.parse(e));if(t)return t}}catch{}return{image:null,fit:`cover`}}var Qk=Zk(),$k=null;function eA(){return Qk}async function tA(e){let t=await new Promise((e,t)=>{let n=indexedDB.open(Uk,1),r=!1;n.onupgradeneeded=()=>n.result.createObjectStore(Wk),n.onsuccess=()=>{if(r){n.result.close();return}n.result.onversionchange=()=>n.result.close(),e(n.result)},n.onerror=()=>t(n.error),n.onblocked=()=>{r=!0,t(Error(`Close other Canvas tabs and try again.`))}});try{return await new Promise((n,r)=>{let i=t.transaction(Wk,e?`readwrite`:`readonly`),a=i.objectStore(Wk),o=e?a.put(e,Hk):a.get(Hk);i.oncomplete=()=>n(o.result),i.onerror=()=>r(i.error),i.onabort=()=>r(i.error)})}finally{t.close()}}function nA(){try{localStorage.removeItem(Hk)}catch{}}function rA(){return $k||=(async()=>{try{let e=Xk(await tA());e?Qk=e:await tA(Qk),nA()}catch{}return dA(Qk),Qk})(),$k.then(()=>Qk)}async function iA(e){await rA(),await tA(e),Qk=e,nA(),dA(e)}function aA(e){if(e.size>10485760)return Promise.reject(Error(`Image too large. Choose one up to 10 MB.`));let t=e.type||(/\.gif$/i.test(e.name)?`image/gif`:``);return t.startsWith(`image/`)?new Promise((n,r)=>{let i=new FileReader;i.onload=()=>n(String(i.result)),i.onerror=()=>r(Error(`Could not read the image. Try selecting it again.`)),i.onabort=()=>r(Error(`Reading the image was cancelled.`)),i.readAsDataURL(e.type?e:e.slice(0,e.size,t))}):Promise.reject(Error(`Pick an image file (animated GIFs are supported).`))}var oA=typeof CSS<`u`&&CSS.supports(`background-image`,`image-set(url("a.avif") type("image/avif"))`);function sA(e){if(!e)return null;let t=Yk(e);if(t===null)return`url("${e}")`;let n=Rk(t);if(!n)return null;let r=`url("${zk(n,{types:[n.sources[n.sources.length-1].type]})}")`;return!oA||n.sources.length===1?r:`image-set(${n.sources.map(e=>`url("${zk(n,{types:[e.type]})}") type("${e.type}")`).join(`, `)})`}function cA(e){return e===`fill`?`100% 100%`:e===`center`?`auto`:`cover`}var lA=null;function uA(e){let t=e.indexOf(`,`);if(t<0)throw Error(`Invalid wallpaper data URL`);let n=e.slice(5,t),r=e.slice(t+1),i;if(n.endsWith(`;base64`)){let e=atob(r);i=new Uint8Array(e.length);for(let t=0;t<e.length;t++)i[t]=e.charCodeAt(t)}else i=new TextEncoder().encode(decodeURIComponent(r));return new Blob([i],{type:n.split(`;`)[0]})}function dA(e=eA()){let t=document.documentElement.style,n=lA,r=e.image;if(r?.startsWith(`data:`))try{lA?.dataUrl!==r&&(lA={dataUrl:r,objectUrl:URL.createObjectURL(uA(r))}),r=lA.objectUrl}catch{lA=null,r=null}else lA=null;let i=sA(r);i?(t.setProperty(`--wallpaper-image`,i),t.setProperty(`--wallpaper-size`,cA(e.fit))):(t.removeProperty(`--wallpaper-image`),t.removeProperty(`--wallpaper-size`)),n&&n!==lA&&URL.revokeObjectURL(n.objectUrl)}var fA=[{id:`cards`,name:`Cards`,description:`Nested cards with connector lines. Each level indents.`},{id:`accordion-mobile`,name:`Accordion on phones (beta)`,description:`Experimental. Full-width accordion rows on a phone, cards on wider screens.`},{id:`accordion`,name:`Accordion (beta)`,description:`Experimental. Full-width rows at every depth; a depth rail, tint and colour swatch replace the indent, and open parents stick to the top while you scroll.`}],pA=`canvas:treeStyle`;function mA(){try{let e=localStorage.getItem(pA);return e===`accordion`||e===`accordion-mobile`?e:`cards`}catch{return`cards`}}var hA=mA(),gA=new Set;function _A(){return hA}function vA(e){try{e===`cards`?localStorage.removeItem(pA):localStorage.setItem(pA,e)}catch{}hA=e;for(let e of gA)e()}function yA(e){gA.add(e);let t=t=>{(t.key===pA||t.key===null)&&(hA=mA(),e())};return window.addEventListener(`storage`,t),()=>{gA.delete(e),window.removeEventListener(`storage`,t)}}function bA(){return(0,Q.useSyncExternalStore)(yA,_A,()=>`cards`)}function xA(){let e=bA(),t=p_();return e===`accordion`||e===`accordion-mobile`&&t}var SA=[{id:`canvas`,name:`Canvas`,description:`Black and white with a teal accent. Sheets of paper on a grey desk.`,swatches:[`oklch(1 0 0)`,`oklch(0 0 0)`,`oklch(0.704 0.135 183)`]},{id:`nord`,name:`Nord`,description:`Cool arctic blues, lower contrast, softer corners.`,swatches:[`oklch(0.976 0.006 251)`,`oklch(0.588 0.056 244)`,`oklch(0.686 0.062 213)`]},{id:`contrast`,name:`High Contrast`,description:`WCAG AAA text contrast, square corners, hard borders, no shadows.`,swatches:[`oklch(1 0 0)`,`oklch(0 0 0)`,`oklch(0.32 0.16 258)`]},{id:`frost`,name:`Frosted Glass`,description:`Translucent, blurred surfaces over a soft backdrop. Best with a wallpaper.`,swatches:[`oklch(0.92 0.008 250)`,`oklch(0.31 0.025 255)`,`oklch(0.55 0.05 250)`]},{id:`terminal`,name:`Terminal`,description:`Monospaced and dense. Tighter rows and chrome for large displays.`,swatches:[`oklch(0.17 0.006 152)`,`oklch(0.8 0.19 148)`,`oklch(0.75 0.12 220)`]},{id:`halflife`,name:`Half-Life`,description:`Lambda orange on black steel. Square corners; the left rail is orange.`,swatches:[`oklch(0.724 0.181 52)`,`oklch(0 0 0)`,`oklch(1 0 0)`]}],CA=SA.map(e=>e.id),wA=[{id:`system`,name:`System`},{id:`light`,name:`Light`},{id:`dark`,name:`Dark`}],TA=[{id:`auto`,name:`Auto`,description:`Match the pointer: touch on phones, mouse on desktop`},{id:`compact`,name:`Compact`,description:`Maximum rows per screen`},{id:`comfortable`,name:`Comfortable`,description:`Balanced for mouse use`},{id:`touch`,name:`Touch`,description:`Large targets for finger input`}],EA={theme:`canvas`,scheme:`light`,density:`auto`},DA=`canvas.ui.theme`;function OA(e){return typeof e==`string`&&CA.includes(e)}function kA(e){return e===`light`||e===`dark`||e===`system`}function AA(e){return e===`auto`||e===`compact`||e===`comfortable`||e===`touch`}function jA(e){let t=typeof e==`object`&&e?e:{};return{theme:OA(t.theme)?t.theme:EA.theme,scheme:kA(t.scheme)?t.scheme:EA.scheme,density:AA(t.density)?t.density:EA.density}}var MA=`(prefers-color-scheme: dark)`;function NA(){return typeof document<`u`}function PA(){return typeof window>`u`||typeof window.matchMedia!=`function`?!1:window.matchMedia(MA).matches}function FA(e){return e===`system`?PA()?`dark`:`light`:e}function IA(e){if(typeof window>`u`||typeof window.matchMedia!=`function`)return()=>{};let t=window.matchMedia(MA),n=t=>e(t.matches?`dark`:`light`);return t.addEventListener(`change`,n),()=>t.removeEventListener(`change`,n)}function LA(e){return IA(e)}function RA(){return PA()?`dark`:`light`}function zA(){return`light`}function BA(e){let t=getComputedStyle(e).getPropertyValue(`--background`).trim();if(!t)return;let n=document.querySelector(`meta[name="theme-color"]`);n||(n=document.createElement(`meta`),n.name=`theme-color`,document.head.appendChild(n)),n.content=t}function VA(e,t=NA()?document.documentElement:void 0){let n=FA(e.scheme);return t?(t.dataset.theme=e.theme,t.dataset.scheme=n,t.dataset.density=e.density,BA(t),n):n}function HA(e,t=NA()?document.documentElement:void 0){if(!t||typeof window>`u`)return VA(e,t);let n=document.createElement(`style`);n.appendChild(document.createTextNode(`*,*::before,*::after{transition:none!important;animation:none!important}`)),document.head.appendChild(n);let r=VA(e,t);return window.getComputedStyle(n).opacity,document.head.removeChild(n),r}function UA(e){let t=e??KA();if(!t)return EA;try{let e=t.getItem(DA);return e?jA(JSON.parse(e)):EA}catch{return EA}}function WA(e,t){let n=t??KA();if(n)try{n.setItem(DA,JSON.stringify(e))}catch{}}function GA(e){let t=e??KA();if(t)try{t.removeItem(DA)}catch{}}function KA(){try{return typeof localStorage<`u`?localStorage:void 0}catch{return}}function qA({children:e,initial:t,storage:n,persist:r=!0}){let[i,a]=(0,Q.useState)(()=>({...UA(n),...t})),o=(0,Q.useSyncExternalStore)(LA,RA,zA),s=i.scheme===`system`?o:i.scheme;(0,Q.useEffect)(()=>{HA({...i,scheme:s})},[i,s]),(0,Q.useEffect)(()=>{r&&WA(i,n)},[i,r,n]);let c=(0,Q.useCallback)(e=>{a(t=>t.theme===e?t:{...t,theme:e})},[]),l=(0,Q.useCallback)(e=>{a(t=>t.scheme===e?t:{...t,scheme:e})},[]),u=(0,Q.useCallback)(e=>{a(t=>t.density===e?t:{...t,density:e})},[]),d=(0,Q.useCallback)(()=>{a(e=>({...e,scheme:(e.scheme===`system`?RA():e.scheme)===`dark`?`light`:`dark`}))},[]),f=(0,Q.useCallback)(()=>{GA(n),a(EA)},[n]),p=(0,Q.useMemo)(()=>({...i,resolvedScheme:s,setTheme:c,setScheme:l,setDensity:u,toggleScheme:d,reset:f}),[i,s,c,l,u,d,f]);return(0,$.jsx)(Ks.Provider,{value:p,children:e})}var JA={system:Fn,light:Rt,dark:me};function YA(){let{theme:e,scheme:t,density:n,resolvedScheme:r,setTheme:i,setScheme:a,setDensity:o,reset:s}=qs(),c=Zg(),l=TT(),u=bA(),d=PT();return(0,$.jsxs)(`div`,{className:`space-y-8`,children:[(0,$.jsxs)(`section`,{children:[(0,$.jsx)($A,{title:`Theme`,description:`Palette, shape and typography. Each theme defines its own light and dark variants.`}),(0,$.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-3`,children:SA.map(t=>{let n=t.id===e;return(0,$.jsxs)(`button`,{type:`button`,onClick:()=>i(t.id),"aria-pressed":n,className:J(`focus-ring group flex flex-col gap-3 rounded-lg border p-4 text-left transition-colors`,n?`border-primary bg-accent`:`border-border hover:border-muted-foreground/40 hover:bg-accent/50`),children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,$.jsx)(`span`,{className:`text-sm font-medium`,children:t.name}),n&&(0,$.jsx)(oe,{className:`size-4 shrink-0 text-primary`})]}),(0,$.jsx)(`div`,{className:`flex gap-1.5`,"aria-hidden":!0,children:t.swatches.map(e=>(0,$.jsx)(`span`,{className:`size-6 rounded-full border border-border`,style:{backgroundColor:e}},e))}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:t.description})]},t.id)})})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)($A,{title:`Colour scheme`,description:t===`system`?`Following your system setting, currently ${r}.`:`Overrides your system setting.`}),(0,$.jsx)(ej,{options:wA.map(e=>{let t=JA[e.id];return{id:e.id,label:e.name,icon:(0,$.jsx)(t,{className:`size-4 shrink-0`})}}),value:t,onChange:a})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)($A,{title:`Density`,description:`Controls row height, hit-target size and shell spacing across the whole app.`}),(0,$.jsx)(ej,{options:TA.map(e=>({id:e.id,label:e.name,title:e.description})),value:n,onChange:o}),(0,$.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:TA.find(e=>e.id===n)?.description})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)($A,{title:`Layout`,description:`How menus and content share the screen. Device-local, like the wallpaper.`}),(0,$.jsx)(ej,{options:gT.map(e=>({id:e.id,label:e.name,title:e.description})),value:l,onChange:CT}),(0,$.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:gT.find(e=>e.id===l)?.description}),l===`strip`&&(0,$.jsxs)(`div`,{className:`mt-4`,children:[(0,$.jsx)(`p`,{className:`mb-2 text-sm font-medium`,children:`Navigation keys`}),(0,$.jsx)(ej,{options:ET.map(e=>({id:e.id,label:e.name,title:e.description})),value:d,onChange:MT}),(0,$.jsxs)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:[ET.find(e=>e.id===d)?.description,` `,`Left and right walk the columns, up and down switch pin rows.`]})]})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)($A,{title:`Tree style`,description:`How workspace and context trees are drawn in the menu. Device-local.`}),(0,$.jsx)(ej,{options:fA.map(e=>({id:e.id,label:e.name,title:e.description})),value:u,onChange:vA}),(0,$.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:fA.find(e=>e.id===u)?.description})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)($A,{title:`Open documents`,description:`Choose how documents open from lists, tiles and boards. Saved on this device.`}),(0,$.jsx)(ej,{options:[{id:`modal`,label:`Modal`},{id:`side`,label:`Side reading pane`}],value:c,onChange:Yg}),(0,$.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:`The reading pane opens beside the content and updates as you select another document. On small screens it opens as a drawer.`})]}),(0,$.jsx)(XA,{}),(0,$.jsx)(`section`,{children:(0,$.jsx)(`button`,{type:`button`,onClick:()=>{s(),Yg(`modal`)},className:`focus-ring rounded-md text-sm text-muted-foreground underline-offset-4 hover:text-foreground hover:underline`,children:`Reset to defaults`})})]})}function XA(){let[e,t]=(0,Q.useState)(eA),[n,r]=(0,Q.useState)(null),[i,a]=(0,Q.useState)(!0),[o,s]=(0,Q.useState)(!1),c=(0,Q.useRef)(!1);(0,Q.useEffect)(()=>{let e=!1;return rA().then(()=>{e||(t(eA()),a(!1))}),()=>{e=!0}},[]);let l=async(e,n)=>{if(!c.current){c.current=!0,s(!0);try{let i=n?{...e,image:await aA(n)}:e;await iA(i),t(i),r(null)}catch(e){r(e instanceof Error&&e.name!==`QuotaExceededError`?e.message:`Could not store the wallpaper. Free some browser storage or try a smaller image.`)}finally{c.current=!1,s(!1)}}},u=t=>{t&&l(e,t)},d=e.image!==null&&Yk(e.image)===null,f=sA(e.image);return(0,$.jsx)(`section`,{children:(0,$.jsxs)(`fieldset`,{disabled:i||o,className:`min-w-0`,children:[(0,$.jsx)($A,{title:`Wallpaper`,description:`Background image for the desk behind all panels. Without one, the theme's desk color shows (the default).`}),(0,$.jsxs)(`div`,{role:`radiogroup`,"aria-label":`Wallpaper`,className:`grid grid-cols-3 gap-3 sm:grid-cols-4 lg:grid-cols-6`,children:[(0,$.jsx)(QA,{label:`None`,isActive:e.image===null,onSelect:()=>l({...e,image:null}),children:(0,$.jsx)(`span`,{className:`flex size-full items-center justify-center surface-desk text-xs text-muted-foreground`,style:{backgroundImage:`none`},children:`None`})}),Kk.map(t=>(0,$.jsx)(QA,{label:t.title,title:`${t.title} — suits the ${t.scheme} scheme`,isActive:Yk(e.image)===t.id,onSelect:()=>l({...e,image:Jk(t.id)}),children:(0,$.jsx)(`img`,{src:qk(t),alt:``,loading:`lazy`,className:`size-full object-cover`,style:{backgroundColor:t.background}})},t.id)),d&&(0,$.jsx)(QA,{label:`Your image`,isActive:!0,onSelect:()=>{},children:(0,$.jsx)(`img`,{src:e.image??void 0,alt:``,className:`size-full object-cover`})})]}),(0,$.jsx)(ZA,{}),(0,$.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-3`,children:[(0,$.jsx)(`div`,{className:`h-20 w-32 shrink-0 rounded-md border surface-desk`,style:f?{backgroundImage:f,backgroundSize:cA(e.fit),backgroundPosition:`center`,backgroundRepeat:`no-repeat`}:void 0,"aria-hidden":!0}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,$.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,$.jsxs)(`label`,{className:`focus-ring inline-flex cursor-pointer items-center rounded-md border px-3 py-1.5 text-sm hover:bg-accent/50`,children:[d?`Change image…`:`Use your own image…`,(0,$.jsx)(`input`,{type:`file`,accept:`image/*,.gif`,className:`hidden`,onChange:e=>{u(e.target.files?.[0]),e.target.value=``}})]}),e.image&&(0,$.jsx)(`button`,{type:`button`,onClick:()=>l({...e,image:null}),className:`focus-ring rounded-md border px-3 py-1.5 text-sm text-muted-foreground hover:bg-accent/50 hover:text-foreground`,children:`Remove`})]}),(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Images and animated GIFs up to 10 MB. Stored on this device.`}),(0,$.jsx)(ej,{options:Vk.map(e=>({id:e.id,label:e.label,title:e.description})),value:e.fit,onChange:t=>l({...e,fit:t})}),n&&(0,$.jsx)(`p`,{className:`text-xs text-destructive`,children:n}),o&&(0,$.jsx)(`p`,{role:`status`,className:`text-xs text-muted-foreground`,children:`Saving wallpaper…`})]})]})]})})}function ZA(){let e=Kk.filter(e=>e.author!==`Canvas`);return e.length===0?null:(0,$.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:e.map((e,t)=>(0,$.jsxs)(`span`,{children:[t>0&&` · `,e.title,` © `,e.author,e.source&&(0,$.jsxs)($.Fragment,{children:[` `,(0,$.jsx)(`a`,{href:e.source,target:`_blank`,rel:`noreferrer noopener`,className:`focus-ring underline underline-offset-2 hover:text-foreground`,children:new URL(e.source).hostname})]})]},e.id))})}function QA({label:e,title:t,isActive:n,onSelect:r,children:i}){return(0,$.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":n,"aria-label":e,title:t??e,onClick:r,className:J(`focus-ring group relative aspect-video overflow-hidden rounded-md border transition-colors`,n?`border-primary ring-1 ring-primary`:`border-border hover:border-muted-foreground/40`),children:[i,n&&(0,$.jsx)(`span`,{className:`absolute right-1 top-1 rounded-full bg-primary p-0.5 text-primary-foreground`,children:(0,$.jsx)(oe,{className:`size-3`})})]})}function $A({title:e,description:t}){return(0,$.jsxs)(`div`,{className:`mb-3`,children:[(0,$.jsx)(`h2`,{className:`text-base font-semibold`,children:e}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t})]})}function ej({options:e,value:t,onChange:n}){return(0,$.jsx)(`div`,{role:`radiogroup`,className:`inline-flex flex-wrap gap-1 rounded-lg bg-muted p-1`,children:e.map(e=>{let r=e.id===t;return(0,$.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":r,title:e.title,onClick:()=>n(e.id),className:J(`focus-ring flex h-control items-center gap-2 rounded-md px-3 text-sm transition-colors`,r?`bg-card text-foreground shadow-elevation-1`:`text-muted-foreground hover:text-foreground`),children:[e.icon,e.label]},e.id)})})}function tj(){return(0,$.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,$.jsx)(Zw,{className:`mb-6`,title:`Appearance`,onBack:MO(),description:`Theme, colour scheme and density. Changes apply immediately and are remembered on this device.`}),(0,$.jsx)(YA,{})]})}var nj={previousTree:`Alt+Q`,nextTree:`Alt+W`},rj=`canvas:key-bindings`,ij=/^(Alt|Alt\+Shift|Ctrl\+Shift|Meta\+Shift)\+[A-Z]$/;function aj(){try{let e=JSON.parse(localStorage.getItem(rj)||`{}`),t={...nj};for(let n of Object.keys(t))(e[n]===``||ij.test(e[n]))&&(t[n]=e[n]);return t.previousTree&&t.previousTree===t.nextTree?{...nj}:t}catch{return{...nj}}}function oj(e){localStorage.setItem(rj,JSON.stringify(e))}function sj(e){return/^Key[A-Z]$/.test(e.code)?[e.ctrlKey&&`Ctrl`,e.altKey&&`Alt`,e.metaKey&&`Meta`,e.shiftKey&&`Shift`,e.code.slice(3)].filter(Boolean).join(`+`):``}function cj(e,t,n){return e[(Math.max(0,e.indexOf(t))+n+e.length)%e.length]}function lj(e,t){return Math.abs(e)>=48&&Math.abs(e)>Math.abs(t)*1.5?e<0?1:-1:0}function uj(){let[e,t]=(0,Q.useState)(aj),[n,r]=(0,Q.useState)(``),i=e=>{if(e.previousTree&&e.previousTree===e.nextTree){r(`Choose a different shortcut: that combination is already assigned.`);return}try{oj(e),t(e),r(`Saved on this device.`)}catch{r(`Could not save shortcuts in this browser.`)}};return(0,$.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,$.jsx)(Zw,{className:`mb-6`,title:`Key bindings`,onBack:MO(),description:`Web UI shortcuts, saved on this device and available offline.`}),(0,$.jsxs)(`section`,{className:`space-y-4 rounded-lg border p-4`,children:[(0,$.jsx)(`h2`,{className:`font-medium`,children:`Tree navigation`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Cycle the open workspace menu’s tabs in their displayed order, including Pins and Layers. Swipe left for next or right for previous over the tab bar. Shortcuts pause while typing or using a dialog.`}),[`previousTree`,`nextTree`].map(t=>(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,$.jsx)(`label`,{htmlFor:t,className:`min-w-32 text-sm`,children:t===`previousTree`?`Previous tree`:`Next tree`}),(0,$.jsxs)(`select`,{id:t,className:`rounded-md border bg-background p-2 text-sm`,value:e[t].split(`+`).slice(0,-1).join(`+`),onChange:n=>i({...e,[t]:n.target.value?`${n.target.value}+${e[t].slice(-1)||nj[t].slice(-1)}`:``}),children:[(0,$.jsx)(`option`,{value:``,children:`Disabled`}),[`Alt`,`Alt+Shift`,`Ctrl+Shift`,`Meta+Shift`].map(e=>(0,$.jsx)(`option`,{value:e,children:e},e))]}),(0,$.jsx)(`select`,{"aria-label":`${t===`previousTree`?`Previous`:`Next`} tree key`,disabled:!e[t],className:`rounded-md border bg-background p-2 text-sm disabled:opacity-50`,value:e[t].slice(-1)||nj[t].slice(-1),onChange:n=>i({...e,[t]:`${e[t].split(`+`).slice(0,-1).join(`+`)}+${n.target.value}`}),children:`ABCDEFGHIJKLMNOPQRSTUVWXYZ`.split(``).map(e=>(0,$.jsx)(`option`,{value:e,children:e},e))})]},t)),(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Browsers and operating systems may reserve combinations. Choose another if a shortcut does not reach Canvas. Letters refer to physical keyboard positions (Q/W on a US keyboard); Meta is Command on Mac.`}),(0,$.jsx)(`button`,{type:`button`,className:`rounded-md border px-3 py-2 text-sm hover:bg-accent`,onClick:()=>i({...nj}),children:`Restore defaults`}),(0,$.jsx)(`p`,{role:`status`,className:`text-sm`,children:n})]})]})}var dj=`offline-content-v1`,fj=`offline-api-v1`,pj=1073741824,mj={enabled:!1,budgetBytes:4*pj,excludedWorkspaces:[]},hj=1e3;function gj(e){return(e.startsWith(`/`)?e:`/${e}`).replace(/\/+$/,``)||`/`}function _j(e,t,n){return`${e}:${t}:${gj(n)}`}var vj=`canvas-offline`,yj=2,bj=null;function xj(){return bj||(bj=new Promise((e,t)=>{let n=indexedDB.open(vj,yj);n.onupgradeneeded=e=>{let t=n.result;if(t.objectStoreNames.contains(`config`)||t.createObjectStore(`config`),t.objectStoreNames.contains(`entries`)||t.createObjectStore(`entries`,{keyPath:`url`}),e.oldVersion>=1&&t.objectStoreNames.contains(`pins`)){t.deleteObjectStore(`pins`);let e=n.transaction.objectStore(`entries`).openCursor();e.onsuccess=()=>{let t=e.result;if(!t)return;let n=t.value;n.pinned&&t.update({...n,pinned:!1}),t.continue()}}t.objectStoreNames.contains(`scopes`)||t.createObjectStore(`scopes`,{keyPath:`id`})},n.onsuccess=()=>{n.result.onversionchange=()=>{n.result.close(),bj=null},e(n.result)},n.onerror=()=>{bj=null,t(n.error)}}),bj)}function Sj(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error),e.onabort=()=>n(e.error)})}function Cj(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}async function wj(e,t){return Cj((await xj()).transaction(e).objectStore(e).get(t))}async function Tj(e){return Cj((await xj()).transaction(e).objectStore(e).getAll())}async function Ej(e,t,n){let r=(await xj()).transaction(e,`readwrite`);return r.objectStore(e).put(t,n),Sj(r)}async function Dj(e,t){let n=(await xj()).transaction(e,`readwrite`);return n.objectStore(e).delete(t),Sj(n)}async function Oj(e){let t=(await xj()).transaction(e,`readwrite`);return t.objectStore(e).clear(),Sj(t)}async function kj(){try{let e=await wj(`config`,`settings`);return e?{...mj,...e}:mj}catch{return mj}}async function Aj(e){await Ej(`config`,e,`settings`)}async function jj(e,t){let n=(await xj()).transaction(`entries`,`readwrite`),r=n.objectStore(`entries`);for(let n of e){let e=r.get(n);e.onsuccess=()=>{let i=e.result;i?r.put({...i,pinned:t}):t&&r.put({url:n,kind:`content`,size:0,lastAccess:Date.now(),pinned:t})}}return Sj(n)}async function Mj(e){let t=await Tj(`entries`),n=t.filter(e=>e.kind===`api`).sort((e,t)=>e.lastAccess-t.lastAccess),r=n.slice(0,Math.max(0,n.length-hj)),i=t.filter(e=>e.kind===`content`),a=i.reduce((e,t)=>e+t.size,0),o=i.filter(e=>!e.pinned).sort((e,t)=>e.lastAccess-t.lastAccess),s=[];for(let t of o){if(a<=e)break;s.push(t),a-=t.size}if(!r.length&&!s.length)return;let[c,l]=await Promise.all([caches.open(fj),caches.open(dj)]);await Promise.all([...r.map(async e=>{await c.delete(e.url),await Dj(`entries`,e.url)}),...s.map(async e=>{await l.delete(e.url),await Dj(`entries`,e.url)})])}async function Nj(){let e=await Tj(`entries`),t=e.filter(e=>e.kind===`content`);return{contentBytes:t.reduce((e,t)=>e+t.size,0),contentCount:t.length,pinnedBytes:t.filter(e=>e.pinned).reduce((e,t)=>e+t.size,0),apiCount:e.length-t.length}}async function Pj(){await Promise.all([caches.delete(dj),caches.delete(fj)]),await Oj(`entries`),await Oj(`scopes`)}async function Fj(){return Tj(`scopes`)}async function Ij(e){return wj(`scopes`,e)}async function Lj(e){await Ej(`scopes`,e)}async function Rj(e){let t=await wj(`scopes`,e);await Dj(`scopes`,e),t?.urls.length&&await zj(t.urls)}async function zj(e){let t=await Tj(`scopes`),n=new Set(t.flatMap(e=>e.urls)),r=e.filter(e=>!n.has(e));r.length&&await jj(r,!1)}var Bj=3,Vj=`data/schema/file`,Hj=128;async function Uj({workspaceRef:e,path:t,treeName:n,treeType:r},i){let a=await kj();if(!a.enabled)throw Error(`Enable the offline cache first`);if(a.excludedWorkspaces.includes(e))throw Error(`Workspace "${e}" is excluded from offline caching`);let o=_j(e,n,t),s=gj(t),c=await Ij(o),l=((await Ra(e,s,[],{limit:1e4,treeName:n,treeType:r})).payload??[]).filter(e=>e.schema===Vj),u=[],d=0,f=0,p=!1,m=l.length;i?.({done:f,total:m,bytes:d});let h=0;await Promise.all(Array.from({length:Math.min(Bj,l.length)},async()=>{for(;h<l.length;){let t=l[h++];if(d>=a.budgetBytes*.9){p=!0;return}try{let{blob:n}=await No(e,t.id);d+=n.size,u.push(`${xr.workspaces}/${e}/documents/${t.id}/content`);try{await Zr(e,t.id,Hj),u.push(`${xr.workspaces}/${e}/documents/${t.id}/thumbnail?size=${Hj}`)}catch{}}catch{}f+=1,i?.({done:f,total:m,bytes:d})}})),await jj(u,!0);let g={id:o,workspaceRef:e,treeName:n,treeType:r,path:s,urls:u,bytes:d,warmedAt:Date.now(),...p?{truncated:!0}:{}};if(await Lj(g),c){let e=new Set(u),t=c.urls.filter(t=>!e.has(t));t.length&&await zj(t)}return g}var Wj=[{label:`1 GB`,bytes:1*pj},{label:`2 GB`,bytes:2*pj},{label:`4 GB`,bytes:4*pj},{label:`8 GB`,bytes:8*pj}];function Gj(e){return e<1048576?`${(e/1024).toFixed(0)} KB`:e<1073741824?`${(e/1048576).toFixed(1)} MB`:`${(e/pj).toFixed(2)} GB`}function Kj(){navigator.serviceWorker?.controller?.postMessage({type:`OFFLINE_SETTINGS_CHANGED`})}function qj(){let{showSuccessToast:e,showErrorToast:t}=Kr(),[n,r]=(0,Q.useState)(null),[i,a]=(0,Q.useState)(null),[o,s]=(0,Q.useState)(null),[c,l]=(0,Q.useState)([]),[u,d]=(0,Q.useState)([]),[f,p]=(0,Q.useState)({}),[m,h]=(0,Q.useState)(!1),[g,_]=(0,Q.useState)(!1),v=(0,Q.useCallback)(()=>{kj().then(r).catch(()=>{}),Nj().then(a).catch(()=>{}),Fj().then(e=>d(e.sort((e,t)=>e.id.localeCompare(t.id)))).catch(()=>{}),navigator.storage?.persisted?.().then(s).catch(()=>{})},[]);(0,Q.useEffect)(()=>{v(),Ri().then(e=>l(e.map(e=>e.name).filter(Boolean).sort())).catch(()=>{})},[v]);let y=async e=>{r(e),await Aj(e),Kj(),e.enabled&&navigator.storage?.persist?.().then(s).catch(()=>{}),Mj(e.budgetBytes).then(v).catch(()=>{})},b=e=>{if(!n)return;let t=n.excludedWorkspaces.includes(e)?n.excludedWorkspaces.filter(t=>t!==e):[...n.excludedWorkspaces,e];y({...n,excludedWorkspaces:t})},x=async()=>{h(!0);try{await Pj(),e(`Offline cache cleared`),v()}catch(e){t(e instanceof Error?e.message:`Failed to clear cache`)}finally{h(!1)}},S=async n=>{let r=_j(n.workspaceRef,n.treeName,n.path);p(e=>({...e,[r]:{done:0,total:0,bytes:0}}));try{let t=await Uj(n,e=>p(t=>({...t,[r]:e})));e(t.truncated?`Pinned ${Gj(t.bytes)} — stopped at the size budget`:`Pinned ${t.workspaceRef}:/${t.path} (${Gj(t.bytes)})`)}catch(e){t(e instanceof Error?e.message:`Failed to pin`)}finally{p(e=>{let{[r]:t,...n}=e;return n}),v()}},C=(e,t)=>{_(!1);for(let n of e)S({workspaceRef:t.workspaceName,path:n,treeName:t.treeName,treeType:t.treeType})},w=e=>({workspaceRef:e.workspaceRef,path:e.path,treeName:e.treeName||`context`,treeType:e.treeType||`context`}),T=async e=>{await Rj(e),v()};return n?(0,$.jsxs)(`div`,{className:`space-y-8`,children:[(0,$.jsxs)(`section`,{children:[(0,$.jsx)(Jj,{title:`Offline cache`,description:`Keep documents you open (and scopes you pin) readable without a connection. Cached on this device only; least-recently-used files are evicted when the size budget fills. Video streaming is not cached.`}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,$.jsxs)(`button`,{type:`button`,onClick:()=>y({...n,enabled:!n.enabled}),"aria-pressed":n.enabled,className:J(`focus-ring flex items-center gap-3 rounded-lg border p-4 text-left transition-colors`,n.enabled?`border-primary bg-accent`:`border-input hover:bg-muted/40`),children:[(0,$.jsx)(mr,{className:`h-5 w-5 shrink-0 text-muted-foreground`}),(0,$.jsxs)(`span`,{className:`flex-1`,children:[(0,$.jsx)(`span`,{className:`block text-sm font-medium`,children:n.enabled?`Enabled`:`Disabled`}),(0,$.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:n.enabled?o===!1?`Storage is not persistent — the browser may still evict the cache under disk pressure`:`Documents are cached as you browse`:`Nothing is cached for offline use`})]}),n.enabled&&(0,$.jsx)(oe,{className:`h-4 w-4 shrink-0 text-primary`})]}),n.enabled&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`p`,{className:`mb-2 text-sm font-medium`,children:`Size budget`}),(0,$.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:Wj.map(e=>(0,$.jsx)(Z,{variant:n.budgetBytes===e.bytes?`default`:`outline`,size:`sm`,onClick:()=>y({...n,budgetBytes:e.bytes}),children:e.label},e.bytes))})]}),i&&(0,$.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,$.jsxs)(`div`,{className:`flex items-baseline justify-between text-sm`,children:[(0,$.jsxs)(`span`,{children:[Gj(i.contentBytes),` of `,Gj(n.budgetBytes),` used`]}),(0,$.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[i.contentCount,` file(s)`,i.pinnedBytes>0?`, ${Gj(i.pinnedBytes)} pinned`:``]})]}),(0,$.jsx)(`div`,{className:`h-2 w-full overflow-hidden rounded-full bg-muted`,children:(0,$.jsx)(`div`,{className:`h-full rounded-full bg-primary`,style:{width:`${Math.min(100,i.contentBytes/n.budgetBytes*100)}%`}})})]}),(0,$.jsx)(`div`,{children:(0,$.jsxs)(Z,{variant:`outline`,size:`sm`,onClick:x,disabled:m,children:[m?(0,$.jsx)(Yn,{className:`mr-1.5 h-3.5 w-3.5 animate-spin`}):(0,$.jsx)(nt,{className:`mr-1.5 h-3.5 w-3.5`}),`Clear offline cache`]})})]})]})]}),n.enabled&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`section`,{children:[(0,$.jsx)(Jj,{title:`Pinned scopes`,description:`A pinned scope — a workspace, or one of its tree paths — is downloaded up front and never evicted. Scopes resolve fresh on every re-warm, so moved contexts and reorganized trees are picked up; documents that left a scope return to normal eviction.`}),(0,$.jsx)(`div`,{className:`mb-3`,children:(0,$.jsxs)(Z,{size:`sm`,onClick:()=>_(!0),disabled:!!Object.keys(f).length,children:[(0,$.jsx)(Oe,{className:`mr-1.5 h-3.5 w-3.5`}),`Pin a path…`]})}),(0,$.jsxs)(`ul`,{className:`space-y-1`,children:[u.map(e=>{let t=f[e.id];return(0,$.jsxs)(`li`,{className:`flex items-center gap-3 rounded-md border border-input px-3 py-2 text-sm`,children:[(0,$.jsxs)(`span`,{className:`flex-1 truncate font-mono text-xs sm:text-sm`,children:[e.workspaceRef,`://`,e.path.replace(/^\//,``),e.treeName&&e.treeName!==`context`&&(0,$.jsx)(`span`,{className:`ml-1.5 rounded bg-muted px-1 py-0.5 font-sans text-[10px] text-muted-foreground`,children:e.treeName})]}),t?(0,$.jsxs)(`span`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,$.jsx)(Yn,{className:`h-3.5 w-3.5 animate-spin`}),t.total>0?`${t.done}/${t.total} · ${Gj(t.bytes)}`:`listing…`]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[Gj(e.bytes),e.truncated?` (partial)`:``]}),(0,$.jsx)(Z,{variant:`ghost`,size:`sm`,onClick:()=>S(w(e)),"aria-label":`Re-warm ${e.id}`,title:`Re-warm: re-resolve the scope and download anything new`,children:(0,$.jsx)(P,{className:`h-3.5 w-3.5`})}),(0,$.jsx)(Z,{variant:`ghost`,size:`sm`,onClick:()=>T(e.id),"aria-label":`Unpin ${e.id}`,children:(0,$.jsx)(G,{className:`h-3.5 w-3.5`})})]})]},e.id)}),u.length===0&&(0,$.jsx)(`li`,{className:`rounded-md border border-dashed border-input px-3 py-4 text-center text-sm text-muted-foreground`,children:`Nothing pinned — everything relies on browse-caching and LRU`})]})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)(Jj,{title:`Workspace caching`,description:`Excluded workspaces are never cached — not even as you browse — and are not served from cache.`}),(0,$.jsx)(`ul`,{className:`space-y-1`,children:c.map(e=>{let t=n.excludedWorkspaces.includes(e);return(0,$.jsxs)(`li`,{className:`flex items-center gap-3 rounded-md border border-input px-3 py-2 text-sm`,children:[(0,$.jsx)(`span`,{className:J(`flex-1 truncate`,t&&`text-muted-foreground line-through`),children:e}),t&&(0,$.jsx)(In,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,$.jsx)(Z,{variant:t?`outline`:`ghost`,size:`sm`,onClick:()=>b(e),children:t?`Include`:`Exclude`})]},e)})})]})]}),g&&(0,$.jsx)(rm,{onClose:()=>_(!1),children:(0,$.jsx)(ch,{sizeClassName:`h-full w-[380px] max-w-[90vw] max-md:w-full`,multiple:!1,tabs:[`context`,`directory`],title:`Pin for offline…`,confirmLabel:`Pin path`,onConfirm:C,onClose:()=>_(!1)})})]}):null}function Jj({title:e,description:t}){return(0,$.jsxs)(`div`,{className:`mb-4`,children:[(0,$.jsx)(`h2`,{className:`text-base font-semibold`,children:e}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t})]})}function Yj(){return(0,$.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,$.jsx)(Zw,{className:`mb-6`,title:`Offline`,onBack:MO(),description:`Per-device offline cache: browse notes, files, photos and saved websites without a connection.`}),(0,$.jsx)(qj,{})]})}function Xj(e){let t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60);return t>0?`${t}d ${n}h ${r}m`:n>0?`${n}h ${r}m`:`${r}m`}function Zj({name:e,version:t,detail:n}){return(0,$.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 px-4 py-2.5`,children:[(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`div`,{className:`text-sm font-medium truncate`,children:e}),n&&(0,$.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:n})]}),(0,$.jsx)(`code`,{className:`text-xs text-muted-foreground shrink-0`,children:t})]})}function Qj(){let[e,t]=(0,Q.useState)(null),[n,r]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{let e=!0;return X.get(`/ping`,{skipAuth:!0}).then(n=>{e&&t(n??{})}).catch(t=>{e&&r(t instanceof Error?t.message:`Failed to reach the server`)}),()=>{e=!1}},[]);let i=[e?.commit?`commit ${e.commit.slice(0,7)}`:null,typeof e?.uptime==`number`?`up ${Xj(e.uptime)}`:null].filter(Boolean).join(` · `),a=Object.entries(e?.components??{}).sort(([e],[t])=>e.localeCompare(t));return(0,$.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,$.jsx)(Zw,{className:`mb-6`,title:`About`,onBack:MO(),description:`Versions of every Canvas component this installation is running.`}),(0,$.jsxs)(`div`,{className:`space-y-6`,children:[(0,$.jsxs)(`section`,{className:`rounded-md border border-border divide-y divide-border`,children:[(0,$.jsx)(Zj,{name:`Canvas Web`,detail:`this interface`,version:`v2.26.6`}),e?.version&&(0,$.jsx)(Zj,{name:e.productName||e.appName||`Canvas Server`,detail:i||void 0,version:`v${e.version}`})]}),a.length>0&&(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h2`,{className:`mb-2 px-1 text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:`Server components`}),(0,$.jsx)(`div`,{className:`rounded-md border border-border divide-y divide-border`,children:a.map(([e,t])=>(0,$.jsx)(Zj,{name:e,version:`v${t}`},e))})]}),n&&(0,$.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Server details unavailable: `,n]}),e?.sourceUrl&&(0,$.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[e.license?`Licensed ${e.license}. `:``,(0,$.jsx)(`a`,{href:e.sourceUrl,target:`_blank`,rel:`noreferrer`,className:`underline underline-offset-2 hover:text-foreground`,children:`Get the source code`}),`.`]})]})]})}var $j=[`onnx`,`clip`,`blip`,`openai`],eM=[`onnx`,`clip`,`blip`,`ollama`,`vllm`],tM=[{id:`openai`,baseUrl:`https://api.openai.com/v1`,label:`OpenAI`},{id:`vllm`,baseUrl:`http://127.0.0.1:8000/v1`,label:`vLLM`},{id:`ollama`,baseUrl:`http://127.0.0.1:11434/v1`,label:`Ollama`}],nM=e=>`${xr.workspaces}/${encodeURIComponent(e)}/inferd`;function rM(e,t){let n={};for(let[r,i]of Object.entries(e.providers||{})){let e={...i};delete e.apiKeySet,delete e.headerNames,t.has(r)&&i.apiKey?e.apiKey=i.apiKey:delete e.apiKey,n[r]=e}return{...e,providers:n}}async function iM(e){return await X.get(`${nM(e)}/status`)}async function aM(e,t={}){let n={};return t.force!==void 0&&(n.force=t.force),await X.post(`${nM(e)}/summarize/images`,n)}async function oM(e){return await X.post(`${nM(e)}/summarize/images/stop`,{})}async function sM(e){return await X.get(`${nM(e)}/config`)}async function cM(e,t){return await X.put(`${nM(e)}/config`,t)}async function lM(e,t={}){let n={};return t.space&&(n.space=t.space),t.reindex!==void 0&&(n.reindex=t.reindex),t.scope&&(n.scope=t.scope),await X.post(`${nM(e)}/reindex`,n)}async function uM(e){return await X.get(`${nM(e)}/vector-tables`)}async function dM(e,t){return await X.delete(`${nM(e)}/vector-tables/${encodeURIComponent(t)}`)}async function fM(){return await X.get(`${xr.inferd}/config`)}async function pM(e){return await X.put(`${xr.inferd}/config`,e)}async function mM(){return await X.get(`${xr.inferd}/defaults`)}async function hM(e){return await X.put(`${xr.inferd}/defaults`,e)}async function gM(e,t){let n={...e};return delete n.apiKeySet,delete n.headerNames,(await X.post(`${xr.inferd}/test`,{provider:n,...t?{model:t}:{},probe:!0})).cached??null}async function _M(e,t,n=`text`){let r={...e};return delete r.apiKeySet,delete r.headerNames,await X.post(`${xr.inferd}/test`,{provider:r,...t?{model:t}:{},modality:n})}var vM=`h-8 w-full rounded-md border bg-background px-2 text-sm outline-none focus:ring-2 focus:ring-ring`,yM=`font-semibold uppercase tracking-[0.08em]`,bM={openai:{url:{key:`baseUrl`,label:`Base URL`,placeholder:`http://gpu.local:8000/v1`,hint:`OpenAI-compatible embeddings endpoint — Ollama, vLLM, TEI, infinity, LM Studio and OpenAI itself all speak this. A trailing /v1 is optional; both http://host:8000 and http://host:8000/v1 work.`},apiKey:"Sent as `Authorization: Bearer …`. Leave empty for servers that do not check it.",imageInput:!0,timeoutMs:!0,headers:!0,where:e=>e.baseUrl||`no endpoint set`},ollama:{url:{key:`host`,label:`Host (legacy)`,placeholder:`http://127.0.0.1:11434`,hint:`Written by an older version. Switch the type to openai — the host becomes the base URL and the /v1 suffix is added for you.`},apiKey:"Sent as `Authorization: Bearer …`.",where:e=>e.host||`http://127.0.0.1:11434`},onnx:{cacheDir:`Where downloaded weights are cached on the server. Empty uses the server default.`,note:`Runs in-process on the server. No endpoint and no credentials.`,where:()=>`in-process`},clip:{cacheDir:`Where downloaded weights are cached on the server. Empty uses the server default.`,note:`Runs in-process on the server. No endpoint and no credentials.`,where:()=>`in-process`}},xM=[`baseUrl`,`host`,`apiKey`,`cacheDir`,`imageInput`,`timeoutMs`],SM=[{value:`data-uri`,label:`data-uri (default)`,hint:"Images ride in the ordinary `input` array as data URIs (infinity, TEI-style servers)."},{value:`messages`,label:`messages`,hint:`vLLM's multimodal shape: one request per image, wrapped in a chat message.`}],CM=12e4;function wM(e){if(typeof e!=`string`||e.trim()===``)return null;let t;try{t=new URL(e.trim())}catch{return`Must be an absolute URL including the scheme, e.g. http://127.0.0.1:11434`}return t.protocol!==`http:`&&t.protocol!==`https:`?`Unsupported scheme '${t.protocol.replace(`:`,``)}'. Use http or https.`:null}function TM({title:e,hint:t}){return(0,$.jsxs)(`div`,{className:`mb-2`,children:[(0,$.jsx)(`h3`,{className:J(`text-[11px] text-muted-foreground`,yM),children:e}),(0,$.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:t})]})}function EM({overridden:e,source:t}){return e?(0,$.jsx)(`span`,{className:`rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary`,title:`Set on this layer; it wins over anything inherited`,children:`overridden`}):(0,$.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground`,title:t?`Inherited: ${t}`:`Inherited from a lower config layer`,children:`inherited`})}function DM({label:e,value:t,inheritedValue:n,onChange:r,type:i=`text`,placeholder:a,disabled:o,hint:s,error:c,mono:l}){let u=t!==void 0&&t!==``;return(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`label`,{className:`text-xs font-medium`,children:e}),(0,$.jsx)(EM,{overridden:u,source:n===void 0?void 0:String(n)}),u&&!o&&(0,$.jsx)(`button`,{type:`button`,onClick:()=>r(``),className:`text-[10px] text-muted-foreground underline hover:text-foreground`,title:`Clear the override and fall back to the inherited value`,children:`reset`})]}),(0,$.jsx)(Y,{type:i,value:t??``,disabled:o,onChange:e=>r(e.target.value),placeholder:a??(n===void 0?`—`:String(n)),className:J(`h-8 text-sm`,l&&`font-mono`,c&&`border-destructive focus-visible:ring-destructive`)}),c&&(0,$.jsx)(`p`,{className:`text-[11px] font-medium text-destructive`,children:c}),s&&(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:s})]})}function OM({label:e,checked:t,overridden:n,disabled:r,onChange:i}){return(0,$.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,$.jsx)(`input`,{type:`checkbox`,disabled:r,checked:t,onChange:e=>i(e.target.checked)}),e,(0,$.jsx)(EM,{overridden:n})]})}function kM({storedNames:e,value:t,disabled:n,onChange:r}){let i=t!==void 0,[a,o]=(0,Q.useState)([]),s=e=>{o(e),r(Object.fromEntries(e.filter(([e])=>e.trim()!==``)))};return(0,$.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,$.jsx)(`label`,{className:`text-xs font-medium`,children:`Custom headers`}),i?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{className:`rounded bg-warning-subtle px-1.5 py-0.5 text-[10px] font-medium text-warning`,children:`will replace stored`}),!n&&(0,$.jsx)(`button`,{type:`button`,onClick:()=>{o([]),r(void 0)},className:`text-[10px] text-muted-foreground underline hover:text-foreground`,children:`cancel`})]}):(0,$.jsx)(EM,{overridden:!1,source:e?.join(`, `)})]}),!i&&(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:e?.length?(0,$.jsxs)($.Fragment,{children:[`Stored: `,(0,$.jsx)(`span`,{className:`font-mono`,children:e.join(`, `)}),` (values are never sent back)`]}):`None set.`}),!n&&(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>{o([[``,``]]),r({})},children:e?.length?`Replace headers`:`Add headers`})]}),i&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Saving replaces every stored header, so re-enter the ones you want to keep.`}),a.map(([e,t],r)=>(0,$.jsxs)(`div`,{className:`flex gap-2`,children:[(0,$.jsx)(Y,{value:e,disabled:n,placeholder:`X-Tenant`,className:`h-8 font-mono text-sm`,onChange:e=>s(a.map((t,n)=>n===r?[e.target.value,t[1]]:t))}),(0,$.jsx)(Y,{value:t,disabled:n,placeholder:`value`,className:`h-8 font-mono text-sm`,onChange:e=>s(a.map((t,n)=>n===r?[t[0],e.target.value]:t))}),(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`ghost`,disabled:n,"aria-label":`Remove header ${e||r+1}`,onClick:()=>s(a.filter((e,t)=>t!==r)),children:(0,$.jsx)(nt,{className:`h-3.5 w-3.5`})})]},r)),!n&&(0,$.jsxs)(Z,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>s([...a,[``,``]]),children:[(0,$.jsx)(sn,{className:`mr-1.5 h-3.5 w-3.5`}),`Add header`]})]})]})}function AM({open:e,onClick:t,label:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-expanded":e,title:n,"aria-label":n,className:`flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground`,children:(0,$.jsx)(Xe,{className:J(`h-4 w-4 transition-transform motion-reduce:transition-none`,e&&`rotate-180`)})})}var jM={configured:`bg-success`,"needs-fill":`bg-warning`,unresolved:`bg-destructive`,unset:`bg-muted-foreground/30`};function MM({value:e,effective:t,inherited:n,resolvedSpaces:r,invalid:i,attention:a,onFill:o,saving:s=!1,disabled:c=!1,saveLabel:l=`Save`,onSave:u}){let{showToast:d}=Hr(),[f,p]=(0,Q.useState)(()=>structuredClone(e)),[m,h]=(0,Q.useState)(new Set),[g,_]=(0,Q.useState)(null),[v,y]=(0,Q.useState)(!1),[b,x]=(0,Q.useState)(``),[S,C]=(0,Q.useState)(``),[w,T]=(0,Q.useState)(null),E=(0,Q.useMemo)(()=>[...new Set([...Object.keys(t.spaces||{}),...Object.keys(f.spaces||{})])].sort(),[t.spaces,f.spaces]),D=(0,Q.useMemo)(()=>[...new Set([...Object.keys(t.providers||{}),...Object.keys(f.providers||{})])].sort(),[t.providers,f.providers]),O=(e,t,n)=>{p(r=>{let i={...r.spaces||{}},a={...i[e]||{}};if(n===``)delete a[t];else if(t===`dim`||t===`maxLength`||t===`dimensions`){let e=Number(n);if(Number.isNaN(e))return r;a[t]=e}else a[t]=n;return Object.keys(a).length===0?delete i[e]:i[e]=a,{...r,spaces:i}})},k=(e,t,n)=>{p(r=>{let i={...r.spaces||{}},a={...i[e]||{}};return n===void 0?delete a[t]:a[t]=n,Object.keys(a).length===0?delete i[e]:i[e]=a,{...r,spaces:i}})},A=(e,t,n)=>{t===`apiKey`&&h(t=>{let r=new Set(t);return n===``?r.delete(e):r.add(e),r}),p(r=>{let i={...r.providers||{}},a={...i[e]||{}};if(n===``)delete a[t];else if(t===`timeoutMs`){let e=Number(n);if(Number.isNaN(e))return r;a[t]=e}else a[t]=n;return Object.keys(a).length===0?delete i[e]:i[e]=a,{...r,providers:i}})},j=(e,t,n)=>{p(r=>{let i={...r.providers||{}},a={...i[e]||{}};return n===void 0?delete a[t]:a[t]=n,Object.keys(a).length===0?delete i[e]:i[e]=a,{...r,providers:i}})},M=e=>{p(t=>{let n={...t.providers||{}};return delete n[e],{...t,providers:n}}),h(t=>{let n=new Set(t);return n.delete(e),n})},N=()=>{let e=S.trim();if(e){if(E.includes(e)){d({title:`Space exists`,description:`'${e}' already has a row below.`,variant:`destructive`});return}p(t=>({...t,spaces:{...t.spaces||{},[e]:{}}})),C(``),T(`space:${e}`)}},P=(e,t)=>{if(e){if(D.includes(e)){d({title:`Backend exists`,description:`'${e}' is already declared. Open it below to edit.`,variant:`destructive`});return}p(n=>({...n,providers:{...n.providers||{},[e]:{type:`openai`,...t?{baseUrl:t}:{}}}})),x(``),T(`provider:${e}`)}},F=e=>({...t.providers?.[e]||{},...f.providers?.[e]||{}}),I=async e=>{let n=f.spaces?.[e]?.provider??t.spaces?.[e]?.provider,r=f.spaces?.[e]?.model??t.spaces?.[e]?.model;if(!n){d({title:`No backend`,description:`Space '${e}' has no backend to test.`,variant:`destructive`});return}let i=F(n),a=i.type?bM[i.type]?.url?.key:void 0,o=a?wM(i[a]):null;if(o){d({title:`Backend '${n}'`,description:o,variant:`destructive`});return}_(e);try{try{await gM(i,r)===!1&&(y(!0),d({title:`Downloading model`,description:`'${r??`the configured model`}' is not in the server's cache yet; downloading now. A first test can take a few minutes; the model is then cached for good.`}))}catch{}let n=await _M(i,r,e),a=f.spaces?.[e]?.dim??t.spaces?.[e]?.dim,o=n.dim>0&&a!==void 0&&n.dim!==a;(o||n.dim>0&&a===void 0)&&O(e,`dim`,String(n.dim)),d({title:o?`Backend answered; dimensions corrected`:`Backend answered`,description:o?`Returned ${n.dim}-d but '${e}' was set to ${a}-d. Dimensions updated to ${n.dim}; save to apply. (${n.latencyMs} ms)`:`${n.dim}-d in ${n.latencyMs} ms`})}catch(e){d({title:`Test failed`,description:e instanceof Error?e.message:`Backend unreachable`,variant:`destructive`})}finally{_(null),y(!1)}},L=(0,Q.useMemo)(()=>{let e=[];for(let[n,r]of Object.entries(f.providers||{})){let i=r.type??t.providers?.[n]?.type,a=i?bM[i]?.url?.key:void 0;if(!a)continue;let o=wM(r[a]);o&&e.push(`${n}: ${o}`)}return e},[f.providers,t.providers]),R=(0,Q.useMemo)(()=>JSON.stringify(f)!==JSON.stringify(e)||m.size>0,[f,e,m]),z=async()=>{if(L.length>0){d({title:`Fix the endpoint first`,description:L.join(` · `),variant:`destructive`});return}await u(rM(f,m)),h(new Set)},ee=e=>T(t=>t===e?null:e);return(0,$.jsxs)(`div`,{className:`space-y-6`,children:[i&&(0,$.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive-subtle p-3 text-xs`,children:[(0,$.jsx)(W,{className:`mt-0.5 h-4 w-4 shrink-0 text-destructive`}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`p`,{className:`font-medium text-destructive`,children:`Stored config does not resolve; defaults are standing in`}),(0,$.jsx)(`p`,{className:`mt-0.5 font-mono text-[11px] text-muted-foreground`,children:i})]})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)(TM,{title:`Search models`,hint:`Choose a provider and model for each kind of content. After switching models, fill the new index to make existing documents searchable. Previous model indexes are preserved.`}),E.length===0?(0,$.jsxs)(`div`,{className:`rounded-lg border border-dashed p-6 text-center`,children:[(0,$.jsx)(`p`,{className:`text-sm font-medium`,children:`No spaces on this layer`}),(0,$.jsx)(`p`,{className:`mx-auto mt-1 max-w-sm text-xs text-muted-foreground`,children:`A space needs a backend, a model and a dimension count. Add one below to start embedding.`})]}):(0,$.jsx)(`div`,{className:`divide-y overflow-hidden rounded-lg border`,children:E.map(e=>{let s=f.spaces?.[e]||{},l=t.spaces?.[e]||{},u=n.spaces?.[e]||{},d=r?.[e],p=`space:${e}`,m=w===p,h=s.model??l.model,_=s.provider??l.provider,y=s.dim??l.dim,b=s.chunk??l.chunk??!1,x=a?.includes(e)??!1;return(0,$.jsxs)(`div`,{className:`relative`,children:[(0,$.jsx)(`span`,{className:J(`absolute inset-y-0 left-0 w-[3px]`,jM[i?`unresolved`:x?`needs-fill`:h?`configured`:`unset`]),"aria-hidden":!0}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-2 py-3 pl-4 pr-3 sm:flex-row sm:items-start sm:gap-3`,children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2 gap-y-1`,children:[(0,$.jsx)(`span`,{className:J(`text-[11px]`,yM),children:e}),(0,$.jsx)(`span`,{className:`truncate font-mono text-sm`,children:h||`no model set`}),_&&(0,$.jsxs)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground`,children:[`via `,_]}),y!==void 0&&(0,$.jsxs)(`span`,{className:`text-xs tabular-nums text-muted-foreground`,children:[y,`-d`]}),b&&(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`chunked`})]}),r&&h&&(0,$.jsxs)(`p`,{className:`mt-1 truncate font-mono text-[11px] text-muted-foreground`,title:`Vector table backing this space`,children:[`└─ `,d?.table??(0,$.jsx)(`span`,{className:`not-italic`,children:`not created yet`})]}),x&&(0,$.jsx)(`p`,{className:`mt-1 text-[11px] text-warning`,children:`New table, nothing embedded in it yet; dense search stays thin for this space until it is filled. Reverting the model is still instant.`})]}),(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 max-sm:justify-end`,children:[x&&o&&(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`outline`,onClick:()=>o(e),children:`Fill`}),(0,$.jsxs)(Z,{type:`button`,size:`sm`,variant:`ghost`,disabled:c||g!==null,onClick:()=>I(e),title:`Round-trip a real embedding call against this backend and report the dimensions it returns`,children:[(0,$.jsx)(H,{className:`mr-1.5 h-3.5 w-3.5`}),g===e?v?`Downloading…`:`Testing…`:`Test`]}),(0,$.jsx)(AM,{open:m,onClick:()=>ee(p),label:`Edit ${e}`})]})]}),m&&(0,$.jsxs)(`div`,{className:`border-t bg-muted/40 py-4 pl-4 pr-3`,children:[(0,$.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`label`,{className:`text-xs font-medium`,children:`Backend`}),(0,$.jsx)(EM,{overridden:s.provider!==void 0,source:u.provider})]}),(0,$.jsxs)(`select`,{className:vM,disabled:c,value:s.provider??``,onChange:t=>O(e,`provider`,t.target.value),children:[(0,$.jsx)(`option`,{value:``,children:l.provider?`inherited: ${l.provider}`:`inherited`}),D.map(e=>(0,$.jsx)(`option`,{value:e,children:e},e))]})]}),(0,$.jsx)(DM,{label:`Model`,mono:!0,value:s.model,inheritedValue:l.model,onChange:t=>O(e,`model`,t),disabled:c}),(0,$.jsx)(DM,{label:`Dimensions`,type:`number`,value:s.dim,inheritedValue:l.dim,onChange:t=>O(e,`dim`,t),disabled:c,hint:`Sizes the vector table. Test asks the backend and fills in what it really returns.`}),(0,$.jsx)(DM,{label:`Max length`,type:`number`,value:s.maxLength,inheritedValue:l.maxLength,onChange:t=>O(e,`maxLength`,t),disabled:c})]}),(0,$.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-4`,children:[(0,$.jsx)(OM,{label:`Chunk long inputs`,checked:b,overridden:s.chunk!==void 0,disabled:c,onChange:t=>k(e,`chunk`,t)}),(0,$.jsx)(OM,{label:`Build ANN index`,checked:s.annIndex??l.annIndex??!0,overridden:s.annIndex!==void 0,disabled:c,onChange:t=>k(e,`annIndex`,t)})]})]})]},e)})}),!c&&(0,$.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[(0,$.jsx)(Y,{value:S,onChange:e=>C(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),N())},placeholder:`new space name (e.g. audio)`,className:`h-8 w-full max-w-xs text-sm sm:w-auto`}),(0,$.jsxs)(Z,{type:`button`,size:`sm`,variant:`ghost`,onClick:N,children:[(0,$.jsx)(sn,{className:`mr-1.5 h-3.5 w-3.5`}),`Add space`]})]})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)(TM,{title:`Model providers`,hint:`Connect a service here, then select it under Search models above. Built-in providers work without an extra connection. Provider changes take effect when you save.`}),(0,$.jsx)(`div`,{className:`divide-y overflow-hidden rounded-lg border`,children:D.map(e=>{let n=f.providers?.[e]||{},r=t.providers?.[e]||{},i=eM.includes(e),a=f.providers?.[e]!==void 0,o=`provider:${e}`,s=w===o,l=n.type??r.type,u=l?bM[l]:void 0,d=u?.url?wM(n[u.url.key]):null,p={...r,...n},h=xM.filter(e=>!(n[e]===void 0||e===u?.url?.key||e===`apiKey`&&u?.apiKey||e===`cacheDir`&&u?.cacheDir)),g=E.filter(n=>(f.spaces?.[n]?.provider??t.spaces?.[n]?.provider)===e);return(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex flex-col gap-2 px-4 py-3 sm:flex-row sm:items-start sm:gap-3`,children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2 gap-y-1`,children:[(0,$.jsx)(`span`,{className:`font-mono text-sm font-semibold`,children:e}),(0,$.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground`,children:l??`no type`}),i&&(0,$.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:`built-in`}),p.apiKeySet&&!m.has(e)&&(0,$.jsx)(`span`,{className:`text-[10px] font-medium text-success`,children:`key set`}),d&&(0,$.jsx)(`span`,{className:`text-[10px] font-medium text-destructive`,children:`check endpoint`})]}),(0,$.jsx)(`p`,{className:`mt-1 truncate font-mono text-[11px] text-muted-foreground`,children:u?u.where(p):`—`}),g.length>0&&(0,$.jsxs)(`p`,{className:`mt-1 text-[11px] text-muted-foreground`,children:[`used by `,g.join(`, `)]})]}),(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 max-sm:justify-end`,children:[a&&!i&&!c&&(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>M(e),title:`Remove this override`,children:(0,$.jsx)(nt,{className:`h-3.5 w-3.5`})}),(0,$.jsx)(AM,{open:s,onClick:()=>ee(o),label:`Edit ${e}`})]})]}),s&&(0,$.jsxs)(`div`,{className:`border-t bg-muted/40 px-4 py-4`,children:[(0,$.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`label`,{className:`text-xs font-medium`,children:`Type`}),(0,$.jsx)(EM,{overridden:n.type!==void 0,source:r.type})]}),(0,$.jsxs)(`select`,{className:vM,disabled:c,value:n.type??``,onChange:t=>A(e,`type`,t.target.value),children:[(0,$.jsx)(`option`,{value:``,children:r.type?`inherited: ${r.type}`:`inherited`}),$j.map(e=>(0,$.jsx)(`option`,{value:e,children:e},e)),l&&!$j.includes(l)&&(0,$.jsxs)(`option`,{value:l,children:[l,` (legacy)`]})]}),u?.note&&(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:u.note})]}),u?.url&&(0,$.jsx)(DM,{label:u.url.label,mono:!0,value:n[u.url.key],inheritedValue:r[u.url.key],onChange:t=>A(e,u.url.key,t),disabled:c,placeholder:r[u.url.key]??u.url.placeholder,hint:u.url.hint,error:d??void 0}),u?.cacheDir&&(0,$.jsx)(DM,{label:`Cache directory`,mono:!0,value:n.cacheDir,inheritedValue:r.cacheDir,onChange:t=>A(e,`cacheDir`,t),disabled:c,placeholder:r.cacheDir??`server default`,hint:u.cacheDir}),u?.imageInput&&(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`label`,{className:`text-xs font-medium`,children:`Image input shape`}),(0,$.jsx)(EM,{overridden:n.imageInput!==void 0,source:r.imageInput})]}),(0,$.jsxs)(`select`,{className:vM,disabled:c,value:n.imageInput??``,onChange:t=>A(e,`imageInput`,t.target.value),children:[(0,$.jsx)(`option`,{value:``,children:r.imageInput?`inherited: ${r.imageInput}`:`inherited: data-uri`}),SM.map(e=>(0,$.jsx)(`option`,{value:e.value,children:e.label},e.value))]}),(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:SM.find(e=>e.value===(n.imageInput??r.imageInput??`data-uri`))?.hint})]}),u?.timeoutMs&&(0,$.jsx)(DM,{label:`Request timeout (ms)`,type:`number`,value:n.timeoutMs,inheritedValue:r.timeoutMs??CM,onChange:t=>A(e,`timeoutMs`,t),disabled:c,hint:`How long to wait for a batch before giving up. Raise it for a slow or cold GPU host.`}),u?.apiKey&&(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`label`,{className:`text-xs font-medium`,children:`API key`}),m.has(e)&&(0,$.jsx)(`span`,{className:`rounded bg-warning-subtle px-1.5 py-0.5 text-[10px] font-medium text-warning`,children:`will be written`})]}),(0,$.jsx)(Y,{type:`password`,autoComplete:`new-password`,disabled:c,value:n.apiKey??``,onChange:t=>A(e,`apiKey`,t.target.value),placeholder:r.apiKeySet?`•••••••• (stored; leave empty to keep)`:`unset`,className:`h-8 text-sm`}),(0,$.jsxs)(`p`,{className:`text-[11px] text-muted-foreground`,children:[u.apiKey,` Write-only: the stored key is never sent back, and leaving this empty keeps whatever is stored.`]})]})]}),u?.headers&&(0,$.jsx)(kM,{disabled:c,storedNames:r.headerNames,value:n.headers,onChange:t=>j(e,`headers`,t)}),h.length>0&&!c&&(0,$.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2 rounded-md border border-dashed p-2 text-[11px] text-muted-foreground`,children:[(0,$.jsxs)(`span`,{children:[`Not used by type `,(0,$.jsx)(`span`,{className:`font-mono`,children:l}),`:`,` `,(0,$.jsx)(`span`,{className:`font-mono`,children:h.join(`, `)})]}),(0,$.jsx)(`button`,{type:`button`,className:`underline hover:text-foreground`,onClick:()=>h.forEach(t=>A(e,t,``)),children:`clear`})]}),r.headerNames&&r.headerNames.length>0&&(0,$.jsxs)(`p`,{className:`mt-3 text-[11px] text-muted-foreground`,children:[`Stored custom headers: `,(0,$.jsx)(`span`,{className:`font-mono`,children:r.headerNames.join(`, `)}),` (values not shown)`]})]})]},e)})}),!c&&(0,$.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[(0,$.jsx)(Y,{value:b,onChange:e=>x(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),P(b.trim()))},placeholder:`new backend name (e.g. gpu)`,className:`h-8 w-full max-w-xs text-sm sm:w-auto`}),(0,$.jsxs)(Z,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>P(b.trim()),children:[(0,$.jsx)(sn,{className:`mr-1.5 h-3.5 w-3.5`}),`Add backend`]}),tM.filter(e=>!D.includes(e.id)).map(e=>(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`outline`,onClick:()=>P(e.id,e.baseUrl),title:`Add an openai-type backend '${e.id}' pointed at ${e.baseUrl}`,children:e.label},e.id))]})]}),!c&&(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 border-t pt-4`,children:[(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:R?`default`:`outline`,onClick:z,disabled:s||!R||L.length>0,children:s?`Saving…`:l}),(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`ghost`,disabled:s||!R,onClick:()=>{p(structuredClone(e)),h(new Set)},children:`Discard changes`}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:L.length>0?(0,$.jsxs)(`span`,{className:`font-medium text-destructive`,children:[L.length,` endpoint `,L.length===1?`needs`:`need`,` fixing`]}):R?`Unsaved changes`:`Everything saved`})]})]})}function NM(){let{showToast:e}=Hr(),[t,n]=(0,Q.useState)(null),[r,i]=(0,Q.useState)(!0),[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(null),l=(0,Q.useCallback)(()=>fM().then(e=>{n(e),c(null)}).catch(e=>c(e instanceof Error?e.message:`Failed to load embedding defaults`)).finally(()=>i(!1)),[]);(0,Q.useEffect)(()=>{l()},[l]);let u=()=>{i(!0),l()};return(0,$.jsxs)(`div`,{className:`mx-auto max-w-4xl p-6`,children:[(0,$.jsx)(Zw,{compact:!0,className:`mb-6`,title:`Search & AI defaults`,onBack:MO(),description:`Your account · Choose the embedding models used for text and image search. Workspace settings override these defaults. Running workspaces adopt new defaults when restarted.`,actions:(0,$.jsxs)(Z,{type:`button`,size:`sm`,variant:`outline`,onClick:u,disabled:r,children:[(0,$.jsx)(P,{className:`mr-2 h-3.5 w-3.5`}),`Refresh`]})}),r?(0,$.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,$.jsx)(P,{className:`h-4 w-4 animate-spin`}),`Loading…`]}):s||!t?(0,$.jsxs)(`div`,{className:`space-y-3`,children:[(0,$.jsxs)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/5 p-4 text-sm`,children:[(0,$.jsx)(`p`,{className:`font-medium text-destructive`,children:`Embedding defaults unavailable`}),(0,$.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:s||`No config returned.`})]}),(0,$.jsx)(Z,{type:`button`,size:`sm`,variant:`outline`,onClick:u,children:`Retry`})]}):(0,$.jsx)(MM,{value:t.user||{},effective:t.effective||{},inherited:t.serverDefaults||{},invalid:t.invalid,saving:a,saveLabel:`Save defaults`,onSave:async t=>{o(!0);try{let n=await pM(t);e({title:`Defaults saved`,description:n.restartRequired?`${n.workspaces.length} running workspace(s) keep their current tables until restarted. Set the config on a workspace directly to change it live.`:`New workspaces will inherit this.`}),await l()}catch(t){e({title:`Save failed`,description:t instanceof Error?t.message:`Failed to save`,variant:`destructive`})}finally{o(!1)}}},JSON.stringify(t.user))]})}function PM(){let e=_l(),{showToast:t}=Hr(),n=new URLSearchParams(e.search),r=e=>{try{let t=new URL(e);return t.pathname.includes(`/rest/v2/workspaces/`)&&!t.pathname.includes(`/rest/v2/pub/`)?t.pathname=t.pathname.replace(`/rest/v2/workspaces/`,`/rest/v2/pub/workspaces/`):t.pathname.includes(`/rest/v2/contexts/`)&&!t.pathname.includes(`/rest/v2/pub/`)&&(t.pathname=t.pathname.replace(`/rest/v2/contexts/`,`/rest/v2/pub/contexts/`)),t.toString()}catch{return e}},i=r(n.get(`url`)||``),a=sessionStorage.getItem(`sharedToken:last`)||``,[o,s]=(0,Q.useState)(i),[c,l]=(0,Q.useState)(a),[u,d]=(0,Q.useState)(null),[f,p]=(0,Q.useState)([]),[m,h]=(0,Q.useState)(!1),g=(0,Q.useMemo)(()=>{try{let e=new URL(o);return e.pathname.includes(`/pub/workspaces/`)?`workspace`:e.pathname.includes(`/pub/contexts/`)?`context`:`unknown`}catch{return`unknown`}},[o]),_=()=>({Authorization:`Bearer ${c.trim()}`}),v=async()=>{if(!(!o||!c)){h(!0);try{let e=r(o),t=await X.get(e,{skipAuth:!0,headers:_()});d(t);let n=await X.get(`${e}/documents`,{skipAuth:!0,headers:_()}),i=Array.isArray(n)?n:Array.isArray(n?.data)?n.data:[];p(Array.isArray(i)?i:[])}catch(e){let n=o.includes(`/rest/v2/workspaces/`)?`Ensure the URL uses /rest/v2/pub/workspaces/<workspace-id> and the token matches that workspace.`:o.includes(`/rest/v2/contexts/`)?`Ensure the URL uses /rest/v2/pub/contexts/<context-id>.`:void 0;t({title:`Error`,description:`${e instanceof Error?e.message:`Failed to load shared resource`}${n?`: ${n}`:``}`,variant:`destructive`}),d(null),p([])}finally{h(!1)}}},y=(0,Q.useRef)(v);return(0,Q.useEffect)(()=>{y.current()},[]),(0,$.jsxs)(`div`,{className:`space-y-4`,children:[(0,$.jsx)(Zw,{onBack:MO(),title:`Shared Resource Viewer`,description:`Open a resource someone shared with you.`}),(0,$.jsxs)(`div`,{className:`grid gap-2 md:grid-cols-3`,children:[(0,$.jsx)(Y,{value:o,onChange:e=>s(e.target.value),placeholder:`Full pub URL`}),(0,$.jsx)(Y,{value:c,onChange:e=>l(e.target.value),placeholder:`Access token (canvas-...)`}),(0,$.jsx)(Z,{onClick:v,disabled:m||!o||!c,children:`Load`})]}),(0,$.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[`Type: `,g]}),m?(0,$.jsx)(`div`,{className:`text-center py-8 text-muted-foreground`,children:`Loading...`}):(0,$.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,$.jsxs)(`div`,{className:`border rounded p-3`,children:[(0,$.jsx)(`h2`,{className:`font-semibold mb-2`,children:`Metadata`}),(0,$.jsx)(`pre`,{className:`text-xs overflow-auto max-h-80`,children:JSON.stringify(u,null,2)})]}),(0,$.jsxs)(`div`,{className:`border rounded p-3`,children:[(0,$.jsxs)(`h2`,{className:`font-semibold mb-2`,children:[`Documents (`,f.length,`)`]}),f.length===0?(0,$.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`No documents`}):(0,$.jsx)(`ul`,{className:`space-y-2 text-sm`,children:f.slice(0,100).map((e,t)=>(0,$.jsxs)(`li`,{className:`border rounded p-2`,children:[(0,$.jsx)(`div`,{className:`font-mono text-xs`,children:e.id}),(0,$.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e.schema})]},t))})]})]}),(0,$.jsx)(gd,{className:`mt-8`})]})}function FM(e={}){let t=new URLSearchParams;e.tail&&t.set(`tail`,String(e.tail)),e.level&&t.set(`level`,e.level),e.module&&t.set(`module`,e.module);let n=t.toString();return n?`?${n}`:``}function IM(){let e=localStorage.getItem(`authToken`);if(!e)throw Error(`Authentication required`);let t=localStorage.getItem(`appName`)||window.location.hostname;return{Authorization:`Bearer ${e}`,"X-App-Name":t,Accept:`text/event-stream`}}var LM={users:{async listUsers(e){let t=new URLSearchParams;e?.status&&t.append(`status`,e.status),e?.userType&&t.append(`userType`,e.userType);let n=t.toString(),r=n?`${xr.admin.users}?${n}`:xr.admin.users;return await X.get(r)},async getUser(e){return await X.get(`${xr.admin.users}/${e}`)},async createUser(e){return await X.post(xr.admin.users,e)},async updateUser(e,t){return await X.put(`${xr.admin.users}/${e}`,t)},async deleteUser(e){await X.delete(`${xr.admin.users}/${e}`)}},workspaces:{async listAllWorkspaces(){return await X.get(xr.admin.workspaces)},async createWorkspace(e){return await X.post(xr.admin.workspaces,e)},async deleteWorkspace(e){await X.delete(`${xr.admin.workspaces}/${e}`)}},logs:{async getLogs(e={}){return(await X.get(`${xr.admin.logs}${FM(e)}`)).logs||[]},async streamLogs(e={},t={}){let{signal:n,onEntry:r,onError:i}=t;try{let t=await fetch(`${xr.admin.logsStream}${FM(e)}`,{method:`GET`,headers:IM(),credentials:`include`,signal:n});if(!t.ok)throw Error(`Failed to open log stream (${t.status})`);if(!t.body)throw Error(`Streaming is not supported by this browser`);let i=t.body.getReader(),a=new TextDecoder,o=``,s=e=>{let t=e.split(`
30
30
  `),n=`message`,i=[];for(let e of t)if(!(!e||e.startsWith(`:`))){if(e.startsWith(`event:`)){n=e.slice(6).trim();continue}e.startsWith(`data:`)&&i.push(e.slice(5).trim())}if(n!==`log`||i.length===0)return;let a=JSON.parse(i.join(`
31
31
  `));r?.(a)};try{for(;;){let{done:e,value:t}=await i.read();if(e)break;o+=a.decode(t,{stream:!0});let n=o.split(`
32
32
 
package/dist/index.html CHANGED
@@ -46,7 +46,7 @@
46
46
  }
47
47
  })()
48
48
  </script>
49
- <script type="module" crossorigin src="/assets/index-CItdsVgq.js"></script>
49
+ <script type="module" crossorigin src="/assets/index-D6IkQaIy.js"></script>
50
50
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
51
51
  <link rel="modulepreload" crossorigin href="/assets/code-editor-BQnKd3jw.js">
52
52
  <link rel="modulepreload" crossorigin href="/assets/react-BzqgEMSQ.js">
package/dist/sw.js CHANGED
@@ -1 +1 @@
1
- var e=`share-target-inbox`;async function t(e,t,n){let r=`/share-target-inbox/${t}`,i=[],a=async e=>{await Promise.all(i.map(e=>n.delete(e))),await n.put(`${r}/meta`,new Response(JSON.stringify({status:`error`,error:e,stashedAt:Date.now()})))};try{if(Number(e.headers.get(`content-length`))>105906176){await e.body?.cancel().catch(()=>{}),await a(`too-large`);return}let t=await e.formData(),o=t.getAll(`files`).filter(e=>e instanceof File);if(o.some(e=>e.size===0)){await a(`empty-file`);return}if(o.reduce((e,t)=>e+t.size,0)>104857600){await a(`too-large`);return}let s=e=>{let n=t.get(e);return typeof n==`string`?n:``},c=s(`title`),l=s(`text`),u=s(`url`);if(!o.length&&![c,l,u].some(e=>e.trim())){await a(`empty-share`);return}for(let[e,t]of o.entries()){let a=`${r}/file-${e}`;await n.put(a,new Response(t,{headers:{"Content-Type":t.type||`application/octet-stream`}})),i.push(a)}await n.put(`${r}/meta`,new Response(JSON.stringify({status:`ready`,title:c,text:l,url:u,fileNames:o.map(e=>e.name),stashedAt:Date.now()})))}catch{await a(`stash-failed`)}}try{self[`workbox:core:7.4.0`]&&_()}catch{}var n=(e,...t)=>{let n=e;return t.length>0&&(n+=` :: ${JSON.stringify(t)}`),n},r=class extends Error{constructor(e,t){let r=n(e,t);super(r),this.name=e,this.details=t}},i={googleAnalytics:`googleAnalytics`,precache:`precache-v2`,prefix:`workbox`,runtime:`runtime`,suffix:typeof registration<`u`?registration.scope:``},a=e=>[i.prefix,e,i.suffix].filter(e=>e&&e.length>0).join(`-`),o=e=>{for(let t of Object.keys(i))e(t)},s={updateDetails:e=>{o(t=>{typeof e[t]==`string`&&(i[t]=e[t])})},getGoogleAnalyticsName:e=>e||a(i.googleAnalytics),getPrecacheName:e=>e||a(i.precache),getPrefix:()=>i.prefix,getRuntimeName:e=>e||a(i.runtime),getSuffix:()=>i.suffix};function c(e,t){let n=t();return e.waitUntil(n),n}try{self[`workbox:precaching:7.4.0`]&&_()}catch{}var l=`__WB_REVISION__`;function u(e){if(!e)throw new r(`add-to-cache-list-unexpected-type`,{entry:e});if(typeof e==`string`){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:t,url:n}=e;if(!n)throw new r(`add-to-cache-list-unexpected-type`,{entry:e});if(!t){let e=new URL(n,location.href);return{cacheKey:e.href,url:e.href}}let i=new URL(n,location.href),a=new URL(n,location.href);return i.searchParams.set(l,t),{cacheKey:i.href,url:a.href}}var ee=class{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type===`install`&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;n?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return n}}},te=class{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let n=t?.cacheKey||this._precacheController.getCacheKeyForURL(e.url);return n?new Request(n,{headers:e.headers}):e},this._precacheController=e}},d;function ne(){if(d===void 0){let e=new Response(``);if(`body`in e)try{new Response(e.body),d=!0}catch{d=!1}d=!1}return d}async function re(e,t){let n=null;if(e.url&&(n=new URL(e.url).origin),n!==self.location.origin)throw new r(`cross-origin-copy-response`,{origin:n});let i=e.clone(),a={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=t?t(a):a,s=ne()?i.body:await i.blob();return new Response(s,o)}var ie=e=>new URL(String(e),location.href).href.replace(RegExp(`^${location.origin}`),``);function f(e,t){let n=new URL(e);for(let e of t)n.searchParams.delete(e);return n.href}async function ae(e,t,n,r){let i=f(t.url,n);if(t.url===i)return e.match(t,r);let a=Object.assign(Object.assign({},r),{ignoreSearch:!0}),o=await e.keys(t,a);for(let t of o)if(i===f(t.url,n))return e.match(t,r)}var oe=class{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}},p=new Set;async function m(){for(let e of p)await e()}function h(e){return new Promise(t=>setTimeout(t,e))}try{self[`workbox:strategies:7.4.0`]&&_()}catch{}function g(e){return typeof e==`string`?new Request(e):e}var se=class{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new oe,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(let e of this._plugins)this._pluginStateMap.set(e,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:t}=this,n=g(e);if(n.mode===`navigate`&&t instanceof FetchEvent&&t.preloadResponse){let e=await t.preloadResponse;if(e)return e}let i=this.hasCallback(`fetchDidFail`)?n.clone():null;try{for(let e of this.iterateCallbacks(`requestWillFetch`))n=await e({request:n.clone(),event:t})}catch(e){if(e instanceof Error)throw new r(`plugin-error-request-will-fetch`,{thrownErrorMessage:e.message})}let a=n.clone();try{let e;e=await fetch(n,n.mode===`navigate`?void 0:this._strategy.fetchOptions);for(let n of this.iterateCallbacks(`fetchDidSucceed`))e=await n({event:t,request:a,response:e});return e}catch(e){throw i&&await this.runCallbacks(`fetchDidFail`,{error:e,event:t,originalRequest:i.clone(),request:a.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){let t=g(e),n,{cacheName:r,matchOptions:i}=this._strategy,a=await this.getCacheKey(t,`read`),o=Object.assign(Object.assign({},i),{cacheName:r});n=await caches.match(a,o);for(let e of this.iterateCallbacks(`cachedResponseWillBeUsed`))n=await e({cacheName:r,matchOptions:i,cachedResponse:n,request:a,event:this.event})||void 0;return n}async cachePut(e,t){let n=g(e);await h(0);let i=await this.getCacheKey(n,`write`);if(!t)throw new r(`cache-put-with-no-response`,{url:ie(i.url)});let a=await this._ensureResponseSafeToCache(t);if(!a)return!1;let{cacheName:o,matchOptions:s}=this._strategy,c=await self.caches.open(o),l=this.hasCallback(`cacheDidUpdate`),u=l?await ae(c,i.clone(),[`__WB_REVISION__`],s):null;try{await c.put(i,l?a.clone():a)}catch(e){if(e instanceof Error)throw e.name===`QuotaExceededError`&&await m(),e}for(let e of this.iterateCallbacks(`cacheDidUpdate`))await e({cacheName:o,oldResponse:u,newResponse:a.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){let n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let r=e;for(let e of this.iterateCallbacks(`cacheKeyWillBeUsed`))r=g(await e({mode:t,request:r,event:this.event,params:this.params}));this._cacheKeys[n]=r}return this._cacheKeys[n]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if(typeof t[e]==`function`){let n=this._pluginStateMap.get(t);yield r=>{let i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>e.status===`rejected`);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(let e of this.iterateCallbacks(`cacheWillUpdate`))if(t=await e({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}},ce=class{constructor(e={}){this.cacheName=s.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,n=typeof e.request==`string`?new Request(e.request):e.request,r=`params`in e?e.params:void 0,i=new se(this,{event:t,request:n,params:r}),a=this._getResponse(i,n,t);return[a,this._awaitComplete(a,i,n,t)]}async _getResponse(e,t,n){await e.runCallbacks(`handlerWillStart`,{event:n,request:t});let i;try{if(i=await this._handle(t,e),!i||i.type===`error`)throw new r(`no-response`,{url:t.url})}catch(r){if(r instanceof Error){for(let a of e.iterateCallbacks(`handlerDidError`))if(i=await a({error:r,event:n,request:t}),i)break}if(!i)throw r}for(let r of e.iterateCallbacks(`handlerWillRespond`))i=await r({event:n,request:t,response:i});return i}async _awaitComplete(e,t,n,r){let i,a;try{i=await e}catch{}try{await t.runCallbacks(`handlerDidRespond`,{event:r,request:n,response:i}),await t.doneWaiting()}catch(e){e instanceof Error&&(a=e)}if(await t.runCallbacks(`handlerDidComplete`,{event:r,request:n,response:i,error:a}),t.destroy(),a)throw a}},v=class e extends ce{constructor(t={}){t.cacheName=s.getPrecacheName(t.cacheName),super(t),this._fallbackToNetwork=t.fallbackToNetwork!==!1,this.plugins.push(e.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){return await t.cacheMatch(e)||(t.event&&t.event.type===`install`?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,t){let n,i=t.params||{};if(this._fallbackToNetwork){let r=i.integrity,a=e.integrity,o=!a||a===r;n=await t.fetch(new Request(e,{integrity:e.mode===`no-cors`?void 0:a||r})),r&&o&&e.mode!==`no-cors`&&(this._useDefaultCacheabilityPluginIfNeeded(),await t.cachePut(e,n.clone()))}else throw new r(`missing-precache-entry`,{cacheName:this.cacheName,url:e.url});return n}async _handleInstall(e,t){this._useDefaultCacheabilityPluginIfNeeded();let n=await t.fetch(e);if(!await t.cachePut(e,n.clone()))throw new r(`bad-precaching-response`,{url:e.url,status:n.status});return n}_useDefaultCacheabilityPluginIfNeeded(){let t=null,n=0;for(let[r,i]of this.plugins.entries())i!==e.copyRedirectedCacheableResponsesPlugin&&(i===e.defaultPrecacheCacheabilityPlugin&&(t=r),i.cacheWillUpdate&&n++);n===0?this.plugins.push(e.defaultPrecacheCacheabilityPlugin):n>1&&t!==null&&this.plugins.splice(t,1)}};v.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:e}){return!e||e.status>=400?null:e}},v.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:e}){return e.redirected?await re(e):e}};var le=class{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new v({cacheName:s.getPrecacheName(e),plugins:[...t,new te({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||=(self.addEventListener(`install`,this.install),self.addEventListener(`activate`,this.activate),!0)}addToCacheList(e){let t=[];for(let n of e){typeof n==`string`?t.push(n):n&&n.revision===void 0&&t.push(n.url);let{cacheKey:e,url:i}=u(n),a=typeof n!=`string`&&n.revision?`reload`:`default`;if(this._urlsToCacheKeys.has(i)&&this._urlsToCacheKeys.get(i)!==e)throw new r(`add-to-cache-list-conflicting-entries`,{firstEntry:this._urlsToCacheKeys.get(i),secondEntry:e});if(typeof n!=`string`&&n.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==n.integrity)throw new r(`add-to-cache-list-conflicting-integrities`,{url:i});this._cacheKeysToIntegrities.set(e,n.integrity)}if(this._urlsToCacheKeys.set(i,e),this._urlsToCacheModes.set(i,a),t.length>0){let e=`Workbox is precaching URLs without revision info: ${t.join(`, `)}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}install(e){return c(e,async()=>{let t=new ee;this.strategy.plugins.push(t);for(let[t,n]of this._urlsToCacheKeys){let r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(t),a=new Request(t,{integrity:r,cache:i,credentials:`same-origin`});await Promise.all(this.strategy.handleAll({params:{cacheKey:n},request:a,event:e}))}let{updatedURLs:n,notUpdatedURLs:r}=t;return{updatedURLs:n,notUpdatedURLs:r}})}activate(e){return c(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),n=new Set(this._urlsToCacheKeys.values()),r=[];for(let i of t)n.has(i.url)||(await e.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){let t=this.getCacheKeyForURL(e);if(!t)throw new r(`non-precached-url`,{url:e});return n=>(n.request=new Request(e),n.params=Object.assign({cacheKey:t},n.params),this.strategy.handle(n))}},y,b=()=>(y||=new le,y);try{self[`workbox:routing:7.4.0`]&&_()}catch{}var x=e=>e&&typeof e==`object`?e:{handle:e},S=class{constructor(e,t,n=`GET`){this.handler=x(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=x(e)}},ue=class extends S{constructor(e,t,n){super(({url:t})=>{let n=e.exec(t.href);if(n&&(t.origin===location.origin||n.index===0))return n.slice(1)},t,n)}},de=class{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener(`fetch`,(e=>{let{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)}))}addCacheListener(){self.addEventListener(`message`,(e=>{if(e.data&&e.data.type===`CACHE_URLS`){let{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(t=>{typeof t==`string`&&(t=[t]);let n=new Request(...t);return this.handleRequest({request:n,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}}))}handleRequest({request:e,event:t}){let n=new URL(e.url,location.href);if(!n.protocol.startsWith(`http`))return;let r=n.origin===location.origin,{params:i,route:a}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:n}),o=a&&a.handler,s=e.method;if(!o&&this._defaultHandlerMap.has(s)&&(o=this._defaultHandlerMap.get(s)),!o)return;let c;try{c=o.handle({url:n,request:e,event:t,params:i})}catch(e){c=Promise.reject(e)}let l=a&&a.catchHandler;return c instanceof Promise&&(this._catchHandler||l)&&(c=c.catch(async r=>{if(l)try{return await l.handle({url:n,request:e,event:t,params:i})}catch(e){e instanceof Error&&(r=e)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw r})),c}findMatchingRoute({url:e,sameOrigin:t,request:n,event:r}){let i=this._routes.get(n.method)||[];for(let a of i){let i,o=a.match({url:e,sameOrigin:t,request:n,event:r});if(o)return i=o,(Array.isArray(i)&&i.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o==`boolean`)&&(i=void 0),{route:a,params:i}}return{}}setDefaultHandler(e,t=`GET`){this._defaultHandlerMap.set(t,x(e))}setCatchHandler(e){this._catchHandler=x(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new r(`unregister-route-but-not-found-with-method`,{method:e.method});let t=this._routes.get(e.method).indexOf(e);if(t>-1)this._routes.get(e.method).splice(t,1);else throw new r(`unregister-route-route-not-registered`)}},C,fe=()=>(C||(C=new de,C.addFetchListener(),C.addCacheListener()),C);function pe(e,t,n){let i;if(typeof e==`string`){let r=new URL(e,location.href);i=new S(({url:e})=>e.href===r.href,t,n)}else if(e instanceof RegExp)i=new ue(e,t,n);else if(typeof e==`function`)i=new S(e,t,n);else if(e instanceof S)i=e;else throw new r(`unsupported-route-type`,{moduleName:`workbox-routing`,funcName:`registerRoute`,paramName:`capture`});return fe().registerRoute(i),i}function me(e,t=[]){for(let n of[...e.searchParams.keys()])t.some(e=>e.test(n))&&e.searchParams.delete(n);return e}function*he(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:n=`index.html`,cleanURLs:r=!0,urlManipulation:i}={}){let a=new URL(e,location.href);a.hash=``,yield a.href;let o=me(a,t);if(yield o.href,n&&o.pathname.endsWith(`/`)){let e=new URL(o.href);e.pathname+=n,yield e.href}if(r){let e=new URL(o.href);e.pathname+=`.html`,yield e.href}if(i){let e=i({url:a});for(let t of e)yield t.href}}var w=class extends S{constructor(e,t){super(({request:n})=>{let r=e.getURLsToCacheKeys();for(let i of he(n.url,t)){let t=r.get(i);if(t)return{cacheKey:t,integrity:e.getIntegrityForCacheKey(t)}}},e.strategy)}};function T(e){pe(new w(b(),e))}var E=`-precache-`,D=async(e,t=E)=>{let n=(await self.caches.keys()).filter(n=>n.includes(t)&&n.includes(self.registration.scope)&&n!==e);return await Promise.all(n.map(e=>self.caches.delete(e))),n};function O(){self.addEventListener(`activate`,(e=>{let t=s.getPrecacheName();e.waitUntil(D(t).then(e=>{}))}))}function k(e){return b().matchPrecache(e)}function A(e){b().precache(e)}function j(e,t){A(e),T(t)}var M=`offline-content-v1`,N=`offline-api-v1`,P={enabled:!1,budgetBytes:4294967296,excludedWorkspaces:[]};function F(e){let t=e.match(/^\/rest\/v2\/workspaces\/([^/?#]+)/);return t?decodeURIComponent(t[1]):null}var I=1e3,L=`canvas-offline`,R=2,z=null;function B(){return z||(z=new Promise((e,t)=>{let n=indexedDB.open(L,R);n.onupgradeneeded=e=>{let t=n.result;if(t.objectStoreNames.contains(`config`)||t.createObjectStore(`config`),t.objectStoreNames.contains(`entries`)||t.createObjectStore(`entries`,{keyPath:`url`}),e.oldVersion>=1&&t.objectStoreNames.contains(`pins`)){t.deleteObjectStore(`pins`);let e=n.transaction.objectStore(`entries`).openCursor();e.onsuccess=()=>{let t=e.result;if(!t)return;let n=t.value;n.pinned&&t.update({...n,pinned:!1}),t.continue()}}t.objectStoreNames.contains(`scopes`)||t.createObjectStore(`scopes`,{keyPath:`id`})},n.onsuccess=()=>{n.result.onversionchange=()=>{n.result.close(),z=null},e(n.result)},n.onerror=()=>{z=null,t(n.error)}}),z)}function V(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error),e.onabort=()=>n(e.error)})}function H(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}async function U(e,t){return H((await B()).transaction(e).objectStore(e).get(t))}async function ge(e){return H((await B()).transaction(e).objectStore(e).getAll())}async function W(e,t,n){let r=(await B()).transaction(e,`readwrite`);return r.objectStore(e).put(t,n),V(r)}async function G(e,t){let n=(await B()).transaction(e,`readwrite`);return n.objectStore(e).delete(t),V(n)}async function _e(){try{let e=await U(`config`,`settings`);return e?{...P,...e}:P}catch{return P}}async function K(e,t,n){let r=await U(`entries`,e);await W(`entries`,{url:e,kind:t,size:n,lastAccess:Date.now(),pinned:r?.pinned??!1})}var ve=6e4,q=new Map;async function J(e){let t=q.get(e),n=Date.now();if(t&&n-t<ve)return;q.set(e,n),q.size>4096&&q.clear();let r=await U(`entries`,e);r&&await W(`entries`,{...r,lastAccess:n})}async function ye(e){let t=await ge(`entries`),n=t.filter(e=>e.kind===`api`).sort((e,t)=>e.lastAccess-t.lastAccess),r=n.slice(0,Math.max(0,n.length-I)),i=t.filter(e=>e.kind===`content`),a=i.reduce((e,t)=>e+t.size,0),o=i.filter(e=>!e.pinned).sort((e,t)=>e.lastAccess-t.lastAccess),s=[];for(let t of o){if(a<=e)break;s.push(t),a-=t.size}if(!r.length&&!s.length)return;let[c,l]=await Promise.all([caches.open(N),caches.open(M)]);await Promise.all([...r.map(async e=>{await c.delete(e.url),await G(`entries`,e.url)}),...s.map(async e=>{await l.delete(e.url),await G(`entries`,e.url)})])}O(),j([{"revision":"cfdb408687ee0262e2072e97f1bf17be","url":"index.html"},{"revision":"d0c188df2432c882c53e561e64cd29a2","url":"favicon_wl.png"},{"revision":"243f17f04cf5eb5b298d9701dbd3b4b9","url":"favicon.png"},{"revision":"339e5b64fa2c186631343b5399fe3898","url":"wallpapers/files/canvas_3.svg"},{"revision":"b164dca13ae630411fdc766586da3f61","url":"wallpapers/files/canvas_1.svg"},{"revision":"6ffe60f1b1d220a5b59ef1fe376122f6","url":"screenshots/s3.png"},{"revision":"be57d83f15923b5351a2a7cde1f35bf8","url":"screenshots/s2.png"},{"revision":"c3af5f4e79b0e4b5794d10e1ed3be39a","url":"screenshots/s1.png"},{"revision":"265dfc3ecb9788a5ae8974ec254ac651","url":"js/particles.min.js"},{"revision":"443e87a6d23acf7c849051ffd38106db","url":"images/logo_orig.png"},{"revision":"d0c188df2432c882c53e561e64cd29a2","url":"images/logo_64x64.png"},{"revision":"1c314d3790ee0733defb3e75079ba8d9","url":"images/logo_512x512.png"},{"revision":"d6363d0e5249f161c4b7d78045a210e5","url":"images/logo_256x256.png"},{"revision":"6f763ad15fbd8e2e93893c0d98a9905d","url":"images/logo_128x128.png"},{"revision":"bc4e038a89ae062004dd9ff297bba3f5","url":"images/logo_1024x1024.png"},{"revision":"1c1dcdd3b47bee973de6f323b504dda5","url":"images/logo-wr_orig.png"},{"revision":"34a0677b471ec1dcf5f25eeac90539e2","url":"images/logo-wr_64x64.png"},{"revision":"de6735f441492f065a0da94eacb982de","url":"images/logo-wr_512x512.png"},{"revision":"3018eca652753d237061b855645f93c9","url":"images/logo-wr_256x256.png"},{"revision":"509310a186188c5b0751569a536ee83a","url":"images/logo-wr_128x128.png"},{"revision":"c23aea3f0209c8f5817796449af52472","url":"images/logo-wr_1024x1024.png"},{"revision":"8119caf9106c961943456e5113c26cfc","url":"images/logo-br_orig.png"},{"revision":"ed7721ca00c7df91460006ae11340980","url":"images/logo-br_64x64.png"},{"revision":"657409bce8f4fe2efaa08f441d91cb26","url":"images/logo-br_512x512.png"},{"revision":"1d1659355d80946eedf1063501b091b8","url":"images/logo-br_256x256.png"},{"revision":"733bf2efe01b5cb056534806772aabd2","url":"images/logo-br_128x128.png"},{"revision":"e7561ccec1eefad2a36e697ddbebcd78","url":"images/logo-br_1024x1024.png"},{"revision":"05d9d6e8842b65d5a6b7f9b83eb6e786","url":"images/logo-bl_orig.png"},{"revision":"243f17f04cf5eb5b298d9701dbd3b4b9","url":"images/logo-bl_64x64.png"},{"revision":"a34687e37e32da4d4c127831c6f9779c","url":"images/logo-bl_512x512.png"},{"revision":"0260dd99a07186b7fc3d101023068658","url":"images/logo-bl_256x256.png"},{"revision":"ddb2b89e0437a22554694e1f0a2b894b","url":"images/logo-bl_128x128.png"},{"revision":"1ca5897439475c3b2acab290959559b9","url":"images/logo-bl_1024x1024.png"},{"revision":"d0c188df2432c882c53e561e64cd29a2","url":"images/favicon.png"},{"revision":"d6363d0e5249f161c4b7d78045a210e5","url":"images/apple-touch-icon.png"},{"revision":"1c314d3790ee0733defb3e75079ba8d9","url":"images/android-chrome-512x512.png"},{"revision":"452c6675af891c549b493895764c855d","url":"images/avatars/default.png"},{"revision":null,"url":"assets/zh-TW-RAJ6MFWO-BTknr43S.js"},{"revision":null,"url":"assets/zh-HK-E62DVLB3-dcRoFFJT.js"},{"revision":null,"url":"assets/zh-CN-LNUGB5OW-N0-P-YPg.js"},{"revision":null,"url":"assets/xychartDiagram-S5SC5T6Z-Cg27DCiq.js"},{"revision":null,"url":"assets/workspace-BYMC2sfI.js"},{"revision":null,"url":"assets/workbox-window.prod.es5-Bd17z0YL.js"},{"revision":null,"url":"assets/wardleyDiagram-VM6X3IG4-XOnMkSi-.js"},{"revision":null,"url":"assets/wardley-WFR3VGLG-C6N1rULY.js"},{"revision":null,"url":"assets/vi-VN-M7AON7JQ-BFEVKFOA.js"},{"revision":null,"url":"assets/vennDiagram-4TSXK5OY-P6FI4YvP.js"},{"revision":null,"url":"assets/utils-BxVxyehK.js"},{"revision":null,"url":"assets/utils-2pl1SbIp.js"},{"revision":null,"url":"assets/use-theme-Bd8sb5Ox.js"},{"revision":null,"url":"assets/uk-UA-QMV73CPH-BfWne7LV.js"},{"revision":null,"url":"assets/ui-NWo4bzrd.js"},{"revision":null,"url":"assets/treemap-WGGIJYW6-Cg7tyfH8.js"},{"revision":null,"url":"assets/treeView-Q6P3EWNA-BTTYcvrF.js"},{"revision":null,"url":"assets/tr-TR-DEFEU3FU-Q633YFo2.js"},{"revision":null,"url":"assets/timeline-definition-24CTP7MA-HQ5YMAQc.js"},{"revision":null,"url":"assets/th-TH-HPSO5L25-swaKUA2N.js"},{"revision":null,"url":"assets/text-documents-F17vHvLW.js"},{"revision":null,"url":"assets/ta-IN-2NMHFXQM-D1gPGRIR.js"},{"revision":null,"url":"assets/swimlanesDiagram-VR7AAH4N-DACbRCkF.js"},{"revision":null,"url":"assets/swimlanes-42K2YHIH-f0gJOzIY.js"},{"revision":null,"url":"assets/sv-SE-XGPEYMSR-CWEjOHYD.js"},{"revision":null,"url":"assets/subtree-transfer-dialog-CSjPDp4d.js"},{"revision":null,"url":"assets/subset-worker.chunk-D4w07nYk.js"},{"revision":null,"url":"assets/subset-shared.chunk-CzQ5JF2O.js"},{"revision":null,"url":"assets/stateDiagram-v2-MP3YSRHH-UMuzQhZ7.js"},{"revision":null,"url":"assets/stateDiagram-D77RDMKH-Dsv4fQ8Y.js"},{"revision":null,"url":"assets/src-CllyRBe0.js"},{"revision":null,"url":"assets/socket-hM4c-ZSl.js"},{"revision":null,"url":"assets/sl-SI-NN7IZMDC-DFJxhRNE.js"},{"revision":null,"url":"assets/sk-SK-C5VTKIMK-NlHjiedH.js"},{"revision":null,"url":"assets/sizeCapture-INFHLROL-B0uUizjq.js"},{"revision":null,"url":"assets/si-LK-N5RQ5JYF-ROLYABqx.js"},{"revision":null,"url":"assets/sha256-Cs35JyRg.js"},{"revision":null,"url":"assets/sequenceDiagram-WJ2MYXX4-Dyn971wT.js"},{"revision":null,"url":"assets/search-COMZIxA7.js"},{"revision":null,"url":"assets/sankeyDiagram-P5KCCOFB-CBdZpflq.js"},{"revision":null,"url":"assets/sanitize-DrVcFY1Q.js"},{"revision":null,"url":"assets/ru-RU-B4JR7IUQ-n637KE87.js"},{"revision":null,"url":"assets/roundRect-D01gJrlt.js"},{"revision":null,"url":"assets/rough.esm-Dy-Kn_BL.js"},{"revision":null,"url":"assets/rolldown-runtime-C0FnF6B9.js"},{"revision":null,"url":"assets/ro-RO-JPDTUUEW-BqxNXAVP.js"},{"revision":null,"url":"assets/requirementDiagram-BXWQKSXE-S99ev3k7.js"},{"revision":null,"url":"assets/react-BzqgEMSQ.js"},{"revision":null,"url":"assets/railroadDiagram-O6MQD6OU-Cjw_zMBC.js"},{"revision":null,"url":"assets/railroad-peg-WCYAUIDC-BQiIsX_p.js"},{"revision":null,"url":"assets/railroad-ebnf-LZEXJU2U-V0aQVv9m.js"},{"revision":null,"url":"assets/railroad-abnf-HS5TGJTU-Cq7y22IA.js"},{"revision":null,"url":"assets/railroad-74A4TZTK-CGtTWdGc.js"},{"revision":null,"url":"assets/radar-RG4KPBEZ-B6h6pWOs.js"},{"revision":null,"url":"assets/quadrantDiagram-AXDQQJYC-CAXFELe7.js"},{"revision":null,"url":"assets/punycode.es6-ZbLrB_Dn.js"},{"revision":null,"url":"assets/pt-PT-UZXXM6DQ-DXzHR8rJ.js"},{"revision":null,"url":"assets/pt-BR-5N22H2LF-CeODeunU.js"},{"revision":null,"url":"assets/preload-helper-Czpn1I53.js"},{"revision":null,"url":"assets/pl-PL-T2D74RX3-DgfcfsGT.js"},{"revision":null,"url":"assets/pieDiagram-E7YTZNPT-Cs2lygkh.js"},{"revision":null,"url":"assets/pie-WAS4IAKB-qxv01Y8W.js"},{"revision":null,"url":"assets/pica-XznpCgP2.js"},{"revision":null,"url":"assets/percentages-BXMCSKIN-BPGA3zHb.js"},{"revision":null,"url":"assets/pegDiagram-XKGWAZYB-DqjEkpXQ.js"},{"revision":null,"url":"assets/pdf.worker.min-C8Ts8bNu.js"},{"revision":null,"url":"assets/pdf-Ciz5_WNq.js"},{"revision":null,"url":"assets/path-fybaL0A-.js"},{"revision":null,"url":"assets/packet-AYTQ26CC-BSJEH9Lb.js"},{"revision":null,"url":"assets/pa-IN-N4M65BXN-wsiZwueU.js"},{"revision":null,"url":"assets/ordinal-BDEzSJ7C.js"},{"revision":null,"url":"assets/oc-FR-POXYY2M6-Cn1eE_Zu.js"},{"revision":null,"url":"assets/nn-NO-6E72VCQL-Dfy734xI.js"},{"revision":null,"url":"assets/nl-NL-IS3SIHDZ-C4-Hez0V.js"},{"revision":null,"url":"assets/nb-NO-T6EIAALU-BQeWbEx1.js"},{"revision":null,"url":"assets/my-MM-5M5IBNSE-BXTnMvRC.js"},{"revision":null,"url":"assets/mr-IN-CRQNXWMA-9iKXC6Ya.js"},{"revision":null,"url":"assets/mindmap-definition-YA3MSWOX-aAz9cEjj.js"},{"revision":null,"url":"assets/mermaid-parser.core-CN1hT9Tn.js"},{"revision":null,"url":"assets/markdown-it-DRESbtwK.js"},{"revision":null,"url":"assets/markdown-html-XoABNf32.js"},{"revision":null,"url":"assets/markdown-html-DtQ7-esK.css"},{"revision":null,"url":"assets/map-BxCwdK0d.js"},{"revision":null,"url":"assets/map-BcsP_QXj.css"},{"revision":null,"url":"assets/lv-LV-5QDEKY6T-BTnV-PCT.js"},{"revision":null,"url":"assets/lt-LT-XHIRWOB4-B6H0gZ-C.js"},{"revision":null,"url":"assets/linear-aVQWq3ZZ.js"},{"revision":null,"url":"assets/line-DXCbHsGS.js"},{"revision":null,"url":"assets/ku-TR-6OUDTVRD-Ky7FAdew.js"},{"revision":null,"url":"assets/ko-KR-MTYHY66A-BdMJRRpv.js"},{"revision":null,"url":"assets/km-KH-HSX4SM5Z-CaYVKl3D.js"},{"revision":null,"url":"assets/kk-KZ-P5N5QNE5-D52-yIxL.js"},{"revision":null,"url":"assets/katex-CXMH3UgJ.js"},{"revision":null,"url":"assets/kanban-definition-UXKFOSKX-BqkLgv78.js"},{"revision":null,"url":"assets/kab-KAB-ZGHBKWFO-BXYUMKRc.js"},{"revision":null,"url":"assets/kaa-6HZHGXH3-0hNa4m6s.js"},{"revision":null,"url":"assets/journeyDiagram-3NMN7TZE-CL9Lqe59.js"},{"revision":null,"url":"assets/ja-JP-DBVTYXUO-DSHejo8t.js"},{"revision":null,"url":"assets/it-IT-JPQ66NNP-D6FUHYuZ.js"},{"revision":null,"url":"assets/ishikawaDiagram-5VMMS53U-Hs60L6ow.js"},{"revision":null,"url":"assets/init-C-OQMol4.js"},{"revision":null,"url":"assets/infoDiagram-27XIBGKW-BuJx_j6a.js"},{"revision":null,"url":"assets/info-A6RAGUB7-BlU-8_xu.js"},{"revision":null,"url":"assets/index-DLTBUV0v.css"},{"revision":null,"url":"assets/index-CItdsVgq.js"},{"revision":null,"url":"assets/image-blob-reduce.esm-Dj7YBvMv.js"},{"revision":null,"url":"assets/image-GAAHSSAO-BoD-NvEF.js"},{"revision":null,"url":"assets/id-ID-SAP4L64H-ZZuXM5fX.js"},{"revision":null,"url":"assets/icons-DTuc_pxj.js"},{"revision":null,"url":"assets/hu-HU-A5ZG7DT2-BBrlHtCw.js"},{"revision":null,"url":"assets/hi-IN-IWLTKZ5I-Dzr4DvnL.js"},{"revision":null,"url":"assets/he-IL-6SHJWFNN-9Ylp6ncb.js"},{"revision":null,"url":"assets/graphlib-DS17s2tU.js"},{"revision":null,"url":"assets/gl-ES-HMX3MZ6V-4bQs8jWL.js"},{"revision":null,"url":"assets/gitGraphDiagram-WWUBYQGX-D6Gfp0nt.js"},{"revision":null,"url":"assets/gitGraph-4MIJSDKK-DYlXv_yJ.js"},{"revision":null,"url":"assets/ganttDiagram-EL5Y4UJY-BKBiwfwb.js"},{"revision":null,"url":"assets/fr-FR-RHASNOE6-BH99frB1.js"},{"revision":null,"url":"assets/flowDiagram-HODETNUW-BrKzgeF8.js"},{"revision":null,"url":"assets/file-save-745eba88-Bwdfz6OZ.js"},{"revision":null,"url":"assets/file-save-3189631c-CO9S4HFW.js"},{"revision":null,"url":"assets/file-open-7c801643-DZtJT5zp.js"},{"revision":null,"url":"assets/file-open-002ab408-BHUWm0Sh.js"},{"revision":null,"url":"assets/fi-FI-Z5N7JZ37-DC3Y34Y8.js"},{"revision":null,"url":"assets/fa-IR-HGAKTJCU-ddIdgP13.js"},{"revision":null,"url":"assets/eventmodeling-NTZA5JFV-BR2FzK4R.js"},{"revision":null,"url":"assets/eu-ES-A7QVB2H4-CAoFumRj.js"},{"revision":null,"url":"assets/es-ES-U4NZUMDT-D_KzWrdW.js"},{"revision":null,"url":"assets/erDiagram-RLTQ6QDP-CL7FBspC.js"},{"revision":null,"url":"assets/en-B4ZKOASM-BClIFgbE.js"},{"revision":null,"url":"assets/el-GR-BZB4AONW-Chellj6d.js"},{"revision":null,"url":"assets/ebnfDiagram-PWID7BFC-B9wGidHs.js"},{"revision":null,"url":"assets/dist-zgyESmtJ.js"},{"revision":null,"url":"assets/dist-Cz2MTljl.js"},{"revision":null,"url":"assets/directory-open-4ed118d0-1i309Asm.js"},{"revision":null,"url":"assets/directory-open-01563666-D4xXyWb_.js"},{"revision":null,"url":"assets/diagram-Z3DM3KII-aAOMR4aJ.js"},{"revision":null,"url":"assets/diagram-VX7I27RA-D-UFFc5T.js"},{"revision":null,"url":"assets/diagram-VSXAHHWV-BR6t4bem.js"},{"revision":null,"url":"assets/diagram-UQ7AKVKN-CC4synlk.js"},{"revision":null,"url":"assets/diagram-S7CK7UJ4-BCYFjoge.js"},{"revision":null,"url":"assets/defaultLocale-BFoDCU3G.js"},{"revision":null,"url":"assets/de-DE-XR44H4JA-DNaOwkE9.js"},{"revision":null,"url":"assets/dagre-PrKaheQc.js"},{"revision":null,"url":"assets/dagre-GXQ25YYZ-DAaeOVEp.js"},{"revision":null,"url":"assets/da-DK-5WZEPLOC-D55fbhpB.js"},{"revision":null,"url":"assets/cytoscape.esm-CGd-uY3x.js"},{"revision":null,"url":"assets/cynefinDiagram-5FMLGOSQ-Bwsug0X5.js"},{"revision":null,"url":"assets/cynefin-OW5HDTMX-7tP7QfM3.js"},{"revision":null,"url":"assets/cs-CZ-2BRQDIVT-Bz62EbC5.js"},{"revision":null,"url":"assets/cose-bilkent-JH36ORCC-DIeJt_L_.js"},{"revision":null,"url":"assets/code-editor-BQnKd3jw.js"},{"revision":null,"url":"assets/classDiagram-v2-VYDZK3BY-DLpT76o5.js"},{"revision":null,"url":"assets/classDiagram-ZZMXUADV-DLpT76o5.js"},{"revision":null,"url":"assets/chunk-Z3N5DIM6-D9TMVU7m.js"},{"revision":null,"url":"assets/chunk-Y2CYZVJY-DsF7k-Jl.js"},{"revision":null,"url":"assets/chunk-XXDRQBXY-CazVBYiP.js"},{"revision":null,"url":"assets/chunk-XHIXRSVI-BFQ6B8BE.js"},{"revision":null,"url":"assets/chunk-UY3FDG6J-CnmaAkG5.js"},{"revision":null,"url":"assets/chunk-TLUHSLCS-C47Epi2D.js"},{"revision":null,"url":"assets/chunk-TICWLB2K-jXepk-qW.js"},{"revision":null,"url":"assets/chunk-SVP7TREG-CoPu3EjZ.js"},{"revision":null,"url":"assets/chunk-SRAX5OIU-Dhm3gOdh.js"},{"revision":null,"url":"assets/chunk-SHT3W25Y-75CQ5pWa.js"},{"revision":null,"url":"assets/chunk-PWAF6VOD-DPI_wv9p.js"},{"revision":null,"url":"assets/chunk-POPQ4Y6H-B7yAy58S.js"},{"revision":null,"url":"assets/chunk-P2QGCYS3-DsGP3wH9.js"},{"revision":null,"url":"assets/chunk-OUJLGHUK-D0j2JRSg.js"},{"revision":null,"url":"assets/chunk-OSK3NFVY-fNjfug78.js"},{"revision":null,"url":"assets/chunk-LNGE3PJU-DWpGwHrW.js"},{"revision":null,"url":"assets/chunk-L3NEJ4N5-Cl0-d4Gu.js"},{"revision":null,"url":"assets/chunk-KI3K4JFJ-Rma-0k_M.js"},{"revision":null,"url":"assets/chunk-K2UTITRG-zQFDOW3Q.js"},{"revision":null,"url":"assets/chunk-JWPE2WC7-DVXcaiue.js"},{"revision":null,"url":"assets/chunk-IMKFNOWR-BuKGugNz.js"},{"revision":null,"url":"assets/chunk-IH6LHLGP-CC6I9F3i.js"},{"revision":null,"url":"assets/chunk-ICYGCRZG-749o-pGJ.js"},{"revision":null,"url":"assets/chunk-I5DQTOEV-Hm2LfiYI.js"},{"revision":null,"url":"assets/chunk-GVQU2GXP-BMi2Lqv6.js"},{"revision":null,"url":"assets/chunk-GMAD6QVW-tEmtNh72.js"},{"revision":null,"url":"assets/chunk-FOHPRMQF-DHwB1DNv.js"},{"revision":null,"url":"assets/chunk-F27PBJKO-B8_NVNfE.js"},{"revision":null,"url":"assets/chunk-EIO257PC-CAhBf1ig.js"},{"revision":null,"url":"assets/chunk-DU6HZSFF-BlZbyIL6.js"},{"revision":null,"url":"assets/chunk-CLGD4ZFX-BzBIdJij.js"},{"revision":null,"url":"assets/chunk-75Z2AOVW-CzSd0Veu.js"},{"revision":null,"url":"assets/chunk-747NJXEK-BFkZPlab.js"},{"revision":null,"url":"assets/chunk-6U3AYISY-C6-Mtja1.js"},{"revision":null,"url":"assets/chunk-6TQVIW2G-DKlLbNIP.js"},{"revision":null,"url":"assets/chunk-6K3QC6MW-CqVsVn-y.js"},{"revision":null,"url":"assets/chunk-6EIED4P4-DdUJkP0f.js"},{"revision":null,"url":"assets/chunk-6AZGARVD-BB6FqMl-.js"},{"revision":null,"url":"assets/chunk-5VM5RSS4-ZNzvKenW.js"},{"revision":null,"url":"assets/chunk-5V3GS4D5-i-ZDOEnP.js"},{"revision":null,"url":"assets/chunk-4HAMMTFA-DwG4o-7o.js"},{"revision":null,"url":"assets/chunk-3Z5EZCMW-DMniOlPd.js"},{"revision":null,"url":"assets/chunk-2ZTRR5NV-C2qZJila.js"},{"revision":null,"url":"assets/chunk-2Q5K7J3B-C1jixKkw.js"},{"revision":null,"url":"assets/chunk-2E4U76K2-BX8JWCIb.js"},{"revision":null,"url":"assets/channel-DbE-WRyM.js"},{"revision":null,"url":"assets/ca-ES-6MX7JW3Y-QAg3jm2p.js"},{"revision":null,"url":"assets/c4Diagram-7LVT6UL2-aDTW23RC.js"},{"revision":null,"url":"assets/bn-BD-2XOGV67Q-KCzfC93t.js"},{"revision":null,"url":"assets/blockDiagram-I7D4REHJ-DJlTH4XU.js"},{"revision":null,"url":"assets/blobs-B3DY8Rsp.js"},{"revision":null,"url":"assets/bg-BG-XCXSNQG7-DFFjBv03.js"},{"revision":null,"url":"assets/az-AZ-76LH7QW2-8v0TczD5.js"},{"revision":null,"url":"assets/array-BifhSqXX.js"},{"revision":null,"url":"assets/architectureDiagram-5GKGNRK7-2gVOlDi3.js"},{"revision":null,"url":"assets/architecture-7GRP2DOG-BMOPAkUC.js"},{"revision":null,"url":"assets/arc-SXJSVd7o.js"},{"revision":null,"url":"assets/ar-SA-G6X2FPQ2-BJ7kJfgn.js"},{"revision":null,"url":"assets/alert-dialog-CDKOX-MP.js"},{"revision":null,"url":"assets/abnfDiagram-VCTEODGH-Cy_5vShZ.js"},{"revision":null,"url":"assets/TextDocumentEditor-BF5NzQ6H.js"},{"revision":null,"url":"assets/SketchEditor-DtRVLazd.css"},{"revision":null,"url":"assets/SketchEditor-CWpixOog.js"},{"revision":null,"url":"assets/NextShell-DNv3mVFo.js"},{"revision":null,"url":"assets/NextShell-BT6-_CFY.css"},{"revision":null,"url":"assets/MarkdownEditor-DWa37grk.css"},{"revision":null,"url":"assets/MarkdownEditor-By8nDUtG.js"},{"revision":null,"url":"assets/LocationTab-BONJQfYM.js"},{"revision":null,"url":"assets/EditorOverlay-DqlaCJe7.js"},{"revision":"1c314d3790ee0733defb3e75079ba8d9","url":"images/android-chrome-512x512.png"},{"revision":"bc4e038a89ae062004dd9ff297bba3f5","url":"images/logo_1024x1024.png"},{"revision":"6f763ad15fbd8e2e93893c0d98a9905d","url":"images/logo_128x128.png"},{"revision":"d6363d0e5249f161c4b7d78045a210e5","url":"images/logo_256x256.png"},{"revision":"1c314d3790ee0733defb3e75079ba8d9","url":"images/logo_512x512.png"},{"revision":"d0c188df2432c882c53e561e64cd29a2","url":"images/logo_64x64.png"},{"revision":"caa9715e027d2757550109f1f9653d7c","url":"manifest.webmanifest"}]),self.addEventListener(`message`,e=>{e.data&&e.data.type===`SKIP_WAITING`&&self.skipWaiting()}),self.addEventListener(`activate`,e=>{e.waitUntil(Promise.all([self.clients.claim(),Ee()]))});var be=864e5,Y=/^\/rest\/v2\/workspaces\/[^/]+\/documents\/[^/]+\/(content|thumbnail)$/,xe=/^\/rest\/v2\/(auth|admin|ping|events)\b/,X=null;async function Z(){if(X&&Date.now()-X.at<1e4)return X.value;let e=await _e().catch(()=>({enabled:!1,budgetBytes:0,excludedWorkspaces:[]}));return X={at:Date.now(),value:e},e}function Q(e,t){let n=F(t);return n!==null&&e.excludedWorkspaces.includes(n)}self.addEventListener(`message`,e=>{e.data&&e.data.type===`OFFLINE_SETTINGS_CHANGED`&&(X=null)}),self.addEventListener(`fetch`,e=>{let{request:t}=e,n=new URL(t.url);if(t.method===`POST`&&n.pathname===`/share-target`){e.respondWith(Te(e));return}if(t.method===`GET`&&n.origin===self.location.origin&&n.pathname.startsWith(`/rest/v2/`)){if(Y.test(n.pathname)&&!n.searchParams.has(`download`)&&!t.headers.has(`range`)){e.respondWith(Se(e,t));return}if(!xe.test(n.pathname)&&!Y.test(n.pathname)){e.respondWith(Ce(e,t));return}}t.mode===`navigate`&&!$(n.pathname)&&e.respondWith(we(t))});function $(e){return e.startsWith(`/rest/`)||e.startsWith(`/dav/`)||e.startsWith(`/.well-known/`)}async function Se(e,t){let n=await Z();if(!n.enabled||Q(n,new URL(t.url).pathname))return fetch(t);let r=await caches.open(M),i=await r.match(t.url,{ignoreVary:!0});if(i)return e.waitUntil(J(t.url).catch(()=>{})),i;let a=await fetch(t);if(a.ok&&a.status===200){let i=a.clone();e.waitUntil((async()=>{try{await r.put(t.url,i);let e=Number(a.headers.get(`content-length`))||(await(await r.match(t.url))?.blob())?.size||0;await K(t.url,`content`,e),await ye(n.budgetBytes)}catch(e){console.warn(`[sw] offline content cache put failed`,e)}})())}return a}async function Ce(e,t){let n=await Z();if(!n.enabled||Q(n,new URL(t.url).pathname))return fetch(t);try{let n=await fetch(t);if(n.ok&&n.status===200){let r=n.clone();e.waitUntil((async()=>{try{await(await caches.open(N)).put(t.url,r),await K(t.url,`api`,Number(n.headers.get(`content-length`))||0)}catch(e){console.warn(`[sw] offline api cache put failed`,e)}})())}return n}catch(n){let r=await(await caches.open(N)).match(t.url,{ignoreVary:!0});if(r){e.waitUntil(J(t.url).catch(()=>{}));let n=new Headers(r.headers);return n.set(`X-Canvas-Offline`,`fallback`),new Response(r.body,{status:r.status,statusText:r.statusText,headers:n})}throw n}}async function we(e){try{return await fetch(e)}catch{let e=await k(`/index.html`);if(e)return e;throw Error(`offline and index.html is not precached`)}}function Te(n){let r=crypto.randomUUID();return caches.open(e).then(async e=>(await e.put(`/share-target-inbox/${r}/meta`,new Response(JSON.stringify({status:`receiving`,stashedAt:Date.now()}))),e)).then(e=>t(n.request,r,e)).then(()=>Response.redirect(new URL(`/share-target?token=${r}`,self.location.origin).href,303),()=>Response.redirect(new URL(`/share-target?error=stash-failed`,self.location.origin).href,303))}async function Ee(){try{if(!await caches.has(`share-target-inbox`))return;let t=await caches.open(e),n=await t.keys(),r=new Set;for(let e of n){let{pathname:n}=new URL(e.url);if(!n.endsWith(`/meta`))continue;let i=n.split(`/`)[2];if(!i)continue;let a=0;try{let n=await t.match(e);a=n?Number((await n.json()).stashedAt??0):0}catch{}(!a||Date.now()-a>be)&&r.add(i)}await Promise.all(n.filter(e=>r.has(new URL(e.url).pathname.split(`/`)[2])).map(e=>t.delete(e)))}catch(e){console.error(`[sw] share inbox prune failed`,e)}}
1
+ var e=`share-target-inbox`;async function t(e,t,n){let r=`/share-target-inbox/${t}`,i=[],a=async e=>{await Promise.all(i.map(e=>n.delete(e))),await n.put(`${r}/meta`,new Response(JSON.stringify({status:`error`,error:e,stashedAt:Date.now()})))};try{if(Number(e.headers.get(`content-length`))>105906176){await e.body?.cancel().catch(()=>{}),await a(`too-large`);return}let t=await e.formData(),o=t.getAll(`files`).filter(e=>e instanceof File);if(o.some(e=>e.size===0)){await a(`empty-file`);return}if(o.reduce((e,t)=>e+t.size,0)>104857600){await a(`too-large`);return}let s=e=>{let n=t.get(e);return typeof n==`string`?n:``},c=s(`title`),l=s(`text`),u=s(`url`);if(!o.length&&![c,l,u].some(e=>e.trim())){await a(`empty-share`);return}for(let[e,t]of o.entries()){let a=`${r}/file-${e}`;await n.put(a,new Response(t,{headers:{"Content-Type":t.type||`application/octet-stream`}})),i.push(a)}await n.put(`${r}/meta`,new Response(JSON.stringify({status:`ready`,title:c,text:l,url:u,fileNames:o.map(e=>e.name),stashedAt:Date.now()})))}catch{await a(`stash-failed`)}}try{self[`workbox:core:7.4.0`]&&_()}catch{}var n=(e,...t)=>{let n=e;return t.length>0&&(n+=` :: ${JSON.stringify(t)}`),n},r=class extends Error{constructor(e,t){let r=n(e,t);super(r),this.name=e,this.details=t}},i={googleAnalytics:`googleAnalytics`,precache:`precache-v2`,prefix:`workbox`,runtime:`runtime`,suffix:typeof registration<`u`?registration.scope:``},a=e=>[i.prefix,e,i.suffix].filter(e=>e&&e.length>0).join(`-`),o=e=>{for(let t of Object.keys(i))e(t)},s={updateDetails:e=>{o(t=>{typeof e[t]==`string`&&(i[t]=e[t])})},getGoogleAnalyticsName:e=>e||a(i.googleAnalytics),getPrecacheName:e=>e||a(i.precache),getPrefix:()=>i.prefix,getRuntimeName:e=>e||a(i.runtime),getSuffix:()=>i.suffix};function c(e,t){let n=t();return e.waitUntil(n),n}try{self[`workbox:precaching:7.4.0`]&&_()}catch{}var l=`__WB_REVISION__`;function u(e){if(!e)throw new r(`add-to-cache-list-unexpected-type`,{entry:e});if(typeof e==`string`){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:t,url:n}=e;if(!n)throw new r(`add-to-cache-list-unexpected-type`,{entry:e});if(!t){let e=new URL(n,location.href);return{cacheKey:e.href,url:e.href}}let i=new URL(n,location.href),a=new URL(n,location.href);return i.searchParams.set(l,t),{cacheKey:i.href,url:a.href}}var ee=class{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type===`install`&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;n?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return n}}},te=class{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let n=t?.cacheKey||this._precacheController.getCacheKeyForURL(e.url);return n?new Request(n,{headers:e.headers}):e},this._precacheController=e}},d;function ne(){if(d===void 0){let e=new Response(``);if(`body`in e)try{new Response(e.body),d=!0}catch{d=!1}d=!1}return d}async function re(e,t){let n=null;if(e.url&&(n=new URL(e.url).origin),n!==self.location.origin)throw new r(`cross-origin-copy-response`,{origin:n});let i=e.clone(),a={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=t?t(a):a,s=ne()?i.body:await i.blob();return new Response(s,o)}var ie=e=>new URL(String(e),location.href).href.replace(RegExp(`^${location.origin}`),``);function f(e,t){let n=new URL(e);for(let e of t)n.searchParams.delete(e);return n.href}async function ae(e,t,n,r){let i=f(t.url,n);if(t.url===i)return e.match(t,r);let a=Object.assign(Object.assign({},r),{ignoreSearch:!0}),o=await e.keys(t,a);for(let t of o)if(i===f(t.url,n))return e.match(t,r)}var oe=class{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}},p=new Set;async function m(){for(let e of p)await e()}function h(e){return new Promise(t=>setTimeout(t,e))}try{self[`workbox:strategies:7.4.0`]&&_()}catch{}function g(e){return typeof e==`string`?new Request(e):e}var se=class{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new oe,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(let e of this._plugins)this._pluginStateMap.set(e,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:t}=this,n=g(e);if(n.mode===`navigate`&&t instanceof FetchEvent&&t.preloadResponse){let e=await t.preloadResponse;if(e)return e}let i=this.hasCallback(`fetchDidFail`)?n.clone():null;try{for(let e of this.iterateCallbacks(`requestWillFetch`))n=await e({request:n.clone(),event:t})}catch(e){if(e instanceof Error)throw new r(`plugin-error-request-will-fetch`,{thrownErrorMessage:e.message})}let a=n.clone();try{let e;e=await fetch(n,n.mode===`navigate`?void 0:this._strategy.fetchOptions);for(let n of this.iterateCallbacks(`fetchDidSucceed`))e=await n({event:t,request:a,response:e});return e}catch(e){throw i&&await this.runCallbacks(`fetchDidFail`,{error:e,event:t,originalRequest:i.clone(),request:a.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){let t=g(e),n,{cacheName:r,matchOptions:i}=this._strategy,a=await this.getCacheKey(t,`read`),o=Object.assign(Object.assign({},i),{cacheName:r});n=await caches.match(a,o);for(let e of this.iterateCallbacks(`cachedResponseWillBeUsed`))n=await e({cacheName:r,matchOptions:i,cachedResponse:n,request:a,event:this.event})||void 0;return n}async cachePut(e,t){let n=g(e);await h(0);let i=await this.getCacheKey(n,`write`);if(!t)throw new r(`cache-put-with-no-response`,{url:ie(i.url)});let a=await this._ensureResponseSafeToCache(t);if(!a)return!1;let{cacheName:o,matchOptions:s}=this._strategy,c=await self.caches.open(o),l=this.hasCallback(`cacheDidUpdate`),u=l?await ae(c,i.clone(),[`__WB_REVISION__`],s):null;try{await c.put(i,l?a.clone():a)}catch(e){if(e instanceof Error)throw e.name===`QuotaExceededError`&&await m(),e}for(let e of this.iterateCallbacks(`cacheDidUpdate`))await e({cacheName:o,oldResponse:u,newResponse:a.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){let n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let r=e;for(let e of this.iterateCallbacks(`cacheKeyWillBeUsed`))r=g(await e({mode:t,request:r,event:this.event,params:this.params}));this._cacheKeys[n]=r}return this._cacheKeys[n]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if(typeof t[e]==`function`){let n=this._pluginStateMap.get(t);yield r=>{let i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>e.status===`rejected`);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(let e of this.iterateCallbacks(`cacheWillUpdate`))if(t=await e({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}},ce=class{constructor(e={}){this.cacheName=s.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,n=typeof e.request==`string`?new Request(e.request):e.request,r=`params`in e?e.params:void 0,i=new se(this,{event:t,request:n,params:r}),a=this._getResponse(i,n,t);return[a,this._awaitComplete(a,i,n,t)]}async _getResponse(e,t,n){await e.runCallbacks(`handlerWillStart`,{event:n,request:t});let i;try{if(i=await this._handle(t,e),!i||i.type===`error`)throw new r(`no-response`,{url:t.url})}catch(r){if(r instanceof Error){for(let a of e.iterateCallbacks(`handlerDidError`))if(i=await a({error:r,event:n,request:t}),i)break}if(!i)throw r}for(let r of e.iterateCallbacks(`handlerWillRespond`))i=await r({event:n,request:t,response:i});return i}async _awaitComplete(e,t,n,r){let i,a;try{i=await e}catch{}try{await t.runCallbacks(`handlerDidRespond`,{event:r,request:n,response:i}),await t.doneWaiting()}catch(e){e instanceof Error&&(a=e)}if(await t.runCallbacks(`handlerDidComplete`,{event:r,request:n,response:i,error:a}),t.destroy(),a)throw a}},v=class e extends ce{constructor(t={}){t.cacheName=s.getPrecacheName(t.cacheName),super(t),this._fallbackToNetwork=t.fallbackToNetwork!==!1,this.plugins.push(e.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){return await t.cacheMatch(e)||(t.event&&t.event.type===`install`?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,t){let n,i=t.params||{};if(this._fallbackToNetwork){let r=i.integrity,a=e.integrity,o=!a||a===r;n=await t.fetch(new Request(e,{integrity:e.mode===`no-cors`?void 0:a||r})),r&&o&&e.mode!==`no-cors`&&(this._useDefaultCacheabilityPluginIfNeeded(),await t.cachePut(e,n.clone()))}else throw new r(`missing-precache-entry`,{cacheName:this.cacheName,url:e.url});return n}async _handleInstall(e,t){this._useDefaultCacheabilityPluginIfNeeded();let n=await t.fetch(e);if(!await t.cachePut(e,n.clone()))throw new r(`bad-precaching-response`,{url:e.url,status:n.status});return n}_useDefaultCacheabilityPluginIfNeeded(){let t=null,n=0;for(let[r,i]of this.plugins.entries())i!==e.copyRedirectedCacheableResponsesPlugin&&(i===e.defaultPrecacheCacheabilityPlugin&&(t=r),i.cacheWillUpdate&&n++);n===0?this.plugins.push(e.defaultPrecacheCacheabilityPlugin):n>1&&t!==null&&this.plugins.splice(t,1)}};v.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:e}){return!e||e.status>=400?null:e}},v.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:e}){return e.redirected?await re(e):e}};var le=class{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new v({cacheName:s.getPrecacheName(e),plugins:[...t,new te({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||=(self.addEventListener(`install`,this.install),self.addEventListener(`activate`,this.activate),!0)}addToCacheList(e){let t=[];for(let n of e){typeof n==`string`?t.push(n):n&&n.revision===void 0&&t.push(n.url);let{cacheKey:e,url:i}=u(n),a=typeof n!=`string`&&n.revision?`reload`:`default`;if(this._urlsToCacheKeys.has(i)&&this._urlsToCacheKeys.get(i)!==e)throw new r(`add-to-cache-list-conflicting-entries`,{firstEntry:this._urlsToCacheKeys.get(i),secondEntry:e});if(typeof n!=`string`&&n.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==n.integrity)throw new r(`add-to-cache-list-conflicting-integrities`,{url:i});this._cacheKeysToIntegrities.set(e,n.integrity)}if(this._urlsToCacheKeys.set(i,e),this._urlsToCacheModes.set(i,a),t.length>0){let e=`Workbox is precaching URLs without revision info: ${t.join(`, `)}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}install(e){return c(e,async()=>{let t=new ee;this.strategy.plugins.push(t);for(let[t,n]of this._urlsToCacheKeys){let r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(t),a=new Request(t,{integrity:r,cache:i,credentials:`same-origin`});await Promise.all(this.strategy.handleAll({params:{cacheKey:n},request:a,event:e}))}let{updatedURLs:n,notUpdatedURLs:r}=t;return{updatedURLs:n,notUpdatedURLs:r}})}activate(e){return c(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),n=new Set(this._urlsToCacheKeys.values()),r=[];for(let i of t)n.has(i.url)||(await e.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){let t=this.getCacheKeyForURL(e);if(!t)throw new r(`non-precached-url`,{url:e});return n=>(n.request=new Request(e),n.params=Object.assign({cacheKey:t},n.params),this.strategy.handle(n))}},y,b=()=>(y||=new le,y);try{self[`workbox:routing:7.4.0`]&&_()}catch{}var x=e=>e&&typeof e==`object`?e:{handle:e},S=class{constructor(e,t,n=`GET`){this.handler=x(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=x(e)}},ue=class extends S{constructor(e,t,n){super(({url:t})=>{let n=e.exec(t.href);if(n&&(t.origin===location.origin||n.index===0))return n.slice(1)},t,n)}},de=class{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener(`fetch`,(e=>{let{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)}))}addCacheListener(){self.addEventListener(`message`,(e=>{if(e.data&&e.data.type===`CACHE_URLS`){let{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(t=>{typeof t==`string`&&(t=[t]);let n=new Request(...t);return this.handleRequest({request:n,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}}))}handleRequest({request:e,event:t}){let n=new URL(e.url,location.href);if(!n.protocol.startsWith(`http`))return;let r=n.origin===location.origin,{params:i,route:a}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:n}),o=a&&a.handler,s=e.method;if(!o&&this._defaultHandlerMap.has(s)&&(o=this._defaultHandlerMap.get(s)),!o)return;let c;try{c=o.handle({url:n,request:e,event:t,params:i})}catch(e){c=Promise.reject(e)}let l=a&&a.catchHandler;return c instanceof Promise&&(this._catchHandler||l)&&(c=c.catch(async r=>{if(l)try{return await l.handle({url:n,request:e,event:t,params:i})}catch(e){e instanceof Error&&(r=e)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw r})),c}findMatchingRoute({url:e,sameOrigin:t,request:n,event:r}){let i=this._routes.get(n.method)||[];for(let a of i){let i,o=a.match({url:e,sameOrigin:t,request:n,event:r});if(o)return i=o,(Array.isArray(i)&&i.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o==`boolean`)&&(i=void 0),{route:a,params:i}}return{}}setDefaultHandler(e,t=`GET`){this._defaultHandlerMap.set(t,x(e))}setCatchHandler(e){this._catchHandler=x(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new r(`unregister-route-but-not-found-with-method`,{method:e.method});let t=this._routes.get(e.method).indexOf(e);if(t>-1)this._routes.get(e.method).splice(t,1);else throw new r(`unregister-route-route-not-registered`)}},C,fe=()=>(C||(C=new de,C.addFetchListener(),C.addCacheListener()),C);function pe(e,t,n){let i;if(typeof e==`string`){let r=new URL(e,location.href);i=new S(({url:e})=>e.href===r.href,t,n)}else if(e instanceof RegExp)i=new ue(e,t,n);else if(typeof e==`function`)i=new S(e,t,n);else if(e instanceof S)i=e;else throw new r(`unsupported-route-type`,{moduleName:`workbox-routing`,funcName:`registerRoute`,paramName:`capture`});return fe().registerRoute(i),i}function me(e,t=[]){for(let n of[...e.searchParams.keys()])t.some(e=>e.test(n))&&e.searchParams.delete(n);return e}function*he(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:n=`index.html`,cleanURLs:r=!0,urlManipulation:i}={}){let a=new URL(e,location.href);a.hash=``,yield a.href;let o=me(a,t);if(yield o.href,n&&o.pathname.endsWith(`/`)){let e=new URL(o.href);e.pathname+=n,yield e.href}if(r){let e=new URL(o.href);e.pathname+=`.html`,yield e.href}if(i){let e=i({url:a});for(let t of e)yield t.href}}var w=class extends S{constructor(e,t){super(({request:n})=>{let r=e.getURLsToCacheKeys();for(let i of he(n.url,t)){let t=r.get(i);if(t)return{cacheKey:t,integrity:e.getIntegrityForCacheKey(t)}}},e.strategy)}};function T(e){pe(new w(b(),e))}var E=`-precache-`,D=async(e,t=E)=>{let n=(await self.caches.keys()).filter(n=>n.includes(t)&&n.includes(self.registration.scope)&&n!==e);return await Promise.all(n.map(e=>self.caches.delete(e))),n};function O(){self.addEventListener(`activate`,(e=>{let t=s.getPrecacheName();e.waitUntil(D(t).then(e=>{}))}))}function k(e){return b().matchPrecache(e)}function A(e){b().precache(e)}function j(e,t){A(e),T(t)}var M=`offline-content-v1`,N=`offline-api-v1`,P={enabled:!1,budgetBytes:4294967296,excludedWorkspaces:[]};function F(e){let t=e.match(/^\/rest\/v2\/workspaces\/([^/?#]+)/);return t?decodeURIComponent(t[1]):null}var I=1e3,L=`canvas-offline`,R=2,z=null;function B(){return z||(z=new Promise((e,t)=>{let n=indexedDB.open(L,R);n.onupgradeneeded=e=>{let t=n.result;if(t.objectStoreNames.contains(`config`)||t.createObjectStore(`config`),t.objectStoreNames.contains(`entries`)||t.createObjectStore(`entries`,{keyPath:`url`}),e.oldVersion>=1&&t.objectStoreNames.contains(`pins`)){t.deleteObjectStore(`pins`);let e=n.transaction.objectStore(`entries`).openCursor();e.onsuccess=()=>{let t=e.result;if(!t)return;let n=t.value;n.pinned&&t.update({...n,pinned:!1}),t.continue()}}t.objectStoreNames.contains(`scopes`)||t.createObjectStore(`scopes`,{keyPath:`id`})},n.onsuccess=()=>{n.result.onversionchange=()=>{n.result.close(),z=null},e(n.result)},n.onerror=()=>{z=null,t(n.error)}}),z)}function V(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error),e.onabort=()=>n(e.error)})}function H(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}async function U(e,t){return H((await B()).transaction(e).objectStore(e).get(t))}async function ge(e){return H((await B()).transaction(e).objectStore(e).getAll())}async function W(e,t,n){let r=(await B()).transaction(e,`readwrite`);return r.objectStore(e).put(t,n),V(r)}async function G(e,t){let n=(await B()).transaction(e,`readwrite`);return n.objectStore(e).delete(t),V(n)}async function _e(){try{let e=await U(`config`,`settings`);return e?{...P,...e}:P}catch{return P}}async function K(e,t,n){let r=await U(`entries`,e);await W(`entries`,{url:e,kind:t,size:n,lastAccess:Date.now(),pinned:r?.pinned??!1})}var ve=6e4,q=new Map;async function J(e){let t=q.get(e),n=Date.now();if(t&&n-t<ve)return;q.set(e,n),q.size>4096&&q.clear();let r=await U(`entries`,e);r&&await W(`entries`,{...r,lastAccess:n})}async function ye(e){let t=await ge(`entries`),n=t.filter(e=>e.kind===`api`).sort((e,t)=>e.lastAccess-t.lastAccess),r=n.slice(0,Math.max(0,n.length-I)),i=t.filter(e=>e.kind===`content`),a=i.reduce((e,t)=>e+t.size,0),o=i.filter(e=>!e.pinned).sort((e,t)=>e.lastAccess-t.lastAccess),s=[];for(let t of o){if(a<=e)break;s.push(t),a-=t.size}if(!r.length&&!s.length)return;let[c,l]=await Promise.all([caches.open(N),caches.open(M)]);await Promise.all([...r.map(async e=>{await c.delete(e.url),await G(`entries`,e.url)}),...s.map(async e=>{await l.delete(e.url),await G(`entries`,e.url)})])}O(),j([{"revision":"0d223116894ffd58b0d31d6bc94553b3","url":"index.html"},{"revision":"d0c188df2432c882c53e561e64cd29a2","url":"favicon_wl.png"},{"revision":"243f17f04cf5eb5b298d9701dbd3b4b9","url":"favicon.png"},{"revision":"339e5b64fa2c186631343b5399fe3898","url":"wallpapers/files/canvas_3.svg"},{"revision":"b164dca13ae630411fdc766586da3f61","url":"wallpapers/files/canvas_1.svg"},{"revision":"6ffe60f1b1d220a5b59ef1fe376122f6","url":"screenshots/s3.png"},{"revision":"be57d83f15923b5351a2a7cde1f35bf8","url":"screenshots/s2.png"},{"revision":"c3af5f4e79b0e4b5794d10e1ed3be39a","url":"screenshots/s1.png"},{"revision":"265dfc3ecb9788a5ae8974ec254ac651","url":"js/particles.min.js"},{"revision":"443e87a6d23acf7c849051ffd38106db","url":"images/logo_orig.png"},{"revision":"d0c188df2432c882c53e561e64cd29a2","url":"images/logo_64x64.png"},{"revision":"1c314d3790ee0733defb3e75079ba8d9","url":"images/logo_512x512.png"},{"revision":"d6363d0e5249f161c4b7d78045a210e5","url":"images/logo_256x256.png"},{"revision":"6f763ad15fbd8e2e93893c0d98a9905d","url":"images/logo_128x128.png"},{"revision":"bc4e038a89ae062004dd9ff297bba3f5","url":"images/logo_1024x1024.png"},{"revision":"1c1dcdd3b47bee973de6f323b504dda5","url":"images/logo-wr_orig.png"},{"revision":"34a0677b471ec1dcf5f25eeac90539e2","url":"images/logo-wr_64x64.png"},{"revision":"de6735f441492f065a0da94eacb982de","url":"images/logo-wr_512x512.png"},{"revision":"3018eca652753d237061b855645f93c9","url":"images/logo-wr_256x256.png"},{"revision":"509310a186188c5b0751569a536ee83a","url":"images/logo-wr_128x128.png"},{"revision":"c23aea3f0209c8f5817796449af52472","url":"images/logo-wr_1024x1024.png"},{"revision":"8119caf9106c961943456e5113c26cfc","url":"images/logo-br_orig.png"},{"revision":"ed7721ca00c7df91460006ae11340980","url":"images/logo-br_64x64.png"},{"revision":"657409bce8f4fe2efaa08f441d91cb26","url":"images/logo-br_512x512.png"},{"revision":"1d1659355d80946eedf1063501b091b8","url":"images/logo-br_256x256.png"},{"revision":"733bf2efe01b5cb056534806772aabd2","url":"images/logo-br_128x128.png"},{"revision":"e7561ccec1eefad2a36e697ddbebcd78","url":"images/logo-br_1024x1024.png"},{"revision":"05d9d6e8842b65d5a6b7f9b83eb6e786","url":"images/logo-bl_orig.png"},{"revision":"243f17f04cf5eb5b298d9701dbd3b4b9","url":"images/logo-bl_64x64.png"},{"revision":"a34687e37e32da4d4c127831c6f9779c","url":"images/logo-bl_512x512.png"},{"revision":"0260dd99a07186b7fc3d101023068658","url":"images/logo-bl_256x256.png"},{"revision":"ddb2b89e0437a22554694e1f0a2b894b","url":"images/logo-bl_128x128.png"},{"revision":"1ca5897439475c3b2acab290959559b9","url":"images/logo-bl_1024x1024.png"},{"revision":"d0c188df2432c882c53e561e64cd29a2","url":"images/favicon.png"},{"revision":"d6363d0e5249f161c4b7d78045a210e5","url":"images/apple-touch-icon.png"},{"revision":"1c314d3790ee0733defb3e75079ba8d9","url":"images/android-chrome-512x512.png"},{"revision":"452c6675af891c549b493895764c855d","url":"images/avatars/default.png"},{"revision":null,"url":"assets/zh-TW-RAJ6MFWO-BTknr43S.js"},{"revision":null,"url":"assets/zh-HK-E62DVLB3-dcRoFFJT.js"},{"revision":null,"url":"assets/zh-CN-LNUGB5OW-N0-P-YPg.js"},{"revision":null,"url":"assets/xychartDiagram-S5SC5T6Z-Cg27DCiq.js"},{"revision":null,"url":"assets/workspace-BYMC2sfI.js"},{"revision":null,"url":"assets/workbox-window.prod.es5-Bd17z0YL.js"},{"revision":null,"url":"assets/wardleyDiagram-VM6X3IG4-XOnMkSi-.js"},{"revision":null,"url":"assets/wardley-WFR3VGLG-C6N1rULY.js"},{"revision":null,"url":"assets/vi-VN-M7AON7JQ-BFEVKFOA.js"},{"revision":null,"url":"assets/vennDiagram-4TSXK5OY-P6FI4YvP.js"},{"revision":null,"url":"assets/utils-BxVxyehK.js"},{"revision":null,"url":"assets/utils-2pl1SbIp.js"},{"revision":null,"url":"assets/use-theme-Bd8sb5Ox.js"},{"revision":null,"url":"assets/uk-UA-QMV73CPH-BfWne7LV.js"},{"revision":null,"url":"assets/ui-NWo4bzrd.js"},{"revision":null,"url":"assets/treemap-WGGIJYW6-Cg7tyfH8.js"},{"revision":null,"url":"assets/treeView-Q6P3EWNA-BTTYcvrF.js"},{"revision":null,"url":"assets/tr-TR-DEFEU3FU-Q633YFo2.js"},{"revision":null,"url":"assets/timeline-definition-24CTP7MA-HQ5YMAQc.js"},{"revision":null,"url":"assets/th-TH-HPSO5L25-swaKUA2N.js"},{"revision":null,"url":"assets/text-documents-F17vHvLW.js"},{"revision":null,"url":"assets/ta-IN-2NMHFXQM-D1gPGRIR.js"},{"revision":null,"url":"assets/swimlanesDiagram-VR7AAH4N-DACbRCkF.js"},{"revision":null,"url":"assets/swimlanes-42K2YHIH-f0gJOzIY.js"},{"revision":null,"url":"assets/sv-SE-XGPEYMSR-CWEjOHYD.js"},{"revision":null,"url":"assets/subtree-transfer-dialog-CSjPDp4d.js"},{"revision":null,"url":"assets/subset-worker.chunk-D4w07nYk.js"},{"revision":null,"url":"assets/subset-shared.chunk-CzQ5JF2O.js"},{"revision":null,"url":"assets/stateDiagram-v2-MP3YSRHH-UMuzQhZ7.js"},{"revision":null,"url":"assets/stateDiagram-D77RDMKH-Dsv4fQ8Y.js"},{"revision":null,"url":"assets/src-CllyRBe0.js"},{"revision":null,"url":"assets/socket-hM4c-ZSl.js"},{"revision":null,"url":"assets/sl-SI-NN7IZMDC-DFJxhRNE.js"},{"revision":null,"url":"assets/sk-SK-C5VTKIMK-NlHjiedH.js"},{"revision":null,"url":"assets/sizeCapture-INFHLROL-B0uUizjq.js"},{"revision":null,"url":"assets/si-LK-N5RQ5JYF-ROLYABqx.js"},{"revision":null,"url":"assets/sha256-Cs35JyRg.js"},{"revision":null,"url":"assets/sequenceDiagram-WJ2MYXX4-Dyn971wT.js"},{"revision":null,"url":"assets/search-COMZIxA7.js"},{"revision":null,"url":"assets/sankeyDiagram-P5KCCOFB-CBdZpflq.js"},{"revision":null,"url":"assets/sanitize-DrVcFY1Q.js"},{"revision":null,"url":"assets/ru-RU-B4JR7IUQ-n637KE87.js"},{"revision":null,"url":"assets/roundRect-D01gJrlt.js"},{"revision":null,"url":"assets/rough.esm-Dy-Kn_BL.js"},{"revision":null,"url":"assets/rolldown-runtime-C0FnF6B9.js"},{"revision":null,"url":"assets/ro-RO-JPDTUUEW-BqxNXAVP.js"},{"revision":null,"url":"assets/requirementDiagram-BXWQKSXE-S99ev3k7.js"},{"revision":null,"url":"assets/react-BzqgEMSQ.js"},{"revision":null,"url":"assets/railroadDiagram-O6MQD6OU-Cjw_zMBC.js"},{"revision":null,"url":"assets/railroad-peg-WCYAUIDC-BQiIsX_p.js"},{"revision":null,"url":"assets/railroad-ebnf-LZEXJU2U-V0aQVv9m.js"},{"revision":null,"url":"assets/railroad-abnf-HS5TGJTU-Cq7y22IA.js"},{"revision":null,"url":"assets/railroad-74A4TZTK-CGtTWdGc.js"},{"revision":null,"url":"assets/radar-RG4KPBEZ-B6h6pWOs.js"},{"revision":null,"url":"assets/quadrantDiagram-AXDQQJYC-CAXFELe7.js"},{"revision":null,"url":"assets/punycode.es6-ZbLrB_Dn.js"},{"revision":null,"url":"assets/pt-PT-UZXXM6DQ-DXzHR8rJ.js"},{"revision":null,"url":"assets/pt-BR-5N22H2LF-CeODeunU.js"},{"revision":null,"url":"assets/preload-helper-Czpn1I53.js"},{"revision":null,"url":"assets/pl-PL-T2D74RX3-DgfcfsGT.js"},{"revision":null,"url":"assets/pieDiagram-E7YTZNPT-Cs2lygkh.js"},{"revision":null,"url":"assets/pie-WAS4IAKB-qxv01Y8W.js"},{"revision":null,"url":"assets/pica-XznpCgP2.js"},{"revision":null,"url":"assets/percentages-BXMCSKIN-BPGA3zHb.js"},{"revision":null,"url":"assets/pegDiagram-XKGWAZYB-DqjEkpXQ.js"},{"revision":null,"url":"assets/pdf.worker.min-C8Ts8bNu.js"},{"revision":null,"url":"assets/pdf-Ciz5_WNq.js"},{"revision":null,"url":"assets/path-fybaL0A-.js"},{"revision":null,"url":"assets/packet-AYTQ26CC-BSJEH9Lb.js"},{"revision":null,"url":"assets/pa-IN-N4M65BXN-wsiZwueU.js"},{"revision":null,"url":"assets/ordinal-BDEzSJ7C.js"},{"revision":null,"url":"assets/oc-FR-POXYY2M6-Cn1eE_Zu.js"},{"revision":null,"url":"assets/nn-NO-6E72VCQL-Dfy734xI.js"},{"revision":null,"url":"assets/nl-NL-IS3SIHDZ-C4-Hez0V.js"},{"revision":null,"url":"assets/nb-NO-T6EIAALU-BQeWbEx1.js"},{"revision":null,"url":"assets/my-MM-5M5IBNSE-BXTnMvRC.js"},{"revision":null,"url":"assets/mr-IN-CRQNXWMA-9iKXC6Ya.js"},{"revision":null,"url":"assets/mindmap-definition-YA3MSWOX-aAz9cEjj.js"},{"revision":null,"url":"assets/mermaid-parser.core-CN1hT9Tn.js"},{"revision":null,"url":"assets/markdown-it-DRESbtwK.js"},{"revision":null,"url":"assets/markdown-html-XoABNf32.js"},{"revision":null,"url":"assets/markdown-html-DtQ7-esK.css"},{"revision":null,"url":"assets/map-BxCwdK0d.js"},{"revision":null,"url":"assets/map-BcsP_QXj.css"},{"revision":null,"url":"assets/lv-LV-5QDEKY6T-BTnV-PCT.js"},{"revision":null,"url":"assets/lt-LT-XHIRWOB4-B6H0gZ-C.js"},{"revision":null,"url":"assets/linear-aVQWq3ZZ.js"},{"revision":null,"url":"assets/line-DXCbHsGS.js"},{"revision":null,"url":"assets/ku-TR-6OUDTVRD-Ky7FAdew.js"},{"revision":null,"url":"assets/ko-KR-MTYHY66A-BdMJRRpv.js"},{"revision":null,"url":"assets/km-KH-HSX4SM5Z-CaYVKl3D.js"},{"revision":null,"url":"assets/kk-KZ-P5N5QNE5-D52-yIxL.js"},{"revision":null,"url":"assets/katex-CXMH3UgJ.js"},{"revision":null,"url":"assets/kanban-definition-UXKFOSKX-BqkLgv78.js"},{"revision":null,"url":"assets/kab-KAB-ZGHBKWFO-BXYUMKRc.js"},{"revision":null,"url":"assets/kaa-6HZHGXH3-0hNa4m6s.js"},{"revision":null,"url":"assets/journeyDiagram-3NMN7TZE-CL9Lqe59.js"},{"revision":null,"url":"assets/ja-JP-DBVTYXUO-DSHejo8t.js"},{"revision":null,"url":"assets/it-IT-JPQ66NNP-D6FUHYuZ.js"},{"revision":null,"url":"assets/ishikawaDiagram-5VMMS53U-Hs60L6ow.js"},{"revision":null,"url":"assets/init-C-OQMol4.js"},{"revision":null,"url":"assets/infoDiagram-27XIBGKW-BuJx_j6a.js"},{"revision":null,"url":"assets/info-A6RAGUB7-BlU-8_xu.js"},{"revision":null,"url":"assets/index-DLTBUV0v.css"},{"revision":null,"url":"assets/index-D6IkQaIy.js"},{"revision":null,"url":"assets/image-blob-reduce.esm-Dj7YBvMv.js"},{"revision":null,"url":"assets/image-GAAHSSAO-BoD-NvEF.js"},{"revision":null,"url":"assets/id-ID-SAP4L64H-ZZuXM5fX.js"},{"revision":null,"url":"assets/icons-DTuc_pxj.js"},{"revision":null,"url":"assets/hu-HU-A5ZG7DT2-BBrlHtCw.js"},{"revision":null,"url":"assets/hi-IN-IWLTKZ5I-Dzr4DvnL.js"},{"revision":null,"url":"assets/he-IL-6SHJWFNN-9Ylp6ncb.js"},{"revision":null,"url":"assets/graphlib-DS17s2tU.js"},{"revision":null,"url":"assets/gl-ES-HMX3MZ6V-4bQs8jWL.js"},{"revision":null,"url":"assets/gitGraphDiagram-WWUBYQGX-D6Gfp0nt.js"},{"revision":null,"url":"assets/gitGraph-4MIJSDKK-DYlXv_yJ.js"},{"revision":null,"url":"assets/ganttDiagram-EL5Y4UJY-BKBiwfwb.js"},{"revision":null,"url":"assets/fr-FR-RHASNOE6-BH99frB1.js"},{"revision":null,"url":"assets/flowDiagram-HODETNUW-BrKzgeF8.js"},{"revision":null,"url":"assets/file-save-745eba88-Bwdfz6OZ.js"},{"revision":null,"url":"assets/file-save-3189631c-CO9S4HFW.js"},{"revision":null,"url":"assets/file-open-7c801643-DZtJT5zp.js"},{"revision":null,"url":"assets/file-open-002ab408-BHUWm0Sh.js"},{"revision":null,"url":"assets/fi-FI-Z5N7JZ37-DC3Y34Y8.js"},{"revision":null,"url":"assets/fa-IR-HGAKTJCU-ddIdgP13.js"},{"revision":null,"url":"assets/eventmodeling-NTZA5JFV-BR2FzK4R.js"},{"revision":null,"url":"assets/eu-ES-A7QVB2H4-CAoFumRj.js"},{"revision":null,"url":"assets/es-ES-U4NZUMDT-D_KzWrdW.js"},{"revision":null,"url":"assets/erDiagram-RLTQ6QDP-CL7FBspC.js"},{"revision":null,"url":"assets/en-B4ZKOASM-BClIFgbE.js"},{"revision":null,"url":"assets/el-GR-BZB4AONW-Chellj6d.js"},{"revision":null,"url":"assets/ebnfDiagram-PWID7BFC-B9wGidHs.js"},{"revision":null,"url":"assets/dist-zgyESmtJ.js"},{"revision":null,"url":"assets/dist-Cz2MTljl.js"},{"revision":null,"url":"assets/directory-open-4ed118d0-1i309Asm.js"},{"revision":null,"url":"assets/directory-open-01563666-D4xXyWb_.js"},{"revision":null,"url":"assets/diagram-Z3DM3KII-aAOMR4aJ.js"},{"revision":null,"url":"assets/diagram-VX7I27RA-D-UFFc5T.js"},{"revision":null,"url":"assets/diagram-VSXAHHWV-BR6t4bem.js"},{"revision":null,"url":"assets/diagram-UQ7AKVKN-CC4synlk.js"},{"revision":null,"url":"assets/diagram-S7CK7UJ4-BCYFjoge.js"},{"revision":null,"url":"assets/defaultLocale-BFoDCU3G.js"},{"revision":null,"url":"assets/de-DE-XR44H4JA-DNaOwkE9.js"},{"revision":null,"url":"assets/dagre-PrKaheQc.js"},{"revision":null,"url":"assets/dagre-GXQ25YYZ-DAaeOVEp.js"},{"revision":null,"url":"assets/da-DK-5WZEPLOC-D55fbhpB.js"},{"revision":null,"url":"assets/cytoscape.esm-CGd-uY3x.js"},{"revision":null,"url":"assets/cynefinDiagram-5FMLGOSQ-Bwsug0X5.js"},{"revision":null,"url":"assets/cynefin-OW5HDTMX-7tP7QfM3.js"},{"revision":null,"url":"assets/cs-CZ-2BRQDIVT-Bz62EbC5.js"},{"revision":null,"url":"assets/cose-bilkent-JH36ORCC-DIeJt_L_.js"},{"revision":null,"url":"assets/code-editor-BQnKd3jw.js"},{"revision":null,"url":"assets/classDiagram-v2-VYDZK3BY-DLpT76o5.js"},{"revision":null,"url":"assets/classDiagram-ZZMXUADV-DLpT76o5.js"},{"revision":null,"url":"assets/chunk-Z3N5DIM6-D9TMVU7m.js"},{"revision":null,"url":"assets/chunk-Y2CYZVJY-DsF7k-Jl.js"},{"revision":null,"url":"assets/chunk-XXDRQBXY-CazVBYiP.js"},{"revision":null,"url":"assets/chunk-XHIXRSVI-BFQ6B8BE.js"},{"revision":null,"url":"assets/chunk-UY3FDG6J-CnmaAkG5.js"},{"revision":null,"url":"assets/chunk-TLUHSLCS-C47Epi2D.js"},{"revision":null,"url":"assets/chunk-TICWLB2K-jXepk-qW.js"},{"revision":null,"url":"assets/chunk-SVP7TREG-CoPu3EjZ.js"},{"revision":null,"url":"assets/chunk-SRAX5OIU-Dhm3gOdh.js"},{"revision":null,"url":"assets/chunk-SHT3W25Y-75CQ5pWa.js"},{"revision":null,"url":"assets/chunk-PWAF6VOD-DPI_wv9p.js"},{"revision":null,"url":"assets/chunk-POPQ4Y6H-B7yAy58S.js"},{"revision":null,"url":"assets/chunk-P2QGCYS3-DsGP3wH9.js"},{"revision":null,"url":"assets/chunk-OUJLGHUK-D0j2JRSg.js"},{"revision":null,"url":"assets/chunk-OSK3NFVY-fNjfug78.js"},{"revision":null,"url":"assets/chunk-LNGE3PJU-DWpGwHrW.js"},{"revision":null,"url":"assets/chunk-L3NEJ4N5-Cl0-d4Gu.js"},{"revision":null,"url":"assets/chunk-KI3K4JFJ-Rma-0k_M.js"},{"revision":null,"url":"assets/chunk-K2UTITRG-zQFDOW3Q.js"},{"revision":null,"url":"assets/chunk-JWPE2WC7-DVXcaiue.js"},{"revision":null,"url":"assets/chunk-IMKFNOWR-BuKGugNz.js"},{"revision":null,"url":"assets/chunk-IH6LHLGP-CC6I9F3i.js"},{"revision":null,"url":"assets/chunk-ICYGCRZG-749o-pGJ.js"},{"revision":null,"url":"assets/chunk-I5DQTOEV-Hm2LfiYI.js"},{"revision":null,"url":"assets/chunk-GVQU2GXP-BMi2Lqv6.js"},{"revision":null,"url":"assets/chunk-GMAD6QVW-tEmtNh72.js"},{"revision":null,"url":"assets/chunk-FOHPRMQF-DHwB1DNv.js"},{"revision":null,"url":"assets/chunk-F27PBJKO-B8_NVNfE.js"},{"revision":null,"url":"assets/chunk-EIO257PC-CAhBf1ig.js"},{"revision":null,"url":"assets/chunk-DU6HZSFF-BlZbyIL6.js"},{"revision":null,"url":"assets/chunk-CLGD4ZFX-BzBIdJij.js"},{"revision":null,"url":"assets/chunk-75Z2AOVW-CzSd0Veu.js"},{"revision":null,"url":"assets/chunk-747NJXEK-BFkZPlab.js"},{"revision":null,"url":"assets/chunk-6U3AYISY-C6-Mtja1.js"},{"revision":null,"url":"assets/chunk-6TQVIW2G-DKlLbNIP.js"},{"revision":null,"url":"assets/chunk-6K3QC6MW-CqVsVn-y.js"},{"revision":null,"url":"assets/chunk-6EIED4P4-DdUJkP0f.js"},{"revision":null,"url":"assets/chunk-6AZGARVD-BB6FqMl-.js"},{"revision":null,"url":"assets/chunk-5VM5RSS4-ZNzvKenW.js"},{"revision":null,"url":"assets/chunk-5V3GS4D5-i-ZDOEnP.js"},{"revision":null,"url":"assets/chunk-4HAMMTFA-DwG4o-7o.js"},{"revision":null,"url":"assets/chunk-3Z5EZCMW-DMniOlPd.js"},{"revision":null,"url":"assets/chunk-2ZTRR5NV-C2qZJila.js"},{"revision":null,"url":"assets/chunk-2Q5K7J3B-C1jixKkw.js"},{"revision":null,"url":"assets/chunk-2E4U76K2-BX8JWCIb.js"},{"revision":null,"url":"assets/channel-DbE-WRyM.js"},{"revision":null,"url":"assets/ca-ES-6MX7JW3Y-QAg3jm2p.js"},{"revision":null,"url":"assets/c4Diagram-7LVT6UL2-aDTW23RC.js"},{"revision":null,"url":"assets/bn-BD-2XOGV67Q-KCzfC93t.js"},{"revision":null,"url":"assets/blockDiagram-I7D4REHJ-DJlTH4XU.js"},{"revision":null,"url":"assets/blobs-B3DY8Rsp.js"},{"revision":null,"url":"assets/bg-BG-XCXSNQG7-DFFjBv03.js"},{"revision":null,"url":"assets/az-AZ-76LH7QW2-8v0TczD5.js"},{"revision":null,"url":"assets/array-BifhSqXX.js"},{"revision":null,"url":"assets/architectureDiagram-5GKGNRK7-2gVOlDi3.js"},{"revision":null,"url":"assets/architecture-7GRP2DOG-BMOPAkUC.js"},{"revision":null,"url":"assets/arc-SXJSVd7o.js"},{"revision":null,"url":"assets/ar-SA-G6X2FPQ2-BJ7kJfgn.js"},{"revision":null,"url":"assets/alert-dialog-CDKOX-MP.js"},{"revision":null,"url":"assets/abnfDiagram-VCTEODGH-Cy_5vShZ.js"},{"revision":null,"url":"assets/TextDocumentEditor-BF5NzQ6H.js"},{"revision":null,"url":"assets/SketchEditor-DtRVLazd.css"},{"revision":null,"url":"assets/SketchEditor-CWpixOog.js"},{"revision":null,"url":"assets/NextShell-DNv3mVFo.js"},{"revision":null,"url":"assets/NextShell-BT6-_CFY.css"},{"revision":null,"url":"assets/MarkdownEditor-DWa37grk.css"},{"revision":null,"url":"assets/MarkdownEditor-By8nDUtG.js"},{"revision":null,"url":"assets/LocationTab-BONJQfYM.js"},{"revision":null,"url":"assets/EditorOverlay-DqlaCJe7.js"},{"revision":"1c314d3790ee0733defb3e75079ba8d9","url":"images/android-chrome-512x512.png"},{"revision":"bc4e038a89ae062004dd9ff297bba3f5","url":"images/logo_1024x1024.png"},{"revision":"6f763ad15fbd8e2e93893c0d98a9905d","url":"images/logo_128x128.png"},{"revision":"d6363d0e5249f161c4b7d78045a210e5","url":"images/logo_256x256.png"},{"revision":"1c314d3790ee0733defb3e75079ba8d9","url":"images/logo_512x512.png"},{"revision":"d0c188df2432c882c53e561e64cd29a2","url":"images/logo_64x64.png"},{"revision":"caa9715e027d2757550109f1f9653d7c","url":"manifest.webmanifest"}]),self.addEventListener(`message`,e=>{e.data&&e.data.type===`SKIP_WAITING`&&self.skipWaiting()}),self.addEventListener(`activate`,e=>{e.waitUntil(Promise.all([self.clients.claim(),Ee()]))});var be=864e5,Y=/^\/rest\/v2\/workspaces\/[^/]+\/documents\/[^/]+\/(content|thumbnail)$/,xe=/^\/rest\/v2\/(auth|admin|ping|events)\b/,X=null;async function Z(){if(X&&Date.now()-X.at<1e4)return X.value;let e=await _e().catch(()=>({enabled:!1,budgetBytes:0,excludedWorkspaces:[]}));return X={at:Date.now(),value:e},e}function Q(e,t){let n=F(t);return n!==null&&e.excludedWorkspaces.includes(n)}self.addEventListener(`message`,e=>{e.data&&e.data.type===`OFFLINE_SETTINGS_CHANGED`&&(X=null)}),self.addEventListener(`fetch`,e=>{let{request:t}=e,n=new URL(t.url);if(t.method===`POST`&&n.pathname===`/share-target`){e.respondWith(Te(e));return}if(t.method===`GET`&&n.origin===self.location.origin&&n.pathname.startsWith(`/rest/v2/`)){if(Y.test(n.pathname)&&!n.searchParams.has(`download`)&&!t.headers.has(`range`)){e.respondWith(Se(e,t));return}if(!xe.test(n.pathname)&&!Y.test(n.pathname)){e.respondWith(Ce(e,t));return}}t.mode===`navigate`&&!$(n.pathname)&&e.respondWith(we(t))});function $(e){return e.startsWith(`/rest/`)||e.startsWith(`/dav/`)||e.startsWith(`/.well-known/`)}async function Se(e,t){let n=await Z();if(!n.enabled||Q(n,new URL(t.url).pathname))return fetch(t);let r=await caches.open(M),i=await r.match(t.url,{ignoreVary:!0});if(i)return e.waitUntil(J(t.url).catch(()=>{})),i;let a=await fetch(t);if(a.ok&&a.status===200){let i=a.clone();e.waitUntil((async()=>{try{await r.put(t.url,i);let e=Number(a.headers.get(`content-length`))||(await(await r.match(t.url))?.blob())?.size||0;await K(t.url,`content`,e),await ye(n.budgetBytes)}catch(e){console.warn(`[sw] offline content cache put failed`,e)}})())}return a}async function Ce(e,t){let n=await Z();if(!n.enabled||Q(n,new URL(t.url).pathname))return fetch(t);try{let n=await fetch(t);if(n.ok&&n.status===200){let r=n.clone();e.waitUntil((async()=>{try{await(await caches.open(N)).put(t.url,r),await K(t.url,`api`,Number(n.headers.get(`content-length`))||0)}catch(e){console.warn(`[sw] offline api cache put failed`,e)}})())}return n}catch(n){let r=await(await caches.open(N)).match(t.url,{ignoreVary:!0});if(r){e.waitUntil(J(t.url).catch(()=>{}));let n=new Headers(r.headers);return n.set(`X-Canvas-Offline`,`fallback`),new Response(r.body,{status:r.status,statusText:r.statusText,headers:n})}throw n}}async function we(e){try{return await fetch(e)}catch{let e=await k(`/index.html`);if(e)return e;throw Error(`offline and index.html is not precached`)}}function Te(n){let r=crypto.randomUUID();return caches.open(e).then(async e=>(await e.put(`/share-target-inbox/${r}/meta`,new Response(JSON.stringify({status:`receiving`,stashedAt:Date.now()}))),e)).then(e=>t(n.request,r,e)).then(()=>Response.redirect(new URL(`/share-target?token=${r}`,self.location.origin).href,303),()=>Response.redirect(new URL(`/share-target?error=stash-failed`,self.location.origin).href,303))}async function Ee(){try{if(!await caches.has(`share-target-inbox`))return;let t=await caches.open(e),n=await t.keys(),r=new Set;for(let e of n){let{pathname:n}=new URL(e.url);if(!n.endsWith(`/meta`))continue;let i=n.split(`/`)[2];if(!i)continue;let a=0;try{let n=await t.match(e);a=n?Number((await n.json()).stashedAt??0):0}catch{}(!a||Date.now()-a>be)&&r.add(i)}await Promise.all(n.filter(e=>r.has(new URL(e.url).pathname.split(`/`)[2])).map(e=>t.delete(e)))}catch(e){console.error(`[sw] share inbox prune failed`,e)}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@augmentd-labs/canvas-web",
3
- "version": "2.26.5",
3
+ "version": "2.26.6",
4
4
  "description": "Canvas web UI (prebuilt dist)",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "author": "Jozef Melich <me@idnc.sk>",
@@ -12,5 +12,5 @@
12
12
  "dist",
13
13
  "NOTICE"
14
14
  ],
15
- "canvasRev": "676e943"
15
+ "canvasRev": "745d5db"
16
16
  }