@augmentd-labs/canvas-web 2.15.1 → 2.15.3

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-d5fDtPv3.js","assets/rolldown-runtime-C0FnF6B9.js","assets/react-DQazvoR7.js","assets/sanitize-DrVcFY1Q.js","assets/markdown-it-DRESbtwK.js","assets/punycode.es6-ZbLrB_Dn.js","assets/markdown-html-T86c6cqD.css","assets/SketchEditor-is1gZR43.js","assets/ui-BX_B5WCf.js","assets/utils-BxVxyehK.js","assets/workspace-BnBIVxoH.js","assets/utils-2pl1SbIp.js","assets/blobs-bUMClq1N.js","assets/sha256-CshnEcuy.js","assets/chunk-K2UTITRG-D0fgw4vC.js","assets/chunk-SRAX5OIU-Dhm3gOdh.js","assets/chunk-6U3AYISY-C6-Mtja1.js","assets/chunk-Z3N5DIM6-D9TMVU7m.js","assets/EditorOverlay-B3kjuXI-.js","assets/SketchEditor-DtRVLazd.css","assets/TextDocumentEditor-DY5_c0Gi.js","assets/text-documents-seImmPVm.js","assets/LocationTab-ARqmeXmv.js","assets/map-BxCwdK0d.js","assets/map-BcsP_QXj.css","assets/NextShell-DtAkokWD.js","assets/NextShell-B4NeoNB5.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{Ct as a,St as o,_t as s,bt as c,st as l,vt as u,wt as d,xt as f,yt as p}from"./react-DQazvoR7.js";import{t as m}from"./preload-helper-Czpn1I53.js";import{$ as h,$n as g,$r as _,$t as v,An as y,Ar as b,At as x,B as S,Bn as C,Br as w,Bt as T,C as E,Cn as D,Cr as O,Ct as k,Dn as A,Dr as j,Dt as M,En as N,Er as P,Et as F,F as I,Fn as L,Fr as ee,Ft as te,G as ne,Gn as R,Gr as z,Gt as B,H as re,Hn as ie,Hr as ae,Ht as oe,I as se,Ir as ce,It as V,J as le,Jn as ue,Jr as de,Jt as fe,K as pe,Kn as me,Kr as he,Kt as ge,L as _e,Lr as ve,Lt as ye,Mn as be,Mr as xe,Mt as H,Nn as Se,Nr as Ce,Nt as we,On as U,Or as W,Ot 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,T 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,dn as Nt,dr as Pt,dt as Ft,ei as It,en as Lt,er as Rt,et as zt,f as Bt,fi 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,mr as _n,mt as vn,ni as yn,nn as bn,nr as xn,nt as Sn,oi as Cn,on as wn,or as Tn,ot as En,p as Dn,pi as On,pn as kn,pr as An,pt as jn,q as Mn,qn as Nn,qr as Pn,qt as Fn,rn as In,rr as Ln,rt as Rn,si as zn,sn as Bn,sr as Vn,st as Hn,ti 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,vi as $n,vn as er,vr as tr,vt as nr,w as rr,wn as ir,wr as ar,wt as or,x as sr,xn as cr,xr as lr,xt as ur,y as dr,yn as fr,yr as pr,yt as mr,z as hr,zn as gr,zr as _r,zt as vr}from"./ui-BX_B5WCf.js";import{i as yr,n as br,r as xr}from"./utils-BxVxyehK.js";import{n as Sr,t as G}from"./utils-2pl1SbIp.js";import{$ as Cr,$t as wr,A as Tr,An as Er,At as Dr,B as Or,Bt as kr,C as Ar,Cn as jr,Ct as Mr,D as Nr,Dn as Pr,Dt as Fr,E as Ir,En as Lr,Et as Rr,F as zr,Fn as K,Ft as Br,G as Vr,H as Hr,Ht as Ur,I as Wr,In as q,It as Gr,J as Kr,Jt as qr,K as Jr,Kt as Yr,L as Xr,Lt as Zr,M as Qr,Mn as $r,Mt as ei,N as ti,Nn as ni,Nt as ri,O as ii,On as ai,Ot as oi,P as si,Pn as ci,Pt as li,Q as ui,Qt as di,R as fi,Rt as pi,S as mi,Sn as hi,St as gi,T as _i,Tn as J,Tt as vi,U as yi,Ut as bi,V as xi,Vt as Si,W as Ci,Wt as wi,X as Ti,Xt as Ei,Y as Di,Yt as Oi,Z as ki,Zt as Ai,_ as ji,_n as Mi,_t as Ni,a as Pi,an as Fi,at as Ii,b as Li,bn as Ri,bt as zi,c as Bi,cn as Vi,ct as Hi,d as Ui,dn as Wi,dt as Gi,en as Ki,et as qi,f as Ji,fn as Yi,ft as Xi,g as Zi,gn as Qi,gt as $i,h as ea,hn as ta,ht as na,i as ra,in as ia,it as aa,jn as oa,jt as sa,k as ca,kn as la,kt as ua,l as da,ln as fa,lt as pa,m as ma,mn as ha,mt as ga,n as _a,nn as va,nt as ya,o as ba,on as xa,ot as Sa,p as Ca,pn as wa,pt as Ta,q as Ea,qt as Da,r as Oa,rn as ka,rt as Aa,s as ja,sn as Ma,st as Na,t as Pa,tn as Fa,tt as Ia,u as La,un as Ra,ut as za,v as Ba,vn as Va,vt as Ha,w as Ua,wn as Wa,wt as Ga,x as Ka,xn as qa,xt as Ja,y as Ya,yn as Xa,yt as Za,z as Qa,zt as $a}from"./workspace-BnBIVxoH.js";import{t as eo}from"./socket-hM4c-ZSl.js";import{_ as to,f as no,g as ro,h as io,i as ao,m as oo,n as so,o as co,s as lo,t as uo,u as fo,v as po,y as mo}from"./blobs-bUMClq1N.js";import{_ as ho,a as go,c as _o,d as vo,f as yo,g as bo,h as xo,i as So,l as Co,m as wo,n as To,o as Eo,p as Do,r as Oo,s as ko,t as Ao,u as jo,v as Mo}from"./text-documents-seImmPVm.js";import{n as No,t as Po}from"./map-BxCwdK0d.js";import{t as Fo}from"./search-COMZIxA7.js";import{A as Io,B as Lo,C as Ro,D as zo,E as Bo,F as Vo,H as Ho,I as Uo,L as Wo,M as Go,N as Ko,O as qo,P as Jo,R as Yo,S as Xo,T as Zo,V as Qo,_ as $o,a as es,b as ts,c as ns,d as rs,f as is,g as as,h as os,i as ss,j as cs,k as ls,l as us,m as ds,o as fs,p as ps,r as ms,s as hs,t as gs,u as _s,v as vs,w as ys,x as bs,y as xs,z as Ss}from"./sha256-CshnEcuy.js";import{t as Cs}from"./sanitize-DrVcFY1Q.js";import{t as ws}from"./markdown-it-DRESbtwK.js";import{n as Ts,t as Es}from"./use-theme-pnVLU4Kg.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 Y=n(d(),1),Ds=o(),Os=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,ks=/^[\\/]{2}/;function As(e,t){return t+e.replace(/\\/g,`/`)}var js=(e=>(e.Pop=`POP`,e.Push=`PUSH`,e.Replace=`REPLACE`,e))(js||{}),Ms=`popstate`;function Ns(e){return typeof e==`object`&&!!e&&`pathname`in e&&`search`in e&&`hash`in e&&`state`in e&&`key`in e}function Ps(e={}){function t(e,t){let n=t.state?.masked,{pathname:r,search:i,hash:a}=n||e.location;return zs(``,{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:Bs(t)}return Hs(t,n,null,e)}function Fs(e,t){if(e===!1||e==null)throw Error(t)}function Is(e,t){if(!e){typeof console<`u`&&console.warn(t);try{throw Error(t)}catch{}}}function Ls(){return Math.random().toString(36).substring(2,10)}function Rs(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 zs(e,t,n=null,r,i){return{pathname:typeof e==`string`?e:e.pathname,search:``,hash:``,...typeof t==`string`?Vs(t):t,state:n,key:t&&t.key||r||Ls(),mask:i}}function Bs({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 Vs(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 Hs(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=Ns(e)?e:zs(h.location,e,t);n&&n(r,e),l=u()+1;let d=Rs(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=Ns(e)?e:zs(h.location,e,t);n&&n(r,e),l=u();let i=Rs(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 Us(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(Ms,d),c=e,()=>{i.removeEventListener(Ms,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 Us(e,t,n=!1){let r=`http://localhost`;e&&(r=e.location.origin===`null`?e.location.href:e.location.origin),Fs(r,`No window.location.(origin|href) available to create URL`);let i=typeof t==`string`?t:Bs(t);return i=i.replace(/ $/,`%20`),!n&&ks.test(i)&&(i=r+i),new URL(i,r)}function Ws(e,t,n=`/`){return Gs(e,t,n,!1)}function Gs(e,t,n,r,i){let a=uc((typeof t==`string`?Vs(t):t).pathname||`/`,n);if(a==null)return null;let o=i??Ks(e),s=null,c=lc(a);for(let e=0;s==null&&e<o.length;++e)s=ac(o[e],c,r);return s}function Ks(e){let t=qs(e);return Ys(t),t}function qs(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;Fs(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=vc([r,c.relativePath]),u=n.concat(c);e.children&&e.children.length>0&&(Fs(e.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${l}".`),qs(e.children,t,u,l,o)),!(e.path==null&&!e.index)&&t.push({path:l,score:rc(l,e.index),routesMeta:u.map((e,t)=>{let[n,r]=cc(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 Js(e.path))a(e,t,!0,n)}),t}function Js(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=Js(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 Ys(e){e.sort((e,t)=>e.score===t.score?ic(e.routesMeta.map(e=>e.childrenIndex),t.routesMeta.map(e=>e.childrenIndex)):t.score-e.score)}var Xs=/^:[\w-]+$/,Zs=3,Qs=2,$s=1,ec=10,tc=-2,nc=e=>e===`*`;function rc(e,t){let n=e.split(`/`),r=n.length;return n.some(nc)&&(r+=tc),t&&(r+=Qs),n.filter(e=>!nc(e)).reduce((e,t)=>e+(Xs.test(t)?Zs:t===``?$s:ec),r)}function ic(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 ac(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?sc(u,l,s.matcher,s.compiledParams):oc(u,l),f=s.route;if(!d&&c&&n&&!r[r.length-1].route.index&&(d=oc({path:s.relativePath,caseSensitive:s.caseSensitive,end:!1},l)),!d)return null;Object.assign(i,d.params),o.push({params:i,pathname:vc([a,d.pathname]),pathnameBase:bc(vc([a,d.pathnameBase])),route:f}),d.pathnameBase!==`/`&&(a=vc([a,d.pathnameBase]))}return o}function oc(e,t){typeof e==`string`&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=cc(e.path,e.caseSensitive,e.end);return sc(e,t,n,r)}function sc(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 cc(e,t=!1,n=!0){Is(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 lc(e){try{return e.split(`/`).map(e=>decodeURIComponent(e).replace(/\//g,`%2F`)).join(`/`)}catch(t){return Is(!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 uc(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 dc(e,t=`/`){let{pathname:n,search:r=``,hash:i=``}=typeof e==`string`?Vs(e):e,a;return n?(n=_c(n),a=n.startsWith(`/`)?fc(n.substring(1),`/`):fc(n,t)):a=t,{pathname:a,search:xc(r),hash:Sc(i)}}function fc(e,t){let n=yc(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 mc(e){return e.filter((e,t)=>t===0||e.route.path&&e.route.path.length>0)}function hc(e){let t=mc(e);return t.map((e,n)=>n===t.length-1?e.pathname:e.pathnameBase)}function gc(e,t,n,r=!1){let i;typeof e==`string`?i=Vs(e):(i={...e},Fs(!i.pathname||!i.pathname.includes(`?`),pc(`?`,`pathname`,`search`,i)),Fs(!i.pathname||!i.pathname.includes(`#`),pc(`#`,`pathname`,`hash`,i)),Fs(!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=dc(i,s),l=o&&o!==`/`&&o.endsWith(`/`),u=(a||o===`.`)&&n.endsWith(`/`);return!c.pathname.endsWith(`/`)&&(l||u)&&(c.pathname+=`/`),c}var _c=e=>e.replace(/[\\/]{2,}/g,`/`),vc=e=>_c(e.join(`/`)),yc=e=>e.replace(/\/+$/,``),bc=e=>yc(e).replace(/^\/*/,`/`),xc=e=>!e||e===`?`?``:e.startsWith(`?`)?e:`?`+e,Sc=e=>!e||e===`#`?``:e.startsWith(`#`)?e:`#`+e,Cc=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 wc(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.internal==`boolean`&&`data`in e}function Tc(e){return vc(e.map(e=>e.route.path).filter(Boolean))||`/`}var Ec=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function Dc(e,t){let n=e;if(typeof n!=`string`||!Os.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,i=!1;if(Ec)try{let e=new URL(window.location.href),r=ks.test(n)?new URL(As(n,e.protocol)):new URL(n),a=uc(r.pathname,t);r.origin===e.origin&&a!=null?n=a+r.search+r.hash:i=!0}catch{Is(!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 Oc=[`POST`,`PUT`,`PATCH`,`DELETE`];new Set(Oc);var kc=[`GET`,...Oc];new Set(kc);var Ac=[`about:`,`blob:`,`chrome:`,`chrome-untrusted:`,`content:`,`data:`,`devtools:`,`file:`,`filesystem:`,`javascript:`];function jc(e){try{return Ac.includes(new URL(e).protocol)}catch{return!1}}var Mc=Y.createContext(null);Mc.displayName=`DataRouter`;var Nc=Y.createContext(null);Nc.displayName=`DataRouterState`;var Pc=Y.createContext(!1);function Fc(){return Y.useContext(Pc)}var Ic=Y.createContext({isTransitioning:!1});Ic.displayName=`ViewTransition`;var Lc=Y.createContext(new Map);Lc.displayName=`Fetchers`;var Rc=Y.createContext(null);Rc.displayName=`Await`;var zc=Y.createContext(null);zc.displayName=`Navigation`;var Bc=Y.createContext(null);Bc.displayName=`Location`;var Vc=Y.createContext({outlet:null,matches:[],isDataRoute:!1});Vc.displayName=`Route`;var Hc=Y.createContext(null);Hc.displayName=`RouteError`;var Uc=`REACT_ROUTER_ERROR`,Wc=`REDIRECT`,Gc=`ROUTE_ERROR_RESPONSE`;function Kc(e){if(e.startsWith(`${Uc}:${Wc}:{`))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 qc(e){if(e.startsWith(`${Uc}:${Gc}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`)return new Cc(t.status,t.statusText,t.data)}catch{}}function Jc(e,{relative:t}={}){Fs(Yc(),`useHref() may be used only in the context of a <Router> component.`);let{basename:n,navigator:r}=Y.useContext(zc),{hash:i,pathname:a,search:o}=il(e,{relative:t}),s=a;return n!==`/`&&(s=a===`/`?n:vc([n,a])),r.createHref({pathname:s,search:o,hash:i})}function Yc(){return Y.useContext(Bc)!=null}function Xc(){return Fs(Yc(),`useLocation() may be used only in the context of a <Router> component.`),Y.useContext(Bc).location}var Zc=`You should call navigate() in a React.useEffect(), not when your component is first rendered.`;function Qc(e){Y.useContext(zc).static||Y.useLayoutEffect(e)}function $c(){let{isDataRoute:e}=Y.useContext(Vc);return e?xl():el()}function el(){Fs(Yc(),`useNavigate() may be used only in the context of a <Router> component.`);let e=Y.useContext(Mc),{basename:t,navigator:n}=Y.useContext(zc),{matches:r}=Y.useContext(Vc),{pathname:i}=Xc(),a=JSON.stringify(hc(r)),o=Y.useRef(!1);return Qc(()=>{o.current=!0}),Y.useCallback((r,s={})=>{if(Is(o.current,Zc),!o.current)return;if(typeof r==`number`){n.go(r);return}let c=gc(r,JSON.parse(a),i,s.relative===`path`);e==null&&t!==`/`&&(c.pathname=c.pathname===`/`?t:vc([t,c.pathname])),(s.replace?n.replace:n.push)(c,s.state,s)},[t,n,a,i,e])}var tl=Y.createContext(null);function nl(e){let t=Y.useContext(Vc).outlet;return Y.useMemo(()=>t&&Y.createElement(tl.Provider,{value:e},t),[t,e])}function rl(){let{matches:e}=Y.useContext(Vc);return e[e.length-1]?.params??{}}function il(e,{relative:t}={}){let{matches:n}=Y.useContext(Vc),{pathname:r}=Xc(),i=JSON.stringify(hc(n));return Y.useMemo(()=>gc(e,JSON.parse(i),r,t===`path`),[e,i,r,t])}function al(e,t){return ol(e,t)}function ol(e,t,n){Fs(Yc(),`useRoutes() may be used only in the context of a <Router> component.`);let{navigator:r}=Y.useContext(zc),{matches:i}=Y.useContext(Vc),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||``;Cl(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=Xc(),d;if(t){let e=typeof t==`string`?Vs(t):t;Fs(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})):Ws(e,{pathname:p});Is(l||m!=null,`No routes matched location "${d.pathname}${d.search}${d.hash}" `),Is(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:vc([c,r.encodeLocation?r.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?c:vc([c,r.encodeLocation?r.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),i,n);return t&&h?Y.createElement(Bc.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...d},navigationType:`POP`}},h):h}function sl(){let e=bl(),t=wc(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=Y.createElement(Y.Fragment,null,Y.createElement(`p`,null,`💿 Hey developer 👋`),Y.createElement(`p`,null,`You can provide a way better UX than this when your app throws errors by providing your own `,Y.createElement(`code`,{style:a},`ErrorBoundary`),` or`,` `,Y.createElement(`code`,{style:a},`errorElement`),` prop on your route.`)),Y.createElement(Y.Fragment,null,Y.createElement(`h2`,null,`Unexpected Application Error!`),Y.createElement(`h3`,{style:{fontStyle:`italic`}},t),n?Y.createElement(`pre`,{style:i},n):null,o)}var cl=Y.createElement(sl,null),ll=class extends Y.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=qc(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:Y.createElement(Vc.Provider,{value:this.props.routeContext},Y.createElement(Hc.Provider,{value:e,children:this.props.component}));return this.context?Y.createElement(dl,{error:e},t):t}};ll.contextType=Pc;var ul=new WeakMap;function dl({children:e,error:t}){let{basename:n}=Y.useContext(zc);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=Kc(t.digest);if(e){let r=ul.get(t);if(r)throw r;let i=Dc(e.location,n),a=i.absoluteURL||i.to;if(jc(a))throw Error(`Invalid redirect location`);if(Ec&&!ul.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 ul.set(t,n),n}}return Y.createElement(`meta`,{httpEquiv:`refresh`,content:`0;url=${a}`})}}return e}function fl({routeContext:e,match:t,children:n}){let r=Y.useContext(Mc);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),Y.createElement(Vc.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);Fs(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:Tc(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||cl,o&&(s<0&&c===0?(Cl(`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?Y.createElement(n.route.Component,null):n.route.element?n.route.element:e,Y.createElement(fl,{match:n,routeContext:{outlet:e,matches:m,isDataRoute:r!=null},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||c===0)?Y.createElement(ll,{location:r.location,revalidation:r.revalidation,component:f,error:u,children:h(),routeContext:{outlet:null,matches:m,isDataRoute:!0},onError:l}):h()},null)}function ml(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function hl(e){let t=Y.useContext(Mc);return Fs(t,ml(e)),t}function gl(e){let t=Y.useContext(Nc);return Fs(t,ml(e)),t}function _l(e){let t=Y.useContext(Vc);return Fs(t,ml(e)),t}function vl(e){let t=_l(e),n=t.matches[t.matches.length-1];return Fs(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function yl(){return vl(`useRouteId`)}function bl(){let e=Y.useContext(Hc),t=gl(`useRouteError`),n=vl(`useRouteError`);return e===void 0?t.errors?.[n]:e}function xl(){let{router:e}=hl(`useNavigate`),t=vl(`useNavigate`),n=Y.useRef(!1);return Qc(()=>{n.current=!0}),Y.useCallback(async(r,i={})=>{Is(n.current,Zc),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var Sl={};function Cl(e,t,n){!t&&!Sl[e]&&(Sl[e]=!0,Is(!1,n))}Y.memo(wl);function wl({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return ol(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function Tl({to:e,replace:t,state:n,relative:r}){Fs(Yc(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:i}=Y.useContext(zc);Is(!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}=Y.useContext(Vc),{pathname:o}=Xc(),s=$c(),c=gc(e,hc(a),o,r===`path`),l=JSON.stringify(c);return Y.useEffect(()=>{s(JSON.parse(l),{replace:t,state:n,relative:r})},[s,l,r,t,n]),null}function El(e){return nl(e.context)}function Dl(e){Fs(!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 Ol({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:a=!1,useTransitions:o}){Fs(!Yc(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let s=e.replace(/^\/*/,`/`),c=Y.useMemo(()=>({basename:s,navigator:i,static:a,useTransitions:o,future:{}}),[s,i,a,o]);typeof n==`string`&&(n=Vs(n));let{pathname:l=`/`,search:u=``,hash:d=``,state:f=null,key:p=`default`,mask:m}=n,h=Y.useMemo(()=>{let e=uc(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 Is(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:Y.createElement(zc.Provider,{value:c},Y.createElement(Bc.Provider,{children:t,value:h}))}function kl({children:e,location:t}){return al(Al(e),t)}Y.Component;function Al(e,t=[]){let n=[];return Y.Children.forEach(e,(e,r)=>{if(!Y.isValidElement(e))return;let i=[...t,r];if(e.type===Y.Fragment){n.push.apply(n,Al(e.props.children,i));return}Fs(e.type===Dl,`[${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>`),Fs(!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=Al(e.props.children,i)),n.push(a)}),n}var jl=`get`,Ml=`application/x-www-form-urlencoded`;function Nl(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function Pl(e){return Nl(e)&&e.tagName.toLowerCase()===`button`}function Fl(e){return Nl(e)&&e.tagName.toLowerCase()===`form`}function Il(e){return Nl(e)&&e.tagName.toLowerCase()===`input`}function Ll(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Rl(e,t){return e.button===0&&(!t||t===`_self`)&&!Ll(e)}function zl(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 Bl(e,t){let n=zl(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var Vl=null;function Hl(){if(Vl===null)try{new FormData(document.createElement(`form`),0),Vl=!1}catch{Vl=!0}return Vl}var Ul=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function Wl(e){return e!=null&&!Ul.has(e)?(Is(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${Ml}"`),null):e}function Gl(e,t){let n,r,i,a,o;if(Fl(e)){let o=e.getAttribute(`action`);r=o?uc(o,t):null,n=e.getAttribute(`method`)||jl,i=Wl(e.getAttribute(`enctype`))||Ml,a=new FormData(e)}else if(Pl(e)||Il(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?uc(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||jl,i=Wl(e.getAttribute(`formenctype`))||Wl(o.getAttribute(`enctype`))||Ml,a=new FormData(o,e),!Hl()){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(Nl(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=jl,r=null,i=Ml,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 Kl(e,t){if(e===!1||e==null)throw Error(t)}function ql(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&&uc(i.pathname,t)===`/`?`${yc(t)}/_root.${r}`:`${yc(i.pathname)}.${r}`,i}async function Jl(e,t){if(e.id in t)return t[e.id];try{let n=await m(()=>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 Yl(e){return e!=null&&typeof e.page==`string`}function Xl(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 Zl(e,t,n){return nu((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await Jl(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(Xl).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function Ql(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 $l(e,t,{includeHydrateFallback:n}={}){return eu(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 eu(e){return[...new Set(e)]}function tu(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function nu(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!Yl(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(tu(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function ru(){let e=Y.useContext(Mc);return Kl(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function iu(){let e=Y.useContext(Nc);return Kl(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var au=Y.createContext(void 0);au.displayName=`FrameworkContext`;function ou(){let e=Y.useContext(au);return Kl(e,`You must render this element inside a <HydratedRouter> element`),e}function su(e,t){let n=Y.useContext(au),[r,i]=Y.useState(!1),[a,o]=Y.useState(!1),{onFocus:s,onBlur:c,onMouseEnter:l,onMouseLeave:u,onTouchStart:d}=t,f=Y.useRef(null);Y.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]),Y.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:cu(s,p),onBlur:cu(c,m),onMouseEnter:cu(l,p),onMouseLeave:cu(u,m),onTouchStart:cu(d,p)}]:[a,f,{}]:[!1,f,{}]}function cu(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function lu({page:e,...t}){let n=Fc(),{nonce:r}=ou(),{router:i}=ru(),a=Y.useMemo(()=>Ws(i.routes,e,i.basename),[i.routes,e,i.basename]);return a?(t.nonce==null&&r&&(t={...t,nonce:r}),n?Y.createElement(du,{page:e,matches:a,...t}):Y.createElement(fu,{page:e,matches:a,...t})):null}function uu(e){let{manifest:t,routeModules:n}=ou(),[r,i]=Y.useState([]);return Y.useEffect(()=>{let r=!1;return Zl(e,t,n).then(e=>{r||i(e)}),()=>{r=!0}},[e,t,n]),r}function du({page:e,matches:t,...n}){let r=Xc(),{future:i}=ou(),{basename:a}=ru(),o=Y.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=ql(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 Y.createElement(Y.Fragment,null,o.map(e=>Y.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function fu({page:e,matches:t,...n}){let r=Xc(),{future:i,manifest:a,routeModules:o}=ou(),{basename:s}=ru(),{loaderData:c,matches:l}=iu(),u=Y.useMemo(()=>Ql(e,t,l,a,r,`data`),[e,t,l,a,r]),d=Y.useMemo(()=>Ql(e,t,l,a,r,`assets`),[e,t,l,a,r]),f=Y.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=ql(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=Y.useMemo(()=>$l(d,a),[d,a]),m=uu(d);return Y.createElement(Y.Fragment,null,f.map(e=>Y.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),p.map(e=>Y.createElement(`link`,{key:e,rel:`modulepreload`,href:e,...n})),m.map(({key:e,link:t})=>Y.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)})}}Y.Component;var mu=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{mu&&(window.__reactRouterVersion=`7.18.2`)}catch{}function hu({basename:e,children:t,useTransitions:n,window:r}){let i=Y.useRef();i.current??=Ps({window:r,v5Compat:!0});let a=i.current,[o,s]=Y.useState({action:a.action,location:a.location}),c=Y.useCallback(e=>{n===!1?s(e):Y.startTransition(()=>s(e))},[n]);return Y.useLayoutEffect(()=>a.listen(c),[a,c]),Y.createElement(Ol,{basename:e,children:t,location:o.location,navigationType:o.action,navigator:a,useTransitions:n})}var gu=Y.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:_}=Y.useContext(zc),v=typeof l==`string`&&Os.test(l),y=Dc(l,h);l=y.to;let b=Jc(l,{relative:r}),x=Xc(),S=null;if(o){let e=gc(o,[],x.mask?x.mask.pathname:`/`,!0);h!==`/`&&(e.pathname=e.pathname===`/`?h:vc([h,e.pathname])),S=g.createHref(e)}let[C,w,T]=su(n,p),E=xu(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=Y.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?Y.createElement(Y.Fragment,null,k,Y.createElement(lu,{page:b})):k});gu.displayName=`Link`;var _u=Y.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=il(a,{relative:c.relative}),d=Xc(),f=Y.useContext(Nc),{navigator:p,basename:m}=Y.useContext(zc),h=f!=null&&Du(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=uc(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 Y.createElement(gu,{...c,"aria-current":C,className:w,ref:l,style:T,to:a,viewTransition:o},typeof s==`function`?s(S):s)});_u.displayName=`NavLink`;var vu=Y.forwardRef(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:r,replace:i,state:a,method:o=jl,action:s,onSubmit:c,relative:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f,...p},m)=>{let{useTransitions:h}=Y.useContext(zc),g=Tu(),_=Eu(s,{relative:l}),v=o.toLowerCase()===`get`?`get`:`post`,y=typeof s==`string`&&Os.test(s);return Y.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?Y.startTransition(()=>p()):p()},...p,"data-discover":!y&&e===`render`?`true`:void 0})});vu.displayName=`Form`;function yu(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function bu(e){let t=Y.useContext(Mc);return Fs(t,yu(e)),t}function xu(e,{target:t,replace:n,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c,useTransitions:l}={}){let u=$c(),d=Xc(),f=il(e,{relative:o});return Y.useCallback(p=>{if(Rl(p,t)){p.preventDefault();let t=n===void 0?Bs(d)===Bs(f):n,m=()=>u(e,{replace:t,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c});l?Y.startTransition(()=>m()):m()}},[d,u,f,n,r,i,t,e,a,o,s,c,l])}function Su(e){Is(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=Y.useRef(zl(e)),n=Y.useRef(!1),r=Xc(),i=Y.useMemo(()=>Bl(r.search,n.current?null:t.current),[r.search]),a=$c();return[i,Y.useCallback((e,t)=>{let r=zl(typeof e==`function`?e(new URLSearchParams(i)):e);n.current=!0,a(`?`+r,t)},[a,i])]}var Cu=0,wu=()=>`__${String(++Cu)}__`;function Tu(){let{router:e}=bu(`useSubmit`),{basename:t}=Y.useContext(zc),n=yl(),r=e.fetch,i=e.navigate;return Y.useCallback(async(e,a={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=Gl(e,t);if(a.navigate===!1){let e=a.fetcherKey||wu();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 Eu(e,{relative:t}={}){let{basename:n}=Y.useContext(zc),r=Y.useContext(Vc);Fs(r,`useFormAction must be used inside a RouteContext`);let[i]=r.matches.slice(-1),a={...il(e||`.`,{relative:t})},o=Xc();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:vc([n,a.pathname])),Bs(a)}function Du(e,{relative:t}={}){let n=Y.useContext(Ic);Fs(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=bu(`useViewTransitionState`),i=il(e,{relative:t});if(!n.isTransitioning)return!1;let a=uc(n.currentLocation.pathname,r)||n.currentLocation.pathname,o=uc(n.nextLocation.pathname,r)||n.nextLocation.pathname;return oc(i.pathname,o)!=null||oc(i.pathname,a)!=null}var X=f(),Z=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)($n,{ref:n,className:G(`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,e),...t}));Z.displayName=$n.displayName;var Ou=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`div`,{ref:n,className:G(`rounded-lg border bg-card text-card-foreground shadow-elevation-1`,e),...t}));Ou.displayName=`Card`;var ku=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`div`,{ref:n,className:G(`flex flex-col space-y-1.5 p-6`,e),...t}));ku.displayName=`CardHeader`;var Au=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`h3`,{ref:n,className:G(`text-2xl font-semibold leading-none tracking-tight`,e),...t}));Au.displayName=`CardTitle`;var ju=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`p`,{ref:n,className:G(`text-sm text-muted-foreground`,e),...t}));ju.displayName=`CardDescription`;var Mu=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`div`,{ref:n,className:G(`p-6 pt-0`,e),...t}));Mu.displayName=`CardContent`;var Nu=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`div`,{ref:n,className:G(`flex items-center p-6 pt-0`,e),...t}));Nu.displayName=`CardFooter`;var Pu=`2.15.1`,Fu=e=>{window.particlesJS.load(e,`/js/particles.config.json`,()=>{console.log(`particles.js config loaded for`,e)})};function Iu(e){(0,Y.useEffect)(()=>{if(window.particlesJS!==void 0)Fu(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`),Fu(e)},document.head.appendChild(t)}return()=>{window.pJS&&window.pJS[e]?.destroy&&window.pJS[e].destroy()}},[e])}var Lu=`session.open`,Ru=`session.set`,zu=`session.ids`,Bu=`session.materialize`,Vu=`session.close`,Hu=`session.delta`;function Uu(){let[e,t]=(0,Y.useState)(null),[n,r]=(0,Y.useState)(!0),[i,a]=(0,Y.useState)(null);return(0,Y.useEffect)(()=>{let e=!0;async function n(){try{r(!0),a(null);let n=await J.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 Wu=`https://github.com/canvas-ui/canvas-server`,Gu=null;function Ku(){return Gu||=J.get(`/ping`,{skipAuth:!0}).then(e=>{let t=e??{};return{sourceUrl:t.sourceUrl||Wu,version:t.version??null,commit:t.commit??null,license:t.license??null}}).catch(e=>(console.error(`Failed to fetch server source info:`,e),Gu=null,{sourceUrl:Wu,version:null,commit:null,license:null})),Gu}function qu(){let[e,t]=(0,Y.useState)(null);return(0,Y.useEffect)(()=>{let e=!0;return Ku().then(n=>{e&&t(n)}),()=>{e=!1}},[]),e}function Ju({className:e=``}){let t=qu();if(!t)return null;let n=[t.version?`v${t.version}`:null,t.commit?.slice(0,7)].filter(Boolean).join(` `);return(0,X.jsxs)(`p`,{className:`text-xs text-muted-foreground ${e}`,children:[`Powered by`,` `,(0,X.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,X.jsx)(`a`,{href:t.sourceUrl,target:`_blank`,rel:`noreferrer`,className:`underline underline-offset-2 hover:text-foreground`,children:`Get the source code`}),`.`]})}function Yu({children:e}){Iu(`particle-js`);let{serverVersion:t,isLoading:n,error:r}=Uu();return(0,X.jsx)(`div`,{className:`flex min-h-viewport w-full items-center justify-center p-4 flex-col`,children:(0,X.jsxs)(Ou,{className:`flex w-[95vw] h-viewport-modal overflow-hidden`,children:[(0,X.jsxs)(`div`,{className:`hidden md:block w-1/2 relative bg-background`,"data-scheme":`dark`,id:`particle-js`,children:[(0,X.jsxs)(gu,{className:`absolute top-8 left-8 font-bold text-foreground flex items-center z-raised`,to:`/`,children:[(0,X.jsx)(`img`,{src:`/images/logo-wr_128x128.png`,alt:`Canvas Logo`,className:`mr-2 h-6 w-6 touch-target`}),(0,X.jsx)(`span`,{className:`text-2xl font-bold text-foreground`,children:`Canvas`})]}),(0,X.jsxs)(`div`,{className:`absolute bottom-8 left-8 text-sm text-foreground max-w-[80%] z-raised`,children:[`Web UI: v`,Pu,`, Server: `,n?`Loading...`:r?`Unavailable`:t?`v${t}`:`Unknown`]})]}),(0,X.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,X.jsxs)(`div`,{className:`mx-auto w-full max-w-sm`,children:[e,(0,X.jsxs)(`div`,{className:`mt-8 border-t pt-6`,children:[(0,X.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,X.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,X.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,X.jsx)(`span`,{children:`View on GitHub`})]}),(0,X.jsx)(Ju,{className:`mt-4 text-center`})]})]})})]})})}function Xu(){let e=localStorage.getItem(`authToken`);return!e||e===`canvas-server-token`?null:e}var Zu=new class{socket=null;connected=!1;authToken=null;handlers=new Map;socketWrappers=new Map;desiredSubscriptions=new Set;baseUrl;connectionId=``;constructor(){this.baseUrl=ci,this.connectionId=`socket-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}connect(e){let t=e||Xu();!t||t===`canvas-server-token`||this.socket&&this.authToken===t||(this.cleanupSocket(),this.authToken=t,this.socket=eo(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 Qu(e,t,n=`auto`){try{let r=await J.post($r.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)+`...`),J.setAuthToken(i.token),Zu.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)+`...`),J.setAuthToken(i.payload.token),Zu.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),J.clearAuthToken(),e}}async function $u(e,t,n){try{return await J.post($r.register,{name:e,email:t,password:n},{skipAuth:!0})}catch(e){throw console.error(`Registration failed:`,e),e}}function ed(e){return e instanceof Error&&/^Network error/i.test(e.message)}function td(){let e=localStorage.getItem(`authToken`);if(!e)return!1;if(e.startsWith(`canvas-`))return!0;try{return xr(e).exp*1e3>Date.now()}catch{return!1}}function nd(){let e=localStorage.getItem(`authToken`);if(!e||e.startsWith(`canvas-`))return null;try{let t=xr(e);return t.exp*1e3<Date.now()?(J.clearAuthToken(),null):{id:t.sub,email:t.email,userType:t.userType||`user`}}catch(e){return console.error(`Failed to decode token:`,e),J.clearAuthToken(),null}}async function rd(){try{if(!J.isAuthenticated())return console.log(`Not authenticated, skipping getCurrentUser request`),null;let e=await J.get($r.me);return console.log(`Current user response:`,e),e&&e?(Zu.isConnected()||Zu.reconnect(),e):(console.warn(`Invalid user profile response structure:`,e),null)}catch(e){if(console.error(`Failed to get current user:`,e),ed(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),J.clearAuthToken(),Zu.disconnect(),null):null}}function id(){return J.isAuthenticated()}async function ad(){try{let e=await J.get($r.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 od(e){try{await J.post($r.verifyEmailRequest,{email:e},{skipAuth:!0})}catch(e){throw console.error(`Failed to request email verification:`,e),e}}var sd=e=>e?.strategies?.local?.enabled!==!1,cd=e=>e?.allowUserRegistrations!==!1;function ld(){let e=$c(),[t,n]=Y.useState(!1),[r,i]=Y.useState(``),[a,o]=Y.useState(``),[s,c]=Y.useState(!1),[l,u]=Y.useState({}),[d,f]=Y.useState(null),[p,m]=Y.useState({email:``,password:``,strategy:`auto`});Y.useEffect(()=>{id()&&e(`/workspaces`),fetch(`${ni}/runtime/capabilities`).then(e=>e.ok?e.json():null).then(e=>n(e?.payload?.local===!0)).catch(()=>{}),ad().then(e=>{f(e)}).catch(e=>{console.error(`Failed to load auth config:`,e)})},[e]);let h=()=>{let e={};return p.email?/\S+@\S+\.\S+/.test(p.email)||(e.email=`Email is invalid`):e.email=`Email is required`,p.password||(e.password=`Password is required`),u(e),Object.keys(e).length===0},g=e=>{let{name:t,value:n}=e.target;m(e=>({...e,[t]:n}))};async function _(t){if(t.preventDefault(),h()){c(!0);try{console.log(`Attempting login with:`,p.email,`strategy:`,p.strategy);let t=await Qu(p.email,p.password,p.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,X.jsx)(Yu,{children:(0,X.jsxs)(`form`,{className:`grid gap-4`,onSubmit:async t=>{t.preventDefault(),c(!0),o(``);try{if(J.setAuthToken(r.trim()),!await rd())throw Error(`The local token was not accepted`);e(`/workspaces`)}catch(e){J.clearAuthToken(),o(e instanceof Error?e.message:`Authentication failed`)}finally{c(!1)}},children:[(0,X.jsx)(`h1`,{className:`text-2xl font-semibold`,children:`Connect to your local runtime`}),(0,X.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Enter the token shown by `,(0,X.jsx)(`code`,{children:`canvas runtime token`}),` in the runtime folder.`]}),(0,X.jsx)(Z,{htmlFor:`local-token`,children:`Local access token`}),(0,X.jsx)(K,{id:`local-token`,type:`password`,autoComplete:`off`,value:r,onChange:e=>i(e.target.value),required:!0}),a&&(0,X.jsx)(`p`,{role:`alert`,className:`text-sm text-destructive`,children:a}),(0,X.jsx)(q,{disabled:s,children:s?`Connecting…`:`Connect`})]})}):(0,X.jsx)(Yu,{children:(0,X.jsxs)(`div`,{className:`flex flex-col space-y-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,X.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Welcome back`}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Enter your credentials to access your account`})]}),(0,X.jsx)(`form`,{onSubmit:_,children:(0,X.jsxs)(`div`,{className:`grid gap-4`,children:[d?.strategies?.imap?.enabled&&d.strategies.imap.domains.length>0&&(0,X.jsxs)(`div`,{className:`grid gap-2`,children:[(0,X.jsx)(Z,{htmlFor:`strategy`,children:`Authentication Method`}),(0,X.jsxs)(`select`,{id:`strategy`,name:`strategy`,value:p.strategy,onChange:g,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,X.jsx)(`option`,{value:`auto`,children:`Auto-detect`}),(0,X.jsx)(`option`,{value:`local`,children:`Local Account`}),(0,X.jsx)(`option`,{value:`imap`,children:`Email Server (IMAP)`})]})]}),(0,X.jsxs)(`div`,{className:`grid gap-2`,children:[(0,X.jsx)(Z,{htmlFor:`email`,children:`Email`}),(0,X.jsx)(K,{id:`email`,name:`email`,placeholder:`name@example.com`,type:`email`,autoCapitalize:`none`,autoComplete:`email`,autoCorrect:`off`,disabled:s,value:p.email,onChange:g}),l.email&&(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:l.email})]}),(0,X.jsxs)(`div`,{className:`grid gap-2`,children:[(0,X.jsx)(Z,{htmlFor:`password`,children:`Password`}),(0,X.jsx)(K,{id:`password`,name:`password`,type:`password`,disabled:s,value:p.password,onChange:g}),l.password&&(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:l.password})]}),(0,X.jsxs)(`div`,{className:`flex flex-col space-y-4`,children:[(0,X.jsx)(q,{type:`submit`,disabled:s,children:s?`Signing in...`:`Sign In`}),sd(d)&&cd(d)&&(0,X.jsx)(q,{variant:`outline`,type:`button`,disabled:s,onClick:()=>e(`/register`),children:`Don't have an account? Sign up`})]})]})})]})})}function ud(){let e=$c(),{showToast:t}=mo(),[n,r]=Y.useState(!1),[i,a]=Y.useState({}),[o,s]=Y.useState({name:``,email:``,password:``}),[c,l]=Y.useState(!1),[u,d]=Y.useState(!1),[f,p]=Y.useState(null);Y.useEffect(()=>{(async()=>{let t=await ad(),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=Y.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,X.jsxs)(Yu,{children:[(0,X.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,X.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Registration Successful!`}),(0,X.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,X.jsx)(`div`,{className:`space-y-6 text-center pt-6`,children:!u&&(0,X.jsx)(q,{asChild:!0,className:`w-full`,children:(0,X.jsx)(gu,{to:`/login`,children:`Go to Login`})})})]}):(0,X.jsxs)(Yu,{children:[(0,X.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,X.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Create an account`}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Enter your email below to create your account`})]}),(0,X.jsxs)(`form`,{onSubmit:async e=>{if(e.preventDefault(),h()){r(!0);try{let e=await $u(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,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(Z,{htmlFor:`name`,children:`Username`}),(0,X.jsx)(K,{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,X.jsx)(`p`,{className:`text-sm text-destructive`,children:i.name}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`3-39 characters, lowercase letters, numbers, underscores, and hyphens only`})]}),(0,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(Z,{htmlFor:`email`,children:`Email`}),(0,X.jsx)(K,{id:`email`,type:`email`,placeholder:`name@example.com`,value:o.email,onChange:g,disabled:n,className:i.email?`border-destructive`:``}),i.email&&(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:i.email})]}),(0,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(Z,{htmlFor:`password`,children:`Password`}),(0,X.jsx)(K,{id:`password`,type:`password`,placeholder:`Enter your password`,value:o.password,onChange:g,disabled:n,className:i.password?`border-destructive`:``}),i.password&&(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:i.password}),f&&m&&(0,X.jsxs)(`ul`,{className:`text-xs list-disc pl-4 space-y-1`,children:[(0,X.jsxs)(`li`,{className:m.minLength?`text-success`:`text-muted-foreground`,children:[`At least `,f.minLength,` characters`]}),f.requireUppercase&&(0,X.jsx)(`li`,{className:m.uppercase?`text-success`:`text-muted-foreground`,children:`At least one uppercase letter`}),f.requireLowercase&&(0,X.jsx)(`li`,{className:m.lowercase?`text-success`:`text-muted-foreground`,children:`At least one lowercase letter`}),f.requireNumbers&&(0,X.jsx)(`li`,{className:m.number?`text-success`:`text-muted-foreground`,children:`At least one number`}),f.requireSpecialChars&&(0,X.jsx)(`li`,{className:m.special?`text-success`:`text-muted-foreground`,children:`At least one special character`}),f.maxLength&&(0,X.jsxs)(`li`,{className:m.maxLength?`text-success`:`text-muted-foreground`,children:[`No more than `,f.maxLength,` characters`]})]})]}),(0,X.jsx)(q,{type:`submit`,className:`w-full`,disabled:n,children:n?`Creating Account...`:`Create Account`})]}),(0,X.jsxs)(`div`,{className:`mt-4 text-center text-sm`,children:[`Already have an account?`,` `,(0,X.jsx)(gu,{to:`/login`,className:`underline`,children:`Sign in`})]}),(0,X.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,X.jsx)(gu,{to:`/terms`,className:`underline underline-offset-4 hover:text-primary`,children:`Terms of Service`}),` `,`and`,` `,(0,X.jsx)(gu,{to:`/privacy`,className:`underline underline-offset-4 hover:text-primary`,children:`Privacy Policy`}),`.`]})]})}function dd({className:e=`h-5 w-5`,...t}){return(0,X.jsxs)(`svg`,{className:`animate-spin ${e}`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,...t,children:[(0,X.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,X.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 fd({children:e}){let[t,n]=(0,Y.useState)(`loading`);return(0,Y.useEffect)(()=>{(async()=>{try{if(!id()){console.log(`No authentication token found, redirecting to login`),n(`unauthenticated`);return}let e=await rd();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),ed(e)){n(td()?`authenticated`:`unauthenticated`);return}e instanceof Error&&e.message.includes(`Authentication required`)&&(console.log(`Clearing invalid token from ProtectedRoute`),J.clearAuthToken()),n(`unauthenticated`)}})()},[]),t===`loading`?(0,X.jsx)(`div`,{className:`flex h-screen items-center justify-center`,children:(0,X.jsx)(dd,{className:`h-8 w-8`})}):t===`unauthenticated`?(0,X.jsx)(Tl,{to:`/login`,replace:!0}):(0,X.jsx)(X.Fragment,{children:e})}function pd({children:e}){let[t,n]=(0,Y.useState)(null);return(0,Y.useEffect)(()=>{(async()=>{try{await J.get(`/auth/me`),n(!0)}catch(e){e instanceof Error&&e.message.includes(`Authentication required`)&&(console.log(`Clearing invalid token from PublicRoute`),J.clearAuthToken()),n(!1)}})()},[]),t===null?null:t?(0,X.jsx)(Tl,{to:`/workspaces`,replace:!0}):(0,X.jsx)(X.Fragment,{children:e})}var md=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})}))})),hd=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)}})),gd=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=te,e.setTopLeft=R,e.setTransform=ne,e.sortLayoutItems=z,e.sortLayoutItemsByColRow=re,e.sortLayoutItemsByRowCol=B,e.synchronizeLayoutWithChildren=ie,e.validateLayout=ae,e.withLayoutItem=p;var t=md(),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=hd();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=z(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=z(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)}},ee={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 te(e,t,n,r){let i=ee[e];return i?i(t,a(a({},t),n),r):n}function ne(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 R(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 z(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=()=>{}})),_d=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)}})),vd=i(((e,t)=>{t.exports=`SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED`})),yd=i(((e,t)=>{var n=vd();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}})),bd=i(((e,t)=>{t.exports=yd()()})),xd=i(((e,t)=>{var n=Object.create,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,l=(e,t)=>{for(var n in t)r(e,n,{get:t[n],enumerable:!0})},u=(e,t,n,a)=>{if(t&&typeof t==`object`||typeof t==`function`)for(let s of o(t))!c.call(e,s)&&s!==n&&r(e,s,{get:()=>t[s],enumerable:!(a=i(t,s))||a.enumerable});return e},f=(e,t,i)=>(i=e==null?{}:n(s(e)),u(t||!e||!e.__esModule?r(i,`default`,{value:e,enumerable:!0}):i,e)),p=e=>u(r({},`__esModule`,{value:!0}),e),m={};l(m,{DraggableCore:()=>Se,default:()=>Ce}),t.exports=p(m);var h=f(d()),g=f(bd()),_=f(a()),v=br();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 ee(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 te(e,t){let n=R(e,t,`px`);return{[E(`transform`,O)]:n}}function ne(e,t){return R(e,t,``)}function R({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 z(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=Xc(),d;if(t){let e=typeof t==`string`?Vs(t):t;Fs(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})):Ws(e,{pathname:p});Is(l||m!=null,`No routes matched location "${d.pathname}${d.search}${d.hash}" `),Is(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:vc([c,r.encodeLocation?r.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?c:vc([c,r.encodeLocation?r.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),i,n);return t&&h?Y.createElement(Bc.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...d},navigationType:`POP`}},h):h}function sl(){let e=bl(),t=wc(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=Y.createElement(Y.Fragment,null,Y.createElement(`p`,null,`💿 Hey developer 👋`),Y.createElement(`p`,null,`You can provide a way better UX than this when your app throws errors by providing your own `,Y.createElement(`code`,{style:a},`ErrorBoundary`),` or`,` `,Y.createElement(`code`,{style:a},`errorElement`),` prop on your route.`)),Y.createElement(Y.Fragment,null,Y.createElement(`h2`,null,`Unexpected Application Error!`),Y.createElement(`h3`,{style:{fontStyle:`italic`}},t),n?Y.createElement(`pre`,{style:i},n):null,o)}var cl=Y.createElement(sl,null),ll=class extends Y.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=qc(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:Y.createElement(Vc.Provider,{value:this.props.routeContext},Y.createElement(Hc.Provider,{value:e,children:this.props.component}));return this.context?Y.createElement(dl,{error:e},t):t}};ll.contextType=Pc;var ul=new WeakMap;function dl({children:e,error:t}){let{basename:n}=Y.useContext(zc);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=Kc(t.digest);if(e){let r=ul.get(t);if(r)throw r;let i=Dc(e.location,n),a=i.absoluteURL||i.to;if(jc(a))throw Error(`Invalid redirect location`);if(Ec&&!ul.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 ul.set(t,n),n}}return Y.createElement(`meta`,{httpEquiv:`refresh`,content:`0;url=${a}`})}}return e}function fl({routeContext:e,match:t,children:n}){let r=Y.useContext(Mc);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),Y.createElement(Vc.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);Fs(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:Tc(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||cl,o&&(s<0&&c===0?(Cl(`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?Y.createElement(n.route.Component,null):n.route.element?n.route.element:e,Y.createElement(fl,{match:n,routeContext:{outlet:e,matches:m,isDataRoute:r!=null},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||c===0)?Y.createElement(ll,{location:r.location,revalidation:r.revalidation,component:f,error:u,children:h(),routeContext:{outlet:null,matches:m,isDataRoute:!0},onError:l}):h()},null)}function ml(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function hl(e){let t=Y.useContext(Mc);return Fs(t,ml(e)),t}function gl(e){let t=Y.useContext(Nc);return Fs(t,ml(e)),t}function _l(e){let t=Y.useContext(Vc);return Fs(t,ml(e)),t}function vl(e){let t=_l(e),n=t.matches[t.matches.length-1];return Fs(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function yl(){return vl(`useRouteId`)}function bl(){let e=Y.useContext(Hc),t=gl(`useRouteError`),n=vl(`useRouteError`);return e===void 0?t.errors?.[n]:e}function xl(){let{router:e}=hl(`useNavigate`),t=vl(`useNavigate`),n=Y.useRef(!1);return Qc(()=>{n.current=!0}),Y.useCallback(async(r,i={})=>{Is(n.current,Zc),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var Sl={};function Cl(e,t,n){!t&&!Sl[e]&&(Sl[e]=!0,Is(!1,n))}Y.memo(wl);function wl({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return ol(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function Tl({to:e,replace:t,state:n,relative:r}){Fs(Yc(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:i}=Y.useContext(zc);Is(!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}=Y.useContext(Vc),{pathname:o}=Xc(),s=$c(),c=gc(e,hc(a),o,r===`path`),l=JSON.stringify(c);return Y.useEffect(()=>{s(JSON.parse(l),{replace:t,state:n,relative:r})},[s,l,r,t,n]),null}function El(e){return nl(e.context)}function Dl(e){Fs(!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 Ol({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:a=!1,useTransitions:o}){Fs(!Yc(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let s=e.replace(/^\/*/,`/`),c=Y.useMemo(()=>({basename:s,navigator:i,static:a,useTransitions:o,future:{}}),[s,i,a,o]);typeof n==`string`&&(n=Vs(n));let{pathname:l=`/`,search:u=``,hash:d=``,state:f=null,key:p=`default`,mask:m}=n,h=Y.useMemo(()=>{let e=uc(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 Is(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:Y.createElement(zc.Provider,{value:c},Y.createElement(Bc.Provider,{children:t,value:h}))}function kl({children:e,location:t}){return al(Al(e),t)}Y.Component;function Al(e,t=[]){let n=[];return Y.Children.forEach(e,(e,r)=>{if(!Y.isValidElement(e))return;let i=[...t,r];if(e.type===Y.Fragment){n.push.apply(n,Al(e.props.children,i));return}Fs(e.type===Dl,`[${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>`),Fs(!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=Al(e.props.children,i)),n.push(a)}),n}var jl=`get`,Ml=`application/x-www-form-urlencoded`;function Nl(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function Pl(e){return Nl(e)&&e.tagName.toLowerCase()===`button`}function Fl(e){return Nl(e)&&e.tagName.toLowerCase()===`form`}function Il(e){return Nl(e)&&e.tagName.toLowerCase()===`input`}function Ll(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Rl(e,t){return e.button===0&&(!t||t===`_self`)&&!Ll(e)}function zl(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 Bl(e,t){let n=zl(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var Vl=null;function Hl(){if(Vl===null)try{new FormData(document.createElement(`form`),0),Vl=!1}catch{Vl=!0}return Vl}var Ul=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function Wl(e){return e!=null&&!Ul.has(e)?(Is(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${Ml}"`),null):e}function Gl(e,t){let n,r,i,a,o;if(Fl(e)){let o=e.getAttribute(`action`);r=o?uc(o,t):null,n=e.getAttribute(`method`)||jl,i=Wl(e.getAttribute(`enctype`))||Ml,a=new FormData(e)}else if(Pl(e)||Il(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?uc(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||jl,i=Wl(e.getAttribute(`formenctype`))||Wl(o.getAttribute(`enctype`))||Ml,a=new FormData(o,e),!Hl()){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(Nl(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=jl,r=null,i=Ml,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 Kl(e,t){if(e===!1||e==null)throw Error(t)}function ql(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&&uc(i.pathname,t)===`/`?`${yc(t)}/_root.${r}`:`${yc(i.pathname)}.${r}`,i}async function Jl(e,t){if(e.id in t)return t[e.id];try{let n=await m(()=>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 Yl(e){return e!=null&&typeof e.page==`string`}function Xl(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 Zl(e,t,n){return nu((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await Jl(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(Xl).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function Ql(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 $l(e,t,{includeHydrateFallback:n}={}){return eu(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 eu(e){return[...new Set(e)]}function tu(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function nu(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!Yl(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(tu(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function ru(){let e=Y.useContext(Mc);return Kl(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function iu(){let e=Y.useContext(Nc);return Kl(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var au=Y.createContext(void 0);au.displayName=`FrameworkContext`;function ou(){let e=Y.useContext(au);return Kl(e,`You must render this element inside a <HydratedRouter> element`),e}function su(e,t){let n=Y.useContext(au),[r,i]=Y.useState(!1),[a,o]=Y.useState(!1),{onFocus:s,onBlur:c,onMouseEnter:l,onMouseLeave:u,onTouchStart:d}=t,f=Y.useRef(null);Y.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]),Y.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:cu(s,p),onBlur:cu(c,m),onMouseEnter:cu(l,p),onMouseLeave:cu(u,m),onTouchStart:cu(d,p)}]:[a,f,{}]:[!1,f,{}]}function cu(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function lu({page:e,...t}){let n=Fc(),{nonce:r}=ou(),{router:i}=ru(),a=Y.useMemo(()=>Ws(i.routes,e,i.basename),[i.routes,e,i.basename]);return a?(t.nonce==null&&r&&(t={...t,nonce:r}),n?Y.createElement(du,{page:e,matches:a,...t}):Y.createElement(fu,{page:e,matches:a,...t})):null}function uu(e){let{manifest:t,routeModules:n}=ou(),[r,i]=Y.useState([]);return Y.useEffect(()=>{let r=!1;return Zl(e,t,n).then(e=>{r||i(e)}),()=>{r=!0}},[e,t,n]),r}function du({page:e,matches:t,...n}){let r=Xc(),{future:i}=ou(),{basename:a}=ru(),o=Y.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=ql(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 Y.createElement(Y.Fragment,null,o.map(e=>Y.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function fu({page:e,matches:t,...n}){let r=Xc(),{future:i,manifest:a,routeModules:o}=ou(),{basename:s}=ru(),{loaderData:c,matches:l}=iu(),u=Y.useMemo(()=>Ql(e,t,l,a,r,`data`),[e,t,l,a,r]),d=Y.useMemo(()=>Ql(e,t,l,a,r,`assets`),[e,t,l,a,r]),f=Y.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=ql(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=Y.useMemo(()=>$l(d,a),[d,a]),m=uu(d);return Y.createElement(Y.Fragment,null,f.map(e=>Y.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),p.map(e=>Y.createElement(`link`,{key:e,rel:`modulepreload`,href:e,...n})),m.map(({key:e,link:t})=>Y.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)})}}Y.Component;var mu=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{mu&&(window.__reactRouterVersion=`7.18.2`)}catch{}function hu({basename:e,children:t,useTransitions:n,window:r}){let i=Y.useRef();i.current??=Ps({window:r,v5Compat:!0});let a=i.current,[o,s]=Y.useState({action:a.action,location:a.location}),c=Y.useCallback(e=>{n===!1?s(e):Y.startTransition(()=>s(e))},[n]);return Y.useLayoutEffect(()=>a.listen(c),[a,c]),Y.createElement(Ol,{basename:e,children:t,location:o.location,navigationType:o.action,navigator:a,useTransitions:n})}var gu=Y.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:_}=Y.useContext(zc),v=typeof l==`string`&&Os.test(l),y=Dc(l,h);l=y.to;let b=Jc(l,{relative:r}),x=Xc(),S=null;if(o){let e=gc(o,[],x.mask?x.mask.pathname:`/`,!0);h!==`/`&&(e.pathname=e.pathname===`/`?h:vc([h,e.pathname])),S=g.createHref(e)}let[C,w,T]=su(n,p),E=xu(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=Y.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?Y.createElement(Y.Fragment,null,k,Y.createElement(lu,{page:b})):k});gu.displayName=`Link`;var _u=Y.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=il(a,{relative:c.relative}),d=Xc(),f=Y.useContext(Nc),{navigator:p,basename:m}=Y.useContext(zc),h=f!=null&&Du(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=uc(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 Y.createElement(gu,{...c,"aria-current":C,className:w,ref:l,style:T,to:a,viewTransition:o},typeof s==`function`?s(S):s)});_u.displayName=`NavLink`;var vu=Y.forwardRef(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:r,replace:i,state:a,method:o=jl,action:s,onSubmit:c,relative:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f,...p},m)=>{let{useTransitions:h}=Y.useContext(zc),g=Tu(),_=Eu(s,{relative:l}),v=o.toLowerCase()===`get`?`get`:`post`,y=typeof s==`string`&&Os.test(s);return Y.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?Y.startTransition(()=>p()):p()},...p,"data-discover":!y&&e===`render`?`true`:void 0})});vu.displayName=`Form`;function yu(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function bu(e){let t=Y.useContext(Mc);return Fs(t,yu(e)),t}function xu(e,{target:t,replace:n,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c,useTransitions:l}={}){let u=$c(),d=Xc(),f=il(e,{relative:o});return Y.useCallback(p=>{if(Rl(p,t)){p.preventDefault();let t=n===void 0?Bs(d)===Bs(f):n,m=()=>u(e,{replace:t,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c});l?Y.startTransition(()=>m()):m()}},[d,u,f,n,r,i,t,e,a,o,s,c,l])}function Su(e){Is(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=Y.useRef(zl(e)),n=Y.useRef(!1),r=Xc(),i=Y.useMemo(()=>Bl(r.search,n.current?null:t.current),[r.search]),a=$c();return[i,Y.useCallback((e,t)=>{let r=zl(typeof e==`function`?e(new URLSearchParams(i)):e);n.current=!0,a(`?`+r,t)},[a,i])]}var Cu=0,wu=()=>`__${String(++Cu)}__`;function Tu(){let{router:e}=bu(`useSubmit`),{basename:t}=Y.useContext(zc),n=yl(),r=e.fetch,i=e.navigate;return Y.useCallback(async(e,a={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=Gl(e,t);if(a.navigate===!1){let e=a.fetcherKey||wu();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 Eu(e,{relative:t}={}){let{basename:n}=Y.useContext(zc),r=Y.useContext(Vc);Fs(r,`useFormAction must be used inside a RouteContext`);let[i]=r.matches.slice(-1),a={...il(e||`.`,{relative:t})},o=Xc();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:vc([n,a.pathname])),Bs(a)}function Du(e,{relative:t}={}){let n=Y.useContext(Ic);Fs(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=bu(`useViewTransitionState`),i=il(e,{relative:t});if(!n.isTransitioning)return!1;let a=uc(n.currentLocation.pathname,r)||n.currentLocation.pathname,o=uc(n.nextLocation.pathname,r)||n.nextLocation.pathname;return oc(i.pathname,o)!=null||oc(i.pathname,a)!=null}var X=f(),Z=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)($n,{ref:n,className:G(`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,e),...t}));Z.displayName=$n.displayName;var Ou=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`div`,{ref:n,className:G(`rounded-lg border bg-card text-card-foreground shadow-elevation-1`,e),...t}));Ou.displayName=`Card`;var ku=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`div`,{ref:n,className:G(`flex flex-col space-y-1.5 p-6`,e),...t}));ku.displayName=`CardHeader`;var Au=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`h3`,{ref:n,className:G(`text-2xl font-semibold leading-none tracking-tight`,e),...t}));Au.displayName=`CardTitle`;var ju=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`p`,{ref:n,className:G(`text-sm text-muted-foreground`,e),...t}));ju.displayName=`CardDescription`;var Mu=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`div`,{ref:n,className:G(`p-6 pt-0`,e),...t}));Mu.displayName=`CardContent`;var Nu=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`div`,{ref:n,className:G(`flex items-center p-6 pt-0`,e),...t}));Nu.displayName=`CardFooter`;var Pu=`2.15.3`,Fu=e=>{window.particlesJS.load(e,`/js/particles.config.json`,()=>{console.log(`particles.js config loaded for`,e)})};function Iu(e){(0,Y.useEffect)(()=>{if(window.particlesJS!==void 0)Fu(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`),Fu(e)},document.head.appendChild(t)}return()=>{window.pJS&&window.pJS[e]?.destroy&&window.pJS[e].destroy()}},[e])}var Lu=`session.open`,Ru=`session.set`,zu=`session.ids`,Bu=`session.materialize`,Vu=`session.close`,Hu=`session.delta`;function Uu(){let[e,t]=(0,Y.useState)(null),[n,r]=(0,Y.useState)(!0),[i,a]=(0,Y.useState)(null);return(0,Y.useEffect)(()=>{let e=!0;async function n(){try{r(!0),a(null);let n=await J.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 Wu=`https://github.com/canvas-ui/canvas-server`,Gu=null;function Ku(){return Gu||=J.get(`/ping`,{skipAuth:!0}).then(e=>{let t=e??{};return{sourceUrl:t.sourceUrl||Wu,version:t.version??null,commit:t.commit??null,license:t.license??null}}).catch(e=>(console.error(`Failed to fetch server source info:`,e),Gu=null,{sourceUrl:Wu,version:null,commit:null,license:null})),Gu}function qu(){let[e,t]=(0,Y.useState)(null);return(0,Y.useEffect)(()=>{let e=!0;return Ku().then(n=>{e&&t(n)}),()=>{e=!1}},[]),e}function Ju({className:e=``}){let t=qu();if(!t)return null;let n=[t.version?`v${t.version}`:null,t.commit?.slice(0,7)].filter(Boolean).join(` `);return(0,X.jsxs)(`p`,{className:`text-xs text-muted-foreground ${e}`,children:[`Powered by`,` `,(0,X.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,X.jsx)(`a`,{href:t.sourceUrl,target:`_blank`,rel:`noreferrer`,className:`underline underline-offset-2 hover:text-foreground`,children:`Get the source code`}),`.`]})}function Yu({children:e}){Iu(`particle-js`);let{serverVersion:t,isLoading:n,error:r}=Uu();return(0,X.jsx)(`div`,{className:`flex min-h-viewport w-full items-center justify-center p-4 flex-col`,children:(0,X.jsxs)(Ou,{className:`flex w-[95vw] h-viewport-modal overflow-hidden`,children:[(0,X.jsxs)(`div`,{className:`hidden md:block w-1/2 relative bg-background`,"data-scheme":`dark`,id:`particle-js`,children:[(0,X.jsxs)(gu,{className:`absolute top-8 left-8 font-bold text-foreground flex items-center z-raised`,to:`/`,children:[(0,X.jsx)(`img`,{src:`/images/logo-wr_128x128.png`,alt:`Canvas Logo`,className:`mr-2 h-6 w-6 touch-target`}),(0,X.jsx)(`span`,{className:`text-2xl font-bold text-foreground`,children:`Canvas`})]}),(0,X.jsxs)(`div`,{className:`absolute bottom-8 left-8 text-sm text-foreground max-w-[80%] z-raised`,children:[`Web UI: v`,Pu,`, Server: `,n?`Loading...`:r?`Unavailable`:t?`v${t}`:`Unknown`]})]}),(0,X.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,X.jsxs)(`div`,{className:`mx-auto w-full max-w-sm`,children:[e,(0,X.jsxs)(`div`,{className:`mt-8 border-t pt-6`,children:[(0,X.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,X.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,X.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,X.jsx)(`span`,{children:`View on GitHub`})]}),(0,X.jsx)(Ju,{className:`mt-4 text-center`})]})]})})]})})}function Xu(){let e=localStorage.getItem(`authToken`);return!e||e===`canvas-server-token`?null:e}var Zu=new class{socket=null;connected=!1;authToken=null;handlers=new Map;socketWrappers=new Map;desiredSubscriptions=new Set;baseUrl;connectionId=``;constructor(){this.baseUrl=ci,this.connectionId=`socket-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}connect(e){let t=e||Xu();!t||t===`canvas-server-token`||this.socket&&this.authToken===t||(this.cleanupSocket(),this.authToken=t,this.socket=eo(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 Qu(e,t,n=`auto`){try{let r=await J.post($r.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)+`...`),J.setAuthToken(i.token),Zu.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)+`...`),J.setAuthToken(i.payload.token),Zu.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),J.clearAuthToken(),e}}async function $u(e,t,n){try{return await J.post($r.register,{name:e,email:t,password:n},{skipAuth:!0})}catch(e){throw console.error(`Registration failed:`,e),e}}function ed(e){return e instanceof Error&&/^Network error/i.test(e.message)}function td(){let e=localStorage.getItem(`authToken`);if(!e)return!1;if(e.startsWith(`canvas-`))return!0;try{return xr(e).exp*1e3>Date.now()}catch{return!1}}function nd(){let e=localStorage.getItem(`authToken`);if(!e||e.startsWith(`canvas-`))return null;try{let t=xr(e);return t.exp*1e3<Date.now()?(J.clearAuthToken(),null):{id:t.sub,email:t.email,userType:t.userType||`user`}}catch(e){return console.error(`Failed to decode token:`,e),J.clearAuthToken(),null}}async function rd(){try{if(!J.isAuthenticated())return console.log(`Not authenticated, skipping getCurrentUser request`),null;let e=await J.get($r.me);return console.log(`Current user response:`,e),e&&e?(Zu.isConnected()||Zu.reconnect(),e):(console.warn(`Invalid user profile response structure:`,e),null)}catch(e){if(console.error(`Failed to get current user:`,e),ed(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),J.clearAuthToken(),Zu.disconnect(),null):null}}function id(){return J.isAuthenticated()}async function ad(){try{let e=await J.get($r.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 od(e){try{await J.post($r.verifyEmailRequest,{email:e},{skipAuth:!0})}catch(e){throw console.error(`Failed to request email verification:`,e),e}}var sd=e=>e?.strategies?.local?.enabled!==!1,cd=e=>e?.allowUserRegistrations!==!1;function ld(){let e=$c(),[t,n]=Y.useState(!1),[r,i]=Y.useState(``),[a,o]=Y.useState(``),[s,c]=Y.useState(!1),[l,u]=Y.useState({}),[d,f]=Y.useState(null),[p,m]=Y.useState({email:``,password:``,strategy:`auto`});Y.useEffect(()=>{id()&&e(`/workspaces`),fetch(`${ni}/runtime/capabilities`).then(e=>e.ok?e.json():null).then(e=>n(e?.payload?.local===!0)).catch(()=>{}),ad().then(e=>{f(e)}).catch(e=>{console.error(`Failed to load auth config:`,e)})},[e]);let h=()=>{let e={};return p.email?/\S+@\S+\.\S+/.test(p.email)||(e.email=`Email is invalid`):e.email=`Email is required`,p.password||(e.password=`Password is required`),u(e),Object.keys(e).length===0},g=e=>{let{name:t,value:n}=e.target;m(e=>({...e,[t]:n}))};async function _(t){if(t.preventDefault(),h()){c(!0);try{console.log(`Attempting login with:`,p.email,`strategy:`,p.strategy);let t=await Qu(p.email,p.password,p.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,X.jsx)(Yu,{children:(0,X.jsxs)(`form`,{className:`grid gap-4`,onSubmit:async t=>{t.preventDefault(),c(!0),o(``);try{if(J.setAuthToken(r.trim()),!await rd())throw Error(`The local token was not accepted`);e(`/workspaces`)}catch(e){J.clearAuthToken(),o(e instanceof Error?e.message:`Authentication failed`)}finally{c(!1)}},children:[(0,X.jsx)(`h1`,{className:`text-2xl font-semibold`,children:`Connect to your local runtime`}),(0,X.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Enter the token shown by `,(0,X.jsx)(`code`,{children:`canvas runtime token`}),` in the runtime folder.`]}),(0,X.jsx)(Z,{htmlFor:`local-token`,children:`Local access token`}),(0,X.jsx)(K,{id:`local-token`,type:`password`,autoComplete:`off`,value:r,onChange:e=>i(e.target.value),required:!0}),a&&(0,X.jsx)(`p`,{role:`alert`,className:`text-sm text-destructive`,children:a}),(0,X.jsx)(q,{disabled:s,children:s?`Connecting…`:`Connect`})]})}):(0,X.jsx)(Yu,{children:(0,X.jsxs)(`div`,{className:`flex flex-col space-y-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,X.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Welcome back`}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Enter your credentials to access your account`})]}),(0,X.jsx)(`form`,{onSubmit:_,children:(0,X.jsxs)(`div`,{className:`grid gap-4`,children:[d?.strategies?.imap?.enabled&&d.strategies.imap.domains.length>0&&(0,X.jsxs)(`div`,{className:`grid gap-2`,children:[(0,X.jsx)(Z,{htmlFor:`strategy`,children:`Authentication Method`}),(0,X.jsxs)(`select`,{id:`strategy`,name:`strategy`,value:p.strategy,onChange:g,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,X.jsx)(`option`,{value:`auto`,children:`Auto-detect`}),(0,X.jsx)(`option`,{value:`local`,children:`Local Account`}),(0,X.jsx)(`option`,{value:`imap`,children:`Email Server (IMAP)`})]})]}),(0,X.jsxs)(`div`,{className:`grid gap-2`,children:[(0,X.jsx)(Z,{htmlFor:`email`,children:`Email`}),(0,X.jsx)(K,{id:`email`,name:`email`,placeholder:`name@example.com`,type:`email`,autoCapitalize:`none`,autoComplete:`email`,autoCorrect:`off`,disabled:s,value:p.email,onChange:g}),l.email&&(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:l.email})]}),(0,X.jsxs)(`div`,{className:`grid gap-2`,children:[(0,X.jsx)(Z,{htmlFor:`password`,children:`Password`}),(0,X.jsx)(K,{id:`password`,name:`password`,type:`password`,disabled:s,value:p.password,onChange:g}),l.password&&(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:l.password})]}),(0,X.jsxs)(`div`,{className:`flex flex-col space-y-4`,children:[(0,X.jsx)(q,{type:`submit`,disabled:s,children:s?`Signing in...`:`Sign In`}),sd(d)&&cd(d)&&(0,X.jsx)(q,{variant:`outline`,type:`button`,disabled:s,onClick:()=>e(`/register`),children:`Don't have an account? Sign up`})]})]})})]})})}function ud(){let e=$c(),{showToast:t}=mo(),[n,r]=Y.useState(!1),[i,a]=Y.useState({}),[o,s]=Y.useState({name:``,email:``,password:``}),[c,l]=Y.useState(!1),[u,d]=Y.useState(!1),[f,p]=Y.useState(null);Y.useEffect(()=>{(async()=>{let t=await ad(),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=Y.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,X.jsxs)(Yu,{children:[(0,X.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,X.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Registration Successful!`}),(0,X.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,X.jsx)(`div`,{className:`space-y-6 text-center pt-6`,children:!u&&(0,X.jsx)(q,{asChild:!0,className:`w-full`,children:(0,X.jsx)(gu,{to:`/login`,children:`Go to Login`})})})]}):(0,X.jsxs)(Yu,{children:[(0,X.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,X.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Create an account`}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Enter your email below to create your account`})]}),(0,X.jsxs)(`form`,{onSubmit:async e=>{if(e.preventDefault(),h()){r(!0);try{let e=await $u(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,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(Z,{htmlFor:`name`,children:`Username`}),(0,X.jsx)(K,{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,X.jsx)(`p`,{className:`text-sm text-destructive`,children:i.name}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`3-39 characters, lowercase letters, numbers, underscores, and hyphens only`})]}),(0,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(Z,{htmlFor:`email`,children:`Email`}),(0,X.jsx)(K,{id:`email`,type:`email`,placeholder:`name@example.com`,value:o.email,onChange:g,disabled:n,className:i.email?`border-destructive`:``}),i.email&&(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:i.email})]}),(0,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(Z,{htmlFor:`password`,children:`Password`}),(0,X.jsx)(K,{id:`password`,type:`password`,placeholder:`Enter your password`,value:o.password,onChange:g,disabled:n,className:i.password?`border-destructive`:``}),i.password&&(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:i.password}),f&&m&&(0,X.jsxs)(`ul`,{className:`text-xs list-disc pl-4 space-y-1`,children:[(0,X.jsxs)(`li`,{className:m.minLength?`text-success`:`text-muted-foreground`,children:[`At least `,f.minLength,` characters`]}),f.requireUppercase&&(0,X.jsx)(`li`,{className:m.uppercase?`text-success`:`text-muted-foreground`,children:`At least one uppercase letter`}),f.requireLowercase&&(0,X.jsx)(`li`,{className:m.lowercase?`text-success`:`text-muted-foreground`,children:`At least one lowercase letter`}),f.requireNumbers&&(0,X.jsx)(`li`,{className:m.number?`text-success`:`text-muted-foreground`,children:`At least one number`}),f.requireSpecialChars&&(0,X.jsx)(`li`,{className:m.special?`text-success`:`text-muted-foreground`,children:`At least one special character`}),f.maxLength&&(0,X.jsxs)(`li`,{className:m.maxLength?`text-success`:`text-muted-foreground`,children:[`No more than `,f.maxLength,` characters`]})]})]}),(0,X.jsx)(q,{type:`submit`,className:`w-full`,disabled:n,children:n?`Creating Account...`:`Create Account`})]}),(0,X.jsxs)(`div`,{className:`mt-4 text-center text-sm`,children:[`Already have an account?`,` `,(0,X.jsx)(gu,{to:`/login`,className:`underline`,children:`Sign in`})]}),(0,X.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,X.jsx)(gu,{to:`/terms`,className:`underline underline-offset-4 hover:text-primary`,children:`Terms of Service`}),` `,`and`,` `,(0,X.jsx)(gu,{to:`/privacy`,className:`underline underline-offset-4 hover:text-primary`,children:`Privacy Policy`}),`.`]})]})}function dd({className:e=`h-5 w-5`,...t}){return(0,X.jsxs)(`svg`,{className:`animate-spin ${e}`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,...t,children:[(0,X.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,X.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 fd({children:e}){let[t,n]=(0,Y.useState)(`loading`);return(0,Y.useEffect)(()=>{(async()=>{try{if(!id()){console.log(`No authentication token found, redirecting to login`),n(`unauthenticated`);return}let e=await rd();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),ed(e)){n(td()?`authenticated`:`unauthenticated`);return}e instanceof Error&&e.message.includes(`Authentication required`)&&(console.log(`Clearing invalid token from ProtectedRoute`),J.clearAuthToken()),n(`unauthenticated`)}})()},[]),t===`loading`?(0,X.jsx)(`div`,{className:`flex h-screen items-center justify-center`,children:(0,X.jsx)(dd,{className:`h-8 w-8`})}):t===`unauthenticated`?(0,X.jsx)(Tl,{to:`/login`,replace:!0}):(0,X.jsx)(X.Fragment,{children:e})}function pd({children:e}){let[t,n]=(0,Y.useState)(null);return(0,Y.useEffect)(()=>{(async()=>{try{await J.get(`/auth/me`),n(!0)}catch(e){e instanceof Error&&e.message.includes(`Authentication required`)&&(console.log(`Clearing invalid token from PublicRoute`),J.clearAuthToken()),n(!1)}})()},[]),t===null?null:t?(0,X.jsx)(Tl,{to:`/workspaces`,replace:!0}):(0,X.jsx)(X.Fragment,{children:e})}var md=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})}))})),hd=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)}})),gd=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=te,e.setTopLeft=R,e.setTransform=ne,e.sortLayoutItems=z,e.sortLayoutItemsByColRow=re,e.sortLayoutItemsByRowCol=B,e.synchronizeLayoutWithChildren=ie,e.validateLayout=ae,e.withLayoutItem=p;var t=md(),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=hd();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=z(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=z(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)}},ee={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 te(e,t,n,r){let i=ee[e];return i?i(t,a(a({},t),n),r):n}function ne(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 R(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 z(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=()=>{}})),_d=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)}})),vd=i(((e,t)=>{t.exports=`SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED`})),yd=i(((e,t)=>{var n=vd();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}})),bd=i(((e,t)=>{t.exports=yd()()})),xd=i(((e,t)=>{var n=Object.create,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,l=(e,t)=>{for(var n in t)r(e,n,{get:t[n],enumerable:!0})},u=(e,t,n,a)=>{if(t&&typeof t==`object`||typeof t==`function`)for(let s of o(t))!c.call(e,s)&&s!==n&&r(e,s,{get:()=>t[s],enumerable:!(a=i(t,s))||a.enumerable});return e},f=(e,t,i)=>(i=e==null?{}:n(s(e)),u(t||!e||!e.__esModule?r(i,`default`,{value:e,enumerable:!0}):i,e)),p=e=>u(r({},`__esModule`,{value:!0}),e),m={};l(m,{DraggableCore:()=>Se,default:()=>Ce}),t.exports=p(m);var h=f(d()),g=f(bd()),_=f(a()),v=br();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 ee(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 te(e,t){let n=R(e,t,`px`);return{[E(`transform`,O)]:n}}function ne(e,t){return R(e,t,``)}function R({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 z(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&&se(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&&ce(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 se(e,t){e.classList?e.classList.add(t):e.className.match(RegExp(`(?:^|\\s)${t}(?!\\S)`))||(e.className+=` ${t}`)}function ce(e,t){e.classList?e.classList.remove(t):e.className=e.className.replace(RegExp(`(?:^|\\s)${t}(?!\\S)`,`g`),``)}function V(e,t,n){if(!e.props.bounds)return[t,n];let{bounds:r}=e.props;r=typeof r==`string`?r:he(r);let i=ge(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 le(e,t,n){return[Math.round(t/e[0])*e[0],Math.round(n/e[1])*e[1]]}function ue(e){return e.props.axis===`both`||e.props.axis===`x`}function de(e){return e.props.axis===`both`||e.props.axis===`y`}function fe(e,t,n){let r=typeof t==`number`?z(e,t):null;if(typeof t==`number`&&!r)return null;let i=ge(n),a=n.props.offsetParent||i.offsetParent||i.ownerDocument.body;return ee(r||e,a,n.props.scale)}function pe(e,t,n){let r=!x(e.lastX),i=ge(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 me(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 he(e){return{left:e.left,top:e.top,right:e.right,bottom:e.bottom}}function ge(e){let t=e.findDOMNode();if(!t)throw Error(`<DraggableCore>: Unmounted during event!`);return t}var _e=f(d()),ve=f(bd()),ye=f(a()),be=typeof process<`u`&&{}.DRAGGABLE_DEBUG?console.log.bind(console):function(){},xe={touch:{start:`touchstart`,move:`touchmove`,stop:`touchend`},mouse:{start:`mousedown`,move:`mousemove`,stop:`mouseup`}},H=xe.mouse,Se=class extends _e.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=fe(e,r,this);if(i==null)return;let{x:a,y:o}=i,s=pe(this,a,o);be(`DraggableCore: handleDragStart: %j`,s),be(`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,H.move,this.handleDrag),M(n,H.stop,this.handleDragStop))},this.handleDrag=e=>{let t=fe(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]=le(this.props.grid,e,t),!e&&!t)return;n=this.lastX+e,r=this.lastY+t}let i=pe(this,n,r);if(be(`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=fe(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]=le(this.props.grid,e,t),n=this.lastX+e,r=this.lastY+t}let i=pe(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),be(`DraggableCore: handleDragStop: %j`,i),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,a&&(be(`DraggableCore: Removing handlers`),N(a.ownerDocument,H.move,this.handleDrag),N(a.ownerDocument,H.stop,this.handleDragStop))},this.onMouseDown=e=>(H=xe.mouse,this.handleDragStart(e)),this.onMouseUp=e=>(H=xe.mouse,this.handleDragStop(e)),this.onTouchStart=e=>(H=xe.touch,this.handleDragStart(e)),this.onTouchEnd=e=>(H=xe.touch,this.handleDragStop(e))}componentDidMount(){this.mounted=!0;let e=this.findDOMNode();e&&M(e,xe.touch.start,this.onTouchStart,{passive:!1})}componentWillUnmount(){this.mounted=!1;let e=this.findDOMNode();if(e){let{ownerDocument:t}=e;N(t,xe.mouse.move,this.handleDrag),N(t,xe.touch.move,this.handleDrag),N(t,xe.mouse.stop,this.handleDragStop),N(t,xe.touch.stop,this.handleDragStop),N(e,xe.touch.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&ae(t)}}findDOMNode(){if(this.props?.nodeRef)return this.props.nodeRef.current;let e=ye.default;return typeof e.findDOMNode==`function`?e.findDOMNode(this):(be(`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 _e.cloneElement(_e.Children.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}};Se.displayName=`DraggableCore`,Se.propTypes={allowAnyClick:ve.default.bool,allowMobileScroll:ve.default.bool,children:ve.default.node.isRequired,disabled:ve.default.bool,enableUserSelectHack:ve.default.bool,offsetParent:function(e,t){if(e[t]&&e[t].nodeType!==1)throw Error(`Draggable's offsetParent must be a DOM Node.`)},grid:ve.default.arrayOf(ve.default.number),handle:ve.default.string,cancel:ve.default.string,nodeRef:ve.default.object,nonce:ve.default.string,onStart:ve.default.func,onDrag:ve.default.func,onStop:ve.default.func,onMouseDown:ve.default.func,scale:ve.default.number,className:C,style:C,transform:C},Se.defaultProps={allowAnyClick:!1,allowMobileScroll:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1};var Ce=class extends h.Component{constructor(e){super(e),this.onDragStart=(e,t)=>{if(be(`Draggable: onDragStart: %j`,t),this.props.onStart(e,me(this,t))===!1)return!1;this.setState({dragging:!0,dragged:!0})},this.onDrag=(e,t)=>{if(!this.state.dragging)return!1;be(`Draggable: onDrag: %j`,t);let n=me(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]=V(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,me(this,t))===!1)return!1;be(`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)?(be(`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,m=s||r,g={x:ue(this)&&p?this.state.x:m.x,y:de(this)&&p?this.state.y:m.y};this.state.isElementSVG?f=ne(g,c):d=te(g,c);let _=h.Children.only(n),y=(0,v.clsx)(_.props.className||``,i,{[a]:this.state.dragging,[o]:this.state.dragged});return h.createElement(Se,{...u,onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop},h.cloneElement(_,{className:y,style:{..._.props.style,...d},transform:f}))}};Ce.displayName=`Draggable`,Ce.propTypes={...Se.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},Ce.defaultProps={...Se.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:Se})})),Sd=i(((e,t)=>{var n=xd(),r=n.DraggableCore,i=n.default||n;t.exports=i,t.exports.default=i,t.exports.DraggableCore=r})),Cd=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)}})),wd=i((e=>{e.__esModule=!0,e.resizableProps=void 0;var t=n(bd());Sd();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)}}})),Td=i((e=>{e.__esModule=!0,e.default=void 0;var t=o(d()),n=Sd(),r=Cd(),i=wd(),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}})),Ed=i((e=>{e.__esModule=!0,e.default=void 0;var t=s(d()),n=o(bd()),r=o(Td()),i=wd(),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})})),Dd=i(((e,t)=>{t.exports=function(){throw Error(`Don't instantiate Resizable directly! Use require('react-resizable').Resizable`)},t.exports.Resizable=Td().default,t.exports.ResizableBox=Ed().default})),Od=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.resizeHandleType=e.resizeHandleAxesType=e.default=void 0;var t=r(bd()),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&&gd().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}})),kd=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=f(d()),n=a(),r=f(bd()),i=Sd(),o=Dd(),s=gd(),c=_d(),l=Od(),u=f(br());function f(e){return e&&e.__esModule?e:{default:e}}function p(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 m(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?p(Object(n),!0).forEach(function(t){h(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):p(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function h(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),h(this,`state`,{resizing:null,dragging:null,className:``}),h(this,`elementRef`,t.default.createRef()),h(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 s=o.getBoundingClientRect(),l=n.getBoundingClientRect(),u=l.left/i,d=s.left/i,f=l.top/i,p=s.top/i;a.left=u-d+o.scrollLeft,a.top=f-p+o.scrollTop,this.setState({dragging:a});let{x:m,y:h}=(0,c.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})}),h(this,`onDrag`,(e,t,r)=>{let{node:i,deltaX:a,deltaY:o}=t,{onDrag:s}=this.props;if(!s)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,c.calcGridItemWHPx)(m,n,t[1]);l=(0,c.clamp)(l,0,r);let i=(0,c.calcGridColWidth)(g),a=h-(0,c.calcGridItemWHPx)(p,i,t[0]);u=(0,c.clamp)(u,0,a)}}let _={top:l,left:u};r?this.setState({dragging:_}):(0,n.flushSync)(()=>{this.setState({dragging:_})});let{x:v,y}=(0,c.calcXY)(g,l,u,p,m);return s.call(this,f,v,y,{e,node:i,newPosition:_})}),h(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:s,top:l}=this.state.dragging,u={top:l,left:s};this.setState({dragging:null});let{x:d,y:f}=(0,c.calcXY)(this.getPositionParams(),l,s,i,a);return r.call(this,o,d,f,{e,node:n,newPosition:u})}),h(this,`onResizeStop`,(e,t,n)=>this.onResizeHandler(e,t,n,`onResizeStop`)),h(this,`onResizeStart`,(e,t,n)=>this.onResizeHandler(e,t,n,`onResizeStart`)),h(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,c.calcGridItemPosition)(this.getPositionParams(this.props),this.props.x,this.props.y,this.props.w,this.props.h,this.state),r=(0,c.calcGridItemPosition)(this.getPositionParams(e),e.x,e.y,e.w,e.h,t);return!(0,s.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,s.setTransform)(e):(i=(0,s.setTopLeft)(e),t&&(i.left=(0,s.perc)(e.left/n),i.width=(0,s.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:a,minH:s,maxW:l,maxH:u,transformScale:d,resizeHandles:f,resizeHandle:p}=this.props,m=this.getPositionParams(),h=(0,c.calcGridItemPosition)(m,0,0,i,0).width,g=(0,c.calcGridItemPosition)(m,0,0,a,s),_=(0,c.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(o.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:o,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=o;a&&(y=(0,s.resizeItemInDirection)(l,r,o,g),(0,n.flushSync)(()=>{this.setState({resizing:i===`onResizeStop`?null:y})}));let{w:b,h:x}=(0,c.calcWH)(this.getPositionParams(),y.width,y.height,d,f,l);b=(0,c.clamp)(b,Math.max(_,1),v),x=(0,c.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:s,useCSSTransforms:l}=this.props,d=(0,c.calcGridItemPosition)(this.getPositionParams(),e,n,r,i,this.state),f=t.default.Children.only(this.props.children),p=t.default.cloneElement(f,{ref:this.elementRef,className:(0,u.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:!!s,cssTransforms:l}),style:m(m(m({},this.props.style),f.props.style),this.createStyle(d))});return p=this.mixinResizable(p,d,o),p=this.mixinDraggable(p,a),p}};e.default=v,h(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:l.resizeHandleAxesType,resizeHandle:l.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})}),h(v,`defaultProps`,{className:``,cancel:``,handle:``,minH:1,minW:1,maxH:1/0,maxW:1/0,transformScale:1})})),Ad=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=l(d()),n=md(),r=c(br()),i=gd(),a=_d(),o=c(kd()),s=c(Od());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})})),jd=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.findOrGenerateResponsiveLayout=i,e.getBreakpointFromWidth=n,e.getColsFromBreakpoint=r,e.sortBreakpoints=a;var t=gd();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]})}})),Md=i((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=l(d()),n=c(bd()),r=md(),i=gd(),a=jd(),o=c(Ad()),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})})),Nd=r({default:()=>lf});function Pd(e,t){var n=!1,r=!1,i=0;function a(){n&&(n=!1,e()),r&&s()}function o(){qd(a)}function s(){var e=Date.now();if(n){if(e-i<Jd)return;r=!0}else n=!0,r=!1,setTimeout(o,t);i=e}return s}function Fd(e){return parseFloat(e)||0}function Id(e){return[...arguments].slice(1).reduce(function(t,n){var r=e[`border-`+n+`-width`];return t+Fd(r)},0)}function Ld(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]=Fd(o)}return n}function Rd(e){var t=e.getBBox();return Ud(0,0,t.width,t.height)}function zd(e){var t=e.clientWidth,n=e.clientHeight;if(!t&&!n)return tf;var r=ef(e).getComputedStyle(e),i=Ld(r),a=i.left+i.right,o=i.top+i.bottom,s=Fd(r.width),c=Fd(r.height);if(r.boxSizing===`border-box`&&(Math.round(s+a)!==t&&(s-=Id(r,`left`,`right`)+a),Math.round(c+o)!==n&&(c-=Id(r,`top`,`bottom`)+o)),!Bd(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 Ud(i.left,i.top,s,c)}function Bd(e){return e===ef(e).document.documentElement}function Vd(e){return Gd?nf(e)?Rd(e):zd(e):tf}function Hd(e){var t=e.x,n=e.y,r=e.width,i=e.height,a=Object.create((typeof DOMRectReadOnly<`u`?DOMRectReadOnly:Object).prototype);return $d(a,{x:t,y:n,width:r,height:i,top:n,right:t+r,bottom:i+n,left:t}),a}function Ud(e,t,n,r){return{x:e,y:t,width:n,height:r}}var Wd,Gd,Kd,qd,Jd,Yd,Xd,Zd,Qd,$d,ef,tf,nf,rf,af,of,sf,cf,lf,uf=t((()=>{Wd=(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}()})(),Gd=typeof window<`u`&&typeof document<`u`&&window.document===document,Kd=(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`)()})(),qd=(function(){return typeof requestAnimationFrame==`function`?requestAnimationFrame.bind(Kd):function(e){return setTimeout(function(){return e(Date.now())},1e3/60)}})(),Jd=2,Yd=20,Xd=[`top`,`right`,`bottom`,`left`,`width`,`height`,`size`,`weight`],Zd=typeof MutationObserver<`u`,Qd=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=Pd(this.refresh.bind(this),Yd)}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(){!Gd||this.connected_||(document.addEventListener(`transitionend`,this.onTransitionEnd_),window.addEventListener(`resize`,this.refresh),Zd?(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(){!Gd||!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;Xd.some(function(e){return!!~n.indexOf(e)})&&this.refresh()},e.getInstance=function(){return this.instance_||=new e,this.instance_},e.instance_=null,e}(),$d=(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||Kd}),tf=Ud(0,0,0,0),nf=(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`}})(),rf=function(){function e(e){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=Ud(0,0,0,0),this.target=e}return e.prototype.isActive=function(){var e=Vd(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=Hd(t);$d(this,{target:e,contentRect:n})}return e}(),of=function(){function e(e,t,n){if(this.activeObservations_=[],this.observations_=new Wd,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 rf(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}(),sf=typeof WeakMap<`u`?new WeakMap:new Wd,cf=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 of(t,Qd.getInstance(),this);sf.set(this,n)}return e}(),[`observe`,`unobserve`,`disconnect`].forEach(function(e){cf.prototype[e]=function(){var t;return(t=sf.get(this))[e].apply(t,arguments)}}),lf=(function(){return Kd.ResizeObserver===void 0?cf:Kd.ResizeObserver})()})),df=i((t=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=_;var n=c(d()),r=s(bd()),i=s((uf(),e(Nd))),a=s(br()),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}})),ff=n(i(((e,t)=>{t.exports=Ad().default,t.exports.utils=gd(),t.exports.calculateUtils=_d(),t.exports.Responsive=Md().default,t.exports.Responsive.utils=jd(),t.exports.WidthProvider=df().default}))(),1),pf=new Map;function mf(e){pf.set(e.type,e)}function hf(e){return pf.get(e)}function gf(){return[...pf.values()]}function _f(){let e,t,n=!1,r=()=>{clearTimeout(e),e=void 0,t=void 0};return{cancel:r,start(i,a,o){r(),n=!1,t={x:i,y:a},e=setTimeout(()=>{e=void 0,n=!0,o()},500)},move(e,n){t&&Math.hypot(e-t.x,n-t.y)>10&&r()},consumeClick(){let e=n;return n=!1,e},contextMenu(){let e=n;return t&&(n=!0),r(),e},reset(){r(),n=!1}}}function vf(){let[e]=(0,Y.useState)(_f);return(0,Y.useEffect)(()=>e.cancel,[e]),{onPointerDown:t=>{if(e.reset(),t.pointerType!==`touch`||!t.isPrimary)return;let n=t.target;if(!t.currentTarget.contains(n)||n.closest(`button, input, textarea, select, a, [contenteditable="true"], [role="dialog"]`))return;let{clientX:r,clientY:i}=t;e.start(r,i,()=>{n.dispatchEvent(new window.MouseEvent(`contextmenu`,{bubbles:!0,cancelable:!0,clientX:r,clientY:i}))})},onPointerMove:t=>e.move(t.clientX,t.clientY),onPointerUp:e.cancel,onPointerCancel:e.cancel,onPointerLeave:e.cancel,onDragStartCapture:t=>{e.cancel(),e.consumeClick()&&t.preventDefault()},onContextMenuCapture:t=>{t.isTrusted&&e.contextMenu()&&(t.preventDefault(),t.stopPropagation())},onClickCapture:t=>{e.consumeClick()&&(t.preventDefault(),t.stopPropagation())}}}function yf(e,t,n,r,i=!1){let a=e.indexOf(n);if(a<0)return new Set(r);let o=t===null?-1:e.indexOf(t),s=o<0?a:o,c=i?new Set(r):new Set;for(let t of e.slice(Math.min(s,a),Math.max(s,a)+1))c.add(t);return c}var bf=n(a(),1),xf=[];function Sf(e){if(e.key!==`Escape`||e.isComposing||e.defaultPrevented)return;let t=xf[xf.length-1];t&&(e.preventDefault(),t())}function Cf(e,t=!0){let n=(0,Y.useRef)(e);(0,Y.useEffect)(()=>{n.current=e});let r=t&&!!e;(0,Y.useEffect)(()=>{if(!r)return;let e=()=>n.current?.();return xf.push(e),xf.length===1&&window.addEventListener(`keydown`,Sf),()=>{let t=xf.indexOf(e);t>=0&&xf.splice(t,1),xf.length===0&&window.removeEventListener(`keydown`,Sf)}},[r])}function wf({x:e,y:t,onClose:n,className:r,children:i}){let a=(0,Y.useRef)(null),[o,s]=(0,Y.useState)({x:e,y:t});return Cf(n),(0,Y.useLayoutEffect)(()=>{let n=a.current;if(!n)return;let{width:r,height:i}=n.getBoundingClientRect();s({x:Math.max(8,Math.min(e,window.innerWidth-r-8)),y:Math.max(8,Math.min(t,window.innerHeight-i-8))})},[e,t]),(0,bf.createPortal)((0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`fixed inset-0 z-menu-scrim`,onClick:n,onContextMenu:e=>{e.preventDefault(),n()}}),(0,X.jsx)(`div`,{ref:a,style:{left:o.x,top:o.y},className:G(`fixed z-menu max-h-viewport-modal overflow-y-auto`,r),children:i})]}),document.body)}var Tf=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.platform||navigator.userAgent),Ef={Delete:`Del`,Backspace:`⌫`,Enter:`↵`,ArrowUp:`↑`,ArrowDown:`↓`};function Df(e){let t=e.split(`+`),n=t.pop()||``,r=Ef[n]||(n.length===1?n.toUpperCase():n);if(Tf){let e={Mod:`⌘`,Shift:`⇧`,Alt:`⌥`,Ctrl:`⌃`};return[...[`Ctrl`,`Alt`,`Shift`,`Mod`].filter(e=>t.includes(e)).map(t=>e[t]),r].join(``)}return[...t.map(e=>e===`Mod`?`Ctrl`:e),r].join(`+`)}function Of(e,t){let n=t.split(`+`),r=n.pop()||``;return(Tf?e.metaKey:e.ctrlKey)!==n.includes(`Mod`)||e.shiftKey!==n.includes(`Shift`)||e.altKey!==n.includes(`Alt`)||Tf&&e.ctrlKey!==n.includes(`Ctrl`)?!1:r.length===1?e.key.toLowerCase()===r.toLowerCase():e.key===r}function kf(e){if(e?.closest?.(`input, textarea, select, [contenteditable="true"], [role="dialog"], [role="menu"]`))return!0;let t=typeof window<`u`?window.getSelection():null;return!!t&&!t.isCollapsed&&t.toString().length>0}function Af(e,t){if(e.defaultPrevented||e.nativeEvent.isComposing||kf(e.target))return!1;let n=t.find(t=>t.shortcut&&!t.disabled&&Of(e,t.shortcut));return n?(e.preventDefault(),e.stopPropagation(),n.run(),!0):!1}function jf(e){return e.key===`ContextMenu`||e.key===`F10`&&e.shiftKey}function Mf(){return typeof window<`u`&&window.matchMedia(`(max-width: 767px)`).matches}function Nf(e,t=`below`){let n=e.getBoundingClientRect();return t===`below`?{x:n.left,y:n.bottom+4}:{x:n.left+Math.min(24,n.width/2),y:n.top+Math.min(24,n.height/2)}}function Pf(e){let t=[];for(let n of e){let e=t[t.length-1];e&&(e[0].group??``)===(n.group??``)?e.push(n):t.push([n])}return t}function Ff(e,t){t(),setTimeout(()=>{e.run()},0)}function If({anchor:e,items:t,onClose:n,label:r}){let i=(0,Y.useRef)(null);return(0,Y.useEffect)(()=>{let e=document.activeElement;return i.current?.querySelector(`[role="menuitem"]:not([aria-disabled="true"])`)?.focus(),()=>{e?.isConnected&&e.focus({preventScroll:!0})}},[]),(0,X.jsx)(wf,{x:e.x,y:e.y,onClose:n,className:`min-w-[200px] rounded-lg border bg-background py-1 shadow-elevation-3`,children:(0,X.jsx)(`div`,{ref:i,role:`menu`,"aria-label":r,onKeyDown:e=>{let t=Array.from(i.current?.querySelectorAll(`[role="menuitem"]:not([aria-disabled="true"])`)??[]);if(t.length===0)return;let r=t.indexOf(document.activeElement),a=e=>t[(e+t.length)%t.length]?.focus();switch(e.key){case`ArrowDown`:e.preventDefault(),a(r+1);return;case`ArrowUp`:e.preventDefault(),a(r<0?-1:r-1);return;case`Home`:e.preventDefault(),a(0);return;case`End`:e.preventDefault(),a(-1);return;case`Tab`:e.preventDefault(),n();return}if(e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let n=e.key.toLowerCase(),i=[...t.slice(r+1),...t.slice(0,r+1)].find(e=>e.textContent?.trim().toLowerCase().startsWith(n));i&&(e.preventDefault(),i.focus())}},onContextMenu:e=>e.preventDefault(),children:Pf(t).map((e,t)=>(0,X.jsxs)(Y.Fragment,{children:[t>0&&(0,X.jsx)(`div`,{role:`separator`,className:`my-1 h-px bg-border`}),e[0].groupLabel&&(0,X.jsx)(`div`,{className:`px-3 py-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:e[0].groupLabel}),e.map(e=>{let t=e.icon;return(0,X.jsxs)(`button`,{type:`button`,role:`menuitem`,tabIndex:-1,"aria-disabled":e.disabled||void 0,title:e.hint,onClick:()=>{e.disabled||Ff(e,n)},className:G(`flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm outline-none`,e.disabled?`cursor-default opacity-50`:e.destructive?`text-destructive hover:bg-destructive hover:text-destructive-foreground focus:bg-destructive focus:text-destructive-foreground`:`hover:bg-muted focus:bg-muted`),children:[t?(0,X.jsx)(t,{className:`h-3.5 w-3.5 shrink-0`}):(0,X.jsx)(`span`,{className:`w-3.5 shrink-0`}),(0,X.jsx)(`span`,{className:`flex-1 truncate`,children:e.label}),e.shortcut&&(0,X.jsx)(`kbd`,{className:`ml-4 shrink-0 font-sans text-[11px] text-muted-foreground`,children:Df(e.shortcut)})]},e.id)})]},`${e[0].group??``}:${t}`))})})}function Lf({items:e,onClose:t,header:n}){Cf(t);let r=`flex w-full items-center gap-3 rounded-xl border bg-card px-4 py-3.5 text-base font-medium transition-transform active:scale-[.98]`;return(0,bf.createPortal)((0,X.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,className:`fixed inset-0 z-fullscreen flex flex-col bg-background animate-in slide-in-from-bottom-10 fade-in duration-200`,onClick:t,onContextMenu:e=>e.preventDefault(),children:[(0,X.jsxs)(`div`,{className:`flex shrink-0 items-start gap-3 border-b p-4`,onClick:e=>e.stopPropagation(),children:[(0,X.jsx)(`div`,{className:`min-w-0 flex-1`,children:n}),(0,X.jsx)(`button`,{type:`button`,onClick:t,className:`rounded-sm p-2 hover:bg-muted`,title:`Close`,"aria-label":`Close`,children:(0,X.jsx)(Ne,{className:`h-5 w-5`})})]}),(0,X.jsx)(`div`,{className:`min-h-4 flex-1`}),(0,X.jsxs)(`div`,{className:`max-h-[75vh] shrink-0 space-y-2 overflow-y-auto px-4 pt-2`,style:{paddingBottom:`calc(var(--safe-bottom) + 1.25rem)`},onClick:e=>e.stopPropagation(),children:[Pf(e).map((e,n)=>(0,X.jsxs)(`div`,{className:G(`space-y-2`,n>0&&`pt-2`),children:[e[0].groupLabel&&(0,X.jsx)(`div`,{className:`px-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground`,children:e[0].groupLabel}),e.map(e=>{let n=e.icon;return(0,X.jsxs)(`button`,{type:`button`,disabled:e.disabled,onClick:()=>Ff(e,t),className:G(r,e.destructive&&`border-destructive/30 text-destructive`,e.disabled&&`opacity-50`),children:[n&&(0,X.jsx)(n,{className:G(`h-5 w-5 shrink-0`,!e.destructive&&`text-muted-foreground`)}),e.label]},e.id)})]},`${e[0].group??``}:${n}`)),(0,X.jsx)(`button`,{type:`button`,onClick:t,className:`${r} justify-center bg-muted`,children:`Cancel`})]})]}),window.document.body)}function Rf({anchor:e,items:t,onClose:n,label:r,header:i}){return t.length===0?null:Mf()?(0,X.jsx)(Lf,{items:t,onClose:n,header:i??(r&&(0,X.jsx)(`div`,{className:`truncate text-base font-semibold`,children:r}))}):(0,X.jsx)(If,{anchor:e,items:t,onClose:n,label:r})}var zf=null;function Bf(){return zf||=fetch(`https://api.iconify.design/collection?prefix=ph`).then(e=>e.json()).then(e=>[...e.uncategorized??[],...Object.values(e.categories??{}).flat()].filter(e=>e.endsWith(`-fill`)).map(e=>`ph:${e}`)).catch(()=>(zf=null,[])),zf}async function Vf(e,t=120){let n=e.trim();if(!n)return[];try{let e=await(await fetch(`https://api.iconify.design/search?query=${encodeURIComponent(n)}&limit=${t}`)).json();return Array.isArray(e.icons)?e.icons:[]}catch{return[]}}var Hf=[`#ef4444`,`#f97316`,`#f59e0b`,`#eab308`,`#84cc16`,`#22c55e`,`#14b8a6`,`#06b6d4`,`#3b82f6`,`#6366f1`,`#8b5cf6`,`#a855f7`,`#ec4899`,`#f43f5e`,`#64748b`,`#78716c`],Uf={home:{icon:`ph:house-fill`,color:`#3b82f6`},travel:{icon:`ph:airplane-tilt-fill`,color:`#06b6d4`},work:{icon:`ph:briefcase-fill`,color:`#64748b`},books:{icon:`ph:books-fill`,color:`#a855f7`},workouts:{icon:`ph:barbell-fill`,color:`#22c55e`},sport:{icon:`ph:barbell-fill`,color:`#22c55e`},sports:{icon:`ph:barbell-fill`,color:`#22c55e`},fitness:{icon:`ph:barbell-fill`,color:`#22c55e`},beauty:{icon:`ph:flower-lotus-fill`,color:`#ec4899`},recipes:{icon:`ph:cooking-pot-fill`,color:`#f97316`},"to watch":{icon:`ph:monitor-play-fill`,color:`#f43f5e`},"to read":{icon:`ph:book-open-text-fill`,color:`#8b5cf6`},learning:{icon:`ph:graduation-cap-fill`,color:`#6366f1`},tech:{icon:`ph:cpu-fill`,color:`#14b8a6`},music:{icon:`ph:music-notes-fill`,color:`#eab308`},finance:{icon:`ph:piggy-bank-fill`,color:`#84cc16`},shopping:{icon:`ph:shopping-cart-fill`,color:`#f59e0b`},ideas:{icon:`ph:lightbulb-filament-fill`,color:`#facc15`},data:{icon:`ph:database-fill`,color:`#14b8a6`}},Wf={"workspace:home":{icon:`ph:house-fill`,color:`#3b82f6`},"workspace:data":{icon:`ph:database-fill`,color:`#14b8a6`}},Gf={file:{icon:`ph:folder-fill`,color:`#64748b`},cacache:{icon:`ph:database-fill`,color:`#14b8a6`},s3:{icon:`ph:cloud-fill`,color:`#0ea5e9`},gdrive:{icon:`mdi:google-drive`,color:`#fbbc04`},http:{icon:`ph:globe-fill`,color:`#0ea5e9`},imap:{icon:`ph:envelope-fill`,color:`#a855f7`}},Kf={icon:`ph:hard-drive-fill`,color:`#64748b`};function qf(e){let t=e.config?.ui??{},n=e.address&&Wf[e.address]||e.driver&&Gf[e.driver]||Kf;return{icon:typeof t.icon==`string`?t.icon:n.icon??Kf.icon,color:typeof t.color==`string`?t.color:n.color??Kf.color}}function Jf(e){let t=e.metadata?.ui??{},n=Uf[String(e.label??e.name??``).trim().toLowerCase()];return{icon:typeof t.icon==`string`?t.icon:n?.icon,color:typeof t.color==`string`?t.color:e.color??n?.color}}function Yf(e){let t=Uf[(e.split(`/`).filter(Boolean).pop()??``).trim().toLowerCase()];return t?{metadata:Xf(void 0,t)}:null}function Xf(e,t){let n={...e??{}},r={...n.ui??{}};return`icon`in t&&(t.icon?r.icon=t.icon:delete r.icon),`color`in t&&(t.color?r.color=t.color:delete r.color),n.ui=r,n}var Zf=(e,t)=>Math.floor(Math.random()*(t-e+1))+e,Qf=()=>({h:Zf(0,360),s:Zf(42,98),l:Zf(40,90)}),$f=(e,t,n)=>{t/=100,n/=100;let r=(1-Math.abs(2*n-1))*t,i=r*(1-Math.abs(e/60%2-1)),a=n-r/2,o=0,s=0,c=0;0<=e&&e<60?(o=r,s=i):60<=e&&e<120?(o=i,s=r):120<=e&&e<180?(s=r,c=i):180<=e&&e<240?(s=i,c=r):240<=e&&e<300?(o=i,c=r):300<=e&&e<360&&(o=r,c=i),o=Math.round((o+a)*255),s=Math.round((s+a)*255),c=Math.round((c+a)*255);let l=e=>e.toString(16).padStart(2,`0`);return`#${l(o)}${l(s)}${l(c)}`},ep=()=>{let{h:e,s:t,l:n}=Qf();return $f(e,t,n)},tp=e=>{let t=e.trim().match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);if(!t)return null;let n=t[1];n.length===3&&(n=n.split(``).map(e=>e+e).join(``));let r=e=>{let t=parseInt(n.slice(e*2,e*2+2),16)/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4};return .2126*r(0)+.7152*r(1)+.0722*r(2)},np=(e,t=.82)=>{let n=tp(e);return n===null||n>t},rp=e=>e&&!np(e)?e:void 0,ip=e=>{if(!e)return`text-muted-foreground/70`;let t=tp(e);return t!==null&&t>.5?`text-black/45`:`text-white/80`},ap=e=>{let t=tp(e);return t!==null&&t>.45?`text-black`:`text-white`},op=[{color:`text-data-1`,chip:`bg-data-1/15`},{color:`text-data-2`,chip:`bg-data-2/15`},{color:`text-data-3`,chip:`bg-data-3/15`},{color:`text-data-4`,chip:`bg-data-4/15`},{color:`text-data-5`,chip:`bg-data-5/15`},{color:`text-data-6`,chip:`bg-data-6/15`},{color:`text-data-7`,chip:`bg-data-7/15`},{color:`text-data-8`,chip:`bg-data-8/15`},{color:`text-data-9`,chip:`bg-data-9/15`},{color:`text-data-10`,chip:`bg-data-10/15`},{color:`text-data-11`,chip:`bg-data-11/15`},{color:`text-data-12`,chip:`bg-data-12/15`}];function sp(e,t){return{Icon:e,...op[t-1]}}var cp={tab:sp(ie,7),link:sp(ie,7),email:sp(wn,3),note:sp(Sn,3),task:sp(En,5),message:sp(Me,6),identity:sp(Qe,2),contact:sp(Qe,2),device:sp(fe,10),application:sp(tt,11),dotfile:sp(Jt,4),document:sp(Tn,9)},lp=[{test:/^image\//,spec:sp(y,5)},{test:/^video\//,spec:sp(nn,11)},{test:/^audio\//,spec:sp(B,10)},{test:/pdf$/,spec:sp(Tn,1)},{test:/zip|tar|gzip|7z|rar|compressed/,spec:sp(Pt,12)},{test:/json|javascript|typescript|xml|html|css|x-sh|python/,spec:sp(Xn,6)},{test:/^text\//,spec:sp(Tn,12)}],up=sp(xt,6),dp=sp(xt,9);function fp(e){let t=(e.schema||``).split(`/`).pop()||``;if(t===`file`){let t=String(e.metadata?.contentType||``).toLowerCase();return lp.find(({test:e})=>e.test(t))?.spec||up}return cp[t]||dp}var pp={3.5:`h-3.5 w-3.5`,4:`h-4 w-4`,5:`h-5 w-5`,10:`h-10 w-10`};function mp(e){let t=[],n=typeof e?.favIconUrl==`string`?e.favIconUrl:``;/^https?:\/\//i.test(n)&&t.push(n);let r=typeof e?.url==`string`?e.url:``;try{let e=new URL(r).origin;if(/^https?:/i.test(e)){let n=`${e}/favicon.ico`;t.includes(n)||t.push(n)}}catch{}return t}function hp({document:e,size:t=4,chip:n=!1,className:r}){let i=fp(e),a=e.schema===`data/schema/tab`?mp(e.data):[],[o,s]=(0,Y.useState)(0),c=a[o]??null,l=c?(0,X.jsx)(`img`,{src:c,alt:``,loading:`lazy`,onError:()=>s(e=>e+1),className:G(pp[t],`rounded-xs object-contain`,!n&&`shrink-0`,!n&&r)}):(0,X.jsx)(i.Icon,{className:G(pp[t],i.color,!n&&`shrink-0`,!n&&r)});return n?(0,X.jsx)(`span`,{className:G(`inline-flex shrink-0 items-center justify-center rounded-md`,t>=10?`p-3`:`p-1`,i.chip,r),children:l}):l}var gp={context:(0,X.jsx)(Ge,{className:`h-3.5 w-3.5`}),directory:(0,X.jsx)(Nn,{className:`h-3.5 w-3.5`}),backends:(0,X.jsx)(gr,{className:`h-3.5 w-3.5`}),relations:(0,X.jsx)(vn,{className:`h-3.5 w-3.5`})},_p={context:`Context tree`,directory:`Directory tree`,backends:`Backends tree`,relations:`Relations`};function vp(e,t){return e===`/`?`/${t}`:`${e}/${t}`}function yp(e,t){let n=(0,Y.useRef)(null),r=(0,Y.useRef)(!1),i=()=>{n.current&&=(clearTimeout(n.current),null)},a=e=>()=>{if(r.current){r.current=!1;return}e()};return t?{guardClick:a,handlers:{onContextMenu:n=>{n.preventDefault(),n.stopPropagation(),t({clientX:n.clientX,clientY:n.clientY,path:e})},onPointerDown:a=>{if(a.pointerType!==`touch`)return;let{clientX:o,clientY:s}=a;i(),n.current=setTimeout(()=>{r.current=!0,t({clientX:o,clientY:s,path:e})},500)},onPointerUp:i,onPointerLeave:i,onPointerMove:i}}:{handlers:{},guardClick:a}}function bp(e,t,n){let r=vp(t,e.name);return r.toLowerCase().includes(n)||(e.label||``).toLowerCase().includes(n)?!0:e.children?.some(e=>bp(e,r,n))??!1}var xp=200;function Sp({onConfirm:e,onCancel:t,busy:n}){let[r,i]=(0,Y.useState)(``);return(0,X.jsxs)(`div`,{className:`flex min-h-11 items-center gap-2 rounded-md bg-card px-3 py-2.5 text-sm shadow-elevation-1`,children:[(0,X.jsx)(ar,{className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,X.jsx)(`input`,{type:`text`,value:r,onChange:e=>i(e.target.value),onKeyDown:n=>{n.key===`Enter`&&r.trim()&&e(r.trim()),n.key===`Escape`&&t()},onBlur:()=>{n||t()},placeholder:`New folder name…`,autoFocus:!0,disabled:n,className:`w-full flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground`}),n&&(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:`Creating…`})]})}function Cp({node:e,parentPath:t,query:n,selected:r,onToggle:i,onActivate:a,onRowMenu:o,createParent:s,onCreateConfirm:l,onCreateCancel:u,creating:d}){let f=vp(t,e.name),p=!!e.children?.length,[m,h]=(0,Y.useState)(!1),{handlers:g,guardClick:_}=yp(f,o);if(n&&!bp(e,t,n))return null;let v=s===f,y=m||n.length>0||v,b=r.has(f),x=e.type===`canvas`,S=Jf(e);return(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`div`,{className:G(`group relative flex min-h-11 items-center gap-2 rounded-md px-3 py-2.5 cursor-pointer transition-all select-none text-sm shadow-elevation-1 hover:shadow`,`before:absolute before:left-0 before:top-0 before:bottom-0 before:w-1.5 before:transition-colors`,b?`bg-primary/[0.08] hover:bg-primary/[0.12] before:bg-primary`:`bg-card hover:bg-primary/[0.04] before:bg-transparent`),onClick:_(()=>i(f)),onDoubleClick:a?()=>a(f):void 0,title:f,...g,children:[(0,X.jsx)(`button`,{type:`button`,className:G(`shrink-0 text-muted-foreground hover:text-foreground`,!p&&`invisible`),onClick:e=>{e.stopPropagation(),h(e=>!e)},children:y?(0,X.jsx)(Ke,{className:`w-4 h-4`}):(0,X.jsx)(Xe,{className:`w-4 h-4`})}),(0,X.jsx)(c,{icon:S.icon||(x?`ph:squares-four-fill`:`ph:folder-fill`),width:16,height:16,color:rp(S.color),className:G(`shrink-0`,!rp(S.color)&&(x?`text-primary`:`text-muted-foreground`))}),(0,X.jsx)(`span`,{className:`flex-1 truncate font-medium`,title:e.description||void 0,children:e.label||e.name})]}),y&&p||v?(0,X.jsxs)(`div`,{className:`ml-[22px] mt-1.5 space-y-1.5`,children:[v&&l&&u&&(0,X.jsx)(Sp,{busy:d,onConfirm:e=>{h(!0),l(f,e)},onCancel:u}),y&&e.children?.map(e=>(0,X.jsx)(Cp,{node:e,parentPath:f,query:n,selected:r,onToggle:i,onActivate:a,onRowMenu:o,createParent:s,onCreateConfirm:l,onCreateCancel:u,creating:d},e.id||e.name))]}):null]})}function wp({workspaces:e,loading:t,onPick:n}){return t&&e.length===0?(0,X.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:`Loading…`}):e.length===0?(0,X.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:`No workspaces found`}):(0,X.jsx)(`div`,{className:`space-y-1.5`,children:e.map(e=>{let t=rp(e.color);return(0,X.jsxs)(`div`,{onClick:()=>n(e.name),className:`group relative flex cursor-pointer items-center gap-2 rounded-md bg-card px-3 py-2.5 shadow-elevation-1 transition-all hover:bg-accent/50 hover:shadow`,style:{borderRight:`6px solid ${t||`transparent`}`,borderRadius:t?`6px 0 0 6px`:void 0},children:[(0,X.jsx)(c,{icon:e.icon||`ph:stack-fill`,width:18,height:18,color:t,className:G(`shrink-0`,!t&&`text-muted-foreground`)}),(0,X.jsx)(`span`,{className:`flex-1 truncate text-sm font-medium`,children:e.label||e.name}),(0,X.jsx)(Xe,{className:`h-4 w-4 shrink-0 text-muted-foreground`})]},e.id||e.name)})})}function Tp({workspaceName:e,treeTab:t,onTreeTabChange:n,selectedDocIds:r,onToggleDoc:i,onNavigate:a,excludeDocumentIds:o}){let[s,c]=(0,Y.useState)(`folder`),[l,u]=(0,Y.useState)(``),d=l.trim().toLowerCase(),[f,p]=(0,Y.useState)(`/`),[m,h]=(0,Y.useState)(null),[g,_]=(0,Y.useState)(!1),[v,y]=(0,Y.useState)([]),[b,x]=(0,Y.useState)(!1),[S,C]=(0,Y.useState)(``),[w,T]=(0,Y.useState)(``),[E,D]=(0,Y.useState)(t),O=n?t:E,k=e=>{p(`/`),c(`folder`),C(``),T(``),a?.(`/`),n?n(e):D(e)},[A,j]=(0,Y.useState)(O);O!==A&&(j(O),p(`/`),c(`folder`)),(0,Y.useEffect)(()=>{let e=setTimeout(()=>T(S.trim()),300);return()=>clearTimeout(e)},[S]),(0,Y.useEffect)(()=>{let t=!1;async function n(){_(!0);try{let n=await yi(e,O);t||h(n)}catch{t||h(null)}finally{t||_(!1)}}return n(),()=>{t=!0}},[e,O]),(0,Y.useEffect)(()=>{if(s!==`documents`)return;let t=!1,n=O===`directory`?`directory`:Pa,r=O===`context`?`context`:`directory`;async function i(){x(!0);try{let i=w?await qi(e,f,[],{treeName:n,treeType:r,q:w,limit:xp}):await Ci(e,f,n,{limit:xp});t||y(i.payload||[])}catch{t||y([])}finally{t||x(!1)}}return i(),()=>{t=!0}},[e,O,f,s,w]);let M=e=>`${O===`directory`?`dir`:`ctx`}://${e.replace(/^\/+/,``)}`,N=e=>{p(e),a?.(e)},P=o?.size?v.filter(e=>!o.has(e.id)):v;return s===`folder`?(0,X.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,X.jsxs)(`div`,{className:`shrink-0 space-y-2 border-b bg-muted/30 px-3 py-2`,children:[!n&&(0,X.jsx)(`div`,{className:`flex items-center gap-1 rounded-md border border-input p-0.5`,children:[`context`,`directory`].map(e=>(0,X.jsxs)(`button`,{type:`button`,onClick:()=>k(e),className:G(`flex flex-1 items-center justify-center gap-1.5 rounded px-2 py-1 text-xs transition-colors`,O===e?`bg-primary text-primary-foreground`:`text-muted-foreground hover:bg-muted hover:text-foreground`),title:`Browse the ${_p[e].toLowerCase()}`,children:[gp[e],(0,X.jsx)(`span`,{className:`font-mono`,children:e===`directory`?`dir://`:`ctx://`})]},e))}),(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Step 1 of 2 · Pick a folder`}),(0,X.jsxs)(`button`,{type:`button`,onClick:()=>c(`documents`),className:`inline-flex items-center gap-1 rounded-md bg-primary px-2.5 py-1 text-xs font-medium text-primary-foreground transition-opacity hover:opacity-90`,children:[`Next `,(0,X.jsx)(Xe,{className:`h-3.5 w-3.5`})]})]}),(0,X.jsxs)(`div`,{className:`relative`,children:[(0,X.jsx)(mr,{className:`pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground`}),(0,X.jsx)(`input`,{type:`text`,placeholder:`Filter folders…`,value:l,onChange:e=>u(e.target.value),className:`w-full rounded-md border border-input bg-background py-1.5 pl-8 pr-3 text-xs placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring`})]})]}),(0,X.jsx)(`div`,{className:`min-h-0 flex-1 space-y-1.5 overflow-y-auto p-3`,children:g?(0,X.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:`Loading…`}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:G(`group relative flex min-h-11 items-center gap-2 rounded-md px-3 py-2.5 cursor-pointer transition-all select-none text-sm shadow-elevation-1 hover:shadow`,`before:absolute before:left-0 before:top-0 before:bottom-0 before:w-1.5 before:transition-colors`,f===`/`?`bg-primary/[0.08] hover:bg-primary/[0.12] before:bg-primary`:`bg-card hover:bg-primary/[0.04] before:bg-transparent`),onClick:()=>N(`/`),onDoubleClick:()=>{N(`/`),c(`documents`)},title:`/`,children:[(0,X.jsx)(Ke,{className:`w-4 h-4 shrink-0 text-muted-foreground`}),(0,X.jsx)(`span`,{className:`flex-1 truncate font-medium`,children:`/`})]}),(0,X.jsx)(`div`,{className:`ml-[22px] space-y-1.5`,children:m?.children?.length?m.children.map(e=>(0,X.jsx)(Cp,{node:e,parentPath:`/`,query:d,selected:new Set([f]),onToggle:N,onActivate:e=>{N(e),c(`documents`)}},e.id||e.name)):(0,X.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`Empty tree`})})]})})]}):(0,X.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,X.jsxs)(`div`,{className:`shrink-0 space-y-2 border-b bg-muted/30 px-3 py-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsxs)(`button`,{type:`button`,onClick:()=>c(`folder`),className:`inline-flex min-w-0 items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,title:`Back to folders`,children:[(0,X.jsx)(Xe,{className:`h-3.5 w-3.5 shrink-0 rotate-180`}),(0,X.jsx)(`span`,{className:`truncate font-mono`,children:M(f)})]}),(0,X.jsx)(`span`,{className:`ml-auto shrink-0 text-xs text-muted-foreground`,children:`Step 2 of 2 · Pick a document`})]}),(0,X.jsxs)(`div`,{className:`relative`,children:[(0,X.jsx)(mr,{className:`pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground`}),(0,X.jsx)(`input`,{type:`text`,placeholder:`Search documents in this folder…`,value:S,onChange:e=>C(e.target.value),className:`w-full rounded-md border border-input bg-background py-1.5 pl-8 pr-7 text-xs placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring`}),S&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>C(``),className:`absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground`,"aria-label":`Clear document search`,children:(0,X.jsx)(Ne,{className:`h-3.5 w-3.5`})})]})]}),(0,X.jsx)(`div`,{className:`min-h-0 flex-1 space-y-1 overflow-y-auto p-3`,children:b?(0,X.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:`Loading documents…`}):P.length===0?(0,X.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:w?`No documents match “${w}” here.`:`No documents in this folder.`}):P.map(e=>{let t=xo(e),n=r.has(e.id);return(0,X.jsxs)(`div`,{onClick:()=>i(e.id),className:G(`flex min-h-9 items-center gap-2 rounded-md px-3 py-1.5 cursor-pointer transition-all select-none text-sm`,n?`bg-primary/[0.08] hover:bg-primary/[0.12]`:`hover:bg-primary/[0.04]`),children:[(0,X.jsx)(`input`,{type:`checkbox`,checked:n,onChange:()=>i(e.id),className:`shrink-0`,onClick:e=>e.stopPropagation()}),(0,X.jsx)(hp,{document:e,size:3.5}),(0,X.jsx)(`span`,{className:`flex-1 truncate`,children:t.title})]},e.id)})})]})}function Ep({onClose:e,onConfirm:t,documentCount:n,fixedWorkspaceName:r,excludeWorkspace:i,multiple:a=!0,saving:o=!1,savingContent:s,sizeClassName:c,tabs:l=[`context`,`directory`],title:u,confirmLabel:d,onConfirmRelation:f,relationWorkspaceName:p,relationPredicates:m,relationExcludeIds:h}){let[g,_]=(0,Y.useState)(r?`tree`:`workspace`);Cf(e,!o);let[v,y]=(0,Y.useState)([]),[b,x]=(0,Y.useState)(!r),[S,C]=(0,Y.useState)(r??null),[w,T]=(0,Y.useState)(l.includes(`context`)||l.includes(`directory`)?`pins`:l[0]??`context`),E=m?.length?m:[...Oa],[D,O]=(0,Y.useState)(E[0]??`references`),[k,A]=(0,Y.useState)(`out`),[j,M]=(0,Y.useState)(new Set),[N,P]=(0,Y.useState)(null),[F,I]=(0,Y.useState)(`context`),[L,ee]=(0,Y.useState)(!1),ne=w===`pins`?F:w;(0,Y.useEffect)(()=>{if(!S)return;let e=!1;return Ja(S).then(t=>{e||P(t)}).catch(()=>{e||ee(!0)}),()=>{e=!0}},[S]);let R=w===`relations`,[z,B]=(0,Y.useState)(null),[re,ie]=(0,Y.useState)(!1),[ae,oe]=(0,Y.useState)(new Set),[se,ce]=(0,Y.useState)(``),V=se.trim().toLowerCase(),{showErrorToast:le}=co(),[ue,de]=(0,Y.useState)(null),[fe,pe]=(0,Y.useState)(null),[me,he]=(0,Y.useState)(!1),ge=yp(`/`,e=>de(e)),_e=w!==`pins`&&w!==`backends`&&w!==`relations`,ve=async(e,t)=>{let n=t.trim().replace(/^\/+|\/+$/g,``);if(!(!n||!S||me||!_e)){he(!0);try{let t=`${e===`/`?``:e}/${n}`;await Hi(S,t,!0,w===`directory`?`directory`:Pa),pa(S);let r=await yi(S,w);B(r),oe(e=>a?new Set([...e,t]):new Set([t])),pe(null)}catch(e){le(e instanceof Error?e.message:`Failed to create folder`)}finally{he(!1)}}},[ye,be]=(0,Y.useState)(r);r!==ye&&(be(r),r||x(!0)),(0,Y.useEffect)(()=>{r||Fr().then(e=>y(e.filter(e=>e.id!==i&&e.name!==i))).catch(()=>y([])).finally(()=>x(!1))},[r,i]),(0,Y.useEffect)(()=>{if(!S||w===`relations`||w===`pins`)return;let e=!1;async function t(){ie(!0);try{let t=await yi(S,w);e||B(t)}catch{e||B(null)}finally{e||ie(!1)}}return t(),()=>{e=!0}},[S,w]);let xe=e=>{e!==S&&(P(null),ee(!1)),T(l.includes(`context`)||l.includes(`directory`)?`pins`:l[0]??`context`),C(e),oe(new Set),M(new Set),_(`tree`)},H=e=>{M(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},Se=e=>{if(!a){oe(new Set([e]));return}oe(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},Ce=R?j.size>0&&!!f:ae.size>0,we=async()=>{if(!(!S||o||!Ce)){if(R){await f?.({predicate:D,direction:k,targetIds:Array.from(j)},{workspaceName:p??S});return}await t(Array.from(ae),{workspaceName:S,treeName:ne===`context`?Pa:ne,treeType:ne===`context`?`context`:`directory`})}},U=n??1;return o&&s?(0,X.jsx)(`div`,{className:G(`flex flex-col overflow-hidden rounded-2xl border bg-card shadow-elevation-4`,c||`h-viewport-card max-h-full w-[min(380px,90vw)] max-md:h-full max-md:w-full max-md:shadow-elevation-5`),children:s}):(0,X.jsxs)(`div`,{className:G(`flex flex-col overflow-hidden rounded-2xl border bg-card shadow-elevation-4`,c||`h-viewport-card max-h-full w-[min(380px,90vw)] max-md:h-full max-md:w-full max-md:shadow-elevation-5`),children:[(0,X.jsxs)(`div`,{className:`flex h-12 shrink-0 items-center justify-between border-b px-4`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,X.jsx)(Kt,{className:`h-4 w-4`}),u??(g===`workspace`?`Link to…`:R?`Relate ${U} document${U===1?``:`s`} to…`:`Link ${U} document${U===1?``:`s`} to…`)]}),(0,X.jsx)(`button`,{type:`button`,onClick:e,disabled:o,className:`text-muted-foreground transition-colors hover:text-foreground disabled:opacity-40`,"aria-label":`Close`,children:(0,X.jsx)(Ne,{className:`h-4 w-4`})})]}),(0,X.jsx)(`div`,{className:`flex-1 overflow-hidden`,children:(0,X.jsxs)(`div`,{className:`grid h-full w-[200%] grid-cols-2 transition-transform duration-200`,style:{transform:g===`workspace`?`translateX(0)`:`translateX(-50%)`},children:[(0,X.jsx)(`div`,{className:`flex min-w-0 flex-col overflow-y-auto p-2`,children:(0,X.jsx)(wp,{workspaces:v,loading:b,onPick:xe})}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-col overflow-hidden`,children:[(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 overflow-x-auto border-b px-2 pt-2`,children:[!r&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>_(`workspace`),className:`mr-1 rounded p-1.5 text-muted-foreground hover:bg-muted hover:text-foreground touch-target`,"aria-label":`Back to workspaces`,children:(0,X.jsx)(Xe,{className:`h-4 w-4 rotate-180`})}),(l.includes(`context`)||l.includes(`directory`))&&(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{T(`pins`),oe(new Set),pe(null)},className:G(`flex shrink-0 items-center gap-1.5 border-b-2 px-3 py-2 text-xs`,w===`pins`?`border-primary`:`border-transparent text-muted-foreground`),children:[(0,X.jsx)(te,{className:`h-3.5 w-3.5`}),`Pins`]}),l.map(e=>(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{T(e),oe(new Set),pe(null)},className:G(`flex shrink-0 items-center gap-1.5 rounded-t-md border-b-2 px-3 py-2 text-xs font-medium transition-colors`,w===e?`border-primary text-foreground`:`border-transparent text-muted-foreground hover:text-foreground`),children:[gp[e],_p[e]]},e))]}),!R&&(0,X.jsx)(`div`,{className:`shrink-0 border-b p-2`,children:(0,X.jsxs)(`div`,{className:`relative`,children:[(0,X.jsx)(mr,{className:`pointer-events-none absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,X.jsx)(`input`,{type:`text`,placeholder:`Search paths…`,value:se,onChange:e=>ce(e.target.value),className:`w-full rounded-md border border-input bg-background py-2 pl-9 pr-3 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring`})]})}),R&&(0,X.jsxs)(`div`,{className:`shrink-0 space-y-2 border-b bg-primary/[0.04] px-3 py-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`label`,{htmlFor:`relation-predicate`,className:`shrink-0 text-xs text-muted-foreground`,children:`Predicate`}),(0,X.jsx)(`select`,{id:`relation-predicate`,value:D,onChange:e=>O(e.target.value),className:`min-w-0 flex-1 rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-ring`,children:E.map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))})]}),(0,X.jsx)(`div`,{className:`flex items-center gap-1`,children:[{dir:`out`,label:`This → picked`,hint:`the ${U===1?`document`:`documents`} you started from ${D} the picked one(s)`},{dir:`in`,label:`Picked → this`,hint:`the picked document(s) ${D} the ${U===1?`one`:`ones`} you started from`}].map(({dir:e,label:t,hint:n})=>(0,X.jsx)(`button`,{type:`button`,title:n,onClick:()=>A(e),className:G(`flex-1 rounded-md border px-2 py-1.5 text-xs transition-colors`,k===e?`border-primary bg-primary text-primary-foreground`:`border-input hover:bg-accent`),children:t},e))})]}),!R&&a&&ae.size>0&&(0,X.jsx)(`div`,{className:`flex shrink-0 flex-wrap gap-1.5 border-b bg-primary/[0.04] px-3 py-2`,children:Array.from(ae).map(e=>(0,X.jsxs)(`span`,{className:`inline-flex max-w-full items-center gap-1 rounded-full bg-primary px-2 py-0.5 text-xs text-primary-foreground`,children:[(0,X.jsx)(`span`,{className:`truncate`,title:e,children:e}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>Se(e),className:`shrink-0 rounded-full hover:bg-primary-foreground/20`,"aria-label":`Remove ${e}`,children:(0,X.jsx)(Ne,{className:`h-3 w-3`})})]},e))}),R&&(p??S)&&(0,X.jsx)(Tp,{workspaceName:p??S,treeTab:`context`,selectedDocIds:j,onToggleDoc:H,excludeDocumentIds:h}),w===`pins`&&(0,X.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-3 space-y-2`,children:[!N&&!L&&(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading pins…`}),L&&(0,X.jsx)(`p`,{className:`text-xs text-destructive`,children:`Could not load pins. You can still browse the trees.`}),!L&&N?.length===0&&(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No pinned paths yet. Choose a path from a tree.`}),N?.filter(e=>e.resolvable!==!1&&l.includes(e.tree===`context`?`context`:e.tree)&&`${e.label??e.name??``} ${e.path}`.toLowerCase().includes(V)).map(e=>{let t=e.tree===`context`?`context`:e.tree;return(0,X.jsxs)(`button`,{type:`button`,"aria-pressed":F===t&&ae.has(e.path),className:G(`w-full rounded-md border p-3 text-left text-sm hover:bg-muted`,F===t&&ae.has(e.path)&&`border-primary bg-primary/10`),onClick:()=>{F===t?Se(e.path):(I(t),oe(new Set([e.path])))},children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(te,{className:`h-3.5 w-3.5`}),e.label||e.name||e.path]}),(0,X.jsxs)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:[t,` · `,e.path]})]},e.id)})]}),(0,X.jsx)(`div`,{className:G(`min-h-0 flex-1 space-y-1.5 overflow-y-auto p-3`,(R||w===`pins`)&&`hidden`),children:re?(0,X.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:`Loading…`}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:G(`group relative flex min-h-11 items-center gap-2 rounded-md px-3 py-2.5 cursor-pointer transition-all select-none text-sm shadow-elevation-1 hover:shadow`,`before:absolute before:left-0 before:top-0 before:bottom-0 before:w-1.5 before:transition-colors`,ae.has(`/`)?`bg-primary/[0.08] hover:bg-primary/[0.12] before:bg-primary`:`bg-card hover:bg-primary/[0.04] before:bg-transparent`),onClick:ge.guardClick(()=>Se(`/`)),title:`/`,..._e?ge.handlers:{},children:[(0,X.jsx)(Ke,{className:`w-4 h-4 shrink-0 text-muted-foreground`}),(0,X.jsx)(`span`,{className:`flex-1 truncate font-medium`,children:`/`})]}),(0,X.jsxs)(`div`,{className:`ml-[22px] space-y-1.5`,children:[fe===`/`&&(0,X.jsx)(Sp,{busy:me,onConfirm:e=>ve(`/`,e),onCancel:()=>pe(null)}),z?.children?.length?z.children.map(e=>(0,X.jsx)(Cp,{node:e,parentPath:`/`,query:V,selected:ae,onToggle:Se,onRowMenu:_e?de:void 0,createParent:fe,onCreateConfirm:ve,onCreateCancel:()=>pe(null),creating:me},e.id||e.name)):fe===`/`?null:(0,X.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`Empty tree`})]})]})})]})]})}),g===`tree`&&(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between border-t px-4 py-3`,children:[(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:R?`${j.size} document${j.size===1?``:`s`} selected`:`${ae.size} path${ae.size===1?``:`s`} selected`}),(0,X.jsx)(q,{size:`sm`,onClick:we,disabled:!Ce||o,children:o?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(dd,{className:`mr-1.5 h-3.5 w-3.5`}),R?`Relating…`:`Linking…`]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(Kt,{className:`mr-1 h-3.5 w-3.5`}),R?`Relate`:d??`Link`]})})]}),ue&&(0,X.jsx)(If,{anchor:{x:ue.clientX,y:ue.clientY},onClose:()=>de(null),items:[{id:`new-folder`,label:`New folder in ${ue.path}`,icon:dt,run:()=>pe(ue.path)}]})]})}var Dp=`h-full w-[380px] max-w-[90vw] max-md:w-full`;function Op({onClose:e,children:t}){return(0,bf.createPortal)((0,X.jsx)(`div`,{className:`fixed inset-0 z-picker flex items-stretch justify-end bg-scrim animate-fade-in`,onClick:e,children:(0,X.jsx)(`div`,{className:`h-full p-2 max-md:w-full max-md:p-1`,onClick:e=>e.stopPropagation(),children:t})}),window.document.body)}function kp(e){let t=2166136261;for(let e of localStorage.getItem(`authToken`)||``)t=Math.imul(t^e.charCodeAt(0),16777619);return`canvas:workspace-copy:${t>>>0}:${e}`}function Ap({workspaceId:e,ids:t,onClose:n}){let[r]=(0,Y.useState)(()=>{try{return kp(e)}catch{return``}}),[i,a]=(0,Y.useState)(()=>{try{let e=JSON.parse(localStorage.getItem(r)||`null`);return e&&Array.isArray(e.ids)&&e.target&&e.index<e.ids.length?e:null}catch{return null}}),[o,s]=(0,Y.useState)(!1),[c,l]=(0,Y.useState)(``),u=(0,Y.useRef)(!1),d=(0,Y.useRef)(!1);(0,Y.useEffect)(()=>(u.current=!1,()=>{u.current=!0}),[]);let f=e=>{try{e.index>=e.ids.length?localStorage.removeItem(r):localStorage.setItem(r,JSON.stringify(e))}catch{}u.current||a(e)},p=async t=>{if(d.current)return;d.current=!0,s(!0),l(``);let n=t;f(n);try{for(;n.index<n.ids.length&&!u.current;){if(!navigator.onLine)throw Error(`Offline. Your copy is saved; resume when connected.`);await Ca(e,n.ids[n.index],{destination:n.target.workspaceName,context:n.paths,treeType:n.target.treeType,treeNameOrTreeId:n.target.treeName,operationId:`${n.id}:${n.index}`}),n={...n,index:n.index+1},f(n)}window.dispatchEvent(new CustomEvent(`workspace:documents:refresh`)),window.dispatchEvent(new CustomEvent(`workspace:tree:refresh`))}catch(e){u.current||l(`Document ${n.ids[n.index]}: ${e instanceof Error?e.message:`Copy failed`}. Resume to retry.`)}finally{d.current=!1,u.current||s(!1)}},m=()=>{u.current=!0,n()},h=i!=null&&i.index>=i.ids.length;return(0,X.jsx)(Op,{onClose:m,children:i?(0,X.jsxs)(`section`,{role:`dialog`,"aria-label":`Copy to workspace`,className:`${Dp} flex flex-col rounded-2xl border bg-card p-4 shadow-elevation-4`,children:[(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Copy to workspace`}),(0,X.jsxs)(`p`,{className:`mt-3 break-words text-sm`,children:[i.target.workspaceName,`: `,i.paths.join(`, `)]}),(0,X.jsxs)(`p`,{role:`status`,className:`mt-3 text-sm`,children:[i.index,` of `,i.ids.length,` copied`,h?`.`:o?`…`:` — paused.`]}),c&&(0,X.jsx)(`p`,{role:`alert`,className:`mt-3 text-sm text-destructive`,children:c}),(0,X.jsx)(`p`,{className:`mt-3 text-xs text-muted-foreground`,children:`Files go to workspace:data. Destination rules handle storage placement. Relationships and sharing permissions are not copied. Source documents stay unchanged.`}),!h&&(0,X.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:`Closing lets the current item finish and pauses the rest. Reopen Copy to workspace to resume, including after reconnecting.`}),(0,X.jsxs)(`div`,{className:`mt-auto flex flex-wrap justify-end gap-2 pt-4`,children:[!h&&!o&&(0,X.jsx)(q,{variant:`ghost`,onClick:()=>{try{localStorage.removeItem(r)}catch{}a(null),l(``)},children:`Discard remaining`}),!h&&!o&&(0,X.jsx)(q,{onClick:()=>void p(i),children:`Resume copy`}),(0,X.jsx)(q,{variant:h?`default`:`outline`,onClick:m,children:h?`Done`:o?`Pause & close`:`Close`})]})]}):(0,X.jsx)(Ep,{title:`Copy to workspace…`,confirmLabel:`Copy documents`,excludeWorkspace:e,documentCount:t.length,sizeClassName:Dp,onClose:m,onConfirm:(e,n)=>p({ids:t,target:n,paths:e,index:0,id:crypto.randomUUID()})})})}function jp({tags:e,onChange:t,placeholder:n=`Add tag, press Enter`,suggestions:r=[]}){let[i,a]=(0,Y.useState)(``),[o,s]=(0,Y.useState)(!1),c=i.trim().toLowerCase(),l=(c?r.filter(t=>t.toLowerCase().includes(c)&&!e.includes(t)):o?r.filter(t=>!e.includes(t)):[]).slice(0,8),u=()=>{let n=i.trim();n&&!e.includes(n)&&t([...e,n]),a(``)};return(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 rounded-md border border-input bg-transparent px-2 py-1.5 focus-within:ring-1 focus-within:ring-ring`,children:[e.map(n=>(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-muted px-1.5 py-0.5 text-xs`,children:[n,(0,X.jsx)(`button`,{type:`button`,onClick:()=>t(e.filter(e=>e!==n)),className:`text-muted-foreground hover:text-foreground`,"aria-label":`Remove ${n}`,children:(0,X.jsx)(Ne,{className:`h-3 w-3`})})]},n)),(0,X.jsxs)(`div`,{className:`relative flex-1 min-w-[8ch]`,children:[(0,X.jsx)(`input`,{value:i,onChange:e=>a(e.target.value),onKeyDown:n=>{n.key===`Enter`||n.key===`,`?(n.preventDefault(),u()):n.key===`Backspace`&&!i&&e.length&&t(e.slice(0,-1))},onFocus:()=>s(!0),onBlur:()=>{setTimeout(u,150),s(!1)},placeholder:e.length?``:n,className:`w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground`}),l.length>0&&(0,X.jsx)(`div`,{className:`absolute left-0 top-full z-50 mt-1 max-h-48 w-56 overflow-auto rounded-md border bg-popover p-1 text-sm shadow-elevation-2`,children:l.map(n=>(0,X.jsx)(`button`,{type:`button`,onMouseDown:r=>{r.preventDefault(),e.includes(n)||t([...e,n]),a(``)},className:`block w-full rounded px-2 py-1 text-left hover:bg-accent`,children:n},n))})]})]})}function Mp(e){let t=new Set;for(let n of e){let e=n.trim();e&&t.add(`tag/${e}`)}return Array.from(t)}function Np(e){return(e||[]).filter(e=>e.startsWith(`tag/`)).map(e=>e.slice(4))}function Pp(e,t,n){return{...t.length?{features:[...new Set([...e.features??e.metadata?.features??[],...Mp(e.data?.tags??[]),...Mp(t)])]}:{},...n?{geo:n}:{}}}function Fp(e,t,n,r){return{id:e.id,schema:e.schema,schemaVersion:e.schemaVersion,metadata:Pp(e,t,n),...r===void 0?{}:{comment:r.trim()}}}var Ip=n(No(),1),Lp=`#8b5cf6`,Rp=`https://nominatim.openstreetmap.org`,zp=700,Bp=e=>Math.round(e*1e6)/1e6;function Vp(){let e=`<div style="display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:9999px 9999px 9999px 2px;transform:rotate(-45deg);background:${Lp};border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.45)"><div style="width:8px;height:8px;border-radius:9999px;background:#fff"></div></div>`;return Ip.default.divIcon({html:e,className:`canvas-map-pick`,iconSize:[28,28],iconAnchor:[14,28]})}function Hp({initial:e,onPick:t,onClose:n}){let r=(0,Y.useRef)(null),i=(0,Y.useRef)(null),a=(0,Y.useRef)(null),o=(0,Y.useRef)(null);(0,Y.useEffect)(()=>()=>o.current?.abort(),[]);let[s,c]=(0,Y.useState)(e?{lat:e.lat,lon:e.lon}:null),[l,u]=(0,Y.useState)(``),[d,f]=(0,Y.useState)([]),[p,m]=(0,Y.useState)(!1),[h,g]=(0,Y.useState)(null),[_,v]=(0,Y.useState)(!1),[y,b]=(0,Y.useState)(!1),[x,S]=(0,Y.useState)(!1);(0,Y.useEffect)(()=>{let e=requestAnimationFrame(()=>S(!0));return()=>cancelAnimationFrame(e)},[]),Cf(n);let C=(0,Y.useCallback)((e,t,n)=>{let r=i.current;if(!r)return;let o=Ip.default.latLng(e,t);a.current?a.current.setLatLng(o):(a.current=Ip.default.marker(o,{icon:Vp(),draggable:!0,autoPan:!0}).addTo(r),a.current.on(`dragend`,()=>{let e=a.current.getLatLng();c({lat:Bp(e.lat),lon:Bp(e.lng)})})),c({lat:Bp(e),lon:Bp(t),...n?{label:n}:{}})},[]);(0,Y.useEffect)(()=>{let t=r.current;if(!t||i.current)return;let n=Ip.default.map(t,{center:e?[e.lat,e.lon]:[20,0],zoom:e?13:2,worldCopyJump:!0,zoomControl:!0});Ip.default.tileLayer(`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`,{attribution:`&copy; OpenStreetMap contributors`,maxZoom:19}).addTo(n),i.current=n,e&&C(e.lat,e.lon),n.on(`click`,e=>C(e.latlng.lat,e.latlng.lng));let o=new ResizeObserver(()=>n.invalidateSize());o.observe(t);let s=setTimeout(()=>n.invalidateSize(),260);return()=>{clearTimeout(s),o.disconnect(),n.remove(),i.current=null,a.current=null}},[]),(0,Y.useEffect)(()=>{if(!s||s.label)return;let{lat:e,lon:t}=s,n=new AbortController,r=setTimeout(()=>{v(!0),fetch(`${Rp}/reverse?format=jsonv2&zoom=16&lat=${e}&lon=${t}`,{signal:n.signal,headers:{Accept:`application/json`}}).then(e=>e.ok?e.json():null).then(n=>{let r=n?.display_name;typeof r==`string`&&r&&c(n=>n&&n.lat===e&&n.lon===t?{...n,label:r}:n)}).catch(()=>{}).finally(()=>v(!1))},zp);return()=>{clearTimeout(r),n.abort()}},[s]);let w=(0,Y.useCallback)(async()=>{let e=l.trim();if(e.length<2)return;o.current?.abort();let t=new AbortController;o.current=t;let n=!1,r=window.setTimeout(()=>{n=!0,t.abort()},12e3);m(!0),f([]),g(null);try{let n=await fetch(`${Rp}/search?format=jsonv2&limit=6&q=${encodeURIComponent(e)}`,{signal:t.signal,headers:{Accept:`application/json`}});if(n.status===429)throw Error(`Place search is busy. Wait a moment and try again, or click the map`);if(!n.ok)throw Error(`Place search is unavailable (${n.status}). Try again, or click the map`);let r=await n.json();if(!Array.isArray(r))throw Error(`Place search returned an invalid response. Try again, or click the map`);if(t.signal.aborted||o.current!==t)return;f(r),r.length||g(`No match. Try a different spelling, or just click the map`)}catch(e){if(o.current!==t||t.signal.aborted&&!n)return;g(n?`Place search timed out. Try again, or click the map`:e instanceof TypeError?`Could not reach place search. Check your connection, or click the map`:e instanceof Error?e.message:`Search is unavailable right now. Click the map to place a pin`)}finally{window.clearTimeout(r),o.current===t&&(!t.signal.aborted||n)&&m(!1)}},[l]),T=(0,Y.useCallback)(()=>{if(!navigator.geolocation){g(`This browser has no geolocation`);return}b(!0),g(null),navigator.geolocation.getCurrentPosition(e=>{b(!1),i.current?.setView([e.coords.latitude,e.coords.longitude],16),C(e.coords.latitude,e.coords.longitude)},()=>{b(!1),g(`Could not read your location. Search or click the map instead`)},{enableHighAccuracy:!0,timeout:1e4,maximumAge:6e4})},[C]),E=(0,Y.useCallback)(e=>{let t=i.current,n=Number(e.lat),r=Number(e.lon);if(!t||!Number.isFinite(n)||!Number.isFinite(r))return;let a=e.boundingbox?.map(Number);a&&a.length===4&&a.every(Number.isFinite)?t.fitBounds(Ip.default.latLngBounds([a[0],a[2]],[a[1],a[3]]),{maxZoom:16}):t.setView([n,r],15),C(n,r,e.display_name),f([])},[C]);return(0,bf.createPortal)((0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:G(`fixed inset-0 z-[60] bg-black/40 transition-opacity duration-200`,x?`opacity-100`:`opacity-0`),onClick:n}),(0,X.jsxs)(`div`,{role:`dialog`,"aria-label":`Pick a location on the map`,className:G(`fixed inset-y-0 right-0 z-[61] flex w-[min(560px,100vw)] flex-col bg-background shadow-elevation-4 transition-transform duration-200 ease-out`,x?`translate-x-0`:`translate-x-full`),children:[(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b px-3 py-2`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,X.jsx)(bt,{className:`h-4 w-4 text-info`}),`Custom geotag`]}),(0,X.jsx)(`button`,{type:`button`,onClick:n,"aria-label":`Close map`,className:`rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground`,children:(0,X.jsx)(Ne,{className:`h-4 w-4`})})]}),(0,X.jsxs)(`div`,{className:`relative z-10 shrink-0 border-b px-3 py-2`,children:[(0,X.jsxs)(`div`,{className:`flex gap-2`,children:[(0,X.jsxs)(`div`,{className:`relative flex-1`,children:[(0,X.jsx)(mr,{className:`pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground`}),(0,X.jsx)(`input`,{value:l,autoFocus:!0,onChange:e=>{o.current?.abort(),o.current=null,m(!1),f([]),u(e.target.value),g(null)},"aria-label":`Search for a place or address`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),w())},placeholder:`Search a place, e.g. Slavkovský štít`,spellCheck:!1,className:`h-8 w-full rounded-md border border-input bg-transparent pl-7 pr-2 text-sm outline-none placeholder:text-muted-foreground focus-visible:ring-1 focus-visible:ring-ring`})]}),(0,X.jsx)(`button`,{type:`button`,onClick:T,disabled:y,title:`Use my current location`,"aria-label":`Use my current location`,className:`inline-flex h-8 w-8 items-center justify-center rounded-md border border-border text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50`,children:y?(0,X.jsx)(Nt,{className:`h-3.5 w-3.5 animate-spin`}):(0,X.jsx)(Yn,{className:`h-3.5 w-3.5`})}),(0,X.jsxs)(`button`,{type:`button`,onClick:w,disabled:p||l.trim().length<2,className:`inline-flex h-8 items-center gap-1.5 rounded-md bg-primary px-3 text-xs text-primary-foreground disabled:opacity-50`,children:[p?(0,X.jsx)(Nt,{className:`h-3.5 w-3.5 animate-spin`}):(0,X.jsx)(mr,{className:`h-3.5 w-3.5`}),`Search`]})]}),h&&(0,X.jsx)(`p`,{role:`status`,className:`mt-1 text-xs text-warning`,children:h}),d.length>0&&(0,X.jsx)(`div`,{className:`absolute inset-x-3 top-full z-10 mt-1 max-h-64 overflow-y-auto rounded-md border bg-popover shadow-elevation-4`,children:d.map(e=>(0,X.jsx)(`button`,{type:`button`,onClick:()=>E(e),className:`block w-full border-b border-border/60 px-3 py-2 text-left text-xs last:border-0 hover:bg-muted`,children:e.display_name},`${e.lat},${e.lon},${e.display_name}`))})]}),(0,X.jsxs)(`div`,{className:`relative isolate z-0 min-h-0 flex-1`,children:[(0,X.jsx)(`div`,{ref:r,className:`h-full w-full`}),!s&&(0,X.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 bottom-3 z-[1000] flex justify-center`,children:(0,X.jsx)(`span`,{className:`rounded-full bg-background/90 px-3 py-1 text-xs text-muted-foreground shadow-elevation-2`,children:`Click the map to drop a pin, or drag it to fine-tune`})})]}),(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-3 border-t px-3 py-2`,children:[(0,X.jsx)(`div`,{className:`min-w-0 text-xs`,children:s?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5 tabular-nums text-foreground`,children:[(0,X.jsx)(lr,{className:`h-3 w-3 shrink-0 text-muted-foreground`}),s.lat.toFixed(5),`, `,s.lon.toFixed(5),_&&(0,X.jsx)(Nt,{className:`h-3 w-3 animate-spin text-muted-foreground`})]}),s.label&&(0,X.jsx)(`div`,{className:`truncate text-muted-foreground`,children:s.label})]}):(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:`No point selected`})}),(0,X.jsxs)(`div`,{className:`flex shrink-0 gap-2`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:n,className:`rounded-md border border-border px-3 py-1.5 text-xs text-muted-foreground hover:bg-muted hover:text-foreground`,children:`Cancel`}),(0,X.jsxs)(`button`,{type:`button`,disabled:!s,onClick:()=>{s&&(t(s),n())},className:`inline-flex items-center gap-1.5 rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground disabled:opacity-50`,children:[(0,X.jsx)(et,{className:`h-3.5 w-3.5`}),`Use this point`]})]})]})]})]}),document.body)}var Up={exif:`from the photo's EXIF`,device:`from the device at capture`,manual:`placed by hand`};function Wp(e){let t=`${e.lat.toFixed(5)}, ${e.lon.toFixed(5)}`,n=e.source?Up[e.source]:null;return[t,e.accuracy==null?null:`±${e.accuracy} m`,n].filter(Boolean).join(` · `)}function Gp({value:e,onChange:t,idPrefix:n=`edit-geo`}){let[r,i]=(0,Y.useState)(!1);return(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{htmlFor:`${n}-action`,children:`Location`}),(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,X.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2 text-xs`,children:[(0,X.jsx)(bt,{className:e?`h-4 w-4 shrink-0 text-info`:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,X.jsx)(`span`,{className:e?`truncate tabular-nums`:`truncate text-muted-foreground`,children:e?Wp(e):`No location on this document`})]}),(0,X.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1`,children:[(0,X.jsxs)(`button`,{id:`${n}-action`,type:`button`,onClick:()=>i(!0),className:`inline-flex items-center gap-1.5 rounded-md border border-border px-2 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,children:[(0,X.jsx)(tn,{className:`h-3.5 w-3.5`}),e?`Move pin`:`Set on map`]}),e&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>t(null),"aria-label":`Remove location`,title:`Remove location`,className:`rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground`,children:(0,X.jsx)(ut,{className:`h-3.5 w-3.5`})})]})]}),r&&(0,X.jsx)(Hp,{initial:e,onPick:e=>t({lat:e.lat,lon:e.lon,source:`manual`}),onClose:()=>i(!1)})]})}function Kp({workspaceId:e,documentIds:t,onClose:n}){let[r,i]=(0,Y.useState)([]),[a,o]=(0,Y.useState)(null),[s,c]=(0,Y.useState)(`keep`),[l,u]=(0,Y.useState)(``),d=(r.length>0||!!a||s!==`keep`)&&(s!==`replace`||l.trim().length>0),[f,p]=(0,Y.useState)(t),[m,h]=(0,Y.useState)(!1),[g,_]=(0,Y.useState)(``);return Cf(n,!m),(0,bf.createPortal)((0,X.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-scrim p-4`,children:(0,X.jsxs)(`section`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":`bulk-edit-title`,className:`max-h-viewport-modal overflow-y-auto w-full max-w-md space-y-4 rounded-xl border bg-background p-5 shadow-elevation-4`,children:[(0,X.jsxs)(`h2`,{id:`bulk-edit-title`,className:`font-semibold`,children:[`Bulk Edit · `,f.length,` documents`]}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Add tags to all selected documents. Choosing a location replaces their existing geotags; leaving it unset keeps them.`}),(0,X.jsxs)(`fieldset`,{disabled:m,className:`space-y-4`,children:[(0,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(`span`,{className:`text-sm font-medium`,children:`Add tags`}),(0,X.jsx)(jp,{tags:r,onChange:i,suggestions:[]})]}),(0,X.jsx)(Gp,{value:a,onChange:o,idPrefix:`bulk-geo`}),(0,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(`label`,{htmlFor:`bulk-comment-mode`,className:`text-sm font-medium`,children:`Comment`}),(0,X.jsxs)(`select`,{id:`bulk-comment-mode`,value:s,onChange:e=>c(e.target.value),className:`w-full rounded-md border border-input bg-background px-3 py-2 text-sm`,children:[(0,X.jsx)(`option`,{value:`keep`,children:`Keep existing comments`}),(0,X.jsx)(`option`,{value:`replace`,children:`Replace comments`}),(0,X.jsx)(`option`,{value:`clear`,children:`Clear comments`})]}),s===`replace`&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`label`,{htmlFor:`bulk-comment`,className:`sr-only`,children:`New comment for all selected documents`}),(0,X.jsx)(`textarea`,{id:`bulk-comment`,rows:3,value:l,onChange:e=>u(e.target.value),placeholder:`Comment for all selected documents…`,className:`w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This replaces the comment on every selected document.`})]}),s===`clear`&&(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This removes the comment from every selected document.`})]})]}),g&&(0,X.jsx)(`p`,{role:`alert`,className:`text-sm text-destructive`,children:g}),(0,X.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(q,{variant:`outline`,onClick:n,disabled:m,children:`Cancel`}),(0,X.jsx)(q,{onClick:async()=>{if(m||!d)return;h(!0),_(``);let t=[];for(let n of f)try{let t=await Cr(e,n);await Wi(e,Fp(t,r,a,s===`keep`?void 0:s===`clear`?``:l))}catch{t.push(n)}window.dispatchEvent(new CustomEvent(`workspace:documents:refresh`)),h(!1),t.length?(p(t),_(`${f.length-t.length} saved; ${t.length} could not be updated. Retry applies only to those documents.`)):n()},disabled:m||!d,children:m?`Saving…`:g?`Retry failed`:`Apply to all`})]})]})}),window.document.body)}var qp=[{mode:`copy`,label:`Copy to`,icon:(0,X.jsx)(He,{className:`h-3.5 w-3.5`})},{mode:`move`,label:`Move to`,icon:(0,X.jsx)(Jn,{className:`h-3.5 w-3.5`})},{mode:`delete`,label:`Delete from`,icon:(0,X.jsx)(ut,{className:`h-3.5 w-3.5`})}],Jp=[{value:`rename`,label:`Rename mine (file-1.ext)`},{value:`overwrite`,label:`Overwrite the existing file`},{value:`error`,label:`Skip the document`}],Yp=`h-9 w-full rounded-md border bg-background px-2 text-xs outline-none focus:ring-2 focus:ring-ring disabled:opacity-50`;function Xp(e){return e.driver===`cacache`?Tt:e.config?.remote===!0?W:gr}function Zp({workspaceId:e,documentCount:t,initialMode:n=`copy`,defaultFilename:r=``,onConfirm:i,onClose:a,saving:o=!1,sizeClassName:s}){let{showErrorToast:c}=co(),[l,u]=(0,Y.useState)(!1);Cf(a,!o&&!l);let[d,f]=(0,Y.useState)(n),[p,m]=(0,Y.useState)(null),[h,g]=(0,Y.useState)(null),[_,v]=(0,Y.useState)(new Set),[y,b]=(0,Y.useState)(!1),[x,S]=(0,Y.useState)(``),[C,w]=(0,Y.useState)(r),[T,E]=(0,Y.useState)(`rename`);(0,Y.useEffect)(()=>{let t=!1;return Ta(e).then(e=>{t||m(e.filter(e=>e.kind===`storage`))}).catch(e=>{t||g(e instanceof Error?e.message:String(e))}),()=>{t=!0}},[e]);let D=d===`move`,O=e=>d===`delete`?null:e.enabled===!1?`disabled`:e.config?.readOnly===!0?`read-only`:e.config?.supported===!1?`unsupported`:null,k=(0,Y.useMemo)(()=>(p||[]).filter(e=>!O(e)).map(e=>e.address),[p,d]),A=e=>{f(e),v(t=>{let n=(p||[]).filter(t=>e===`delete`||t.enabled!==!1&&t.config?.readOnly!==!0&&t.config?.supported!==!1).map(e=>e.address),r=[...t].filter(e=>n.includes(e));return new Set(e===`move`?r.slice(0,1):r)})},j=e=>{v(t=>{if(D)return t.has(e)?new Set:new Set([e]);let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},M=(0,Y.useMemo)(()=>(p||[]).filter(e=>_.has(e.address)&&da(e)),[p,_]),N=d!==`delete`&&M.length>0,P=e=>{u(!1);let t=La(e[0]||``,p||[]),n=t?(p||[]).find(e=>e.address===t.address):null;if(!t||!n){c(`Pick a folder inside a storage backend`);return}if(O(n)){c(`${n.address} is ${O(n)}`);return}if(!da(n)){c(`${n.address} does not keep folders — objects are stored by content`);return}S(t.key),v(e=>D?new Set([t.address]):new Set([...e,t.address]))},F=async()=>{_.size===0||o||await i([..._],d,{keepDocument:y,folder:N?x.trim():``,filename:N&&t===1?C.trim():``,onConflict:T})},I=t,L=I===1?``:`s`,ee=d===`delete`?`Delete ${I} document${L} from…`:`${d===`move`?`Move`:`Copy`} ${I} document${L} to…`,te=d===`delete`?`Delete from`:d===`move`?`Move to`:`Copy to`,ne=_.size===0?te.split(` `)[0]:`${te} ${_.size} backend${_.size===1?``:`s`}`;return(0,X.jsxs)(`div`,{className:G(`flex flex-col overflow-hidden rounded-2xl border bg-card shadow-elevation-4`,s||`max-h-viewport-card w-[min(420px,90vw)] max-md:h-full max-md:w-full max-md:shadow-elevation-5`),children:[(0,X.jsxs)(`div`,{className:`flex h-12 shrink-0 items-center justify-between border-b px-4`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,X.jsx)(gr,{className:`h-4 w-4`}),ee]}),(0,X.jsx)(`button`,{type:`button`,onClick:a,disabled:o,className:`text-muted-foreground transition-colors hover:text-foreground disabled:opacity-40`,"aria-label":`Close`,children:(0,X.jsx)(Ne,{className:`h-4 w-4`})})]}),(0,X.jsx)(`div`,{className:`flex shrink-0 items-center gap-1 border-b px-2 pt-2`,children:qp.map(({mode:e,label:t,icon:n})=>(0,X.jsxs)(`button`,{type:`button`,onClick:()=>A(e),disabled:o,className:G(`flex items-center gap-1.5 rounded-t-md border-b-2 px-3 py-2 text-xs font-medium transition-colors disabled:opacity-50`,d===e?e===`delete`?`border-destructive text-destructive`:`border-primary text-foreground`:`border-transparent text-muted-foreground hover:text-foreground`),children:[n,t]},e))}),(0,X.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-1.5 overflow-y-auto p-3`,children:[h&&(0,X.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-destructive`,children:h}),!p&&!h&&(0,X.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:`Loading backends…`}),p?.length===0&&(0,X.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`No storage backends configured.`}),p?.map(e=>{let t=Xp(e),n=O(e),r=_.has(e.address),i=e.config?.remote===!0;return(0,X.jsxs)(`div`,{onClick:()=>!n&&!o&&j(e.address),className:G(`group relative flex min-h-10 items-center gap-2 rounded-md px-3 py-2 text-sm shadow-elevation-1 transition-all select-none`,`before:absolute before:left-0 before:top-0 before:bottom-0 before:w-1.5 before:transition-colors`,n?`cursor-not-allowed bg-muted/40 opacity-60 before:bg-transparent`:`cursor-pointer hover:shadow`,!n&&r?d===`delete`?`bg-destructive/[0.08] hover:bg-destructive/[0.12] before:bg-destructive`:`bg-primary/[0.08] hover:bg-primary/[0.12] before:bg-primary`:n?``:`bg-card hover:bg-primary/[0.04] before:bg-transparent`),title:e.address,children:[(0,X.jsx)(`input`,{type:D?`radio`:`checkbox`,checked:r,disabled:!!n||o,onChange:()=>j(e.address),onClick:e=>e.stopPropagation(),className:`h-4 w-4 shrink-0 accent-primary`,"aria-label":e.address}),(0,X.jsx)(t,{className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,X.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`span`,{className:`block truncate font-medium`,children:e.config?.label||e.address}),(0,X.jsxs)(`span`,{className:`block truncate font-mono text-[10px] text-muted-foreground`,children:[e.driver,` · `,e.address]})]}),i&&(0,X.jsx)(`span`,{className:`shrink-0 rounded bg-info-subtle px-1.5 py-0.5 text-[10px] uppercase text-muted-foreground`,title:`Network mount${e.config?.transport?` (${e.config.transport})`:``} — transfers cross the network`,children:e.config?.transport||`remote`}),n&&(0,X.jsx)(`span`,{className:`shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] uppercase text-muted-foreground`,children:n})]},`${e.driver}/${e.address}`)}),d===`delete`&&(0,X.jsxs)(`label`,{className:`mt-3 flex cursor-pointer items-start gap-2 rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-xs`,children:[(0,X.jsx)(`input`,{type:`checkbox`,checked:y,onChange:e=>b(e.target.checked),className:`mt-0.5 h-3.5 w-3.5 accent-destructive`}),(0,X.jsxs)(`span`,{children:[`Keep the index entry when its `,(0,X.jsx)(`strong`,{children:`last`}),` copy is deleted.`,(0,X.jsx)(`span`,{className:`block text-muted-foreground`,children:`Otherwise the document is removed from the index once no locations remain.`})]})]}),N&&(0,X.jsxs)(`div`,{className:`mt-3 space-y-2 rounded-md border px-3 py-2`,children:[(0,X.jsxs)(`p`,{className:`text-xs font-medium`,children:[`Destination on `,M.map(e=>e.config?.label||e.address).join(`, `)]}),(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(`label`,{htmlFor:`backend-transfer-folder`,className:`text-[11px] text-muted-foreground`,children:`Folder (relative to the backend root)`}),(0,X.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,X.jsx)(K,{id:`backend-transfer-folder`,value:x,onChange:e=>S(e.target.value),placeholder:`/`,disabled:o,className:`h-9 font-mono text-xs`}),(0,X.jsx)(q,{type:`button`,variant:`outline`,size:`icon`,className:`h-9 w-9 shrink-0`,onClick:()=>u(!0),disabled:o,"aria-label":`Browse backend folders`,title:`Browse…`,children:(0,X.jsx)(Nn,{className:`h-4 w-4`})})]})]}),t===1?(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(`label`,{htmlFor:`backend-transfer-filename`,className:`text-[11px] text-muted-foreground`,children:`File name`}),(0,X.jsx)(K,{id:`backend-transfer-filename`,value:C,onChange:e=>w(e.target.value),placeholder:r||`keeps the document's own name`,disabled:o,className:`h-9 font-mono text-xs`})]}):(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Each document keeps its own file name and extension.`}),(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(`label`,{htmlFor:`backend-transfer-conflict`,className:`text-[11px] text-muted-foreground`,children:`If a different file already has that name`}),(0,X.jsx)(`select`,{id:`backend-transfer-conflict`,className:Yp,value:T,onChange:e=>E(e.target.value),disabled:o,children:Jp.map(e=>(0,X.jsx)(`option`,{value:e.value,children:e.label},e.value))})]})]}),d===`move`&&k.length>0&&(0,X.jsx)(`p`,{className:`px-1 pt-2 text-[11px] text-muted-foreground`,children:`The source copy is released only once the destination write is durable.`})]}),(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-t px-4 py-3`,children:[(0,X.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[_.size,` backend`,_.size===1?``:`s`,` selected`]}),(0,X.jsx)(q,{size:`sm`,variant:d===`delete`?`destructive`:`default`,onClick:F,disabled:_.size===0||o,children:o?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(dd,{className:`mr-1.5 h-3.5 w-3.5`}),`Working…`]}):(0,X.jsxs)(X.Fragment,{children:[d===`delete`?(0,X.jsx)(ut,{className:`mr-1 h-3.5 w-3.5`}):d===`move`?(0,X.jsx)(Jn,{className:`mr-1 h-3.5 w-3.5`}):(0,X.jsx)(He,{className:`mr-1 h-3.5 w-3.5`}),ne]})})]}),d===`delete`&&(0,X.jsxs)(`div`,{className:`flex items-start gap-2 border-t bg-destructive/5 px-4 py-2 text-[11px] text-muted-foreground`,children:[(0,X.jsx)(ot,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-destructive`}),(0,X.jsx)(`span`,{children:`Deletes the file data from the selected backends. Copies on other backends are untouched.`})]}),l&&(0,X.jsx)(Op,{onClose:()=>u(!1),children:(0,X.jsx)(Ep,{sizeClassName:`h-full w-[380px] max-w-[90vw] max-md:w-full`,multiple:!1,tabs:[`backends`],fixedWorkspaceName:e,title:`Pick a destination folder…`,confirmLabel:`Use folder`,onConfirm:P,onClose:()=>u(!1)})})]})}function Qp({onClose:e,onConfirm:t,fixedWorkspaceName:n,saving:r=!1,sizeClassName:i}){let[a,o]=(0,Y.useState)(n?`browse`:`workspace`),[s,c]=(0,Y.useState)([]),[l,u]=(0,Y.useState)(!n),[d,f]=(0,Y.useState)(n??null),[p,m]=(0,Y.useState)(`context`),[h,g]=(0,Y.useState)(new Set),[_,v]=(0,Y.useState)(n);return n!==_&&(v(n),n||u(!0)),(0,Y.useEffect)(()=>{n||Fr().then(c).catch(()=>c([])).finally(()=>u(!1))},[n]),(0,X.jsxs)(`div`,{className:G(`flex flex-col overflow-hidden rounded-2xl border bg-card shadow-elevation-4`,i||`h-viewport-card max-h-full w-[min(420px,90vw)] max-md:h-full max-md:w-full max-md:shadow-elevation-5`),children:[(0,X.jsxs)(`div`,{className:`flex h-12 shrink-0 items-center justify-between border-b px-4`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,X.jsx)(kt,{className:`h-4 w-4`}),a===`workspace`?`Add existing documents…`:`Pick documents…`]}),(0,X.jsx)(`button`,{type:`button`,onClick:e,disabled:r,className:`text-muted-foreground transition-colors hover:text-foreground disabled:opacity-40`,"aria-label":`Close`,children:(0,X.jsx)(Ne,{className:`h-4 w-4`})})]}),(0,X.jsx)(`div`,{className:`flex-1 overflow-hidden`,children:(0,X.jsxs)(`div`,{className:`grid h-full w-[200%] grid-cols-2 transition-transform duration-200`,style:{transform:a===`workspace`?`translateX(0)`:`translateX(-50%)`},children:[(0,X.jsx)(`div`,{className:`flex min-w-0 flex-col overflow-y-auto p-2`,children:(0,X.jsx)(wp,{workspaces:s,loading:l,onPick:e=>{f(e),g(new Set),o(`browse`)}})}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-col overflow-hidden`,children:[(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 border-b px-2 pt-2`,children:[!n&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>o(`workspace`),className:`mr-1 rounded p-1.5 text-muted-foreground hover:bg-muted hover:text-foreground touch-target`,"aria-label":`Back to workspaces`,children:(0,X.jsx)(Xe,{className:`h-4 w-4 rotate-180`})}),[`context`,`directory`].map(e=>(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{m(e),g(new Set)},className:G(`flex items-center gap-1.5 rounded-t-md border-b-2 px-3 py-2 text-xs font-medium transition-colors`,p===e?`border-primary text-foreground`:`border-transparent text-muted-foreground hover:text-foreground`),children:[gp[e],_p[e]]},e))]}),d&&(0,X.jsx)(Tp,{workspaceName:d,treeTab:p,onTreeTabChange:m,selectedDocIds:h,onToggleDoc:e=>{g(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},onNavigate:()=>g(new Set)})]})]})}),a===`browse`&&(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between border-t px-4 py-3`,children:[(0,X.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[h.size,` document`,h.size===1?``:`s`,` selected`]}),(0,X.jsx)(q,{size:`sm`,onClick:async()=>{!d||h.size===0||r||await t(Array.from(h),{workspaceName:d,treeName:p===`directory`?`directory`:Pa,treeType:p})},disabled:h.size===0||r,children:r?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(dd,{className:`mr-1.5 h-3.5 w-3.5`}),`Adding…`]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(kt,{className:`mr-1 h-3.5 w-3.5`}),`Add`]})})]})]})}var $p=(0,Y.createContext)(null),em={entry:null,open:()=>{},close:()=>{}};function tm(){return(0,Y.useContext)($p)??em}var nm=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`div`,{className:`relative w-full overflow-auto`,children:(0,X.jsx)(`table`,{ref:n,className:G(`w-full caption-bottom text-sm`,e),...t})}));nm.displayName=`Table`;var rm=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`thead`,{ref:n,className:G(`[&_tr]:border-b`,e),...t}));rm.displayName=`TableHeader`;var im=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`tbody`,{ref:n,className:G(`[&_tr:last-child]:border-0`,e),...t}));im.displayName=`TableBody`;var am=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`tfoot`,{ref:n,className:G(`border-t bg-muted/50 font-medium [&>tr]:last:border-b-0`,e),...t}));am.displayName=`TableFooter`;var om=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`tr`,{ref:n,className:G(`border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted`,e),...t}));om.displayName=`TableRow`;var sm=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`th`,{ref:n,className:G(`h-12 px-2 md:px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0`,e),...t}));sm.displayName=`TableHead`;var cm=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`td`,{ref:n,className:G(`p-2 md:p-4 align-middle [&:has([role=checkbox])]:pr-0`,e),...t}));cm.displayName=`TableCell`;var lm=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(`caption`,{ref:n,className:G(`mt-4 text-sm text-muted-foreground`,e),...t}));lm.displayName=`TableCaption`;var um=({label:e,sortKey:t,sort:n,onSort:r,className:i})=>{let a=n.key===t;return(0,X.jsx)(sm,{"aria-sort":a?n.dir===`asc`?`ascending`:`descending`:`none`,className:G(`cursor-pointer select-none hover:text-foreground transition-colors`,i),onClick:()=>r(t),children:(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e,a?n.dir===`asc`?(0,X.jsx)(Cn,{className:`h-3.5 w-3.5`}):(0,X.jsx)(On,{className:`h-3.5 w-3.5`}):(0,X.jsx)(Fe,{className:`h-3.5 w-3.5 opacity-40`})]})})};um.displayName=`SortableTableHead`;function dm(e,t,n={key:null,dir:`asc`}){let[r,i]=Y.useState(n);return{sorted:Y.useMemo(()=>{let n=r.key?t[r.key]:null;if(!n)return e;let i=r.dir===`asc`?1:-1;return[...e].sort((e,t)=>{let r=n(e)??``,a=n(t)??``;return typeof r==`number`&&typeof a==`number`?(r-a)*i:String(r).localeCompare(String(a),void 0,{numeric:!0})*i})},[e,r,t]),sort:r,toggleSort:Y.useCallback(e=>{i(t=>t.key===e?{key:e,dir:t.dir===`asc`?`desc`:`asc`}:{key:e,dir:`asc`})},[])}}var fm=`workspace:relations:refresh`;function pm(){window.dispatchEvent(new CustomEvent(fm))}var mm=(0,Y.createContext)(null),hm=`canvas:documentOpenMode`;function gm(){try{return localStorage.getItem(hm)===`modal`?`modal`:`side`}catch{return`side`}}var _m=gm(),vm=new Set;function ym(){return _m}function bm(e){try{localStorage.setItem(hm,e)}catch{}_m=e;for(let e of vm)e()}function xm(e){vm.add(e);let t=t=>{(t.key===hm||t.key===null)&&(_m=gm(),e())};return window.addEventListener(`storage`,t),()=>{vm.delete(e),window.removeEventListener(`storage`,t)}}function Sm(){return(0,Y.useSyncExternalStore)(xm,ym,()=>`side`)}function Cm({tabs:e,active:t,onChange:n,className:r=``,iconOnly:i=!1}){return(0,X.jsx)(`div`,{className:`flex gap-1 border-b overflow-x-auto ${r}`,children:e.map(e=>{let r=e.icon;return(0,X.jsxs)(`button`,{onClick:()=>n(e.id),title:e.label,className:`${i&&r?`px-3`:`px-4`} py-2 text-sm font-medium border-b-2 transition-colors whitespace-nowrap inline-flex items-center gap-1.5 ${t===e.id?`border-primary text-foreground`:`border-transparent text-muted-foreground hover:text-foreground`}`,children:[r&&(0,X.jsx)(r,{className:`h-3.5 w-3.5`}),(!i||!r)&&e.label]},e.id)})})}var wm=1,Tm=8,Em=320,Dm=28,Om=2.5,km={scale:1,x:0,y:0};function Am({src:e,alt:t,className:n=``,onZoomChange:r}){let i=(0,Y.useRef)(null),a=(0,Y.useRef)(null),[o,s]=(0,Y.useState)(km),c=(0,Y.useRef)(new Map),l=(0,Y.useRef)(null),u=(0,Y.useRef)(null),d=(0,Y.useRef)(!1),f=(0,Y.useRef)(null),[p,m]=(0,Y.useState)(!1),[h,g]=(0,Y.useState)(e);h!==e&&(g(e),s(km)),(0,Y.useEffect)(()=>{r?.(o.scale>1.001)},[o.scale,r]);let _=(0,Y.useCallback)(e=>{let t=i.current,n=a.current;if(!t||!n)return e;let r=Math.min(Tm,Math.max(wm,e.scale)),o=Math.max(0,(n.offsetWidth*r-t.clientWidth)/2),s=Math.max(0,(n.offsetHeight*r-t.clientHeight)/2);return{scale:r,x:Math.min(o,Math.max(-o,e.x)),y:Math.min(s,Math.max(-s,e.y))}},[]),v=(0,Y.useCallback)((e,t,n)=>{let r=i.current;if(!r)return;let a=r.getBoundingClientRect(),o=t-a.left-a.width/2,c=n-a.top-a.height/2;s(t=>{let n=e/t.scale;return _({scale:e,x:o-(o-t.x)*n,y:c-(c-t.y)*n})})},[_]),y=(0,Y.useCallback)(()=>{let e=i.current,t=a.current;if(!e||!t||!t.offsetWidth||!t.offsetHeight)return Om;let n=Math.max(e.clientWidth/t.offsetWidth,e.clientHeight/t.offsetHeight),r=Math.max(t.naturalWidth/t.offsetWidth,t.naturalHeight/t.offsetHeight)||Tm;return Math.min(Tm,Math.max(Om,Math.min(Math.max(n,Om),r)))},[]),b=(0,Y.useCallback)((e,t)=>{o.scale>1.001?s(km):v(y(),e,t)},[o.scale,v,y]),x=e=>{if(c.current.set(e.pointerId,{x:e.clientX,y:e.clientY}),d.current=!1,c.current.size===2){let[e,t]=[...c.current.values()];l.current={dist:Math.hypot(e.x-t.x,e.y-t.y),scale:o.scale,cx:(e.x+t.x)/2,cy:(e.y+t.y)/2}}e.currentTarget.setPointerCapture(e.pointerId)},S=e=>{let t=c.current.get(e.pointerId);if(!t)return;if(c.current.set(e.pointerId,{x:e.clientX,y:e.clientY}),c.current.size>=2&&l.current){let[e,t]=[...c.current.values()],n=Math.hypot(e.x-t.x,e.y-t.y);l.current.dist>0&&(d.current=!0,m(!0),v(l.current.scale*(n/l.current.dist),l.current.cx,l.current.cy));return}if(o.scale<=1.001)return;let n=e.clientX-t.x,r=e.clientY-t.y;(Math.abs(n)>1||Math.abs(r)>1)&&(d.current=!0,m(!0)),s(e=>_({...e,x:e.x+n,y:e.y+r}))},C=e=>{if(c.current.delete(e.pointerId),c.current.size<2&&(l.current=null),c.current.size===0&&m(!1),d.current){u.current=null;return}let t=e.timeStamp,n=u.current;if(n&&t-n.t<Em&&Math.hypot(e.clientX-n.x,e.clientY-n.y)<Dm){u.current=null,f.current=t,b(e.clientX,e.clientY);return}u.current={t,x:e.clientX,y:e.clientY}},w=e=>{e.preventDefault();let t=o.scale*(e.deltaY<0?1.15:1/1.15);t<=wm?s(km):v(Math.min(Tm,t),e.clientX,e.clientY)},T=o.scale>1.001;return(0,X.jsx)(`div`,{ref:i,className:`relative flex h-full w-full items-center justify-center overflow-hidden`,style:{touchAction:`none`,cursor:T?`grab`:`zoom-in`},onPointerDown:x,onPointerMove:S,onPointerUp:C,onPointerCancel:e=>{c.current.delete(e.pointerId),l.current=null,u.current=null,d.current=!0,c.current.size===0&&m(!1)},onWheel:w,onDoubleClick:e=>{e.preventDefault(),e.stopPropagation(),!(f.current!==null&&e.timeStamp-f.current<Em)&&b(e.clientX,e.clientY)},children:(0,X.jsx)(`img`,{ref:a,src:e,alt:t,draggable:!1,className:n,style:{transform:`translate3d(${o.x}px, ${o.y}px, 0) scale(${o.scale})`,transformOrigin:`center center`,transition:p?`none`:`transform 160ms ease-out`,willChange:`transform`}})})}var jm=`(max-width: 767px)`,Mm=new Map;function Nm(e){let t=Mm.get(e);if(!t){let n=()=>typeof window<`u`&&typeof window.matchMedia==`function`;t={subscribe:t=>{if(!n())return()=>{};let r=window.matchMedia(e);return r.addEventListener(`change`,t),()=>r.removeEventListener(`change`,t)},getSnapshot:()=>n()?window.matchMedia(e).matches:!1},Mm.set(e,t)}return t}function Pm(){let e=Nm(jm);return(0,Y.useSyncExternalStore)(e.subscribe,e.getSnapshot,()=>!1)}function Fm(){return Im(`(max-width: 1023px)`)}function Im(e){let t=Nm(e);return(0,Y.useSyncExternalStore)(t.subscribe,t.getSnapshot,()=>!1)}function Lm(){return!/android|iphone|ipad|mobile/i.test(navigator.userAgent)&&navigator.pdfViewerEnabled!==!1}var Rm=40,zm=1600;function Bm({blob:e,filename:t}){let n=(0,Y.useRef)(null),[r,i]=(0,Y.useState)({error:null,pages:0,truncated:!1});return(0,Y.useEffect)(()=>{let r=n.current;if(!r)return;let a=!1,o=null;return(async()=>{let n=await m(()=>import(`./pdf-Ciz5_WNq.js`),__vite__mapDeps([0,1])),s=(await m(async()=>{let{default:e}=await import(`./pdf.worker.min-C8Ts8bNu.js`);return{default:e}},[])).default;n.GlobalWorkerOptions.workerSrc=s;let c=await e.arrayBuffer();if(a)return;let l=n.getDocument({data:c});o=()=>{l.destroy()};let u=await l.promise;if(a)return;let d=Math.min(u.numPages,Rm),f=r.clientWidth||600,p=window.devicePixelRatio||1;for(let e=1;e<=d;e++){if(a)return;let n=await u.getPage(e),o=n.getViewport({scale:1}),s=Math.min(f*p,zm*p)/o.width,c=n.getViewport({scale:s}),l=document.createElement(`canvas`);if(l.width=c.width,l.height=c.height,l.style.width=`100%`,l.style.height=`auto`,l.className=`rounded border bg-white`,l.setAttribute(`aria-label`,`${t}, page ${e}`),await n.render({canvas:l,viewport:c}).promise,n.cleanup(),a)return;r.appendChild(l),i({error:null,pages:e,truncated:u.numPages>Rm})}})().catch(e=>{a||i(t=>({...t,error:e instanceof Error?e.message:String(e)}))}),()=>{a=!0,o?.(),r.replaceChildren()}},[e,t]),(0,X.jsxs)(`div`,{className:`space-y-2`,children:[r.error&&(0,X.jsxs)(`p`,{className:`text-sm text-destructive`,children:[`Could not render PDF: `,r.error]}),!r.error&&r.pages===0&&(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Rendering PDF…`}),(0,X.jsx)(`div`,{ref:n,className:`space-y-2`}),r.truncated&&(0,X.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Showing the first `,Rm,` pages. Download the file for the full document.`]})]})}function Vm({blob:e,blobUrl:t,filename:n,className:r=``}){let i=(0,Y.useMemo)(()=>e&&e.type!==`application/pdf`?URL.createObjectURL(e.slice(0,e.size,`application/pdf`)):null,[e]);return(0,Y.useEffect)(()=>()=>{i&&URL.revokeObjectURL(i)},[i]),Lm()||!e?(0,X.jsx)(`div`,{className:`min-h-[300px] ${r}`,children:(0,X.jsx)(`iframe`,{src:i??t,className:`h-full min-h-[300px] w-full rounded border`,title:n})}):(0,X.jsx)(`div`,{className:`max-h-viewport-pane overflow-y-auto ${r}`,children:(0,X.jsx)(Bm,{blob:e,filename:n})})}function Hm(e,t,n=256,{enabled:r=!0,blobFallback:i=!0,version:a=null}={}){let{isPublic:o,fetchBlob:s,fetchThumbnail:c}=yo(e),l=`${o?`pub`:`ws`}:${e}:${t}:${n}:${r}:${a??``}`,[u,d]=(0,Y.useState)({blobUrl:null,error:null,loading:r}),[f,p]=(0,Y.useState)(l);return l!==f&&(p(l),d({blobUrl:null,error:null,loading:r})),(0,Y.useEffect)(()=>{if(!r)return;let e=!1,o=null;return c(t,n,a).catch(e=>{if(!i)throw e;return s(t)}).then(({blob:t})=>{e||(o=URL.createObjectURL(t),d({blobUrl:o,error:null,loading:!1}))}).catch(t=>{e||d({blobUrl:null,error:String(t instanceof Error?t.message:t),loading:!1})}),()=>{e=!0,o&&URL.revokeObjectURL(o)}},[l]),u}function Um({workspaceId:e,document:t}){let{download:n}=yo(e),[r,i]=(0,Y.useState)(!1),a=ho(t)||`document-${t.id}`;return(0,X.jsxs)(`button`,{type:`button`,onClick:async()=>{i(!0);try{await n(t.id,a)}finally{i(!1)}},disabled:r,className:`inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:opacity-50`,children:[(0,X.jsx)(tr,{className:`h-3.5 w-3.5`}),r?`Preparing…`:`Download`]})}var Wm=1600;function Gm({error:e,loading:t,children:n}){return e?(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:e}):t?(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading preview...`}):(0,X.jsx)(X.Fragment,{children:n})}function Km({workspaceId:e,document:t,className:n=``}){let r=(0,Y.useContext)(mm),i=Pm(),a=Im(`(pointer: coarse)`),{blobUrl:o,error:s,loading:c}=Hm(e,t.id,Wm,{version:t.checksumArray?.[0]??null}),{fetchBlob:l}=yo(e),u=ho(t)||`document-${t.id}`,[d,f]=(0,Y.useState)(!1);return(0,X.jsx)(Gm,{error:s,loading:c,children:o&&(0,X.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-2 ${n}`,children:[i||a?(0,X.jsx)(`div`,{className:`min-h-0 flex-1`,children:(0,X.jsx)(Am,{src:o,alt:u,className:`max-h-full max-w-full object-contain`})}):(0,X.jsx)(`img`,{src:o,alt:u,draggable:!1,onDoubleClick:r?e=>{e.preventDefault(),e.stopPropagation(),r()}:void 0,title:r?`Double-click to maximize or restore`:void 0,className:`min-h-0 w-full flex-1 object-contain ${r?`cursor-zoom-in`:``}`}),(0,X.jsxs)(`button`,{type:`button`,onClick:async()=>{f(!0);try{let{blob:e}=await l(t.id),n=URL.createObjectURL(e),r=window.document.createElement(`a`);r.href=n,r.download=u,window.document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),3e4)}finally{f(!1)}},disabled:d,className:`inline-flex shrink-0 self-start items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:opacity-50`,children:[(0,X.jsx)(tr,{className:`h-3.5 w-3.5`}),d?`Preparing…`:`Download original`]})]})})}function qm({workspaceId:e,document:t,className:n=``}){let{src:r,error:i,loading:a}=Co(e,t.id);return(0,X.jsx)(Gm,{error:i,loading:a,children:r&&(0,X.jsxs)(`div`,{className:`space-y-2 ${n}`,children:[(0,X.jsx)(`audio`,{src:r,controls:!0,preload:`metadata`,className:`w-full`}),(0,X.jsx)(Um,{workspaceId:e,document:t})]})})}function Jm({workspaceId:e,document:t,className:n=``}){let{src:r,error:i,loading:a}=Co(e,t.id),[o,s]=(0,Y.useState)(!1);return(0,X.jsx)(Gm,{error:i,loading:a,children:r&&(0,X.jsxs)(`div`,{className:`space-y-2 ${n}`,children:[(0,X.jsx)(`video`,{src:r,controls:!0,playsInline:!0,preload:`metadata`,onError:()=>s(!0),className:`max-h-viewport-pane w-full rounded border`}),o&&(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This video can’t be played inline in your browser. Download it to view.`}),(0,X.jsx)(Um,{workspaceId:e,document:t})]})})}function Ym({workspaceId:e,document:t,className:n=``}){let{blobUrl:r,blob:i,error:a,loading:o}=_o(e,t.id,{typeHint:`application/pdf`}),s=ho(t)||`document-${t.id}`;return(0,X.jsx)(Gm,{error:a,loading:o,children:r&&(0,X.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-2 ${n}`,children:[(0,X.jsx)(Vm,{blob:i,blobUrl:r,filename:s,className:`min-h-0 flex-1`}),(0,X.jsx)(`div`,{children:(0,X.jsx)(Um,{workspaceId:e,document:t})})]})})}var Xm=(0,Y.lazy)(()=>m(()=>import(`./markdown-html-d5fDtPv3.js`),__vite__mapDeps([2,3,4,5,6,7,8])));function Zm({content:e,className:t=``,preview:n=!1}){return(0,X.jsx)(Y.Suspense,{fallback:(0,X.jsx)(`div`,{className:`whitespace-pre-wrap break-words ${t}`,children:e}),children:(0,X.jsx)(Xm,{content:e,className:t,preview:n})})}function Qm({workspaceId:e,document:t,className:n=``}){let{text:r,error:i,loading:a}=_o(e,t.id,{mode:`text`});return i?(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:i}):a||r==null?(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading...`}):(0,X.jsx)(`pre`,{className:`bg-muted p-3 rounded text-xs overflow-auto max-h-viewport-pane whitespace-pre-wrap ${n}`,children:r})}function $m({workspaceId:e,document:t,className:n=``}){let r=t.schema===no,{text:i,error:a,loading:o}=_o(e,t.id,{mode:`text`,enabled:!r});return r?(0,X.jsxs)(`div`,{className:`space-y-3 ${n}`,children:[t.data?.title?(0,X.jsx)(`h3`,{className:`text-lg font-semibold`,children:String(t.data.title)}):null,(0,X.jsx)(`div`,{className:`rounded-md border border-input bg-transparent`,children:(0,X.jsx)(Zm,{content:String(t.data?.content??``),className:`markdown-doc px-4 py-3`})})]}):a?(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:a}):o||i==null?(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading...`}):(0,X.jsx)(`div`,{className:`rounded-md border border-input bg-transparent overflow-auto max-h-viewport-pane ${n}`,children:(0,X.jsx)(Zm,{content:i,className:`markdown-doc px-4 py-3`})})}function eh({document:e,className:t=``}){let n=String(e.data?.url??e.data?.uri??``),r=to(n);return r?(0,X.jsx)(`div`,{className:`aspect-video w-full ${t}`,children:(0,X.jsx)(`iframe`,{src:`https://www.youtube-nocookie.com/embed/${encodeURIComponent(r)}`,title:String(e.data?.title??e.data?.label??`YouTube video`),className:`h-full w-full rounded border`,allow:`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture`,allowFullScreen:!0})}):null}function th({document:e,className:t=``}){let n=String(e.data?.url??e.data?.uri??``),[r,i]=(0,Y.useState)({blobUrl:null,blob:null,failed:!1,loading:!0}),[a,o]=(0,Y.useState)(n);n!==a&&(o(n),i({blobUrl:null,blob:null,failed:!1,loading:!0})),(0,Y.useEffect)(()=>{let e=!1,t=null,r=async e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.blob();return new Blob([t],{type:`application/pdf`})},a=()=>{let e=localStorage.getItem(`authToken`);return fetch(`${ni}/proxy/pdf?url=${encodeURIComponent(n)}`,{headers:e?{Authorization:`Bearer ${e}`}:{}})};return fetch(n).then(r).catch(()=>a().then(r)).then(n=>{e||(t=URL.createObjectURL(n),i({blobUrl:t,blob:n,failed:!1,loading:!1}))}).catch(()=>{e||i({blobUrl:null,blob:null,failed:!0,loading:!1})}),()=>{e=!0,t&&URL.revokeObjectURL(t)}},[n]);let{blobUrl:s,blob:c,failed:l,loading:u}=r,d=(()=>{try{let e=decodeURIComponent(new URL(n).pathname.split(`/`).filter(Boolean).pop()??``)||`document`;return/\.pdf$/i.test(e)?e:`${e}.pdf`}catch{return`document.pdf`}})();return(0,X.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-2 ${t}`,children:[(0,X.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-3`,children:[(0,X.jsxs)(`a`,{href:n,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 text-xs text-primary hover:underline`,children:[(0,X.jsx)(_n,{className:`h-3 w-3`}),` `,n]}),c&&(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{if(!c)return;let e=URL.createObjectURL(c),t=window.document.createElement(`a`);t.href=e,t.download=d,window.document.body.appendChild(t),t.click(),t.remove(),setTimeout(()=>URL.revokeObjectURL(e),3e4)},className:`inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-foreground`,children:[(0,X.jsx)(tr,{className:`h-3.5 w-3.5`}),` Download`]})]}),u&&(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading PDF…`}),l&&(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Inline preview unavailable (direct fetch and server proxy both failed). Use the link above.`}),s&&(0,X.jsx)(Vm,{blob:c,blobUrl:s,filename:d,className:`min-h-[300px] flex-1`})]})}function nh(e){if(!e)return!1;try{let t=new URL(e);return!!(/\.pdf$/i.test(t.pathname)||t.hostname.endsWith(`arxiv.org`)&&t.pathname.startsWith(`/pdf/`))}catch{return!1}}function rh(e){try{return new URL(e).hostname.replace(/^www\./,``)}catch{return e}}function ih({document:e,className:t=``}){let n=e.data||{},r=String(n.url??n.uri??``),i=String(n.title??n.label??``)||rh(r),a=typeof n.favIconUrl==`string`?n.favIconUrl:``,o=n.pinned===!0,s=typeof n.timestamp==`string`?n.timestamp:null,[c,l]=(0,Y.useState)(!1);return(0,X.jsxs)(`div`,{className:`space-y-3 ${t}`,children:[(0,X.jsxs)(`a`,{href:r,target:`_blank`,rel:`noopener noreferrer`,className:`group flex items-start gap-3 rounded-lg border bg-card p-3 transition-colors hover:bg-accent/40`,children:[(0,X.jsx)(`div`,{className:`mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded bg-muted`,children:a&&!c?(0,X.jsx)(`img`,{src:a,alt:``,className:`h-5 w-5`,onError:()=>l(!0)}):(0,X.jsx)(ie,{className:`h-4 w-4 text-muted-foreground`})}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,X.jsx)(`span`,{className:`truncate font-medium leading-tight`,children:i}),o&&(0,X.jsx)(te,{className:`h-3 w-3 shrink-0 fill-warning text-warning`})]}),(0,X.jsx)(`div`,{className:`mt-0.5 truncate text-xs text-muted-foreground`,children:rh(r)}),(0,X.jsx)(`div`,{className:`mt-1 truncate font-mono text-[11px] text-muted-foreground/70`,children:r})]}),(0,X.jsx)(_n,{className:`mt-1 h-4 w-4 shrink-0 text-muted-foreground reveal-on-hover`})]}),s&&(0,X.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Saved `,new Date(s).toLocaleString()]})]})}var ah={enableHighAccuracy:!0,timeout:1e4,maximumAge:6e4};function oh(e){let t=e.coords,n={lat:t.latitude,lon:t.longitude,source:`device`};return t.altitude!=null&&Number.isFinite(t.altitude)&&(n.alt=t.altitude),Number.isFinite(t.accuracy)&&(n.accuracy=Math.round(t.accuracy)),n}function sh(){return new Promise((e,t)=>navigator.geolocation.getCurrentPosition(e,t,ah))}function ch(e){let t=e?.code;return t===1?`Location permission denied`:t===2?`Location unavailable; no fix right now`:t===3?`Timed out waiting for a location fix`:`Could not read your location`}function lh(){let e=typeof navigator<`u`&&`geolocation`in navigator&&typeof window<`u`&&window.isSecureContext,[t,n]=(0,Y.useState)(e?`prompt`:`unsupported`),[r,i]=(0,Y.useState)(!1),[a,o]=(0,Y.useState)(!1),[s,c]=(0,Y.useState)(null),[l,u]=(0,Y.useState)(null),[d,f]=(0,Y.useState)(null),[p,m]=(0,Y.useState)(null),h=(0,Y.useRef)(!1),g=(0,Y.useRef)(null),_=(0,Y.useRef)(null);(0,Y.useEffect)(()=>{if(!e||!navigator.permissions?.query)return;let t=!1,r=null;return navigator.permissions.query({name:`geolocation`}).then(e=>{t||(r=e,n(e.state),e.onchange=()=>n(e.state))}).catch(()=>{}),()=>{t=!0,r&&(r.onchange=null)}},[e]);let v=(0,Y.useCallback)(e=>{if(c(null),!e){_.current=null,f(null),m(null),h.current||i(!1);return}let t={lat:e.lat,lon:e.lon,source:`manual`};_.current=t,f(t),m(e.label??null),i(!0)},[]);return{supported:e,permission:t,enabled:r,busy:a,error:s,fix:l,setEnabled:(0,Y.useCallback)(t=>{if(c(null),!t){h.current=!1,_.current=null,f(null),m(null),i(!1);return}_.current||e&&(h.current=!0,i(!0),o(!0),sh().then(e=>{let t=oh(e);g.current=t,u(t),n(`granted`)}).catch(e=>{c(ch(e)),e?.code===1&&(n(`denied`),h.current=!1,i(!1))}).finally(()=>o(!1)))},[e]),manual:d,manualLabel:p,setManual:v,capture:(0,Y.useCallback)(async()=>{if(_.current)return _.current;if(!h.current||!e)return null;try{return oh(await sh())}catch{return g.current}},[e])}}var uh=`2.1`,dh=[`pending`,`in-progress`,`completed`,`cancelled`],fh={pending:`Pending`,"in-progress":`In progress`,completed:`Completed`,cancelled:`Cancelled`};function ph(e){return String(e).padStart(2,`0`)}function mh(e){return`${e.getFullYear()}-${ph(e.getMonth()+1)}-${ph(e.getDate())}T${ph(e.getHours())}:${ph(e.getMinutes())}`}function hh(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:mh(t)}function gh(e){if(!e)return;let t=new Date(e);return Number.isNaN(t.getTime())?void 0:t.toISOString()}function _h(){let e=new Date;return e.setHours(23,59,0,0),mh(e)}function vh(e){let t=gh(e.due);return{title:e.title.trim(),...e.description.trim()?{description:e.description.trim()}:{},status:e.status,completed:e.status===`completed`,...t?{dueDate:t}:{},...e.priority===``?{}:{priority:Number(e.priority)}}}function yh(){let[e,t]=(0,Y.useState)(``),[n,r]=(0,Y.useState)(``),[i,a]=(0,Y.useState)(`pending`),[o,s]=(0,Y.useState)(``),[c,l]=(0,Y.useState)(_h()),[u,d]=(0,Y.useState)([]),[f,p]=(0,Y.useState)(``),[m,h]=(0,Y.useState)(!1),g=lh(),_=e.trim().length>0&&!m;async function v(t){h(!0);try{let r=await g.capture(),a=f.trim(),s={schema:oo,schemaVersion:uh,data:vh({title:e,description:n,status:i,priority:o,due:c}),...a?{comment:a}:{},metadata:{features:Mp(u),...r?{geo:r}:{}}};return await ns(t,[s])}finally{h(!1)}}return{title:e,setTitle:t,description:n,setDescription:r,status:i,setStatus:a,priority:o,setPriority:s,due:c,setDue:l,tags:u,setTags:d,comment:f,setComment:p,saving:m,canSave:_,save:v,geotag:g}}function bh(e){return e.data||{}}var xh={pending:`bg-muted text-muted-foreground`,"in-progress":`bg-info/15 text-info dark:text-info`,completed:`bg-success/15 text-success dark:text-success`,cancelled:`bg-muted text-muted-foreground line-through`};function Sh(e){if(!e.dueDate||e.status===`completed`||e.status===`cancelled`)return!1;let t=new Date(e.dueDate).getTime();return Number.isFinite(t)&&t<Date.now()}function Ch(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleString(void 0,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}async function wh(e,t,n){let r=n===`completed`,i={...t.data||{},status:n,completed:r};r?i.completedAt=new Date().toISOString():delete i.completedAt,await Wi(e,{id:t.id,schema:t.schema,schemaVersion:t.schemaVersion,data:i}),window.dispatchEvent(new CustomEvent(`workspace:documents:refresh`))}function Th({document:e,workspaceId:t,className:n=``}){let r=bh(e),i=Do()!=null,[a,o]=(0,Y.useState)(!1),{replicating:s,label:c}=ta(e),l=r.status===`completed`,u=r.status??`pending`,d=Sh(r);return(0,X.jsx)(`div`,{className:`space-y-3 ${n}`,children:(0,X.jsxs)(`div`,{className:`relative flex items-start gap-3 rounded-lg border bg-card p-3 transition-opacity ${s?`opacity-60`:``}`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:async()=>{if(!(i||a)){o(!0);try{await wh(t,e,l?`pending`:`completed`)}catch{}finally{o(!1)}}},disabled:i||a||s,"aria-pressed":l,title:l?`Mark not done`:`Mark done`,className:`mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded border transition-colors ${l?`border-success bg-success text-success-foreground`:`border-input hover:border-success`} ${i?`cursor-default opacity-70`:``}`,children:a?(0,X.jsx)(Nt,{className:`h-3 w-3 animate-spin`}):l&&(0,X.jsx)(et,{className:`h-3.5 w-3.5`})}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`div`,{className:`font-medium leading-tight ${l?`text-muted-foreground line-through`:``}`,children:r.title||`Todo ${e.id}`}),(0,X.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-2 text-xs`,children:[(0,X.jsx)(`span`,{className:`rounded-full px-2 py-0.5 ${xh[u]}`,children:fh[u]}),r.dueDate&&(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1 ${d?`font-medium text-destructive`:`text-muted-foreground`}`,children:[(0,X.jsx)(de,{className:`h-3 w-3`}),Ch(r.dueDate),d?` · overdue`:``]}),typeof r.priority==`number`&&(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-muted-foreground`,children:[(0,X.jsx)(xn,{className:`h-3 w-3`}),`P`,r.priority]})]}),r.description&&(0,X.jsx)(Zm,{content:String(r.description),className:`mt-2 text-sm text-muted-foreground`}),s&&(0,X.jsxs)(`div`,{className:`mt-2 inline-flex items-center gap-1.5 text-xs text-muted-foreground`,role:`status`,children:[(0,X.jsx)(Nt,{className:`h-3 w-3 animate-spin`}),c]})]})]})})}function Eh(e){return e?typeof e==`string`?e:e.name&&e.address?`${e.name} <${e.address}>`:e.address||e.name||``:``}function Dh(e){return e?(Array.isArray(e)?e:[e]).map(e=>Eh(e)).filter(Boolean).join(`, `):``}function Oh(e){if(!Number.isFinite(e))return``;let t=Number(e);return t<1024?`${t} B`:t<1048576?`${(t/1024).toFixed(1)} KB`:`${(t/1024/1024).toFixed(1)} MB`}function kh(e,t,n){let r=0;Cs.addHook(`afterSanitizeAttributes`,e=>{if(e.tagName===`IMG`){let i=e.getAttribute(`src`)||``,a=i.toLowerCase();if(a.startsWith(`cid:`)){let n=i.slice(4).replace(/^<|>$/g,``),r=t.get(n)||t.get(`<${n}>`);r?e.setAttribute(`src`,r):e.removeAttribute(`src`)}else(a.startsWith(`http:`)||a.startsWith(`https:`)||a.startsWith(`//`))&&(r++,n?e.setAttribute(`src`,i.replace(/^http:/i,`https:`).replace(/^\/\//,`https://`)):e.removeAttribute(`src`))}e.tagName===`A`&&(e.setAttribute(`target`,`_blank`),e.setAttribute(`rel`,`noopener noreferrer`))});try{let t=Cs.sanitize(e,{FORBID_TAGS:[`script`,`iframe`,`object`,`embed`,`form`,`base`,`link`,`meta`],FORBID_ATTR:[`srcset`]}),i=`<!doctype html><html><head>
7
7
  <meta charset="utf-8">
@@ -21,7 +21,7 @@ Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}
21
21
  `).trim():``:``}function bT(e){if(!e)return;let t=yT(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 xT(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 ST(e=[]){return e.filter(e=>e?.role===`user`||e?.role===`assistant`).map(e=>({role:e.role,content:vT(e),timestamp:xT(e.timestamp),...e.role===`assistant`?{metadata:bT(e)}:{}})).filter(e=>e.content||e.metadata?.reasoning)}function CT(e){return{mode:e?.mode,sessionId:e?.sessionId,sessionFile:e?.sessionFile,thinkingLevel:e?.thinkingLevel,model:e?.model,messages:ST(e?.messages||[])}}function wT(e){return{current:CT(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 _T(e)}catch(e){console.warn(`WebSocket fallback not available:`,e)}}registerAgent(e){if(e.type===`anthropic`){let t=new gT(e.apiKey||``,e.endpoint||`${ni}/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 J.stream(`${ni}/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 J.get(`${ni}/agents`)).agents||[]}catch(e){return console.error(`Failed to fetch available agents:`,e),[]}}async createAgent(e){let t=await J.post(`${ni}/agents`,e);return this.registerAgent(t),t}dispose(){this.connectors.clear(),this.messageCallbacks.clear(),this.wsService&&this.wsService.disconnect()}};async function TT(e){return await J.get(`${ni}/agents/${e}/access`)||null}async function ET(e,t){return await J.put(`${ni}/agents/${e}/access`,t)}async function DT(e){return await J.post(`${ni}/agents/${e}/access/token`)}async function OT(e){await J.delete(`${ni}/agents/${e}/access`)}async function kT(e){return await J.get(`${ni}/agents/${e}/tools`)||{tools:[],config:{}}}async function AT(){try{return await J.get(`${ni}/agents`)||[]}catch(e){return console.error(`Failed to list agents:`,e),[]}}async function jT(e){return await J.get(`${ni}/agents/${e}`)}async function MT(e){return CT(await J.get(`${ni}/agents/${e}/session`))}async function NT(e){return await J.get(`${ni}/agents/${e}/sessions`)}async function PT(e,t){return wT(await J.post(`${ni}/agents/${e}/sessions`,t))}async function FT(e,t){return wT(await J.put(`${ni}/agents/${e}/session`,t))}async function IT(e,t,n){return wT(await J.patch(`${ni}/agents/${e}/sessions/${t}`,n))}async function LT(e,t){return wT(await J.delete(`${ni}/agents/${e}/sessions/${t}`))}async function RT(e){return await J.get(`${ni}/agents/${e}/skills`)||[]}async function zT(e,t){return await J.post(`${ni}/agents/${e}/skills`,t)||[]}async function BT(e,t){return await J.delete(`${ni}/agents/${e}/skills/${encodeURIComponent(t)}`)||[]}async function VT(e){return await J.post(`${ni}/agents`,e)}async function HT(e,t){return await J.put(`${ni}/agents/${e}`,t)}async function UT(e){await J.delete(`${ni}/agents/${e}`)}async function WT(e){return await J.post(`${ni}/agents/${e}/start`)}async function GT(e){return await J.post(`${ni}/agents/${e}/stop`)}async function KT(e){return await J.get(`${ni}/agents/${e}/status`)}async function qT(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 J.stream(`${ni}/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(`
22
22
 
23
23
  `);f=t.pop()||``;for(let e of t){let t=e.split(`
24
- `).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||{},...bT(t)||{}})}else e.type===`error`&&a&&a(Error(e.error||`Prompt stream failed`))}catch{}}}},onError:a,onComplete:o})}async function JT(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 J.post(`${ni}/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:vT(i),metadata:bT(i)};return r&&r(d.content,!0,d.metadata),a&&a(),d}catch(e){throw i&&i(e),e}}function YT(e){return e.map(e=>({...e,timestamp:typeof e.timestamp==`string`?e.timestamp:new Date().toISOString()}))}async function XT(){return await J.get(`${ni}/voice/status`)}async function ZT(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 J.post(`${ni}/agents/${e}/voice${o}`,r)}var QT=[{id:`workspace`,label:`Workspace`,path:`workspaces`,description:`Files, search, devices and sharing for one workspace. These settings override account defaults.`,sections:cT,load:async()=>(await Fr()).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:dT,load:async()=>(await Xo()).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:pT,load:async()=>(await AT()).map(e=>({id:e.id,label:e.label||e.name}))}];function $T({to:e,label:t,description:n,icon:r}){return(0,X.jsxs)(gu,{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,X.jsx)(r,{className:`mt-0.5 h-5 w-5 shrink-0 text-muted-foreground`}),(0,X.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`span`,{className:`block text-sm font-semibold`,children:t}),(0,X.jsx)(`span`,{className:`mt-1 block text-sm leading-relaxed text-muted-foreground`,children:n})]}),(0,X.jsx)(Jn,{className:`mt-0.5 h-4 w-4 shrink-0 text-muted-foreground group-hover:text-primary`})]})}function eE({group:e,query:t}){let[n,r]=(0,Y.useState)([]),[i,a]=(0,Y.useState)(``),[o,s]=(0,Y.useState)(`loading`),[c,l]=(0,Y.useState)(0);(0,Y.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=>Gx(t,e.label,n.label,n.description));return u.length?(0,X.jsxs)(`section`,{id:e.id,className:`scroll-mt-6 space-y-3`,children:[(0,X.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.label}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,X.jsxs)(`label`,{className:`block max-w-md text-sm font-medium`,children:[`Choose a `,e.label.toLowerCase(),(0,X.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,X.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,X.jsx)(`option`,{value:e.id,children:e.label},e.id))]})]}),o===`error`&&(0,X.jsxs)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,children:[`The list could not be loaded. `,(0,X.jsx)(`button`,{type:`button`,className:`underline`,onClick:()=>{s(`loading`),l(e=>e+1)},children:`Retry`})]}),(0,X.jsxs)(`details`,{open:!!(i||t.trim()),children:[(0,X.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,X.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fit,minmax(min(100%,16rem),1fr))] gap-3`,children:u.map(t=>i?(0,X.jsx)($T,{to:`/${e.path}/${encodeURIComponent(i)}/settings/${t.id}`,...t},t.id):(0,X.jsxs)(`div`,{className:`rounded-lg border border-dashed p-4`,children:[(0,X.jsx)(`p`,{className:`text-sm font-medium`,children:t.label}),(0,X.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:t.description})]},t.id))})]})]}):null}function tE(){let{state:e}=pS(),[t,n]=(0,Y.useState)(``),r=Ux.filter(t=>t.id!==`server`||e.user?.userType===`admin`).map(e=>({...e,items:e.items.filter(n=>Gx(t,e.label,n.label,n.description))})).filter(e=>e.items.length),i=QT.some(e=>e.sections.some(n=>Gx(t,e.label,n.label,n.description)));return(0,X.jsxs)(`div`,{className:`mx-auto max-w-6xl space-y-8 pb-8 max-md:pb-rail-stack`,children:[(0,X.jsx)(Dx,{title:`Settings`,description:`Start with what you want to change. Each section explains where your changes apply.`}),(0,X.jsx)(K,{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,X.jsxs)(`section`,{className:`space-y-3`,children:[(0,X.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.label}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,X.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fit,minmax(min(100%,16rem),1fr))] gap-3`,children:e.items.map(e=>(0,X.jsx)($T,{to:e.path,...e},e.path))})]},e.id)),QT.map(e=>(0,X.jsx)(eE,{group:e,query:t},e.id)),r.filter(e=>e.id===`server`||e.id===`information`).map(e=>(0,X.jsxs)(`section`,{className:`space-y-3`,children:[(0,X.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.label}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,X.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fit,minmax(min(100%,16rem),1fr))] gap-3`,children:e.items.map(e=>(0,X.jsx)($T,{to:e.path,...e},e.path))})]},e.id)),!r.length&&!i&&(0,X.jsxs)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,children:[`No settings match “`,t,`”. Try a shorter phrase or clear the search.`]})]})}var nE=[{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`}],rE=`/wallpapers`;function iE(e){return nE.find(t=>t.id===e)}function aE(e,t={}){let n=typeof e==`string`?iE(e):e;if(!n)return null;let{base:r=rE,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 oE(e,t=rE){let n=typeof e==`string`?iE(e):e;return n?`${t.replace(/\/$/,``)}/${n.thumb}`:null}var sE=[{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`}],cE=`canvas:wallpaper`,lE=`builtin:`,uE=nE;function dE(e){return oE(e)??``}function fE(e){return`${lE}${e}`}function pE(e){return e?.startsWith(lE)?e.slice(8):null}function mE(){try{let e=localStorage.getItem(cE);if(e){let t=JSON.parse(e);if(typeof t.image==`string`||t.image===null){let e=t.fit===`fill`||t.fit===`center`?t.fit:`cover`;return{image:t.image??null,fit:e}}}}catch{}return{image:null,fit:`cover`}}function hE(e){localStorage.setItem(cE,JSON.stringify(e)),yE(e)}var gE=typeof CSS<`u`&&CSS.supports(`background-image`,`image-set(url("a.avif") type("image/avif"))`);function _E(e){if(!e)return null;let t=pE(e);if(t===null)return`url("${e}")`;let n=iE(t);if(!n)return null;let r=`url("${aE(n,{types:[n.sources[n.sources.length-1].type]})}")`;return!gE||n.sources.length===1?r:`image-set(${n.sources.map(e=>`url("${aE(n,{types:[e.type]})}") type("${e.type}")`).join(`, `)})`}function vE(e){return e===`fill`?`100% 100%`:e===`center`?`auto`:`cover`}function yE(e=mE()){let t=document.documentElement.style,n=_E(e.image);if(!n){t.removeProperty(`--wallpaper-image`),t.removeProperty(`--wallpaper-size`);return}t.setProperty(`--wallpaper-image`,n),t.setProperty(`--wallpaper-size`,vE(e.fit))}var bE=[{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.`}],xE=`canvas:treeStyle`;function SE(){try{let e=localStorage.getItem(xE);return e===`accordion`||e===`accordion-mobile`?e:`cards`}catch{return`cards`}}var CE=SE(),wE=new Set;function TE(){return CE}function EE(e){try{e===`cards`?localStorage.removeItem(xE):localStorage.setItem(xE,e)}catch{}CE=e;for(let e of wE)e()}function DE(e){wE.add(e);let t=t=>{(t.key===xE||t.key===null)&&(CE=SE(),e())};return window.addEventListener(`storage`,t),()=>{wE.delete(e),window.removeEventListener(`storage`,t)}}function OE(){return(0,Y.useSyncExternalStore)(DE,TE,()=>`cards`)}function kE(){let e=OE(),t=Pm();return e===`accordion`||e===`accordion-mobile`&&t}var AE=[{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)`]}],jE=AE.map(e=>e.id),ME=[{id:`system`,name:`System`},{id:`light`,name:`Light`},{id:`dark`,name:`Dark`}],NE=[{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`}],PE={theme:`canvas`,scheme:`light`,density:`auto`},FE=`canvas.ui.theme`;function IE(e){return typeof e==`string`&&jE.includes(e)}function LE(e){return e===`light`||e===`dark`||e===`system`}function RE(e){return e===`auto`||e===`compact`||e===`comfortable`||e===`touch`}function zE(e){let t=typeof e==`object`&&e?e:{};return{theme:IE(t.theme)?t.theme:PE.theme,scheme:LE(t.scheme)?t.scheme:PE.scheme,density:RE(t.density)?t.density:PE.density}}var BE=`(prefers-color-scheme: dark)`;function VE(){return typeof document<`u`}function HE(){return typeof window>`u`||typeof window.matchMedia!=`function`?!1:window.matchMedia(BE).matches}function UE(e){return e===`system`?HE()?`dark`:`light`:e}function WE(e){if(typeof window>`u`||typeof window.matchMedia!=`function`)return()=>{};let t=window.matchMedia(BE),n=t=>e(t.matches?`dark`:`light`);return t.addEventListener(`change`,n),()=>t.removeEventListener(`change`,n)}function GE(e){return WE(e)}function KE(){return HE()?`dark`:`light`}function qE(){return`light`}function JE(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 YE(e,t=VE()?document.documentElement:void 0){let n=UE(e.scheme);return t?(t.dataset.theme=e.theme,t.dataset.scheme=n,t.dataset.density=e.density,JE(t),n):n}function XE(e,t=VE()?document.documentElement:void 0){if(!t||typeof window>`u`)return YE(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=YE(e,t);return window.getComputedStyle(n).opacity,document.head.removeChild(n),r}function ZE(e){let t=e??eD();if(!t)return PE;try{let e=t.getItem(FE);return e?zE(JSON.parse(e)):PE}catch{return PE}}function QE(e,t){let n=t??eD();if(n)try{n.setItem(FE,JSON.stringify(e))}catch{}}function $E(e){let t=e??eD();if(t)try{t.removeItem(FE)}catch{}}function eD(){try{return typeof localStorage<`u`?localStorage:void 0}catch{return}}function tD({children:e,initial:t,storage:n,persist:r=!0}){let[i,a]=(0,Y.useState)(()=>({...ZE(n),...t})),o=(0,Y.useSyncExternalStore)(GE,KE,qE),s=i.scheme===`system`?o:i.scheme;(0,Y.useEffect)(()=>{XE({...i,scheme:s})},[i,s]),(0,Y.useEffect)(()=>{r&&QE(i,n)},[i,r,n]);let c=(0,Y.useCallback)(e=>{a(t=>t.theme===e?t:{...t,theme:e})},[]),l=(0,Y.useCallback)(e=>{a(t=>t.scheme===e?t:{...t,scheme:e})},[]),u=(0,Y.useCallback)(e=>{a(t=>t.density===e?t:{...t,density:e})},[]),d=(0,Y.useCallback)(()=>{a(e=>({...e,scheme:(e.scheme===`system`?KE():e.scheme)===`dark`?`light`:`dark`}))},[]),f=(0,Y.useCallback)(()=>{$E(n),a(PE)},[n]),p=(0,Y.useMemo)(()=>({...i,resolvedScheme:s,setTheme:c,setScheme:l,setDensity:u,toggleScheme:d,reset:f}),[i,s,c,l,u,d,f]);return(0,X.jsx)(Ts.Provider,{value:p,children:e})}var nD={system:fe,light:Kn,dark:Fn};function rD(){let{theme:e,scheme:t,density:n,resolvedScheme:r,setTheme:i,setScheme:a,setDensity:o,reset:s}=Es(),c=Sm(),l=tS(),u=OE(),d=uS();return(0,X.jsxs)(`div`,{className:`space-y-8`,children:[(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Theme`,description:`Palette, shape and typography. Each theme defines its own light and dark variants.`}),(0,X.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-3`,children:AE.map(t=>{let n=t.id===e;return(0,X.jsxs)(`button`,{type:`button`,onClick:()=>i(t.id),"aria-pressed":n,className:G(`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,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,X.jsx)(`span`,{className:`text-sm font-medium`,children:t.name}),n&&(0,X.jsx)(et,{className:`size-4 shrink-0 text-primary`})]}),(0,X.jsx)(`div`,{className:`flex gap-1.5`,"aria-hidden":!0,children:t.swatches.map(e=>(0,X.jsx)(`span`,{className:`size-6 rounded-full border border-border`,style:{backgroundColor:e}},e))}),(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:t.description})]},t.id)})})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Colour scheme`,description:t===`system`?`Following your system setting, currently ${r}.`:`Overrides your system setting.`}),(0,X.jsx)(cD,{options:ME.map(e=>{let t=nD[e.id];return{id:e.id,label:e.name,icon:(0,X.jsx)(t,{className:`size-4 shrink-0`})}}),value:t,onChange:a})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Density`,description:`Controls row height, hit-target size and shell spacing across the whole app.`}),(0,X.jsx)(cD,{options:NE.map(e=>({id:e.id,label:e.name,title:e.description})),value:n,onChange:o}),(0,X.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:NE.find(e=>e.id===n)?.description})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Layout`,description:`How menus and content share the screen. Device-local, like the wallpaper.`}),(0,X.jsx)(cD,{options:Kx.map(e=>({id:e.id,label:e.name,title:e.description})),value:l,onChange:$x}),(0,X.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:Kx.find(e=>e.id===l)?.description}),l===`strip`&&(0,X.jsxs)(`div`,{className:`mt-4`,children:[(0,X.jsx)(`p`,{className:`mb-2 text-sm font-medium`,children:`Navigation keys`}),(0,X.jsx)(cD,{options:nS.map(e=>({id:e.id,label:e.name,title:e.description})),value:d,onChange:cS}),(0,X.jsxs)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:[nS.find(e=>e.id===d)?.description,` `,`Left and right walk the columns, up and down switch pin rows.`]})]})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Tree style`,description:`How workspace and context trees are drawn in the menu. Device-local.`}),(0,X.jsx)(cD,{options:bE.map(e=>({id:e.id,label:e.name,title:e.description})),value:u,onChange:EE}),(0,X.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:bE.find(e=>e.id===u)?.description})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Open documents`,description:`Choose how documents open from lists, tiles and boards. Saved on this device.`}),(0,X.jsx)(cD,{options:[{id:`modal`,label:`Modal`},{id:`side`,label:`Side reading pane`}],value:c,onChange:bm}),(0,X.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,X.jsx)(iD,{}),(0,X.jsx)(`section`,{children:(0,X.jsx)(`button`,{type:`button`,onClick:()=>{s(),bm(`modal`)},className:`focus-ring rounded-md text-sm text-muted-foreground underline-offset-4 hover:text-foreground hover:underline`,children:`Reset to defaults`})})]})}function iD(){let[e,t]=(0,Y.useState)(mE),[n,r]=(0,Y.useState)(null),i=e=>{try{hE(e),t(e),r(null)}catch{r(`Could not store the wallpaper (browser storage full?). Try a smaller image.`)}},a=t=>{if(!t)return;if(!t.type.startsWith(`image/`)){r(`Pick an image file.`);return}let n=new FileReader;n.onload=()=>{let t=String(n.result||``);if(t.length>3670016){r(`Image too large for browser storage. Use one under ~2.5 MB.`);return}i({...e,image:t})},n.readAsDataURL(t)},o=e.image!==null&&pE(e.image)===null,s=_E(e.image);return(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Wallpaper`,description:`Background image for the desk behind all panels. Without one, the theme's desk color shows (the default).`}),(0,X.jsxs)(`div`,{role:`radiogroup`,"aria-label":`Wallpaper`,className:`grid grid-cols-3 gap-3 sm:grid-cols-4 lg:grid-cols-6`,children:[(0,X.jsx)(oD,{label:`None`,isActive:e.image===null,onSelect:()=>i({...e,image:null}),children:(0,X.jsx)(`span`,{className:`flex size-full items-center justify-center surface-desk text-xs text-muted-foreground`,style:{backgroundImage:`none`},children:`None`})}),uE.map(t=>(0,X.jsx)(oD,{label:t.title,title:`${t.title} — suits the ${t.scheme} scheme`,isActive:pE(e.image)===t.id,onSelect:()=>i({...e,image:fE(t.id)}),children:(0,X.jsx)(`img`,{src:dE(t),alt:``,loading:`lazy`,className:`size-full object-cover`,style:{backgroundColor:t.background}})},t.id)),o&&(0,X.jsx)(oD,{label:`Your image`,isActive:!0,onSelect:()=>{},children:(0,X.jsx)(`img`,{src:e.image??void 0,alt:``,className:`size-full object-cover`})})]}),(0,X.jsx)(aD,{}),(0,X.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-3`,children:[(0,X.jsx)(`div`,{className:`h-20 w-32 shrink-0 rounded-md border surface-desk`,style:s?{backgroundImage:s,backgroundSize:vE(e.fit),backgroundPosition:`center`,backgroundRepeat:`no-repeat`}:void 0,"aria-hidden":!0}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,X.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:[o?`Change image…`:`Use your own image…`,(0,X.jsx)(`input`,{type:`file`,accept:`image/*`,className:`hidden`,onChange:e=>{a(e.target.files?.[0]),e.target.value=``}})]}),e.image&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>i({...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,X.jsx)(cD,{options:sE.map(e=>({id:e.id,label:e.label,title:e.description})),value:e.fit,onChange:t=>i({...e,fit:t})}),n&&(0,X.jsx)(`p`,{className:`text-xs text-destructive`,children:n})]})]})]})}function aD(){let e=uE.filter(e=>e.author!==`Canvas`);return e.length===0?null:(0,X.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:e.map((e,t)=>(0,X.jsxs)(`span`,{children:[t>0&&` · `,e.title,` © `,e.author,e.source&&(0,X.jsxs)(X.Fragment,{children:[` `,(0,X.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 oD({label:e,title:t,isActive:n,onSelect:r,children:i}){return(0,X.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":n,"aria-label":e,title:t??e,onClick:r,className:G(`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,X.jsx)(`span`,{className:`absolute right-1 top-1 rounded-full bg-primary p-0.5 text-primary-foreground`,children:(0,X.jsx)(et,{className:`size-3`})})]})}function sD({title:e,description:t}){return(0,X.jsxs)(`div`,{className:`mb-3`,children:[(0,X.jsx)(`h2`,{className:`text-base font-semibold`,children:e}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t})]})}function cD({options:e,value:t,onChange:n}){return(0,X.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,X.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":r,title:e.title,onClick:()=>n(e.id),className:G(`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 lD(){return(0,X.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,X.jsx)(Dx,{className:`mb-6`,title:`Appearance`,onBack:Qw(),description:`Theme, colour scheme and density. Changes apply immediately and are remembered on this device.`}),(0,X.jsx)(rD,{})]})}var uD={previousTree:`Alt+Q`,nextTree:`Alt+W`},dD=`canvas:key-bindings`,fD=/^(Alt|Alt\+Shift|Ctrl\+Shift|Meta\+Shift)\+[A-Z]$/;function pD(){try{let e=JSON.parse(localStorage.getItem(dD)||`{}`),t={...uD};for(let n of Object.keys(t))(e[n]===``||fD.test(e[n]))&&(t[n]=e[n]);return t.previousTree&&t.previousTree===t.nextTree?{...uD}:t}catch{return{...uD}}}function mD(e){localStorage.setItem(dD,JSON.stringify(e))}function hD(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 gD(e,t,n){return e[(Math.max(0,e.indexOf(t))+n+e.length)%e.length]}function _D(e,t){return Math.abs(e)>=48&&Math.abs(e)>Math.abs(t)*1.5?e<0?1:-1:0}function vD(){let[e,t]=(0,Y.useState)(pD),[n,r]=(0,Y.useState)(``),i=e=>{if(e.previousTree&&e.previousTree===e.nextTree){r(`Choose a different shortcut: that combination is already assigned.`);return}try{mD(e),t(e),r(`Saved on this device.`)}catch{r(`Could not save shortcuts in this browser.`)}};return(0,X.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,X.jsx)(Dx,{className:`mb-6`,title:`Key bindings`,onBack:Qw(),description:`Web UI shortcuts, saved on this device and available offline.`}),(0,X.jsxs)(`section`,{className:`space-y-4 rounded-lg border p-4`,children:[(0,X.jsx)(`h2`,{className:`font-medium`,children:`Tree navigation`}),(0,X.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,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,X.jsx)(`label`,{htmlFor:t,className:`min-w-32 text-sm`,children:t===`previousTree`?`Previous tree`:`Next tree`}),(0,X.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)||uD[t].slice(-1)}`:``}),children:[(0,X.jsx)(`option`,{value:``,children:`Disabled`}),[`Alt`,`Alt+Shift`,`Ctrl+Shift`,`Meta+Shift`].map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))]}),(0,X.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)||uD[t].slice(-1),onChange:n=>i({...e,[t]:`${e[t].split(`+`).slice(0,-1).join(`+`)}+${n.target.value}`}),children:`ABCDEFGHIJKLMNOPQRSTUVWXYZ`.split(``).map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))})]},t)),(0,X.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,X.jsx)(`button`,{type:`button`,className:`rounded-md border px-3 py-2 text-sm hover:bg-accent`,onClick:()=>i({...uD}),children:`Restore defaults`}),(0,X.jsx)(`p`,{role:`status`,className:`text-sm`,children:n})]})]})}var yD=`offline-content-v1`,bD=`offline-api-v1`,xD=1073741824,SD={enabled:!1,budgetBytes:4*xD,excludedWorkspaces:[]},CD=1e3;function wD(e){return(e.startsWith(`/`)?e:`/${e}`).replace(/\/+$/,``)||`/`}function TD(e,t,n){return`${e}:${t}:${wD(n)}`}var ED=`canvas-offline`,DD=2,OD=null;function kD(){return OD||(OD=new Promise((e,t)=>{let n=indexedDB.open(ED,DD);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(),OD=null},e(n.result)},n.onerror=()=>{OD=null,t(n.error)}}),OD)}function AD(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error),e.onabort=()=>n(e.error)})}function jD(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}async function MD(e,t){return jD((await kD()).transaction(e).objectStore(e).get(t))}async function ND(e){return jD((await kD()).transaction(e).objectStore(e).getAll())}async function PD(e,t,n){let r=(await kD()).transaction(e,`readwrite`);return r.objectStore(e).put(t,n),AD(r)}async function FD(e,t){let n=(await kD()).transaction(e,`readwrite`);return n.objectStore(e).delete(t),AD(n)}async function ID(e){let t=(await kD()).transaction(e,`readwrite`);return t.objectStore(e).clear(),AD(t)}async function LD(){try{let e=await MD(`config`,`settings`);return e?{...SD,...e}:SD}catch{return SD}}async function RD(e){await PD(`config`,e,`settings`)}async function zD(e,t){let n=(await kD()).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 AD(n)}async function BD(e){let t=await ND(`entries`),n=t.filter(e=>e.kind===`api`).sort((e,t)=>e.lastAccess-t.lastAccess),r=n.slice(0,Math.max(0,n.length-CD)),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(bD),caches.open(yD)]);await Promise.all([...r.map(async e=>{await c.delete(e.url),await FD(`entries`,e.url)}),...s.map(async e=>{await l.delete(e.url),await FD(`entries`,e.url)})])}async function VD(){let e=await ND(`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 HD(){await Promise.all([caches.delete(yD),caches.delete(bD)]),await ID(`entries`),await ID(`scopes`)}async function UD(){return ND(`scopes`)}async function WD(e){return MD(`scopes`,e)}async function GD(e){await PD(`scopes`,e)}async function KD(e){let t=await MD(`scopes`,e);await FD(`scopes`,e),t?.urls.length&&await qD(t.urls)}async function qD(e){let t=await ND(`scopes`),n=new Set(t.flatMap(e=>e.urls)),r=e.filter(e=>!n.has(e));r.length&&await zD(r,!1)}var JD=3,YD=`data/schema/file`,XD=128;async function ZD({workspaceRef:e,path:t,treeName:n,treeType:r},i){let a=await LD();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=TD(e,n,t),s=wD(t),c=await WD(o),l=((await qi(e,s,[],{limit:1e4,treeName:n,treeType:r})).payload??[]).filter(e=>e.schema===YD),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(JD,l.length)},async()=>{for(;h<l.length;){let t=l[h++];if(d>=a.budgetBytes*.9){p=!0;return}try{let{blob:n}=await Xr(e,t.id);d+=n.size,u.push(`${$r.workspaces}/${e}/documents/${t.id}/content`);try{await fi(e,t.id,XD),u.push(`${$r.workspaces}/${e}/documents/${t.id}/thumbnail?size=${XD}`)}catch{}}catch{}f+=1,i?.({done:f,total:m,bytes:d})}})),await zD(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 GD(g),c){let e=new Set(u),t=c.urls.filter(t=>!e.has(t));t.length&&await qD(t)}return g}var QD=[{label:`1 GB`,bytes:1*xD},{label:`2 GB`,bytes:2*xD},{label:`4 GB`,bytes:4*xD},{label:`8 GB`,bytes:8*xD}];function $D(e){return e<1048576?`${(e/1024).toFixed(0)} KB`:e<1073741824?`${(e/1048576).toFixed(1)} MB`:`${(e/xD).toFixed(2)} GB`}function eO(){navigator.serviceWorker?.controller?.postMessage({type:`OFFLINE_SETTINGS_CHANGED`})}function tO(){let{showSuccessToast:e,showErrorToast:t}=co(),[n,r]=(0,Y.useState)(null),[i,a]=(0,Y.useState)(null),[o,s]=(0,Y.useState)(null),[c,l]=(0,Y.useState)([]),[u,d]=(0,Y.useState)([]),[f,p]=(0,Y.useState)({}),[m,h]=(0,Y.useState)(!1),[g,_]=(0,Y.useState)(!1),v=(0,Y.useCallback)(()=>{LD().then(r).catch(()=>{}),VD().then(a).catch(()=>{}),UD().then(e=>d(e.sort((e,t)=>e.id.localeCompare(t.id)))).catch(()=>{}),navigator.storage?.persisted?.().then(s).catch(()=>{})},[]);(0,Y.useEffect)(()=>{v(),Fr().then(e=>l(e.map(e=>e.name).filter(Boolean).sort())).catch(()=>{})},[v]);let y=async e=>{r(e),await RD(e),eO(),e.enabled&&navigator.storage?.persist?.().then(s).catch(()=>{}),BD(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 HD(),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=TD(n.workspaceRef,n.treeName,n.path);p(e=>({...e,[r]:{done:0,total:0,bytes:0}}));try{let t=await ZD(n,e=>p(t=>({...t,[r]:e})));e(t.truncated?`Pinned ${$D(t.bytes)} — stopped at the size budget`:`Pinned ${t.workspaceRef}:/${t.path} (${$D(t.bytes)})`)}catch(e){t(e instanceof Error?e.message:`Failed to pin`)}finally{p(e=>{let{[r]:t,...n}=e;return n}),v()}},w=(e,t)=>{_(!1);for(let n of e)S({workspaceRef:t.workspaceName,path:n,treeName:t.treeName,treeType:t.treeType})},T=e=>({workspaceRef:e.workspaceRef,path:e.path,treeName:e.treeName||`context`,treeType:e.treeType||`context`}),E=async e=>{await KD(e),v()};return n?(0,X.jsxs)(`div`,{className:`space-y-8`,children:[(0,X.jsxs)(`section`,{children:[(0,X.jsx)(nO,{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,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`button`,{type:`button`,onClick:()=>y({...n,enabled:!n.enabled}),"aria-pressed":n.enabled,className:G(`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,X.jsx)(C,{className:`h-5 w-5 shrink-0 text-muted-foreground`}),(0,X.jsxs)(`span`,{className:`flex-1`,children:[(0,X.jsx)(`span`,{className:`block text-sm font-medium`,children:n.enabled?`Enabled`:`Disabled`}),(0,X.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,X.jsx)(et,{className:`h-4 w-4 shrink-0 text-primary`})]}),n.enabled&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`mb-2 text-sm font-medium`,children:`Size budget`}),(0,X.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:QD.map(e=>(0,X.jsx)(q,{variant:n.budgetBytes===e.bytes?`default`:`outline`,size:`sm`,onClick:()=>y({...n,budgetBytes:e.bytes}),children:e.label},e.bytes))})]}),i&&(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsxs)(`div`,{className:`flex items-baseline justify-between text-sm`,children:[(0,X.jsxs)(`span`,{children:[$D(i.contentBytes),` of `,$D(n.budgetBytes),` used`]}),(0,X.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[i.contentCount,` file(s)`,i.pinnedBytes>0?`, ${$D(i.pinnedBytes)} pinned`:``]})]}),(0,X.jsx)(`div`,{className:`h-2 w-full overflow-hidden rounded-full bg-muted`,children:(0,X.jsx)(`div`,{className:`h-full rounded-full bg-primary`,style:{width:`${Math.min(100,i.contentBytes/n.budgetBytes*100)}%`}})})]}),(0,X.jsx)(`div`,{children:(0,X.jsxs)(q,{variant:`outline`,size:`sm`,onClick:x,disabled:m,children:[m?(0,X.jsx)(Nt,{className:`mr-1.5 h-3.5 w-3.5 animate-spin`}):(0,X.jsx)(ut,{className:`mr-1.5 h-3.5 w-3.5`}),`Clear offline cache`]})})]})]})]}),n.enabled&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`section`,{children:[(0,X.jsx)(nO,{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,X.jsx)(`div`,{className:`mb-3`,children:(0,X.jsxs)(q,{size:`sm`,onClick:()=>_(!0),disabled:!!Object.keys(f).length,children:[(0,X.jsx)(te,{className:`mr-1.5 h-3.5 w-3.5`}),`Pin a path…`]})}),(0,X.jsxs)(`ul`,{className:`space-y-1`,children:[u.map(e=>{let t=f[e.id];return(0,X.jsxs)(`li`,{className:`flex items-center gap-3 rounded-md border border-input px-3 py-2 text-sm`,children:[(0,X.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,X.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,X.jsxs)(`span`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,X.jsx)(Nt,{className:`h-3.5 w-3.5 animate-spin`}),t.total>0?`${t.done}/${t.total} · ${$D(t.bytes)}`:`listing…`]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[$D(e.bytes),e.truncated?` (partial)`:``]}),(0,X.jsx)(q,{variant:`ghost`,size:`sm`,onClick:()=>S(T(e)),"aria-label":`Re-warm ${e.id}`,title:`Re-warm: re-resolve the scope and download anything new`,children:(0,X.jsx)(Te,{className:`h-3.5 w-3.5`})}),(0,X.jsx)(q,{variant:`ghost`,size:`sm`,onClick:()=>E(e.id),"aria-label":`Unpin ${e.id}`,children:(0,X.jsx)(Ne,{className:`h-3.5 w-3.5`})})]})]},e.id)}),u.length===0&&(0,X.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,X.jsxs)(`section`,{children:[(0,X.jsx)(nO,{title:`Workspace caching`,description:`Excluded workspaces are never cached — not even as you browse — and are not served from cache.`}),(0,X.jsx)(`ul`,{className:`space-y-1`,children:c.map(e=>{let t=n.excludedWorkspaces.includes(e);return(0,X.jsxs)(`li`,{className:`flex items-center gap-3 rounded-md border border-input px-3 py-2 text-sm`,children:[(0,X.jsx)(`span`,{className:G(`flex-1 truncate`,t&&`text-muted-foreground line-through`),children:e}),t&&(0,X.jsx)(yt,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,X.jsx)(q,{variant:t?`outline`:`ghost`,size:`sm`,onClick:()=>b(e),children:t?`Include`:`Exclude`})]},e)})})]})]}),g&&(0,X.jsx)(Op,{onClose:()=>_(!1),children:(0,X.jsx)(Ep,{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:w,onClose:()=>_(!1)})})]}):null}function nO({title:e,description:t}){return(0,X.jsxs)(`div`,{className:`mb-4`,children:[(0,X.jsx)(`h2`,{className:`text-base font-semibold`,children:e}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t})]})}function rO(){return(0,X.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,X.jsx)(Dx,{className:`mb-6`,title:`Offline`,onBack:Qw(),description:`Per-device offline cache: browse notes, files, photos and saved websites without a connection.`}),(0,X.jsx)(tO,{})]})}function iO(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 aO({name:e,version:t,detail:n}){return(0,X.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 px-4 py-2.5`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`text-sm font-medium truncate`,children:e}),n&&(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:n})]}),(0,X.jsx)(`code`,{className:`text-xs text-muted-foreground shrink-0`,children:t})]})}function oO(){let[e,t]=(0,Y.useState)(null),[n,r]=(0,Y.useState)(null);(0,Y.useEffect)(()=>{let e=!0;return J.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 ${iO(e.uptime)}`:null].filter(Boolean).join(` · `),a=Object.entries(e?.components??{}).sort(([e],[t])=>e.localeCompare(t));return(0,X.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,X.jsx)(Dx,{className:`mb-6`,title:`About`,onBack:Qw(),description:`Versions of every Canvas component this installation is running.`}),(0,X.jsxs)(`div`,{className:`space-y-6`,children:[(0,X.jsxs)(`section`,{className:`rounded-md border border-border divide-y divide-border`,children:[(0,X.jsx)(aO,{name:`Canvas Web`,detail:`this interface`,version:`v2.15.1`}),e?.version&&(0,X.jsx)(aO,{name:e.productName||e.appName||`Canvas Server`,detail:i||void 0,version:`v${e.version}`})]}),a.length>0&&(0,X.jsxs)(`section`,{children:[(0,X.jsx)(`h2`,{className:`mb-2 px-1 text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:`Server components`}),(0,X.jsx)(`div`,{className:`rounded-md border border-border divide-y divide-border`,children:a.map(([e,t])=>(0,X.jsx)(aO,{name:e,version:`v${t}`},e))})]}),n&&(0,X.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Server details unavailable: `,n]}),e?.sourceUrl&&(0,X.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[e.license?`Licensed ${e.license}. `:``,(0,X.jsx)(`a`,{href:e.sourceUrl,target:`_blank`,rel:`noreferrer`,className:`underline underline-offset-2 hover:text-foreground`,children:`Get the source code`}),`.`]})]})]})}var sO=[`onnx`,`clip`,`blip`,`openai`],cO=[`onnx`,`clip`,`blip`,`ollama`,`vllm`],lO=[{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`}],uO=e=>`${$r.workspaces}/${encodeURIComponent(e)}/inferd`;function dO(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 fO(e){return await J.get(`${uO(e)}/status`)}async function pO(e,t={}){let n={};return t.force!==void 0&&(n.force=t.force),await J.post(`${uO(e)}/summarize/images`,n)}async function mO(e){return await J.post(`${uO(e)}/summarize/images/stop`,{})}async function hO(e){return await J.get(`${uO(e)}/config`)}async function gO(e,t){return await J.put(`${uO(e)}/config`,t)}async function _O(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 J.post(`${uO(e)}/reindex`,n)}async function vO(e){return await J.get(`${uO(e)}/vector-tables`)}async function yO(e,t){return await J.delete(`${uO(e)}/vector-tables/${encodeURIComponent(t)}`)}async function bO(){return await J.get(`${$r.inferd}/config`)}async function xO(e){return await J.put(`${$r.inferd}/config`,e)}async function SO(){return await J.get(`${$r.inferd}/defaults`)}async function CO(e){return await J.put(`${$r.inferd}/defaults`,e)}async function wO(e,t){let n={...e};return delete n.apiKeySet,delete n.headerNames,(await J.post(`${$r.inferd}/test`,{provider:n,...t?{model:t}:{},probe:!0})).cached??null}async function TO(e,t,n=`text`){let r={...e};return delete r.apiKeySet,delete r.headerNames,await J.post(`${$r.inferd}/test`,{provider:r,...t?{model:t}:{},modality:n})}var EO=`h-8 w-full rounded-md border bg-background px-2 text-sm outline-none focus:ring-2 focus:ring-ring`,DO=`font-semibold uppercase tracking-[0.08em]`,OO={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`}},kO=[`baseUrl`,`host`,`apiKey`,`cacheDir`,`imageInput`,`timeoutMs`],AO=[{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.`}],jO=12e4;function MO(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 NO({title:e,hint:t}){return(0,X.jsxs)(`div`,{className:`mb-2`,children:[(0,X.jsx)(`h3`,{className:G(`text-[11px] text-muted-foreground`,DO),children:e}),(0,X.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:t})]})}function PO({overridden:e,source:t}){return e?(0,X.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,X.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 FO({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,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`label`,{className:`text-xs font-medium`,children:e}),(0,X.jsx)(PO,{overridden:u,source:n===void 0?void 0:String(n)}),u&&!o&&(0,X.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,X.jsx)(K,{type:i,value:t??``,disabled:o,onChange:e=>r(e.target.value),placeholder:a??(n===void 0?`—`:String(n)),className:G(`h-8 text-sm`,l&&`font-mono`,c&&`border-destructive focus-visible:ring-destructive`)}),c&&(0,X.jsx)(`p`,{className:`text-[11px] font-medium text-destructive`,children:c}),s&&(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:s})]})}function IO({label:e,checked:t,overridden:n,disabled:r,onChange:i}){return(0,X.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,X.jsx)(`input`,{type:`checkbox`,disabled:r,checked:t,onChange:e=>i(e.target.checked)}),e,(0,X.jsx)(PO,{overridden:n})]})}function LO({storedNames:e,value:t,disabled:n,onChange:r}){let i=t!==void 0,[a,o]=(0,Y.useState)([]),s=e=>{o(e),r(Object.fromEntries(e.filter(([e])=>e.trim()!==``)))};return(0,X.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(`label`,{className:`text-xs font-medium`,children:`Custom headers`}),i?(0,X.jsxs)(X.Fragment,{children:[(0,X.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,X.jsx)(`button`,{type:`button`,onClick:()=>{o([]),r(void 0)},className:`text-[10px] text-muted-foreground underline hover:text-foreground`,children:`cancel`})]}):(0,X.jsx)(PO,{overridden:!1,source:e?.join(`, `)})]}),!i&&(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:e?.length?(0,X.jsxs)(X.Fragment,{children:[`Stored: `,(0,X.jsx)(`span`,{className:`font-mono`,children:e.join(`, `)}),` (values are never sent back)`]}):`None set.`}),!n&&(0,X.jsx)(q,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>{o([[``,``]]),r({})},children:e?.length?`Replace headers`:`Add headers`})]}),i&&(0,X.jsxs)(X.Fragment,{children:[(0,X.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,X.jsxs)(`div`,{className:`flex gap-2`,children:[(0,X.jsx)(K,{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,X.jsx)(K,{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,X.jsx)(q,{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,X.jsx)(ut,{className:`h-3.5 w-3.5`})})]},r)),!n&&(0,X.jsxs)(q,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>s([...a,[``,``]]),children:[(0,X.jsx)(H,{className:`mr-1.5 h-3.5 w-3.5`}),`Add header`]})]})]})}function RO({open:e,onClick:t,label:n}){return(0,X.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,X.jsx)(Ke,{className:G(`h-4 w-4 transition-transform motion-reduce:transition-none`,e&&`rotate-180`)})})}var zO={configured:`bg-success`,"needs-fill":`bg-warning`,unresolved:`bg-destructive`,unset:`bg-muted-foreground/30`};function BO({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}=mo(),[f,p]=(0,Y.useState)(()=>structuredClone(e)),[m,h]=(0,Y.useState)(new Set),[g,_]=(0,Y.useState)(null),[v,y]=(0,Y.useState)(!1),[b,x]=(0,Y.useState)(``),[S,C]=(0,Y.useState)(``),[w,T]=(0,Y.useState)(null),E=(0,Y.useMemo)(()=>[...new Set([...Object.keys(t.spaces||{}),...Object.keys(f.spaces||{})])].sort(),[t.spaces,f.spaces]),D=(0,Y.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?OO[i.type]?.url?.key:void 0,o=a?MO(i[a]):null;if(o){d({title:`Backend '${n}'`,description:o,variant:`destructive`});return}_(e);try{try{await wO(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 TO(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,Y.useMemo)(()=>{let e=[];for(let[n,r]of Object.entries(f.providers||{})){let i=r.type??t.providers?.[n]?.type,a=i?OO[i]?.url?.key:void 0;if(!a)continue;let o=MO(r[a]);o&&e.push(`${n}: ${o}`)}return e},[f.providers,t.providers]),ee=(0,Y.useMemo)(()=>JSON.stringify(f)!==JSON.stringify(e)||m.size>0,[f,e,m]),te=async()=>{if(L.length>0){d({title:`Fix the endpoint first`,description:L.join(` · `),variant:`destructive`});return}await u(dO(f,m)),h(new Set)},ne=e=>T(t=>t===e?null:e);return(0,X.jsxs)(`div`,{className:`space-y-6`,children:[i&&(0,X.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive-subtle p-3 text-xs`,children:[(0,X.jsx)(ot,{className:`mt-0.5 h-4 w-4 shrink-0 text-destructive`}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`font-medium text-destructive`,children:`Stored config does not resolve; defaults are standing in`}),(0,X.jsx)(`p`,{className:`mt-0.5 font-mono text-[11px] text-muted-foreground`,children:i})]})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(NO,{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,X.jsxs)(`div`,{className:`rounded-lg border border-dashed p-6 text-center`,children:[(0,X.jsx)(`p`,{className:`text-sm font-medium`,children:`No spaces on this layer`}),(0,X.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,X.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,X.jsxs)(`div`,{className:`relative`,children:[(0,X.jsx)(`span`,{className:G(`absolute inset-y-0 left-0 w-[3px]`,zO[i?`unresolved`:x?`needs-fill`:h?`configured`:`unset`]),"aria-hidden":!0}),(0,X.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,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2 gap-y-1`,children:[(0,X.jsx)(`span`,{className:G(`text-[11px]`,DO),children:e}),(0,X.jsx)(`span`,{className:`truncate font-mono text-sm`,children:h||`no model set`}),_&&(0,X.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,X.jsxs)(`span`,{className:`text-xs tabular-nums text-muted-foreground`,children:[y,`-d`]}),b&&(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`chunked`})]}),r&&h&&(0,X.jsxs)(`p`,{className:`mt-1 truncate font-mono text-[11px] text-muted-foreground`,title:`Vector table backing this space`,children:[`└─ `,d?.table??(0,X.jsx)(`span`,{className:`not-italic`,children:`not created yet`})]}),x&&(0,X.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,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 max-sm:justify-end`,children:[x&&o&&(0,X.jsx)(q,{type:`button`,size:`sm`,variant:`outline`,onClick:()=>o(e),children:`Fill`}),(0,X.jsxs)(q,{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,X.jsx)(_e,{className:`mr-1.5 h-3.5 w-3.5`}),g===e?v?`Downloading…`:`Testing…`:`Test`]}),(0,X.jsx)(RO,{open:m,onClick:()=>ne(p),label:`Edit ${e}`})]})]}),m&&(0,X.jsxs)(`div`,{className:`border-t bg-muted/40 py-4 pl-4 pr-3`,children:[(0,X.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`label`,{className:`text-xs font-medium`,children:`Backend`}),(0,X.jsx)(PO,{overridden:s.provider!==void 0,source:u.provider})]}),(0,X.jsxs)(`select`,{className:EO,disabled:c,value:s.provider??``,onChange:t=>O(e,`provider`,t.target.value),children:[(0,X.jsx)(`option`,{value:``,children:l.provider?`inherited: ${l.provider}`:`inherited`}),D.map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))]})]}),(0,X.jsx)(FO,{label:`Model`,mono:!0,value:s.model,inheritedValue:l.model,onChange:t=>O(e,`model`,t),disabled:c}),(0,X.jsx)(FO,{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,X.jsx)(FO,{label:`Max length`,type:`number`,value:s.maxLength,inheritedValue:l.maxLength,onChange:t=>O(e,`maxLength`,t),disabled:c})]}),(0,X.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-4`,children:[(0,X.jsx)(IO,{label:`Chunk long inputs`,checked:b,overridden:s.chunk!==void 0,disabled:c,onChange:t=>k(e,`chunk`,t)}),(0,X.jsx)(IO,{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,X.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(K,{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,X.jsxs)(q,{type:`button`,size:`sm`,variant:`ghost`,onClick:N,children:[(0,X.jsx)(H,{className:`mr-1.5 h-3.5 w-3.5`}),`Add space`]})]})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(NO,{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,X.jsx)(`div`,{className:`divide-y overflow-hidden rounded-lg border`,children:D.map(e=>{let n=f.providers?.[e]||{},r=t.providers?.[e]||{},i=cO.includes(e),a=f.providers?.[e]!==void 0,o=`provider:${e}`,s=w===o,l=n.type??r.type,u=l?OO[l]:void 0,d=u?.url?MO(n[u.url.key]):null,p={...r,...n},h=kO.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,X.jsxs)(`div`,{children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-2 px-4 py-3 sm:flex-row sm:items-start sm:gap-3`,children:[(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2 gap-y-1`,children:[(0,X.jsx)(`span`,{className:`font-mono text-sm font-semibold`,children:e}),(0,X.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground`,children:l??`no type`}),i&&(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:`built-in`}),p.apiKeySet&&!m.has(e)&&(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-success`,children:`key set`}),d&&(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-destructive`,children:`check endpoint`})]}),(0,X.jsx)(`p`,{className:`mt-1 truncate font-mono text-[11px] text-muted-foreground`,children:u?u.where(p):`—`}),g.length>0&&(0,X.jsxs)(`p`,{className:`mt-1 text-[11px] text-muted-foreground`,children:[`used by `,g.join(`, `)]})]}),(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 max-sm:justify-end`,children:[a&&!i&&!c&&(0,X.jsx)(q,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>M(e),title:`Remove this override`,children:(0,X.jsx)(ut,{className:`h-3.5 w-3.5`})}),(0,X.jsx)(RO,{open:s,onClick:()=>ne(o),label:`Edit ${e}`})]})]}),s&&(0,X.jsxs)(`div`,{className:`border-t bg-muted/40 px-4 py-4`,children:[(0,X.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`label`,{className:`text-xs font-medium`,children:`Type`}),(0,X.jsx)(PO,{overridden:n.type!==void 0,source:r.type})]}),(0,X.jsxs)(`select`,{className:EO,disabled:c,value:n.type??``,onChange:t=>A(e,`type`,t.target.value),children:[(0,X.jsx)(`option`,{value:``,children:r.type?`inherited: ${r.type}`:`inherited`}),sO.map(e=>(0,X.jsx)(`option`,{value:e,children:e},e)),l&&!sO.includes(l)&&(0,X.jsxs)(`option`,{value:l,children:[l,` (legacy)`]})]}),u?.note&&(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:u.note})]}),u?.url&&(0,X.jsx)(FO,{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,X.jsx)(FO,{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,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`label`,{className:`text-xs font-medium`,children:`Image input shape`}),(0,X.jsx)(PO,{overridden:n.imageInput!==void 0,source:r.imageInput})]}),(0,X.jsxs)(`select`,{className:EO,disabled:c,value:n.imageInput??``,onChange:t=>A(e,`imageInput`,t.target.value),children:[(0,X.jsx)(`option`,{value:``,children:r.imageInput?`inherited: ${r.imageInput}`:`inherited: data-uri`}),AO.map(e=>(0,X.jsx)(`option`,{value:e.value,children:e.label},e.value))]}),(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:AO.find(e=>e.value===(n.imageInput??r.imageInput??`data-uri`))?.hint})]}),u?.timeoutMs&&(0,X.jsx)(FO,{label:`Request timeout (ms)`,type:`number`,value:n.timeoutMs,inheritedValue:r.timeoutMs??jO,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,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`label`,{className:`text-xs font-medium`,children:`API key`}),m.has(e)&&(0,X.jsx)(`span`,{className:`rounded bg-warning-subtle px-1.5 py-0.5 text-[10px] font-medium text-warning`,children:`will be written`})]}),(0,X.jsx)(K,{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,X.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,X.jsx)(LO,{disabled:c,storedNames:r.headerNames,value:n.headers,onChange:t=>j(e,`headers`,t)}),h.length>0&&!c&&(0,X.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,X.jsxs)(`span`,{children:[`Not used by type `,(0,X.jsx)(`span`,{className:`font-mono`,children:l}),`:`,` `,(0,X.jsx)(`span`,{className:`font-mono`,children:h.join(`, `)})]}),(0,X.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,X.jsxs)(`p`,{className:`mt-3 text-[11px] text-muted-foreground`,children:[`Stored custom headers: `,(0,X.jsx)(`span`,{className:`font-mono`,children:r.headerNames.join(`, `)}),` (values not shown)`]})]})]},e)})}),!c&&(0,X.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(K,{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,X.jsxs)(q,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>P(b.trim()),children:[(0,X.jsx)(H,{className:`mr-1.5 h-3.5 w-3.5`}),`Add backend`]}),lO.filter(e=>!D.includes(e.id)).map(e=>(0,X.jsx)(q,{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,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 border-t pt-4`,children:[(0,X.jsx)(q,{type:`button`,size:`sm`,variant:ee?`default`:`outline`,onClick:te,disabled:s||!ee||L.length>0,children:s?`Saving…`:l}),(0,X.jsx)(q,{type:`button`,size:`sm`,variant:`ghost`,disabled:s||!ee,onClick:()=>{p(structuredClone(e)),h(new Set)},children:`Discard changes`}),(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:L.length>0?(0,X.jsxs)(`span`,{className:`font-medium text-destructive`,children:[L.length,` endpoint `,L.length===1?`needs`:`need`,` fixing`]}):ee?`Unsaved changes`:`Everything saved`})]})]})}function VO(){let{showToast:e}=mo(),[t,n]=(0,Y.useState)(null),[r,i]=(0,Y.useState)(!0),[a,o]=(0,Y.useState)(!1),[s,c]=(0,Y.useState)(null),l=(0,Y.useCallback)(()=>bO().then(e=>{n(e),c(null)}).catch(e=>c(e instanceof Error?e.message:`Failed to load embedding defaults`)).finally(()=>i(!1)),[]);(0,Y.useEffect)(()=>{l()},[l]);let u=()=>{i(!0),l()};return(0,X.jsxs)(`div`,{className:`mx-auto max-w-4xl p-6`,children:[(0,X.jsx)(Dx,{compact:!0,className:`mb-6`,title:`Search & AI defaults`,onBack:Qw(),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,X.jsxs)(q,{type:`button`,size:`sm`,variant:`outline`,onClick:u,disabled:r,children:[(0,X.jsx)(Te,{className:`mr-2 h-3.5 w-3.5`}),`Refresh`]})}),r?(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,X.jsx)(Te,{className:`h-4 w-4 animate-spin`}),`Loading…`]}):s||!t?(0,X.jsxs)(`div`,{className:`space-y-3`,children:[(0,X.jsxs)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/5 p-4 text-sm`,children:[(0,X.jsx)(`p`,{className:`font-medium text-destructive`,children:`Embedding defaults unavailable`}),(0,X.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:s||`No config returned.`})]}),(0,X.jsx)(q,{type:`button`,size:`sm`,variant:`outline`,onClick:u,children:`Retry`})]}):(0,X.jsx)(BO,{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 xO(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 HO(){let e=Xc(),{showToast:t}=mo(),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,Y.useState)(i),[c,l]=(0,Y.useState)(a),[u,d]=(0,Y.useState)(null),[f,p]=(0,Y.useState)([]),[m,h]=(0,Y.useState)(!1),g=(0,Y.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 J.get(e,{skipAuth:!0,headers:_()});d(t);let n=await J.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,Y.useRef)(v);return(0,Y.useEffect)(()=>{y.current()},[]),(0,X.jsxs)(`div`,{className:`space-y-4`,children:[(0,X.jsx)(Dx,{onBack:Qw(),title:`Shared Resource Viewer`,description:`Open a resource someone shared with you.`}),(0,X.jsxs)(`div`,{className:`grid gap-2 md:grid-cols-3`,children:[(0,X.jsx)(K,{value:o,onChange:e=>s(e.target.value),placeholder:`Full pub URL`}),(0,X.jsx)(K,{value:c,onChange:e=>l(e.target.value),placeholder:`Access token (canvas-...)`}),(0,X.jsx)(q,{onClick:v,disabled:m||!o||!c,children:`Load`})]}),(0,X.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[`Type: `,g]}),m?(0,X.jsx)(`div`,{className:`text-center py-8 text-muted-foreground`,children:`Loading...`}):(0,X.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,X.jsxs)(`div`,{className:`border rounded p-3`,children:[(0,X.jsx)(`h2`,{className:`font-semibold mb-2`,children:`Metadata`}),(0,X.jsx)(`pre`,{className:`text-xs overflow-auto max-h-80`,children:JSON.stringify(u,null,2)})]}),(0,X.jsxs)(`div`,{className:`border rounded p-3`,children:[(0,X.jsxs)(`h2`,{className:`font-semibold mb-2`,children:[`Documents (`,f.length,`)`]}),f.length===0?(0,X.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`No documents`}):(0,X.jsx)(`ul`,{className:`space-y-2 text-sm`,children:f.slice(0,100).map((e,t)=>(0,X.jsxs)(`li`,{className:`border rounded p-2`,children:[(0,X.jsx)(`div`,{className:`font-mono text-xs`,children:e.id}),(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e.schema})]},t))})]})]}),(0,X.jsx)(Ju,{className:`mt-8`})]})}function UO(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 WO(){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 GO={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?`${$r.admin.users}?${n}`:$r.admin.users;return await J.get(r)},async getUser(e){return await J.get(`${$r.admin.users}/${e}`)},async createUser(e){return await J.post($r.admin.users,e)},async updateUser(e,t){return await J.put(`${$r.admin.users}/${e}`,t)},async deleteUser(e){await J.delete(`${$r.admin.users}/${e}`)}},KO={async listAllWorkspaces(){return await J.get($r.admin.workspaces)},async createWorkspace(e){return await J.post($r.admin.workspaces,e)},async deleteWorkspace(e){await J.delete(`${$r.admin.workspaces}/${e}`)}},qO={async getLogs(e={}){return(await J.get(`${$r.admin.logs}${UO(e)}`)).logs||[]},async streamLogs(e={},t={}){let{signal:n,onEntry:r,onError:i}=t;try{let t=await fetch(`${$r.admin.logsStream}${UO(e)}`,{method:`GET`,headers:WO(),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(`
24
+ `).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||{},...bT(t)||{}})}else e.type===`error`&&a&&a(Error(e.error||`Prompt stream failed`))}catch{}}}},onError:a,onComplete:o})}async function JT(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 J.post(`${ni}/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:vT(i),metadata:bT(i)};return r&&r(d.content,!0,d.metadata),a&&a(),d}catch(e){throw i&&i(e),e}}function YT(e){return e.map(e=>({...e,timestamp:typeof e.timestamp==`string`?e.timestamp:new Date().toISOString()}))}async function XT(){return await J.get(`${ni}/voice/status`)}async function ZT(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 J.post(`${ni}/agents/${e}/voice${o}`,r)}var QT=[{id:`workspace`,label:`Workspace`,path:`workspaces`,description:`Files, search, devices and sharing for one workspace. These settings override account defaults.`,sections:cT,load:async()=>(await Fr()).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:dT,load:async()=>(await Xo()).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:pT,load:async()=>(await AT()).map(e=>({id:e.id,label:e.label||e.name}))}];function $T({to:e,label:t,description:n,icon:r}){return(0,X.jsxs)(gu,{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,X.jsx)(r,{className:`mt-0.5 h-5 w-5 shrink-0 text-muted-foreground`}),(0,X.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`span`,{className:`block text-sm font-semibold`,children:t}),(0,X.jsx)(`span`,{className:`mt-1 block text-sm leading-relaxed text-muted-foreground`,children:n})]}),(0,X.jsx)(Jn,{className:`mt-0.5 h-4 w-4 shrink-0 text-muted-foreground group-hover:text-primary`})]})}function eE({group:e,query:t}){let[n,r]=(0,Y.useState)([]),[i,a]=(0,Y.useState)(``),[o,s]=(0,Y.useState)(`loading`),[c,l]=(0,Y.useState)(0);(0,Y.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=>Gx(t,e.label,n.label,n.description));return u.length?(0,X.jsxs)(`section`,{id:e.id,className:`scroll-mt-6 space-y-3`,children:[(0,X.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.label}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,X.jsxs)(`label`,{className:`block max-w-md text-sm font-medium`,children:[`Choose a `,e.label.toLowerCase(),(0,X.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,X.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,X.jsx)(`option`,{value:e.id,children:e.label},e.id))]})]}),o===`error`&&(0,X.jsxs)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,children:[`The list could not be loaded. `,(0,X.jsx)(`button`,{type:`button`,className:`underline`,onClick:()=>{s(`loading`),l(e=>e+1)},children:`Retry`})]}),(0,X.jsxs)(`details`,{open:!!(i||t.trim()),children:[(0,X.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,X.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fit,minmax(min(100%,16rem),1fr))] gap-3`,children:u.map(t=>i?(0,X.jsx)($T,{to:`/${e.path}/${encodeURIComponent(i)}/settings/${t.id}`,...t},t.id):(0,X.jsxs)(`div`,{className:`rounded-lg border border-dashed p-4`,children:[(0,X.jsx)(`p`,{className:`text-sm font-medium`,children:t.label}),(0,X.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:t.description})]},t.id))})]})]}):null}function tE(){let{state:e}=pS(),[t,n]=(0,Y.useState)(``),r=Ux.filter(t=>t.id!==`server`||e.user?.userType===`admin`).map(e=>({...e,items:e.items.filter(n=>Gx(t,e.label,n.label,n.description))})).filter(e=>e.items.length),i=QT.some(e=>e.sections.some(n=>Gx(t,e.label,n.label,n.description)));return(0,X.jsxs)(`div`,{className:`mx-auto max-w-6xl space-y-8 pb-8 max-md:pb-rail-stack`,children:[(0,X.jsx)(Dx,{title:`Settings`,description:`Start with what you want to change. Each section explains where your changes apply.`}),(0,X.jsx)(K,{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,X.jsxs)(`section`,{className:`space-y-3`,children:[(0,X.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.label}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,X.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fit,minmax(min(100%,16rem),1fr))] gap-3`,children:e.items.map(e=>(0,X.jsx)($T,{to:e.path,...e},e.path))})]},e.id)),QT.map(e=>(0,X.jsx)(eE,{group:e,query:t},e.id)),r.filter(e=>e.id===`server`||e.id===`information`).map(e=>(0,X.jsxs)(`section`,{className:`space-y-3`,children:[(0,X.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.label}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,X.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fit,minmax(min(100%,16rem),1fr))] gap-3`,children:e.items.map(e=>(0,X.jsx)($T,{to:e.path,...e},e.path))})]},e.id)),!r.length&&!i&&(0,X.jsxs)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,children:[`No settings match “`,t,`”. Try a shorter phrase or clear the search.`]})]})}var nE=[{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`}],rE=`/wallpapers`;function iE(e){return nE.find(t=>t.id===e)}function aE(e,t={}){let n=typeof e==`string`?iE(e):e;if(!n)return null;let{base:r=rE,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 oE(e,t=rE){let n=typeof e==`string`?iE(e):e;return n?`${t.replace(/\/$/,``)}/${n.thumb}`:null}var sE=[{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`}],cE=`canvas:wallpaper`,lE=`builtin:`,uE=nE;function dE(e){return oE(e)??``}function fE(e){return`${lE}${e}`}function pE(e){return e?.startsWith(lE)?e.slice(8):null}function mE(){try{let e=localStorage.getItem(cE);if(e){let t=JSON.parse(e);if(typeof t.image==`string`||t.image===null){let e=t.fit===`fill`||t.fit===`center`?t.fit:`cover`;return{image:t.image??null,fit:e}}}}catch{}return{image:null,fit:`cover`}}function hE(e){localStorage.setItem(cE,JSON.stringify(e)),yE(e)}var gE=typeof CSS<`u`&&CSS.supports(`background-image`,`image-set(url("a.avif") type("image/avif"))`);function _E(e){if(!e)return null;let t=pE(e);if(t===null)return`url("${e}")`;let n=iE(t);if(!n)return null;let r=`url("${aE(n,{types:[n.sources[n.sources.length-1].type]})}")`;return!gE||n.sources.length===1?r:`image-set(${n.sources.map(e=>`url("${aE(n,{types:[e.type]})}") type("${e.type}")`).join(`, `)})`}function vE(e){return e===`fill`?`100% 100%`:e===`center`?`auto`:`cover`}function yE(e=mE()){let t=document.documentElement.style,n=_E(e.image);if(!n){t.removeProperty(`--wallpaper-image`),t.removeProperty(`--wallpaper-size`);return}t.setProperty(`--wallpaper-image`,n),t.setProperty(`--wallpaper-size`,vE(e.fit))}var bE=[{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.`}],xE=`canvas:treeStyle`;function SE(){try{let e=localStorage.getItem(xE);return e===`accordion`||e===`accordion-mobile`?e:`cards`}catch{return`cards`}}var CE=SE(),wE=new Set;function TE(){return CE}function EE(e){try{e===`cards`?localStorage.removeItem(xE):localStorage.setItem(xE,e)}catch{}CE=e;for(let e of wE)e()}function DE(e){wE.add(e);let t=t=>{(t.key===xE||t.key===null)&&(CE=SE(),e())};return window.addEventListener(`storage`,t),()=>{wE.delete(e),window.removeEventListener(`storage`,t)}}function OE(){return(0,Y.useSyncExternalStore)(DE,TE,()=>`cards`)}function kE(){let e=OE(),t=Pm();return e===`accordion`||e===`accordion-mobile`&&t}var AE=[{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)`]}],jE=AE.map(e=>e.id),ME=[{id:`system`,name:`System`},{id:`light`,name:`Light`},{id:`dark`,name:`Dark`}],NE=[{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`}],PE={theme:`canvas`,scheme:`light`,density:`auto`},FE=`canvas.ui.theme`;function IE(e){return typeof e==`string`&&jE.includes(e)}function LE(e){return e===`light`||e===`dark`||e===`system`}function RE(e){return e===`auto`||e===`compact`||e===`comfortable`||e===`touch`}function zE(e){let t=typeof e==`object`&&e?e:{};return{theme:IE(t.theme)?t.theme:PE.theme,scheme:LE(t.scheme)?t.scheme:PE.scheme,density:RE(t.density)?t.density:PE.density}}var BE=`(prefers-color-scheme: dark)`;function VE(){return typeof document<`u`}function HE(){return typeof window>`u`||typeof window.matchMedia!=`function`?!1:window.matchMedia(BE).matches}function UE(e){return e===`system`?HE()?`dark`:`light`:e}function WE(e){if(typeof window>`u`||typeof window.matchMedia!=`function`)return()=>{};let t=window.matchMedia(BE),n=t=>e(t.matches?`dark`:`light`);return t.addEventListener(`change`,n),()=>t.removeEventListener(`change`,n)}function GE(e){return WE(e)}function KE(){return HE()?`dark`:`light`}function qE(){return`light`}function JE(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 YE(e,t=VE()?document.documentElement:void 0){let n=UE(e.scheme);return t?(t.dataset.theme=e.theme,t.dataset.scheme=n,t.dataset.density=e.density,JE(t),n):n}function XE(e,t=VE()?document.documentElement:void 0){if(!t||typeof window>`u`)return YE(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=YE(e,t);return window.getComputedStyle(n).opacity,document.head.removeChild(n),r}function ZE(e){let t=e??eD();if(!t)return PE;try{let e=t.getItem(FE);return e?zE(JSON.parse(e)):PE}catch{return PE}}function QE(e,t){let n=t??eD();if(n)try{n.setItem(FE,JSON.stringify(e))}catch{}}function $E(e){let t=e??eD();if(t)try{t.removeItem(FE)}catch{}}function eD(){try{return typeof localStorage<`u`?localStorage:void 0}catch{return}}function tD({children:e,initial:t,storage:n,persist:r=!0}){let[i,a]=(0,Y.useState)(()=>({...ZE(n),...t})),o=(0,Y.useSyncExternalStore)(GE,KE,qE),s=i.scheme===`system`?o:i.scheme;(0,Y.useEffect)(()=>{XE({...i,scheme:s})},[i,s]),(0,Y.useEffect)(()=>{r&&QE(i,n)},[i,r,n]);let c=(0,Y.useCallback)(e=>{a(t=>t.theme===e?t:{...t,theme:e})},[]),l=(0,Y.useCallback)(e=>{a(t=>t.scheme===e?t:{...t,scheme:e})},[]),u=(0,Y.useCallback)(e=>{a(t=>t.density===e?t:{...t,density:e})},[]),d=(0,Y.useCallback)(()=>{a(e=>({...e,scheme:(e.scheme===`system`?KE():e.scheme)===`dark`?`light`:`dark`}))},[]),f=(0,Y.useCallback)(()=>{$E(n),a(PE)},[n]),p=(0,Y.useMemo)(()=>({...i,resolvedScheme:s,setTheme:c,setScheme:l,setDensity:u,toggleScheme:d,reset:f}),[i,s,c,l,u,d,f]);return(0,X.jsx)(Ts.Provider,{value:p,children:e})}var nD={system:fe,light:Kn,dark:Fn};function rD(){let{theme:e,scheme:t,density:n,resolvedScheme:r,setTheme:i,setScheme:a,setDensity:o,reset:s}=Es(),c=Sm(),l=tS(),u=OE(),d=uS();return(0,X.jsxs)(`div`,{className:`space-y-8`,children:[(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Theme`,description:`Palette, shape and typography. Each theme defines its own light and dark variants.`}),(0,X.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-3`,children:AE.map(t=>{let n=t.id===e;return(0,X.jsxs)(`button`,{type:`button`,onClick:()=>i(t.id),"aria-pressed":n,className:G(`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,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,X.jsx)(`span`,{className:`text-sm font-medium`,children:t.name}),n&&(0,X.jsx)(et,{className:`size-4 shrink-0 text-primary`})]}),(0,X.jsx)(`div`,{className:`flex gap-1.5`,"aria-hidden":!0,children:t.swatches.map(e=>(0,X.jsx)(`span`,{className:`size-6 rounded-full border border-border`,style:{backgroundColor:e}},e))}),(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:t.description})]},t.id)})})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Colour scheme`,description:t===`system`?`Following your system setting, currently ${r}.`:`Overrides your system setting.`}),(0,X.jsx)(cD,{options:ME.map(e=>{let t=nD[e.id];return{id:e.id,label:e.name,icon:(0,X.jsx)(t,{className:`size-4 shrink-0`})}}),value:t,onChange:a})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Density`,description:`Controls row height, hit-target size and shell spacing across the whole app.`}),(0,X.jsx)(cD,{options:NE.map(e=>({id:e.id,label:e.name,title:e.description})),value:n,onChange:o}),(0,X.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:NE.find(e=>e.id===n)?.description})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Layout`,description:`How menus and content share the screen. Device-local, like the wallpaper.`}),(0,X.jsx)(cD,{options:Kx.map(e=>({id:e.id,label:e.name,title:e.description})),value:l,onChange:$x}),(0,X.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:Kx.find(e=>e.id===l)?.description}),l===`strip`&&(0,X.jsxs)(`div`,{className:`mt-4`,children:[(0,X.jsx)(`p`,{className:`mb-2 text-sm font-medium`,children:`Navigation keys`}),(0,X.jsx)(cD,{options:nS.map(e=>({id:e.id,label:e.name,title:e.description})),value:d,onChange:cS}),(0,X.jsxs)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:[nS.find(e=>e.id===d)?.description,` `,`Left and right walk the columns, up and down switch pin rows.`]})]})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Tree style`,description:`How workspace and context trees are drawn in the menu. Device-local.`}),(0,X.jsx)(cD,{options:bE.map(e=>({id:e.id,label:e.name,title:e.description})),value:u,onChange:EE}),(0,X.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:bE.find(e=>e.id===u)?.description})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Open documents`,description:`Choose how documents open from lists, tiles and boards. Saved on this device.`}),(0,X.jsx)(cD,{options:[{id:`modal`,label:`Modal`},{id:`side`,label:`Side reading pane`}],value:c,onChange:bm}),(0,X.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,X.jsx)(iD,{}),(0,X.jsx)(`section`,{children:(0,X.jsx)(`button`,{type:`button`,onClick:()=>{s(),bm(`modal`)},className:`focus-ring rounded-md text-sm text-muted-foreground underline-offset-4 hover:text-foreground hover:underline`,children:`Reset to defaults`})})]})}function iD(){let[e,t]=(0,Y.useState)(mE),[n,r]=(0,Y.useState)(null),i=e=>{try{hE(e),t(e),r(null)}catch{r(`Could not store the wallpaper (browser storage full?). Try a smaller image.`)}},a=t=>{if(!t)return;if(!t.type.startsWith(`image/`)){r(`Pick an image file.`);return}let n=new FileReader;n.onload=()=>{let t=String(n.result||``);if(t.length>3670016){r(`Image too large for browser storage. Use one under ~2.5 MB.`);return}i({...e,image:t})},n.readAsDataURL(t)},o=e.image!==null&&pE(e.image)===null,s=_E(e.image);return(0,X.jsxs)(`section`,{children:[(0,X.jsx)(sD,{title:`Wallpaper`,description:`Background image for the desk behind all panels. Without one, the theme's desk color shows (the default).`}),(0,X.jsxs)(`div`,{role:`radiogroup`,"aria-label":`Wallpaper`,className:`grid grid-cols-3 gap-3 sm:grid-cols-4 lg:grid-cols-6`,children:[(0,X.jsx)(oD,{label:`None`,isActive:e.image===null,onSelect:()=>i({...e,image:null}),children:(0,X.jsx)(`span`,{className:`flex size-full items-center justify-center surface-desk text-xs text-muted-foreground`,style:{backgroundImage:`none`},children:`None`})}),uE.map(t=>(0,X.jsx)(oD,{label:t.title,title:`${t.title} — suits the ${t.scheme} scheme`,isActive:pE(e.image)===t.id,onSelect:()=>i({...e,image:fE(t.id)}),children:(0,X.jsx)(`img`,{src:dE(t),alt:``,loading:`lazy`,className:`size-full object-cover`,style:{backgroundColor:t.background}})},t.id)),o&&(0,X.jsx)(oD,{label:`Your image`,isActive:!0,onSelect:()=>{},children:(0,X.jsx)(`img`,{src:e.image??void 0,alt:``,className:`size-full object-cover`})})]}),(0,X.jsx)(aD,{}),(0,X.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-3`,children:[(0,X.jsx)(`div`,{className:`h-20 w-32 shrink-0 rounded-md border surface-desk`,style:s?{backgroundImage:s,backgroundSize:vE(e.fit),backgroundPosition:`center`,backgroundRepeat:`no-repeat`}:void 0,"aria-hidden":!0}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,X.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:[o?`Change image…`:`Use your own image…`,(0,X.jsx)(`input`,{type:`file`,accept:`image/*`,className:`hidden`,onChange:e=>{a(e.target.files?.[0]),e.target.value=``}})]}),e.image&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>i({...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,X.jsx)(cD,{options:sE.map(e=>({id:e.id,label:e.label,title:e.description})),value:e.fit,onChange:t=>i({...e,fit:t})}),n&&(0,X.jsx)(`p`,{className:`text-xs text-destructive`,children:n})]})]})]})}function aD(){let e=uE.filter(e=>e.author!==`Canvas`);return e.length===0?null:(0,X.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:e.map((e,t)=>(0,X.jsxs)(`span`,{children:[t>0&&` · `,e.title,` © `,e.author,e.source&&(0,X.jsxs)(X.Fragment,{children:[` `,(0,X.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 oD({label:e,title:t,isActive:n,onSelect:r,children:i}){return(0,X.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":n,"aria-label":e,title:t??e,onClick:r,className:G(`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,X.jsx)(`span`,{className:`absolute right-1 top-1 rounded-full bg-primary p-0.5 text-primary-foreground`,children:(0,X.jsx)(et,{className:`size-3`})})]})}function sD({title:e,description:t}){return(0,X.jsxs)(`div`,{className:`mb-3`,children:[(0,X.jsx)(`h2`,{className:`text-base font-semibold`,children:e}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t})]})}function cD({options:e,value:t,onChange:n}){return(0,X.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,X.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":r,title:e.title,onClick:()=>n(e.id),className:G(`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 lD(){return(0,X.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,X.jsx)(Dx,{className:`mb-6`,title:`Appearance`,onBack:Qw(),description:`Theme, colour scheme and density. Changes apply immediately and are remembered on this device.`}),(0,X.jsx)(rD,{})]})}var uD={previousTree:`Alt+Q`,nextTree:`Alt+W`},dD=`canvas:key-bindings`,fD=/^(Alt|Alt\+Shift|Ctrl\+Shift|Meta\+Shift)\+[A-Z]$/;function pD(){try{let e=JSON.parse(localStorage.getItem(dD)||`{}`),t={...uD};for(let n of Object.keys(t))(e[n]===``||fD.test(e[n]))&&(t[n]=e[n]);return t.previousTree&&t.previousTree===t.nextTree?{...uD}:t}catch{return{...uD}}}function mD(e){localStorage.setItem(dD,JSON.stringify(e))}function hD(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 gD(e,t,n){return e[(Math.max(0,e.indexOf(t))+n+e.length)%e.length]}function _D(e,t){return Math.abs(e)>=48&&Math.abs(e)>Math.abs(t)*1.5?e<0?1:-1:0}function vD(){let[e,t]=(0,Y.useState)(pD),[n,r]=(0,Y.useState)(``),i=e=>{if(e.previousTree&&e.previousTree===e.nextTree){r(`Choose a different shortcut: that combination is already assigned.`);return}try{mD(e),t(e),r(`Saved on this device.`)}catch{r(`Could not save shortcuts in this browser.`)}};return(0,X.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,X.jsx)(Dx,{className:`mb-6`,title:`Key bindings`,onBack:Qw(),description:`Web UI shortcuts, saved on this device and available offline.`}),(0,X.jsxs)(`section`,{className:`space-y-4 rounded-lg border p-4`,children:[(0,X.jsx)(`h2`,{className:`font-medium`,children:`Tree navigation`}),(0,X.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,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,X.jsx)(`label`,{htmlFor:t,className:`min-w-32 text-sm`,children:t===`previousTree`?`Previous tree`:`Next tree`}),(0,X.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)||uD[t].slice(-1)}`:``}),children:[(0,X.jsx)(`option`,{value:``,children:`Disabled`}),[`Alt`,`Alt+Shift`,`Ctrl+Shift`,`Meta+Shift`].map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))]}),(0,X.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)||uD[t].slice(-1),onChange:n=>i({...e,[t]:`${e[t].split(`+`).slice(0,-1).join(`+`)}+${n.target.value}`}),children:`ABCDEFGHIJKLMNOPQRSTUVWXYZ`.split(``).map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))})]},t)),(0,X.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,X.jsx)(`button`,{type:`button`,className:`rounded-md border px-3 py-2 text-sm hover:bg-accent`,onClick:()=>i({...uD}),children:`Restore defaults`}),(0,X.jsx)(`p`,{role:`status`,className:`text-sm`,children:n})]})]})}var yD=`offline-content-v1`,bD=`offline-api-v1`,xD=1073741824,SD={enabled:!1,budgetBytes:4*xD,excludedWorkspaces:[]},CD=1e3;function wD(e){return(e.startsWith(`/`)?e:`/${e}`).replace(/\/+$/,``)||`/`}function TD(e,t,n){return`${e}:${t}:${wD(n)}`}var ED=`canvas-offline`,DD=2,OD=null;function kD(){return OD||(OD=new Promise((e,t)=>{let n=indexedDB.open(ED,DD);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(),OD=null},e(n.result)},n.onerror=()=>{OD=null,t(n.error)}}),OD)}function AD(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error),e.onabort=()=>n(e.error)})}function jD(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}async function MD(e,t){return jD((await kD()).transaction(e).objectStore(e).get(t))}async function ND(e){return jD((await kD()).transaction(e).objectStore(e).getAll())}async function PD(e,t,n){let r=(await kD()).transaction(e,`readwrite`);return r.objectStore(e).put(t,n),AD(r)}async function FD(e,t){let n=(await kD()).transaction(e,`readwrite`);return n.objectStore(e).delete(t),AD(n)}async function ID(e){let t=(await kD()).transaction(e,`readwrite`);return t.objectStore(e).clear(),AD(t)}async function LD(){try{let e=await MD(`config`,`settings`);return e?{...SD,...e}:SD}catch{return SD}}async function RD(e){await PD(`config`,e,`settings`)}async function zD(e,t){let n=(await kD()).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 AD(n)}async function BD(e){let t=await ND(`entries`),n=t.filter(e=>e.kind===`api`).sort((e,t)=>e.lastAccess-t.lastAccess),r=n.slice(0,Math.max(0,n.length-CD)),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(bD),caches.open(yD)]);await Promise.all([...r.map(async e=>{await c.delete(e.url),await FD(`entries`,e.url)}),...s.map(async e=>{await l.delete(e.url),await FD(`entries`,e.url)})])}async function VD(){let e=await ND(`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 HD(){await Promise.all([caches.delete(yD),caches.delete(bD)]),await ID(`entries`),await ID(`scopes`)}async function UD(){return ND(`scopes`)}async function WD(e){return MD(`scopes`,e)}async function GD(e){await PD(`scopes`,e)}async function KD(e){let t=await MD(`scopes`,e);await FD(`scopes`,e),t?.urls.length&&await qD(t.urls)}async function qD(e){let t=await ND(`scopes`),n=new Set(t.flatMap(e=>e.urls)),r=e.filter(e=>!n.has(e));r.length&&await zD(r,!1)}var JD=3,YD=`data/schema/file`,XD=128;async function ZD({workspaceRef:e,path:t,treeName:n,treeType:r},i){let a=await LD();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=TD(e,n,t),s=wD(t),c=await WD(o),l=((await qi(e,s,[],{limit:1e4,treeName:n,treeType:r})).payload??[]).filter(e=>e.schema===YD),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(JD,l.length)},async()=>{for(;h<l.length;){let t=l[h++];if(d>=a.budgetBytes*.9){p=!0;return}try{let{blob:n}=await Xr(e,t.id);d+=n.size,u.push(`${$r.workspaces}/${e}/documents/${t.id}/content`);try{await fi(e,t.id,XD),u.push(`${$r.workspaces}/${e}/documents/${t.id}/thumbnail?size=${XD}`)}catch{}}catch{}f+=1,i?.({done:f,total:m,bytes:d})}})),await zD(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 GD(g),c){let e=new Set(u),t=c.urls.filter(t=>!e.has(t));t.length&&await qD(t)}return g}var QD=[{label:`1 GB`,bytes:1*xD},{label:`2 GB`,bytes:2*xD},{label:`4 GB`,bytes:4*xD},{label:`8 GB`,bytes:8*xD}];function $D(e){return e<1048576?`${(e/1024).toFixed(0)} KB`:e<1073741824?`${(e/1048576).toFixed(1)} MB`:`${(e/xD).toFixed(2)} GB`}function eO(){navigator.serviceWorker?.controller?.postMessage({type:`OFFLINE_SETTINGS_CHANGED`})}function tO(){let{showSuccessToast:e,showErrorToast:t}=co(),[n,r]=(0,Y.useState)(null),[i,a]=(0,Y.useState)(null),[o,s]=(0,Y.useState)(null),[c,l]=(0,Y.useState)([]),[u,d]=(0,Y.useState)([]),[f,p]=(0,Y.useState)({}),[m,h]=(0,Y.useState)(!1),[g,_]=(0,Y.useState)(!1),v=(0,Y.useCallback)(()=>{LD().then(r).catch(()=>{}),VD().then(a).catch(()=>{}),UD().then(e=>d(e.sort((e,t)=>e.id.localeCompare(t.id)))).catch(()=>{}),navigator.storage?.persisted?.().then(s).catch(()=>{})},[]);(0,Y.useEffect)(()=>{v(),Fr().then(e=>l(e.map(e=>e.name).filter(Boolean).sort())).catch(()=>{})},[v]);let y=async e=>{r(e),await RD(e),eO(),e.enabled&&navigator.storage?.persist?.().then(s).catch(()=>{}),BD(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 HD(),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=TD(n.workspaceRef,n.treeName,n.path);p(e=>({...e,[r]:{done:0,total:0,bytes:0}}));try{let t=await ZD(n,e=>p(t=>({...t,[r]:e})));e(t.truncated?`Pinned ${$D(t.bytes)} — stopped at the size budget`:`Pinned ${t.workspaceRef}:/${t.path} (${$D(t.bytes)})`)}catch(e){t(e instanceof Error?e.message:`Failed to pin`)}finally{p(e=>{let{[r]:t,...n}=e;return n}),v()}},w=(e,t)=>{_(!1);for(let n of e)S({workspaceRef:t.workspaceName,path:n,treeName:t.treeName,treeType:t.treeType})},T=e=>({workspaceRef:e.workspaceRef,path:e.path,treeName:e.treeName||`context`,treeType:e.treeType||`context`}),E=async e=>{await KD(e),v()};return n?(0,X.jsxs)(`div`,{className:`space-y-8`,children:[(0,X.jsxs)(`section`,{children:[(0,X.jsx)(nO,{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,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`button`,{type:`button`,onClick:()=>y({...n,enabled:!n.enabled}),"aria-pressed":n.enabled,className:G(`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,X.jsx)(C,{className:`h-5 w-5 shrink-0 text-muted-foreground`}),(0,X.jsxs)(`span`,{className:`flex-1`,children:[(0,X.jsx)(`span`,{className:`block text-sm font-medium`,children:n.enabled?`Enabled`:`Disabled`}),(0,X.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,X.jsx)(et,{className:`h-4 w-4 shrink-0 text-primary`})]}),n.enabled&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`mb-2 text-sm font-medium`,children:`Size budget`}),(0,X.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:QD.map(e=>(0,X.jsx)(q,{variant:n.budgetBytes===e.bytes?`default`:`outline`,size:`sm`,onClick:()=>y({...n,budgetBytes:e.bytes}),children:e.label},e.bytes))})]}),i&&(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsxs)(`div`,{className:`flex items-baseline justify-between text-sm`,children:[(0,X.jsxs)(`span`,{children:[$D(i.contentBytes),` of `,$D(n.budgetBytes),` used`]}),(0,X.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[i.contentCount,` file(s)`,i.pinnedBytes>0?`, ${$D(i.pinnedBytes)} pinned`:``]})]}),(0,X.jsx)(`div`,{className:`h-2 w-full overflow-hidden rounded-full bg-muted`,children:(0,X.jsx)(`div`,{className:`h-full rounded-full bg-primary`,style:{width:`${Math.min(100,i.contentBytes/n.budgetBytes*100)}%`}})})]}),(0,X.jsx)(`div`,{children:(0,X.jsxs)(q,{variant:`outline`,size:`sm`,onClick:x,disabled:m,children:[m?(0,X.jsx)(Nt,{className:`mr-1.5 h-3.5 w-3.5 animate-spin`}):(0,X.jsx)(ut,{className:`mr-1.5 h-3.5 w-3.5`}),`Clear offline cache`]})})]})]})]}),n.enabled&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`section`,{children:[(0,X.jsx)(nO,{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,X.jsx)(`div`,{className:`mb-3`,children:(0,X.jsxs)(q,{size:`sm`,onClick:()=>_(!0),disabled:!!Object.keys(f).length,children:[(0,X.jsx)(te,{className:`mr-1.5 h-3.5 w-3.5`}),`Pin a path…`]})}),(0,X.jsxs)(`ul`,{className:`space-y-1`,children:[u.map(e=>{let t=f[e.id];return(0,X.jsxs)(`li`,{className:`flex items-center gap-3 rounded-md border border-input px-3 py-2 text-sm`,children:[(0,X.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,X.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,X.jsxs)(`span`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,X.jsx)(Nt,{className:`h-3.5 w-3.5 animate-spin`}),t.total>0?`${t.done}/${t.total} · ${$D(t.bytes)}`:`listing…`]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[$D(e.bytes),e.truncated?` (partial)`:``]}),(0,X.jsx)(q,{variant:`ghost`,size:`sm`,onClick:()=>S(T(e)),"aria-label":`Re-warm ${e.id}`,title:`Re-warm: re-resolve the scope and download anything new`,children:(0,X.jsx)(Te,{className:`h-3.5 w-3.5`})}),(0,X.jsx)(q,{variant:`ghost`,size:`sm`,onClick:()=>E(e.id),"aria-label":`Unpin ${e.id}`,children:(0,X.jsx)(Ne,{className:`h-3.5 w-3.5`})})]})]},e.id)}),u.length===0&&(0,X.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,X.jsxs)(`section`,{children:[(0,X.jsx)(nO,{title:`Workspace caching`,description:`Excluded workspaces are never cached — not even as you browse — and are not served from cache.`}),(0,X.jsx)(`ul`,{className:`space-y-1`,children:c.map(e=>{let t=n.excludedWorkspaces.includes(e);return(0,X.jsxs)(`li`,{className:`flex items-center gap-3 rounded-md border border-input px-3 py-2 text-sm`,children:[(0,X.jsx)(`span`,{className:G(`flex-1 truncate`,t&&`text-muted-foreground line-through`),children:e}),t&&(0,X.jsx)(yt,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,X.jsx)(q,{variant:t?`outline`:`ghost`,size:`sm`,onClick:()=>b(e),children:t?`Include`:`Exclude`})]},e)})})]})]}),g&&(0,X.jsx)(Op,{onClose:()=>_(!1),children:(0,X.jsx)(Ep,{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:w,onClose:()=>_(!1)})})]}):null}function nO({title:e,description:t}){return(0,X.jsxs)(`div`,{className:`mb-4`,children:[(0,X.jsx)(`h2`,{className:`text-base font-semibold`,children:e}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t})]})}function rO(){return(0,X.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,X.jsx)(Dx,{className:`mb-6`,title:`Offline`,onBack:Qw(),description:`Per-device offline cache: browse notes, files, photos and saved websites without a connection.`}),(0,X.jsx)(tO,{})]})}function iO(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 aO({name:e,version:t,detail:n}){return(0,X.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 px-4 py-2.5`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`text-sm font-medium truncate`,children:e}),n&&(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:n})]}),(0,X.jsx)(`code`,{className:`text-xs text-muted-foreground shrink-0`,children:t})]})}function oO(){let[e,t]=(0,Y.useState)(null),[n,r]=(0,Y.useState)(null);(0,Y.useEffect)(()=>{let e=!0;return J.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 ${iO(e.uptime)}`:null].filter(Boolean).join(` · `),a=Object.entries(e?.components??{}).sort(([e],[t])=>e.localeCompare(t));return(0,X.jsxs)(`div`,{className:`mx-auto max-w-4xl`,children:[(0,X.jsx)(Dx,{className:`mb-6`,title:`About`,onBack:Qw(),description:`Versions of every Canvas component this installation is running.`}),(0,X.jsxs)(`div`,{className:`space-y-6`,children:[(0,X.jsxs)(`section`,{className:`rounded-md border border-border divide-y divide-border`,children:[(0,X.jsx)(aO,{name:`Canvas Web`,detail:`this interface`,version:`v2.15.3`}),e?.version&&(0,X.jsx)(aO,{name:e.productName||e.appName||`Canvas Server`,detail:i||void 0,version:`v${e.version}`})]}),a.length>0&&(0,X.jsxs)(`section`,{children:[(0,X.jsx)(`h2`,{className:`mb-2 px-1 text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:`Server components`}),(0,X.jsx)(`div`,{className:`rounded-md border border-border divide-y divide-border`,children:a.map(([e,t])=>(0,X.jsx)(aO,{name:e,version:`v${t}`},e))})]}),n&&(0,X.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Server details unavailable: `,n]}),e?.sourceUrl&&(0,X.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[e.license?`Licensed ${e.license}. `:``,(0,X.jsx)(`a`,{href:e.sourceUrl,target:`_blank`,rel:`noreferrer`,className:`underline underline-offset-2 hover:text-foreground`,children:`Get the source code`}),`.`]})]})]})}var sO=[`onnx`,`clip`,`blip`,`openai`],cO=[`onnx`,`clip`,`blip`,`ollama`,`vllm`],lO=[{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`}],uO=e=>`${$r.workspaces}/${encodeURIComponent(e)}/inferd`;function dO(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 fO(e){return await J.get(`${uO(e)}/status`)}async function pO(e,t={}){let n={};return t.force!==void 0&&(n.force=t.force),await J.post(`${uO(e)}/summarize/images`,n)}async function mO(e){return await J.post(`${uO(e)}/summarize/images/stop`,{})}async function hO(e){return await J.get(`${uO(e)}/config`)}async function gO(e,t){return await J.put(`${uO(e)}/config`,t)}async function _O(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 J.post(`${uO(e)}/reindex`,n)}async function vO(e){return await J.get(`${uO(e)}/vector-tables`)}async function yO(e,t){return await J.delete(`${uO(e)}/vector-tables/${encodeURIComponent(t)}`)}async function bO(){return await J.get(`${$r.inferd}/config`)}async function xO(e){return await J.put(`${$r.inferd}/config`,e)}async function SO(){return await J.get(`${$r.inferd}/defaults`)}async function CO(e){return await J.put(`${$r.inferd}/defaults`,e)}async function wO(e,t){let n={...e};return delete n.apiKeySet,delete n.headerNames,(await J.post(`${$r.inferd}/test`,{provider:n,...t?{model:t}:{},probe:!0})).cached??null}async function TO(e,t,n=`text`){let r={...e};return delete r.apiKeySet,delete r.headerNames,await J.post(`${$r.inferd}/test`,{provider:r,...t?{model:t}:{},modality:n})}var EO=`h-8 w-full rounded-md border bg-background px-2 text-sm outline-none focus:ring-2 focus:ring-ring`,DO=`font-semibold uppercase tracking-[0.08em]`,OO={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`}},kO=[`baseUrl`,`host`,`apiKey`,`cacheDir`,`imageInput`,`timeoutMs`],AO=[{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.`}],jO=12e4;function MO(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 NO({title:e,hint:t}){return(0,X.jsxs)(`div`,{className:`mb-2`,children:[(0,X.jsx)(`h3`,{className:G(`text-[11px] text-muted-foreground`,DO),children:e}),(0,X.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:t})]})}function PO({overridden:e,source:t}){return e?(0,X.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,X.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 FO({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,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`label`,{className:`text-xs font-medium`,children:e}),(0,X.jsx)(PO,{overridden:u,source:n===void 0?void 0:String(n)}),u&&!o&&(0,X.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,X.jsx)(K,{type:i,value:t??``,disabled:o,onChange:e=>r(e.target.value),placeholder:a??(n===void 0?`—`:String(n)),className:G(`h-8 text-sm`,l&&`font-mono`,c&&`border-destructive focus-visible:ring-destructive`)}),c&&(0,X.jsx)(`p`,{className:`text-[11px] font-medium text-destructive`,children:c}),s&&(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:s})]})}function IO({label:e,checked:t,overridden:n,disabled:r,onChange:i}){return(0,X.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,X.jsx)(`input`,{type:`checkbox`,disabled:r,checked:t,onChange:e=>i(e.target.checked)}),e,(0,X.jsx)(PO,{overridden:n})]})}function LO({storedNames:e,value:t,disabled:n,onChange:r}){let i=t!==void 0,[a,o]=(0,Y.useState)([]),s=e=>{o(e),r(Object.fromEntries(e.filter(([e])=>e.trim()!==``)))};return(0,X.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(`label`,{className:`text-xs font-medium`,children:`Custom headers`}),i?(0,X.jsxs)(X.Fragment,{children:[(0,X.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,X.jsx)(`button`,{type:`button`,onClick:()=>{o([]),r(void 0)},className:`text-[10px] text-muted-foreground underline hover:text-foreground`,children:`cancel`})]}):(0,X.jsx)(PO,{overridden:!1,source:e?.join(`, `)})]}),!i&&(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:e?.length?(0,X.jsxs)(X.Fragment,{children:[`Stored: `,(0,X.jsx)(`span`,{className:`font-mono`,children:e.join(`, `)}),` (values are never sent back)`]}):`None set.`}),!n&&(0,X.jsx)(q,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>{o([[``,``]]),r({})},children:e?.length?`Replace headers`:`Add headers`})]}),i&&(0,X.jsxs)(X.Fragment,{children:[(0,X.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,X.jsxs)(`div`,{className:`flex gap-2`,children:[(0,X.jsx)(K,{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,X.jsx)(K,{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,X.jsx)(q,{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,X.jsx)(ut,{className:`h-3.5 w-3.5`})})]},r)),!n&&(0,X.jsxs)(q,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>s([...a,[``,``]]),children:[(0,X.jsx)(H,{className:`mr-1.5 h-3.5 w-3.5`}),`Add header`]})]})]})}function RO({open:e,onClick:t,label:n}){return(0,X.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,X.jsx)(Ke,{className:G(`h-4 w-4 transition-transform motion-reduce:transition-none`,e&&`rotate-180`)})})}var zO={configured:`bg-success`,"needs-fill":`bg-warning`,unresolved:`bg-destructive`,unset:`bg-muted-foreground/30`};function BO({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}=mo(),[f,p]=(0,Y.useState)(()=>structuredClone(e)),[m,h]=(0,Y.useState)(new Set),[g,_]=(0,Y.useState)(null),[v,y]=(0,Y.useState)(!1),[b,x]=(0,Y.useState)(``),[S,C]=(0,Y.useState)(``),[w,T]=(0,Y.useState)(null),E=(0,Y.useMemo)(()=>[...new Set([...Object.keys(t.spaces||{}),...Object.keys(f.spaces||{})])].sort(),[t.spaces,f.spaces]),D=(0,Y.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?OO[i.type]?.url?.key:void 0,o=a?MO(i[a]):null;if(o){d({title:`Backend '${n}'`,description:o,variant:`destructive`});return}_(e);try{try{await wO(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 TO(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,Y.useMemo)(()=>{let e=[];for(let[n,r]of Object.entries(f.providers||{})){let i=r.type??t.providers?.[n]?.type,a=i?OO[i]?.url?.key:void 0;if(!a)continue;let o=MO(r[a]);o&&e.push(`${n}: ${o}`)}return e},[f.providers,t.providers]),ee=(0,Y.useMemo)(()=>JSON.stringify(f)!==JSON.stringify(e)||m.size>0,[f,e,m]),te=async()=>{if(L.length>0){d({title:`Fix the endpoint first`,description:L.join(` · `),variant:`destructive`});return}await u(dO(f,m)),h(new Set)},ne=e=>T(t=>t===e?null:e);return(0,X.jsxs)(`div`,{className:`space-y-6`,children:[i&&(0,X.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive-subtle p-3 text-xs`,children:[(0,X.jsx)(ot,{className:`mt-0.5 h-4 w-4 shrink-0 text-destructive`}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`font-medium text-destructive`,children:`Stored config does not resolve; defaults are standing in`}),(0,X.jsx)(`p`,{className:`mt-0.5 font-mono text-[11px] text-muted-foreground`,children:i})]})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(NO,{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,X.jsxs)(`div`,{className:`rounded-lg border border-dashed p-6 text-center`,children:[(0,X.jsx)(`p`,{className:`text-sm font-medium`,children:`No spaces on this layer`}),(0,X.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,X.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,X.jsxs)(`div`,{className:`relative`,children:[(0,X.jsx)(`span`,{className:G(`absolute inset-y-0 left-0 w-[3px]`,zO[i?`unresolved`:x?`needs-fill`:h?`configured`:`unset`]),"aria-hidden":!0}),(0,X.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,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2 gap-y-1`,children:[(0,X.jsx)(`span`,{className:G(`text-[11px]`,DO),children:e}),(0,X.jsx)(`span`,{className:`truncate font-mono text-sm`,children:h||`no model set`}),_&&(0,X.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,X.jsxs)(`span`,{className:`text-xs tabular-nums text-muted-foreground`,children:[y,`-d`]}),b&&(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`chunked`})]}),r&&h&&(0,X.jsxs)(`p`,{className:`mt-1 truncate font-mono text-[11px] text-muted-foreground`,title:`Vector table backing this space`,children:[`└─ `,d?.table??(0,X.jsx)(`span`,{className:`not-italic`,children:`not created yet`})]}),x&&(0,X.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,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 max-sm:justify-end`,children:[x&&o&&(0,X.jsx)(q,{type:`button`,size:`sm`,variant:`outline`,onClick:()=>o(e),children:`Fill`}),(0,X.jsxs)(q,{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,X.jsx)(_e,{className:`mr-1.5 h-3.5 w-3.5`}),g===e?v?`Downloading…`:`Testing…`:`Test`]}),(0,X.jsx)(RO,{open:m,onClick:()=>ne(p),label:`Edit ${e}`})]})]}),m&&(0,X.jsxs)(`div`,{className:`border-t bg-muted/40 py-4 pl-4 pr-3`,children:[(0,X.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`label`,{className:`text-xs font-medium`,children:`Backend`}),(0,X.jsx)(PO,{overridden:s.provider!==void 0,source:u.provider})]}),(0,X.jsxs)(`select`,{className:EO,disabled:c,value:s.provider??``,onChange:t=>O(e,`provider`,t.target.value),children:[(0,X.jsx)(`option`,{value:``,children:l.provider?`inherited: ${l.provider}`:`inherited`}),D.map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))]})]}),(0,X.jsx)(FO,{label:`Model`,mono:!0,value:s.model,inheritedValue:l.model,onChange:t=>O(e,`model`,t),disabled:c}),(0,X.jsx)(FO,{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,X.jsx)(FO,{label:`Max length`,type:`number`,value:s.maxLength,inheritedValue:l.maxLength,onChange:t=>O(e,`maxLength`,t),disabled:c})]}),(0,X.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-4`,children:[(0,X.jsx)(IO,{label:`Chunk long inputs`,checked:b,overridden:s.chunk!==void 0,disabled:c,onChange:t=>k(e,`chunk`,t)}),(0,X.jsx)(IO,{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,X.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(K,{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,X.jsxs)(q,{type:`button`,size:`sm`,variant:`ghost`,onClick:N,children:[(0,X.jsx)(H,{className:`mr-1.5 h-3.5 w-3.5`}),`Add space`]})]})]}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(NO,{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,X.jsx)(`div`,{className:`divide-y overflow-hidden rounded-lg border`,children:D.map(e=>{let n=f.providers?.[e]||{},r=t.providers?.[e]||{},i=cO.includes(e),a=f.providers?.[e]!==void 0,o=`provider:${e}`,s=w===o,l=n.type??r.type,u=l?OO[l]:void 0,d=u?.url?MO(n[u.url.key]):null,p={...r,...n},h=kO.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,X.jsxs)(`div`,{children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-2 px-4 py-3 sm:flex-row sm:items-start sm:gap-3`,children:[(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2 gap-y-1`,children:[(0,X.jsx)(`span`,{className:`font-mono text-sm font-semibold`,children:e}),(0,X.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground`,children:l??`no type`}),i&&(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:`built-in`}),p.apiKeySet&&!m.has(e)&&(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-success`,children:`key set`}),d&&(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-destructive`,children:`check endpoint`})]}),(0,X.jsx)(`p`,{className:`mt-1 truncate font-mono text-[11px] text-muted-foreground`,children:u?u.where(p):`—`}),g.length>0&&(0,X.jsxs)(`p`,{className:`mt-1 text-[11px] text-muted-foreground`,children:[`used by `,g.join(`, `)]})]}),(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 max-sm:justify-end`,children:[a&&!i&&!c&&(0,X.jsx)(q,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>M(e),title:`Remove this override`,children:(0,X.jsx)(ut,{className:`h-3.5 w-3.5`})}),(0,X.jsx)(RO,{open:s,onClick:()=>ne(o),label:`Edit ${e}`})]})]}),s&&(0,X.jsxs)(`div`,{className:`border-t bg-muted/40 px-4 py-4`,children:[(0,X.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`label`,{className:`text-xs font-medium`,children:`Type`}),(0,X.jsx)(PO,{overridden:n.type!==void 0,source:r.type})]}),(0,X.jsxs)(`select`,{className:EO,disabled:c,value:n.type??``,onChange:t=>A(e,`type`,t.target.value),children:[(0,X.jsx)(`option`,{value:``,children:r.type?`inherited: ${r.type}`:`inherited`}),sO.map(e=>(0,X.jsx)(`option`,{value:e,children:e},e)),l&&!sO.includes(l)&&(0,X.jsxs)(`option`,{value:l,children:[l,` (legacy)`]})]}),u?.note&&(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:u.note})]}),u?.url&&(0,X.jsx)(FO,{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,X.jsx)(FO,{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,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`label`,{className:`text-xs font-medium`,children:`Image input shape`}),(0,X.jsx)(PO,{overridden:n.imageInput!==void 0,source:r.imageInput})]}),(0,X.jsxs)(`select`,{className:EO,disabled:c,value:n.imageInput??``,onChange:t=>A(e,`imageInput`,t.target.value),children:[(0,X.jsx)(`option`,{value:``,children:r.imageInput?`inherited: ${r.imageInput}`:`inherited: data-uri`}),AO.map(e=>(0,X.jsx)(`option`,{value:e.value,children:e.label},e.value))]}),(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:AO.find(e=>e.value===(n.imageInput??r.imageInput??`data-uri`))?.hint})]}),u?.timeoutMs&&(0,X.jsx)(FO,{label:`Request timeout (ms)`,type:`number`,value:n.timeoutMs,inheritedValue:r.timeoutMs??jO,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,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`label`,{className:`text-xs font-medium`,children:`API key`}),m.has(e)&&(0,X.jsx)(`span`,{className:`rounded bg-warning-subtle px-1.5 py-0.5 text-[10px] font-medium text-warning`,children:`will be written`})]}),(0,X.jsx)(K,{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,X.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,X.jsx)(LO,{disabled:c,storedNames:r.headerNames,value:n.headers,onChange:t=>j(e,`headers`,t)}),h.length>0&&!c&&(0,X.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,X.jsxs)(`span`,{children:[`Not used by type `,(0,X.jsx)(`span`,{className:`font-mono`,children:l}),`:`,` `,(0,X.jsx)(`span`,{className:`font-mono`,children:h.join(`, `)})]}),(0,X.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,X.jsxs)(`p`,{className:`mt-3 text-[11px] text-muted-foreground`,children:[`Stored custom headers: `,(0,X.jsx)(`span`,{className:`font-mono`,children:r.headerNames.join(`, `)}),` (values not shown)`]})]})]},e)})}),!c&&(0,X.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(K,{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,X.jsxs)(q,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>P(b.trim()),children:[(0,X.jsx)(H,{className:`mr-1.5 h-3.5 w-3.5`}),`Add backend`]}),lO.filter(e=>!D.includes(e.id)).map(e=>(0,X.jsx)(q,{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,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 border-t pt-4`,children:[(0,X.jsx)(q,{type:`button`,size:`sm`,variant:ee?`default`:`outline`,onClick:te,disabled:s||!ee||L.length>0,children:s?`Saving…`:l}),(0,X.jsx)(q,{type:`button`,size:`sm`,variant:`ghost`,disabled:s||!ee,onClick:()=>{p(structuredClone(e)),h(new Set)},children:`Discard changes`}),(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:L.length>0?(0,X.jsxs)(`span`,{className:`font-medium text-destructive`,children:[L.length,` endpoint `,L.length===1?`needs`:`need`,` fixing`]}):ee?`Unsaved changes`:`Everything saved`})]})]})}function VO(){let{showToast:e}=mo(),[t,n]=(0,Y.useState)(null),[r,i]=(0,Y.useState)(!0),[a,o]=(0,Y.useState)(!1),[s,c]=(0,Y.useState)(null),l=(0,Y.useCallback)(()=>bO().then(e=>{n(e),c(null)}).catch(e=>c(e instanceof Error?e.message:`Failed to load embedding defaults`)).finally(()=>i(!1)),[]);(0,Y.useEffect)(()=>{l()},[l]);let u=()=>{i(!0),l()};return(0,X.jsxs)(`div`,{className:`mx-auto max-w-4xl p-6`,children:[(0,X.jsx)(Dx,{compact:!0,className:`mb-6`,title:`Search & AI defaults`,onBack:Qw(),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,X.jsxs)(q,{type:`button`,size:`sm`,variant:`outline`,onClick:u,disabled:r,children:[(0,X.jsx)(Te,{className:`mr-2 h-3.5 w-3.5`}),`Refresh`]})}),r?(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,X.jsx)(Te,{className:`h-4 w-4 animate-spin`}),`Loading…`]}):s||!t?(0,X.jsxs)(`div`,{className:`space-y-3`,children:[(0,X.jsxs)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/5 p-4 text-sm`,children:[(0,X.jsx)(`p`,{className:`font-medium text-destructive`,children:`Embedding defaults unavailable`}),(0,X.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:s||`No config returned.`})]}),(0,X.jsx)(q,{type:`button`,size:`sm`,variant:`outline`,onClick:u,children:`Retry`})]}):(0,X.jsx)(BO,{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 xO(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 HO(){let e=Xc(),{showToast:t}=mo(),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,Y.useState)(i),[c,l]=(0,Y.useState)(a),[u,d]=(0,Y.useState)(null),[f,p]=(0,Y.useState)([]),[m,h]=(0,Y.useState)(!1),g=(0,Y.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 J.get(e,{skipAuth:!0,headers:_()});d(t);let n=await J.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,Y.useRef)(v);return(0,Y.useEffect)(()=>{y.current()},[]),(0,X.jsxs)(`div`,{className:`space-y-4`,children:[(0,X.jsx)(Dx,{onBack:Qw(),title:`Shared Resource Viewer`,description:`Open a resource someone shared with you.`}),(0,X.jsxs)(`div`,{className:`grid gap-2 md:grid-cols-3`,children:[(0,X.jsx)(K,{value:o,onChange:e=>s(e.target.value),placeholder:`Full pub URL`}),(0,X.jsx)(K,{value:c,onChange:e=>l(e.target.value),placeholder:`Access token (canvas-...)`}),(0,X.jsx)(q,{onClick:v,disabled:m||!o||!c,children:`Load`})]}),(0,X.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[`Type: `,g]}),m?(0,X.jsx)(`div`,{className:`text-center py-8 text-muted-foreground`,children:`Loading...`}):(0,X.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,X.jsxs)(`div`,{className:`border rounded p-3`,children:[(0,X.jsx)(`h2`,{className:`font-semibold mb-2`,children:`Metadata`}),(0,X.jsx)(`pre`,{className:`text-xs overflow-auto max-h-80`,children:JSON.stringify(u,null,2)})]}),(0,X.jsxs)(`div`,{className:`border rounded p-3`,children:[(0,X.jsxs)(`h2`,{className:`font-semibold mb-2`,children:[`Documents (`,f.length,`)`]}),f.length===0?(0,X.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`No documents`}):(0,X.jsx)(`ul`,{className:`space-y-2 text-sm`,children:f.slice(0,100).map((e,t)=>(0,X.jsxs)(`li`,{className:`border rounded p-2`,children:[(0,X.jsx)(`div`,{className:`font-mono text-xs`,children:e.id}),(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e.schema})]},t))})]})]}),(0,X.jsx)(Ju,{className:`mt-8`})]})}function UO(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 WO(){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 GO={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?`${$r.admin.users}?${n}`:$r.admin.users;return await J.get(r)},async getUser(e){return await J.get(`${$r.admin.users}/${e}`)},async createUser(e){return await J.post($r.admin.users,e)},async updateUser(e,t){return await J.put(`${$r.admin.users}/${e}`,t)},async deleteUser(e){await J.delete(`${$r.admin.users}/${e}`)}},KO={async listAllWorkspaces(){return await J.get($r.admin.workspaces)},async createWorkspace(e){return await J.post($r.admin.workspaces,e)},async deleteWorkspace(e){await J.delete(`${$r.admin.workspaces}/${e}`)}},qO={async getLogs(e={}){return(await J.get(`${$r.admin.logs}${UO(e)}`)).logs||[]},async streamLogs(e={},t={}){let{signal:n,onEntry:r,onError:i}=t;try{let t=await fetch(`${$r.admin.logsStream}${UO(e)}`,{method:`GET`,headers:WO(),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(`
25
25
  `),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(`
26
26
  `));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(`
27
27
 
@@ -88,7 +88,7 @@ set -euo pipefail
88
88
  `),onClick:()=>n(l.split(`
89
89
  `).map(e=>e.trim()).filter(Boolean)),children:`Save exclusions`}),o>0&&(0,X.jsxs)(`button`,{type:`button`,className:`text-[11px] text-muted-foreground hover:text-foreground`,onClick:()=>f(!d),children:[d?`Hide`:`Show`,` default patterns`]})]}),d&&(0,X.jsx)(`pre`,{className:`max-h-40 overflow-auto rounded-md bg-muted/50 p-2 font-mono text-[11px] text-muted-foreground`,children:a.filter(e=>!i.includes(e)).join(`
90
90
  `)})]})]})}function h0({device:e,linked:t,busy:n,onLink:r,onUnlink:i,onUpdate:a}){let[o,s]=(0,Y.useState)(!1),[c,l]=(0,Y.useState)(e.name),[u,d]=(0,Y.useState)(e.description??``),f=()=>{c.trim()&&(c!==e.name||u!==(e.description??``))&&a({name:c.trim(),description:u.trim()||void 0}),s(!1)},p=()=>{l(e.name),d(e.description??``),s(!1)};return(0,X.jsx)(`section`,{className:`rounded-lg border p-4`,children:(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-3 min-w-0`,children:[(0,X.jsx)(fe,{className:`h-4 w-4 text-muted-foreground mt-0.5 shrink-0`}),(0,X.jsxs)(`div`,{className:`min-w-0`,children:[o?(0,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(K,{value:c,onChange:e=>l(e.target.value),className:`h-7 text-sm`,placeholder:`Device name`,autoFocus:!0,onKeyDown:e=>{e.key===`Enter`&&f(),e.key===`Escape`&&p()}}),(0,X.jsx)(K,{value:u,onChange:e=>d(e.target.value),className:`h-7 text-xs`,placeholder:`Description (optional)`,onKeyDown:e=>{e.key===`Enter`&&f(),e.key===`Escape`&&p()}})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`text-sm font-medium`,children:e.name}),e.description&&(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:e.description})]}),(0,X.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap gap-x-3 gap-y-0.5 text-[11px] text-muted-foreground font-mono`,children:[(0,X.jsx)(`span`,{children:e.deviceId}),e.platform&&(0,X.jsx)(`span`,{children:e.platform}),e.arch&&(0,X.jsx)(`span`,{children:e.arch}),e.type&&(0,X.jsx)(`span`,{children:e.type})]})]})]}),(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[o?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(q,{type:`button`,variant:`outline`,size:`sm`,onClick:f,disabled:!c.trim(),children:(0,X.jsx)(et,{className:`h-3.5 w-3.5`})}),(0,X.jsx)(q,{type:`button`,variant:`ghost`,size:`sm`,onClick:p,children:(0,X.jsx)(Ne,{className:`h-3.5 w-3.5`})})]}):(0,X.jsx)(q,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>s(!0),title:`Edit name/description`,children:(0,X.jsx)(Ie,{className:`h-3.5 w-3.5`})}),t?(0,X.jsx)(q,{type:`button`,variant:`outline`,size:`sm`,disabled:n,onClick:i,className:`text-destructive hover:text-destructive`,title:`Remove from workspace`,children:(0,X.jsx)(pe,{className:`h-3.5 w-3.5`})}):(0,X.jsx)(q,{type:`button`,variant:`outline`,size:`sm`,disabled:n,onClick:r,title:`Link to workspace`,children:(0,X.jsx)(Kt,{className:`h-3.5 w-3.5`})}),t&&(0,X.jsx)(`span`,{className:`rounded-full bg-primary/10 px-2 py-0.5 text-[11px] font-medium text-primary`,children:`linked`})]})]})})}function g0({allDevices:e,linkedDevices:t,isLoading:n,deviceBusy:r,onRefresh:i,onLink:a,onUnlink:o,onUpdate:s}){let c=new Set(t.map(e=>e.deviceId));return n?(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,X.jsx)(Te,{className:`h-4 w-4 animate-spin`}),`Loading devices…`]}):(0,X.jsxs)(`div`,{className:`space-y-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,X.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[c.size,` of `,e.length,` registered device`,e.length===1?``:`s`,` linked to this workspace.`]}),(0,X.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,onClick:i,disabled:n,children:[(0,X.jsx)(Te,{className:`mr-2 h-3.5 w-3.5`}),`Refresh`]})]}),e.length===0?(0,X.jsxs)(`div`,{className:`rounded-md border p-4 text-sm text-muted-foreground`,children:[`No devices registered. Devices register themselves on first connection via `,(0,X.jsx)(`span`,{className:`font-mono`,children:`POST /auth/devices/register`}),`.`]}):(0,X.jsx)(`div`,{className:`space-y-2`,children:e.map(e=>(0,X.jsx)(h0,{device:e,linked:c.has(e.deviceId),busy:r===e.deviceId,onLink:()=>a(e.deviceId),onUnlink:()=>o(e.deviceId),onUpdate:t=>s(e.deviceId,t)},e.deviceId))})]})}function _0({label:e,value:t,mono:n=!1}){return(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4 py-2 border-b last:border-0`,children:[(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground shrink-0`,children:e}),(0,X.jsx)(`span`,{className:`text-xs text-right ${n?`font-mono`:``}`,children:t??`—`})]})}function v0({workspaceName:e,current:t,weights:n,floorMode:r,relativeMargin:i,onDone:a}){let[o,s]=(0,Y.useState)(t==null?``:String(t)),[c,l]=(0,Y.useState)(r??`relative`),[u,d]=(0,Y.useState)(i==null?`0.035`:String(i)),[f,p]=(0,Y.useState)(n?.fts==null?`2`:String(n.fts)),[m,h]=(0,Y.useState)(n?.dense==null?`1`:String(n.dense)),[g,_]=(0,Y.useState)(n?.image==null?`2`:String(n.image)),[v,y]=(0,Y.useState)(!1),[b,x]=(0,Y.useState)(null),[S,C]=(0,Y.useState)(vC);return(0,X.jsxs)(`div`,{className:`mt-3 space-y-3`,children:[(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(`label`,{className:`text-xs text-muted-foreground`,children:`How photo relevance is decided`}),(0,X.jsxs)(`select`,{value:c,onChange:e=>l(e.target.value),className:`h-8 rounded-md border border-input bg-transparent px-2 text-xs`,children:[(0,X.jsx)(`option`,{value:`relative`,children:`Relative to the best match (recommended)`}),(0,X.jsx)(`option`,{value:`absolute`,children:`Absolute distance cutoff`})]}),(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Photo-vs-text distances shift with every query and every model, so one fixed cutoff travels badly: a value tuned for one model keeps everything (or nothing) on the next. Relative anchors on the best match for THIS query and survives a re-embed.`})]}),c===`relative`&&(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(`label`,{className:`text-xs text-muted-foreground`,children:`Window width (distance from the best match)`}),(0,X.jsx)(K,{value:u,onChange:e=>d(e.target.value),placeholder:`0.035`,className:`h-8 w-28 font-mono text-xs`,inputMode:`decimal`}),(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Wider keeps photos that match your query only partly, which is what a photo matching TWO things (a snowy window) looks like, since it sits further from each one than a pure example does. Too wide and everything gets in.`})]}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(`label`,{className:`text-xs text-muted-foreground`,children:c===`relative`?`Hard ceiling (cosine distance, 0–2; blank = off)`:`Image relevance floor (cosine distance, 0–2; blank = off)`}),(0,X.jsx)(K,{value:o,onChange:e=>s(e.target.value),placeholder:`0.95`,className:`h-8 w-28 font-mono text-xs`,inputMode:`decimal`}),(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:c===`relative`?`Nothing beyond this counts as a match however close it is to the best one. This is what lets a search of something you have no photos of come back empty. Without it, a relative window always returns its nearest photo.`:`Lower = stricter (fewer, more-relevant photos); raise if relevant photos are missing.`})]}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(`label`,{className:`text-xs text-muted-foreground`,children:`Hybrid fusion weights (0 disables a signal)`}),(0,X.jsx)(`div`,{className:`flex flex-wrap items-end gap-x-3 gap-y-2`,children:[[`lexical`,f,p],[`text semantic`,m,h],[`image`,g,_]].map(([e,t,n])=>(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(`span`,{className:`block text-[11px] text-muted-foreground`,children:e}),(0,X.jsx)(K,{value:t,onChange:e=>n(e.target.value),className:`h-8 w-16 font-mono text-xs`,inputMode:`decimal`})]},e))}),(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Ranking mix: lexical (filenames/content) · text semantics · photo matches. Equal lexical/image ranks a matching photo like a matching document.`})]}),(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(q,{size:`sm`,variant:`outline`,onClick:async()=>{y(!0),x(null);try{let t=o.trim(),n=t===``?null:Number(t);if(n!==null&&!Number.isFinite(n)){x(`Enter a number (e.g. 0.95) or leave empty`);return}let r={fts:Number(f),dense:Number(m),image:Number(g)};if(Object.values(r).some(e=>!Number.isFinite(e)||e<0)){x(`Weights must be numbers ≥ 0`);return}let i=Number(u.trim());if(c===`relative`&&(!Number.isFinite(i)||i<=0)){x(`Window width must be a positive number (e.g. 0.035)`);return}await Ai(e,{imageMaxDistance:n,imageFloorMode:c,...c===`relative`?{imageRelativeMargin:i}:{},searchWeights:r}),x(`Saved`),a()}catch(e){x(e instanceof Error?e.message:`Failed to save`)}finally{y(!1)}},disabled:v,children:v?`Saving…`:`Save`}),b&&(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:b})]}),(0,X.jsxs)(`div`,{className:`space-y-1.5 border-t border-border pt-3`,children:[(0,X.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,X.jsx)(`input`,{type:`checkbox`,checked:S,onChange:e=>{yC(e.target.checked),C(e.target.checked)}}),(0,X.jsx)(`span`,{children:`Debug query`})]}),(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Attaches the raw (unfloored) image distances to each search and shows them above the document list: the numbers this floor should be picked from. Local to this browser; costs a little extra work per query, so leave it off day to day.`})]})]})}function y0({stats:e,isLoading:t,onRefresh:n,workspaceName:r}){return t?(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,X.jsx)(Te,{className:`h-4 w-4 animate-spin`}),`Loading stats…`]}):(0,X.jsxs)(`div`,{className:`space-y-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between`,children:[(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Live snapshot from synapsd. Click refresh for updated counts.`}),(0,X.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,onClick:n,disabled:t,children:[(0,X.jsx)(Te,{className:`mr-2 h-3.5 w-3.5`}),`Refresh`]})]}),(0,X.jsx)(S0,{workspaceName:r,vectorSpaces:Object.keys(e?.semantic?.vectorSpaces||{}),onDone:n}),e?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`section`,{className:`rounded-lg border p-4`,children:[(0,X.jsxs)(`div`,{className:`mb-3 flex items-center gap-2`,children:[(0,X.jsx)(Tt,{className:`h-4 w-4 text-muted-foreground`}),(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Core Index`})]}),(0,X.jsx)(_0,{label:`Backend`,value:e.dbBackend,mono:!0}),(0,X.jsx)(_0,{label:`Status`,value:e.status}),(0,X.jsx)(_0,{label:`Path`,value:e.dbPath,mono:!0}),(0,X.jsx)(_0,{label:`Documents`,value:e.documentCount?.toLocaleString()}),(0,X.jsx)(_0,{label:`Metadata entries`,value:e.metadataCount?.toLocaleString()}),(0,X.jsx)(_0,{label:`Checksum index`,value:e.checksumIndexSize?.toLocaleString()}),(0,X.jsx)(_0,{label:`Bitmap store`,value:e.bitmapStoreSize?.toLocaleString()}),(0,X.jsx)(_0,{label:`Bitmap cache`,value:e.bitmapCacheSize?.toLocaleString()}),(0,X.jsx)(_0,{label:`Deleted (pending GC)`,value:e.deletedDocumentsCount?.toLocaleString()})]}),e.fts&&(0,X.jsxs)(`section`,{className:`rounded-lg border p-4`,children:[(0,X.jsxs)(`div`,{className:`mb-3 flex items-center gap-2`,children:[(0,X.jsx)(ht,{className:`h-4 w-4 text-muted-foreground`}),(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Full-Text Search (LanceDB)`})]}),`ready`in e.fts&&(0,X.jsx)(_0,{label:`Ready`,value:String(e.fts.ready)}),e.fts.rowCount!==void 0&&(0,X.jsx)(_0,{label:`Row count`,value:e.fts.rowCount?.toLocaleString()}),e.fts.error&&(0,X.jsx)(_0,{label:`Error`,value:(0,X.jsx)(`span`,{className:`text-destructive`,children:e.fts.error})})]}),e.semantic&&(0,X.jsxs)(`section`,{className:`rounded-lg border p-4`,children:[(0,X.jsxs)(`div`,{className:`mb-3 flex items-center gap-2`,children:[(0,X.jsx)(ht,{className:`h-4 w-4 text-muted-foreground`}),(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Semantic / Vector Search`})]}),(0,X.jsx)(_0,{label:`Enabled`,value:String(e.semantic.enabled)}),e.semantic.enabled&&(0,X.jsxs)(X.Fragment,{children:[e.inferd?.routing?Object.entries(e.inferd.routing).map(([e,t])=>(0,X.jsx)(_0,{label:`Embeds → ${e}`,value:(0,X.jsx)(`span`,{className:`font-mono text-[11px]`,children:t.join(`, `)})},`route-${e}`)):(0,X.jsx)(_0,{label:`Text-embeddable (gap default)`,value:e.semantic.embeddableSchemas?.join(`, `)}),e.semantic.vectorSpaces&&Object.entries(e.semantic.vectorSpaces).map(([e,t])=>(0,X.jsx)(_0,{label:`Space: ${e} (${t.dim??`?`}-d)`,value:t.error?(0,X.jsx)(`span`,{className:`text-destructive`,children:t.error}):`${(t.embeddedDocs??0).toLocaleString()} docs · ${(t.chunkRows??0).toLocaleString()} vectors`},e)),(0,X.jsx)(_0,{label:`Photo relevance`,value:e.semantic.imageFloorMode===`absolute`?`absolute cutoff`:`relative ±${e.semantic.imageRelativeMargin??.035}`,mono:!0}),(0,X.jsx)(_0,{label:e.semantic.imageFloorMode===`absolute`?`Image relevance floor`:`Hard ceiling`,value:e.semantic.imageMaxDistance==null?`off`:e.semantic.imageMaxDistance,mono:!0}),(0,X.jsx)(_0,{label:`Fusion weights (lexical · text · image)`,value:`${e.semantic.searchWeights?.fts??2} · ${e.semantic.searchWeights?.dense??1} · ${e.semantic.searchWeights?.image??2}`,mono:!0}),(0,X.jsx)(v0,{workspaceName:r,current:e.semantic.imageMaxDistance,weights:e.semantic.searchWeights,floorMode:e.semantic.imageFloorMode,relativeMargin:e.semantic.imageRelativeMargin,onDone:n})]})]})]}):(0,X.jsx)(`div`,{className:`rounded-md border p-4 text-sm text-muted-foreground`,children:`No stats available.`})]})}function b0(){let{workspaceName:e,tab:t}=rl(),[n,r]=Su(),i=n.get(`section`),a=[`pending`,`rules`,`hooks`,`scripts`,`runs`].find(e=>e===i),o=n.get(`handler`)||void 0,s=n.get(`run`)||void 0,l=n.get(`addRuleKind`),u=n.get(`addRulePath`),d=n.get(`addRuleTarget`),f=n.get(`addRuleStoreTo`),p=n.get(`addRuleStoreFolder`),m=(0,Y.useMemo)(()=>l===`store`||l===`download`?!u&&!f&&!p?null:{kind:l,path:u||``,storeTo:f||``,storeFolder:p||``}:u?{kind:`mirror`,path:u,target:d||`dir:/`}:null,[l,u,d,f,p]),h=(0,Y.useCallback)(()=>{r(e=>{for(let t of[`addRuleKind`,`addRulePath`,`addRuleTarget`,`addRuleStoreTo`,`addRuleStoreFolder`])e.delete(t);return e},{replace:!0})},[r]),g=$c(),{showToast:_}=mo(),v=Pm(),{openM2Drawer:y}=pS(),b=uT(t);(0,Y.useEffect)(()=>{t!==b&&g(`/workspaces/${e}/settings/${b}`,{replace:!0})},[t,b,e,g]);let[x,S]=(0,Y.useState)(null),[C,w]=(0,Y.useState)(0),[T,E]=(0,Y.useState)(!0),[D,O]=(0,Y.useState)(!1),[k,A]=(0,Y.useState)(!1),[j,M]=(0,Y.useState)(``),[N,P]=(0,Y.useState)(``),[F,I]=(0,Y.useState)(`#FFFFFF`),[L,ee]=(0,Y.useState)(null),[te,ne]=(0,Y.useState)(null),[R,z]=(0,Y.useState)([]),[B,re]=(0,Y.useState)(null),[ie,ae]=(0,Y.useState)([]),[oe,se]=(0,Y.useState)(null),[ce,V]=(0,Y.useState)(null),[le,ue]=(0,Y.useState)(!1),[de,fe]=(0,Y.useState)([]),[me,he]=(0,Y.useState)([]),[ge,_e]=(0,Y.useState)(!1),[ve,ye]=(0,Y.useState)(null),be=e||x?.id||``,xe=(0,Y.useRef)(be);(0,Y.useEffect)(()=>{xe.current=be});let H=(0,Y.useCallback)(async e=>{let t=e??xe.current;if(t)try{let e=await gi(t);z(e.publicCanvasShares)}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Failed to load shares`,variant:`destructive`})}},[_]),Se=(0,Y.useCallback)(async e=>{let t=e??xe.current;if(t){ue(!0);try{let e=await ki(t);V(e)}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Failed to load DB stats`,variant:`destructive`})}finally{ue(!1)}}},[_]),Ce=(0,Y.useCallback)(async e=>{let t=e??xe.current;if(t){_e(!0);try{let[e,n]=await Promise.all([eT(),rT(t)]);fe(e),he(n)}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Failed to load devices`,variant:`destructive`})}finally{_e(!1)}}},[_]),we=async e=>{ye(e);try{await iT(be,e),await Ce(),_({title:`Linked`,description:`Device linked to workspace`})}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Failed to link device`,variant:`destructive`})}finally{ye(null)}},U=async e=>{ye(e);try{await aT(be,e),he(t=>t.filter(t=>t.deviceId!==e)),_({title:`Unlinked`,description:`Device removed from workspace`})}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Failed to unlink device`,variant:`destructive`})}finally{ye(null)}},W=async(e,t)=>{ye(`edit:${e}`);try{let n=await tT(e,t);fe(t=>t.map(t=>t.deviceId===e?{...t,...n}:t)),_({title:`Saved`,description:`Device updated`})}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Failed to update device`,variant:`destructive`})}finally{ye(null)}},Ee=(0,Y.useCallback)(async e=>{let t=e??xe.current;if(!t)return;let[n,r]=await Promise.all([ya(t).catch(()=>null),Ta(t).catch(()=>[])]);re(n),ae(r.filter(e=>e.kind===`storage`))},[]),De=ie.some(e=>e.resyncing);(0,Y.useEffect)(()=>{if(!De||!be)return;let e=setInterval(()=>{Ee()},4e3);return()=>clearInterval(e)},[De,be,Ee]),(0,Y.useEffect)(()=>{async function t(){try{let t=(await Fr()).find(t=>t.name===e||t.id===e);t&&(S(t),M(t.label||``),P(t.description||``),I(t.color||`#FFFFFF`),ee(t.icon??null),t.status===`active`&&await Promise.all([H(e||t.id),Ee(e||t.id)]))}catch{_({title:`Error`,description:`Failed to load workspace`,variant:`destructive`})}finally{E(!1)}}t()},[e,H,Ee,_,C]),(0,Y.useEffect)(()=>{let e=()=>w(e=>e+1);return window.addEventListener(`workspaces:refresh`,e),()=>window.removeEventListener(`workspaces:refresh`,e)},[]);let Oe=(0,Y.useRef)(!1),ke=(0,Y.useRef)(!1);(0,Y.useEffect)(()=>{Oe.current=!!ce||le,ke.current=ge||de.length>0}),(0,Y.useEffect)(()=>{x?.status===`active`&&b===`db`&&be&&!Oe.current&&Se(),x?.status===`active`&&b===`devices`&&be&&!ke.current&&Ce()},[b,be,x?.status,Se,Ce]);let Ae=async e=>{if(e.preventDefault(),x){O(!0);try{await Ra(be,{label:j.trim(),description:N.trim(),color:F,icon:L}),window.dispatchEvent(new CustomEvent(`workspaces:refresh`)),_({title:`Saved`,description:`Workspace settings updated`})}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Save failed`,variant:`destructive`})}finally{O(!1)}}},je=async()=>{if(x&&window.confirm(`Destroy workspace "${x.label||x.name}"? This cannot be undone.`)){A(!0);try{await $a(be),window.dispatchEvent(new CustomEvent(`workspaces:refresh`)),_({title:`Destroyed`,description:`${x.label||x.name} has been removed`}),g(`/workspaces`)}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Destroy failed`,variant:`destructive`})}finally{A(!1)}}},Me=()=>{for(let t of[e,x?.name,x?.id])t&&pa(t,`backends`);window.dispatchEvent(new CustomEvent(`workspace:tree:refresh`,{detail:{workspaceName:be}}))},Ne=async e=>{if(e.config?.supported!==!1){se(`backend:${e.address}`);try{await fa(be,e.driver,e.address,{enabled:!e.enabled}),await Ee(),Me(),_({title:`Saved`,description:`${e.address} ${e.enabled?`disabled`:`enabled`}`})}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Failed to update backend`,variant:`destructive`})}finally{se(null)}}},Pe=async(e,t,n)=>{se(`${n}:${e.address}`);try{await fa(be,e.driver,e.address,t),await Ee()}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Failed to update backend`,variant:`destructive`})}finally{se(null)}},Fe=async e=>{let t=typeof e.config?.label==`string`&&e.config.label||e.address;if(window.confirm(`Remove backend "${t}"? No files are deleted; indexed entries remain until purged from the backends tree.`)){se(`remove:${e.address}`);try{await Br(be,e.driver,e.address),await Ee(),Me(),_({title:`Removed`,description:`${t} unmounted`})}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Failed to remove backend`,variant:`destructive`})}finally{se(null)}}},Ie=async e=>{se(`resync:${e.address}`);try{await va(be,e.driver,e.address),await Ee(),_({title:`Re-syncing`,description:`${e.address} scan started`})}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Re-sync failed`,variant:`destructive`})}finally{se(null)}},Le=async e=>{se(`test:${e.address}`);try{await ia(be,e.driver,e.address),_({title:`Connected`,description:`${e.address}: credentials and root folder verified`})}catch(e){_({title:`Connection failed`,description:e instanceof Error?e.message:`Test failed`,variant:`destructive`})}finally{se(null)}},Re=async e=>{se(`stopsync:${e.address}`);try{await Ui(be,e.driver,e.address),await Ee(),_({title:`Sync stopped`,description:`${e.address}: indexed files are kept; Re-sync resumes where it left off`})}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Failed to stop sync`,variant:`destructive`})}finally{se(null)}},ze=async(e,t)=>{se(`service:${e}`);try{t?await ca(be,e):await zr(be,e),await Ee(),_({title:t?`Disabled`:`Enabled`,description:`${e} ${t?`disabled`:`enabled`}`})}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Failed to toggle service`,variant:`destructive`})}finally{se(null)}},Be=async e=>{let t=`${window.location.origin}${e.url}`;await navigator.clipboard?.writeText(t),_({title:`Copied`,description:t})},Ve=async e=>{if(x&&window.confirm(`Revoke public share for "${e.path}"?`)){se(`share:${e.code}`);try{await qr(be,e.code),await H(be),window.dispatchEvent(new CustomEvent(`workspace:tree:refresh`,{detail:{workspaceName:be}})),_({title:`Revoked`,description:`Public canvas link no longer works`})}catch(e){_({title:`Error`,description:e instanceof Error?e.message:`Failed to revoke share`,variant:`destructive`})}finally{se(null)}}},Ue=cT.find(e=>e.id===b);return T?(0,X.jsx)(`div`,{className:`p-6 text-sm text-muted-foreground`,children:`Loading...`}):x?(0,X.jsx)(`div`,{className:`h-full min-h-0 overflow-y-auto`,children:(0,X.jsxs)(`div`,{className:`mx-auto max-w-5xl p-6 pb-12 max-md:px-4 max-md:pb-rail-stack`,children:[(0,X.jsx)(Dx,{compact:!0,className:`mb-6 border-b pb-4`,title:`${Ue.label} - ${x.label||x.name}`,description:`This workspace · ${Ue.description}`,backTo:`/workspaces/${e}`,onBack:v?()=>y(`workspaces`,`settings`,e??null):void 0}),x.status!==`active`&&b!==`general`&&(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Start this workspace to access these settings. General settings and protection remain available while stopped.`}),b===`general`&&(0,X.jsxs)(`div`,{className:`space-y-6`,children:[(0,X.jsxs)(`form`,{onSubmit:Ae,className:`space-y-4 rounded-lg border p-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{htmlFor:`ws-label`,className:`text-sm font-medium`,children:`Label`}),(0,X.jsx)(K,{id:`ws-label`,value:j,onChange:e=>M(e.target.value),placeholder:`Workspace Label`})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{htmlFor:`ws-description`,className:`text-sm font-medium`,children:`Description`}),(0,X.jsx)(K,{id:`ws-description`,value:N,onChange:e=>P(e.target.value),placeholder:`Description (optional)`})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{className:`text-sm font-medium`,children:`Icon & color`}),(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`button`,{type:`button`,title:`Pick icon & color`,onClick:e=>ne({x:Math.min(e.clientX,window.innerWidth-290),y:Math.min(e.clientY,window.innerHeight-360)}),className:`flex h-10 w-10 items-center justify-center rounded-md border hover:bg-accent`,children:(0,X.jsx)(c,{icon:L||`ph:stack-fill`,width:22,height:22,color:rp(F)})}),(0,X.jsx)(K,{id:`ws-color`,type:`color`,value:F,onChange:e=>I(e.target.value),className:`h-10 w-16 p-1`}),(0,X.jsx)(q,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>I(ep()),children:`Randomize`})]})]}),(0,X.jsx)(q,{type:`submit`,disabled:D||!j.trim(),children:D?`Saving...`:`Save Changes`})]}),te&&(0,X.jsx)(jx,{x:te.x,y:te.y,current:{icon:L??void 0,color:F},onChange:e=>{`icon`in e&&ee(e.icon??null),`color`in e&&e.color&&I(e.color)},onClose:()=>ne(null)}),(0,X.jsx)(oA,{currentMode:x.protection?.mode,workspaceId:be,isActive:x.status===`active`,onChanged:()=>w(e=>e+1)}),x.status===`active`&&(0,X.jsx)(x0,{workspaceName:e}),x.status===`active`&&(0,X.jsx)(p0,{workspaceId:be}),(0,X.jsx)(a0,{workspaceId:be,workspaceName:x.label||x.name,isActive:x.status===`active`,onChanged:()=>w(e=>e+1)}),(0,X.jsxs)(`section`,{className:`rounded-lg border border-destructive/30 p-4`,children:[(0,X.jsx)(`h2`,{className:`mb-3 text-sm font-semibold text-destructive`,children:`Danger Zone`}),(0,X.jsxs)(q,{variant:`destructive`,disabled:k,onClick:je,children:[(0,X.jsx)(ut,{className:`mr-2 h-4 w-4`}),k?`Destroying...`:`Destroy Workspace`]})]})]}),x.status===`active`&&b===`shares`&&(0,X.jsxs)(`div`,{className:`space-y-4`,children:[(0,X.jsxs)(`section`,{className:`rounded-lg border p-4`,children:[(0,X.jsxs)(`div`,{className:`mb-3`,children:[(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Members`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Share this workspace with teammates by e-mail or with a whole directory group. It shows up in their workspace list on this server.`})]}),(0,X.jsx)(i0,{workspaceId:be})]}),(0,X.jsxs)(`section`,{className:`space-y-3 rounded-lg border p-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Public Canvas Shares`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Active public canvas links for this workspace.`})]}),(0,X.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>H(),children:[(0,X.jsx)(Te,{className:`mr-2 h-3.5 w-3.5`}),`Refresh`]})]}),R.length===0?(0,X.jsx)(`div`,{className:`rounded-md border p-4 text-sm text-muted-foreground`,children:`No public canvas shares. Good.`}):R.map(e=>{let t=`${window.location.origin}${e.url}`;return(0,X.jsxs)(`div`,{className:`rounded-md border p-3`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between sm:gap-3`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`truncate font-mono text-sm`,children:e.path}),(0,X.jsxs)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:[e.treeName,` / `,e.treeType,` - created `,new Date(e.createdAt).toLocaleString()]}),e.lockedBy?.length>0&&(0,X.jsxs)(`div`,{className:`mt-1 text-[11px] text-muted-foreground`,children:[`locks: `,e.lockedBy.join(`, `)]})]}),(0,X.jsxs)(`div`,{className:`flex shrink-0 gap-2`,children:[(0,X.jsx)(q,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>Be(e),children:(0,X.jsx)(He,{className:`h-3.5 w-3.5`})}),(0,X.jsx)(q,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>window.open(t,`_blank`,`noreferrer`),children:(0,X.jsx)(_n,{className:`h-3.5 w-3.5`})}),(0,X.jsx)(q,{type:`button`,variant:`outline`,size:`sm`,disabled:oe===`share:${e.code}`,onClick:()=>Ve(e),className:`text-destructive hover:text-destructive`,children:(0,X.jsx)(pe,{className:`h-3.5 w-3.5`})})]})]}),(0,X.jsx)(`div`,{className:`mt-2 truncate rounded bg-muted/40 px-2 py-1 font-mono text-xs text-muted-foreground`,children:t})]},e.code)})]}),(0,X.jsxs)(`section`,{className:`rounded-lg border p-4`,children:[(0,X.jsxs)(`div`,{className:`mb-3`,children:[(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Workspace ACL Tokens`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Generate token-based workspace access for devices, scripts, and other users.`})]}),(0,X.jsx)(e0,{workspaceId:be})]})]}),x.status===`active`&&b===`data`&&(0,X.jsxs)(`div`,{className:`space-y-3`,children:[ie.map(e=>{let t=e.config||{},n=e.address,r=t.device||null,i=e.driver===`gdrive`,a=(e.driver===`file`||i)&&t.managed!==!0&&!o0[n],o=o0[n]||{title:typeof t.label==`string`&&t.label||n,description:i?`Google Drive${typeof t.account==`string`&&t.account&&t.account!==t.label?` (${t.account})`:``}, folder ${typeof t.folderId==`string`&&t.folderId?t.folderId:`root`}${e.treePath?`, mirrored at ${e.treePath}`:``}.`:a?`Local folder${r?.name?` on ${r.name}`:``}, indexed in place${e.treePath?` and mirrored at ${e.treePath}`:``}.`:`Workspace data backend.`},s=t.supported!==!1,l=n===`workspace:data`,u=s&&!l,d=u&&t.managed!==!0,f=qf(e);return(0,X.jsxs)(`section`,{className:`rounded-lg border p-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(c,{icon:f.icon,width:16,height:16,color:f.color,className:`shrink-0`}),(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:o.title}),!s&&(0,X.jsx)(`span`,{className:`rounded bg-muted px-2 py-0.5 text-[11px] text-muted-foreground`,children:`unsupported`})]}),(0,X.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:o.description}),typeof t.root==`string`&&t.root&&(0,X.jsx)(`p`,{className:`mt-2 truncate font-mono text-xs text-muted-foreground`,children:t.root}),(0,X.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-2 text-[11px] text-muted-foreground`,children:[(0,X.jsxs)(`span`,{children:[`status: `,e.status]}),e.resyncing&&(0,X.jsxs)(`span`,{className:`flex items-center gap-1 rounded bg-primary/10 px-1.5 py-0.5 font-medium text-primary`,children:[(0,X.jsx)(Te,{className:`h-3 w-3 animate-spin`}),`indexing`,e.progress?` ${e.progress.scanned}${e.progress.total==null?``:` / ${e.progress.total}`}`:``]}),r?.name&&(0,X.jsxs)(`span`,{title:r.id,children:[`device: `,r.name]}),t.readOnly===!0&&(0,X.jsx)(`span`,{className:`rounded bg-warning/15 px-1.5 py-0.5 font-medium text-warning`,children:`read-only`}),e.lastSyncAt&&(0,X.jsxs)(`span`,{children:[`last scan: `,new Date(e.lastSyncAt).toLocaleString()]})]}),e.lastError&&(0,X.jsx)(`p`,{className:`mt-2 text-xs text-destructive`,children:e.lastError}),t.readOnly===!0&&(0,X.jsx)(`p`,{className:`mt-1 text-[11px] text-warning`,children:`Read-only: the web UI / REST API never deletes bytes on this backend. Destroy degrades to a reference drop. Recommended when the folder is exported elsewhere (e.g. via Samba).`})]}),(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 border-t pt-3`,children:[e.capabilities?.sync&&s&&(0,X.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs text-muted-foreground`,title:`Scan this backend in the background whenever the workspace starts. Manual scans remain available when off.`,children:[`Scan on start`,(0,X.jsx)(c0,{checked:t.scanOnStart===!0,disabled:oe===`startup:${n}`,onClick:()=>Pe(e,{scanOnStart:t.scanOnStart!==!0},`startup`)})]}),(e.driver===`file`||i)&&u&&(0,X.jsxs)(`label`,{className:`flex items-center gap-1.5 text-[11px] text-muted-foreground`,title:i?`Poll the Drive changes feed so edits made in Drive show up without a manual re-sync.`:void 0,children:[`Watch for changes`,(0,X.jsx)(c0,{checked:!!t.watch,disabled:!e.enabled||oe===`watch:${n}`,onClick:()=>Pe(e,{watch:!t.watch},`watch`)})]}),d&&(0,X.jsxs)(`label`,{className:`flex items-center gap-1.5 text-[11px] text-muted-foreground`,title:`Read-only: Destroy never deletes bytes on this backend (references are dropped instead). Important when the folder is exported via Samba or shared otherwise.`,children:[`read-only`,(0,X.jsx)(c0,{checked:t.readOnly===!0,disabled:oe===`readonly:${n}`,onClick:()=>Pe(e,{readOnly:t.readOnly!==!0},`readonly`)})]}),(e.driver===`file`||e.driver===`cacache`)&&s&&(0,X.jsx)(d0,{workspaceId:be,backend:e}),e.capabilities?.test&&(0,X.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,disabled:oe===`test:${n}`,onClick:()=>Le(e),title:`Verify credentials and root folder`,children:[(0,X.jsx)(ht,{className:`mr-2 h-3.5 w-3.5`}),oe===`test:${n}`?`Testing…`:`Test`]}),e.capabilities?.sync&&(e.resyncing?(0,X.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,disabled:oe===`stopsync:${n}`,onClick:()=>Re(e),title:`Stop the running scan. Files indexed so far are kept; Re-sync later resumes where it left off (unchanged files are skipped).`,children:[(0,X.jsx)(rn,{className:`mr-2 h-3.5 w-3.5 fill-current`}),oe===`stopsync:${n}`?`Stopping…`:`Stop sync`]}):(0,X.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,disabled:oe===`resync:${n}`,onClick:()=>Ie(e),children:[(0,X.jsx)(Te,{className:`mr-2 h-3.5 w-3.5 ${oe===`resync:${n}`?`animate-spin`:``}`}),`Re-sync`]})),l?(0,X.jsx)(`span`,{className:`rounded bg-muted px-2 py-0.5 text-[11px] text-muted-foreground`,title:`Structural workspace store; cannot be disabled`,children:`always on`}):(0,X.jsx)(c0,{checked:!!e.enabled,disabled:!u||oe===`backend:${n}`,onClick:()=>Ne(e)}),a&&(0,X.jsx)(q,{type:`button`,variant:`ghost`,size:`sm`,className:`text-destructive hover:text-destructive`,disabled:oe===`remove:${n}`,title:`Unmount this folder (no files are deleted)`,onClick:()=>Fe(e),children:(0,X.jsx)(ut,{className:`h-3.5 w-3.5`})})]})]}),e.driver===`file`&&s&&!l&&(0,X.jsx)(m0,{backend:e,busy:oe===`exclude:${n}`,onSave:t=>Pe(e,{exclude:t},`exclude`)})]},n)}),(0,X.jsx)(`section`,{className:`rounded-lg border p-4`,children:(0,X.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between sm:gap-4`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(c,{icon:`ph:lightning-fill`,width:16,height:16,className:`shrink-0 text-warning`}),(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Stored Cache`})]}),(0,X.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`Internal working store: local copies of remote resources and derived artifacts (thumbnails). Regenerable; safe to clear.`})]}),(0,X.jsx)(`div`,{className:`flex shrink-0 items-center gap-3 max-sm:w-full max-sm:flex-wrap`,children:(0,X.jsx)(f0,{workspaceId:be})})]})}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-start`,children:[(0,X.jsx)(l0,{workspaceId:be,onAdded:async()=>{await Ee(),Me()}}),(0,X.jsx)(u0,{workspaceId:be,onAdded:async()=>{await Ee(),Me()}})]}),e&&(0,X.jsx)(`section`,{className:`border-t pt-4`,children:(0,X.jsx)(M1,{workspaceName:e})})]}),x.status===`active`&&b===`db`&&(0,X.jsxs)(`div`,{className:`space-y-8`,children:[be&&(0,X.jsxs)(`section`,{className:`space-y-3`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Embeddings`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Which model turns this workspace's content into vectors, and where those vectors live.`})]}),(0,X.jsx)(_A,{workspaceId:be,workspaceName:e})]}),(0,X.jsx)(y0,{stats:ce,isLoading:le,onRefresh:()=>Se(),workspaceName:e})]}),x.status===`active`&&b===`devices`&&(0,X.jsx)(g0,{allDevices:de,linkedDevices:me,isLoading:ge,deviceBusy:ve,onRefresh:()=>Ce(),onLink:we,onUnlink:U,onUpdate:W}),x.status===`active`&&b===`sync`&&(0,X.jsx)(`section`,{className:`rounded-lg border p-4`,children:(0,X.jsx)(K1,{workspaceId:be,workspaceUuid:x?.id})}),x.status===`active`&&b===`services`&&(0,X.jsxs)(`div`,{className:`space-y-4`,children:[be&&(0,X.jsx)(X1,{workspaceId:be}),(0,X.jsx)(`div`,{className:`space-y-3`,children:s0.map(e=>{let t=B?.[e.id]||B?.[e.id===`git`?`dotfiles`:e.id===`webdav`?`home`:`imap`],n=!!t?.enabled;return(0,X.jsx)(`section`,{className:`rounded-lg border p-4`,children:(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(vt,{className:`h-4 w-4 text-muted-foreground`}),(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:e.title})]}),(0,X.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:e.description}),(0,X.jsxs)(`p`,{className:`mt-2 text-[11px] text-muted-foreground`,children:[`initialized: `,t?.initialized?`true`:`false`]})]}),(0,X.jsx)(c0,{checked:n,disabled:oe===`service:${e.id}`,onClick:()=>ze(e.id,n)})]})},e.id)})}),(0,X.jsx)(`section`,{className:`rounded-lg border p-4`,children:(0,X.jsx)($1,{workspaceId:be,enabled:!!(B?.imap?.enabled||B?.imapSync?.enabled)})})]}),x.status===`active`&&b===`hooks`&&(0,X.jsx)(`section`,{className:`rounded-lg border p-4`,children:(0,X.jsx)(A1,{workspaceId:be,prefillRule:m,onPrefillConsumed:h,initialSection:a,initialRunsHandler:o,initialRunId:s})})]})}):(0,X.jsx)(`div`,{className:`p-6 text-sm text-muted-foreground`,children:`Workspace not found`})}function x0({workspaceName:e}){let{selected:t,setSelected:n,tree:r,setTree:i,toggle:a}=yS(),[o,s]=(0,Y.useState)(!1),[c,l]=(0,Y.useState)(null);return(0,X.jsxs)(`section`,{className:`rounded-lg border p-4`,children:[(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Default folders`}),(0,X.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`Create a set of common folders with matching icons and colors.`}),(0,X.jsx)(`div`,{className:`mt-3`,children:(0,X.jsx)(bS,{selected:t,onToggle:a,tree:r,onTreeChange:i,disabled:o,idPrefix:`settings-default-folders`})}),(0,X.jsxs)(`div`,{className:`mt-3 flex items-center gap-3`,children:[(0,X.jsx)(q,{type:`button`,size:`sm`,disabled:o||t.size===0,onClick:async()=>{s(!0),l(null);let{ok:i,failed:a}=await vS(e,Array.from(t),r);s(!1),l(a?`${i} created, ${a} failed`:`${i} folder(s) created`),n(new Set)},children:o?`Creating…`:`Create ${t.size||``} folder(s)`}),c&&(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:c})]})]})}function S0({workspaceName:e,vectorSpaces:t,onDone:n}){let[r,i]=(0,Y.useState)(null),[a,o]=(0,Y.useState)(null),s=async(e,t,r)=>{if(!(r&&!window.confirm(r))){i(e),o(null);try{let e=await t();o(e.message),n()}catch(e){o(e instanceof Error?e.message:`Reindex failed`)}finally{i(null)}}},c=[{title:`Bitmaps`,ops:[{key:`timelines`,label:`Reindex timelines`,description:`Rebuild the created/updated timelines from document data.`,fn:()=>YO(e)},{key:`mime`,label:`Reindex MIME types`,description:`Rebuild the per-MIME-type presence bitmaps (data/mime/*) from stored docs. Backfills blobs indexed before mime bitmaps existed.`,fn:()=>QO(e)}]},{title:`Full-text (BM25)`,ops:[{key:`fts`,label:`Backfill`,description:`Index documents missing from the full-text table. Fast, skips already-indexed.`,fn:()=>XO(e)},{key:`fts-rebuild`,label:`Rebuild`,description:`Wipe the full-text table and rebuild from scratch. Use when counts drift.`,confirm:`Wipe the FTS index and rebuild it from scratch?`,fn:()=>XO(e,!0)},{key:`fts-optimize`,label:`Optimize`,description:`Compact fragments + prune old versions of the full-text table.`,fn:()=>ZO(e,`fts`)}]},...t.length>0?[{title:`Vector tables (LanceDB)`,ops:t.map(t=>({key:`${t}-optimize`,label:`Optimize ${t}`,description:`Compact fragments + prune old versions of the '${t}' vector table and rebuild its ANN index.`,fn:()=>ZO(e,t)}))}]:[]];return(0,X.jsxs)(`section`,{className:`rounded-lg border p-4`,children:[(0,X.jsxs)(`div`,{className:`mb-1 flex items-center gap-2`,children:[(0,X.jsx)(Te,{className:`h-4 w-4 text-muted-foreground`}),(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Index maintenance`})]}),(0,X.jsx)(`p`,{className:`mb-3 text-xs text-muted-foreground`,children:`Runs against this workspace. Reindex operations are idempotent.`}),(0,X.jsx)(`div`,{className:`space-y-4`,children:c.map(e=>(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h3`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:e.title}),(0,X.jsx)(`div`,{className:`space-y-2`,children:e.ops.map(e=>(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1`,children:[(0,X.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,className:`w-44 justify-start`,disabled:r!==null,onClick:()=>s(e.key,e.fn,e.confirm),children:[r===e.key&&(0,X.jsx)(Te,{className:`mr-2 h-3 w-3 animate-spin`}),e.label]}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1 basis-52 text-xs text-muted-foreground`,children:e.description})]},e.key))})]},e.title))}),a&&(0,X.jsx)(`p`,{className:`mt-3 text-xs text-muted-foreground`,children:a})]})}var C0=[{value:`documentRead`,label:`Read`},{value:`documentWrite`,label:`Write`},{value:`documentReadWrite`,label:`Read & write`}];function w0(){let{contextId:e,tab:t}=rl(),[n]=Su(),r=n.get(`ownerId`)||void 0,i=$c(),{showToast:a}=mo(),{selectEntity:o,openM2Drawer:s,closeM2:c}=pS(),l=Pm(),u=fT(t),d=r?`?ownerId=${encodeURIComponent(r)}`:``;(0,Y.useEffect)(()=>{t!==u&&e&&i(`/contexts/${e}/settings/${u}${d}`,{replace:!0})},[t,u,e,d,i]);let[f,p]=(0,Y.useState)(null),[m,h]=(0,Y.useState)(!0),[g,_]=(0,Y.useState)(!1),[v,y]=(0,Y.useState)(!1),[b,x]=(0,Y.useState)(``),[S,C]=(0,Y.useState)(``),[w,T]=(0,Y.useState)(null),[E,D]=(0,Y.useState)(``),[O,k]=(0,Y.useState)(``),[A,j]=(0,Y.useState)(),[M,N]=(0,Y.useState)([]),[P,F]=(0,Y.useState)(!1),[I,L]=(0,Y.useState)(``),[ee,te]=(0,Y.useState)(C0[0].value),[ne,R]=(0,Y.useState)(null);(0,Y.useEffect)(()=>{if(!e)return;let t=!1;return os(e,r).then(e=>{t||(p(e),o(e.id),x(e.name||``),C(e.description||``),T(typeof e.metadata?.ui?.color==`string`?e.metadata.ui.color:null),D(e.url||``),k(e.baseUrl||``))}).catch(()=>{t||a({title:`Error`,description:`Failed to load context`,variant:`destructive`})}).finally(()=>{t||h(!1)}),()=>{t=!0}},[e,r,o,a]);let z=(t=e)=>{t&&(F(!0),bs(t).then(N).catch(()=>N([])).finally(()=>F(!1)))};(0,Y.useEffect)(()=>{if(u!==`shares`||!e)return;let t=!1;return bs(e).then(e=>{t||N(e)}).catch(()=>{t||N([])}),()=>{t=!0}},[u,e]);let B=async t=>{if(t.preventDefault(),e){_(!0);try{let t=await zo(e,{name:b.trim(),description:S.trim(),metadata:{...f?.metadata,ui:{...f?.metadata?.ui,color:w}}},r);p(t),window.dispatchEvent(new CustomEvent(`contexts:refresh`)),a({title:`Saved`,description:`Context updated`})}catch(e){a({title:`Error`,description:e instanceof Error?e.message:`Save failed`,variant:`destructive`})}finally{_(!1)}}},re=async t=>{if(t.preventDefault(),e){_(!0);try{await Promise.all([Vo(e,E.trim(),r,A),Ko(e,{baseUrl:O.trim()||null},r)]),window.dispatchEvent(new CustomEvent(`contexts:refresh`)),a({title:`Saved`,description:`Context URL updated`})}catch(e){a({title:`Error`,description:e instanceof Error?e.message:`Save failed`,variant:`destructive`})}finally{_(!1)}}},ie=async()=>{if(e&&window.confirm(`Delete context "${e}"? This cannot be undone.`)){y(!0);try{await ps(e,r),c(),o(null),a({title:`Deleted`,description:`Context "${e}" removed`}),i(`/contexts`,{replace:!0})}catch(e){a({title:`Error`,description:e instanceof Error?e.message:`Delete failed`,variant:`destructive`})}finally{y(!1)}}},ae=async t=>{if(t.preventDefault(),!(!e||!I.trim())){R(`grant`);try{await vs(e,I.trim(),ee),L(``),z(),a({title:`Shared`,description:`Access granted to ${I.trim()}`})}catch(e){a({title:`Error`,description:e instanceof Error?e.message:`Failed to grant access`,variant:`destructive`})}finally{R(null)}}},oe=async t=>{if(e&&window.confirm(`Revoke ${t.userEmail}'s access to "${e}"?`)){R(t.userEmail);try{await Io(e,t.userEmail),z(),a({title:`Revoked`,description:`${t.userEmail} no longer has access`})}catch(e){a({title:`Error`,description:e instanceof Error?e.message:`Failed to revoke access`,variant:`destructive`})}finally{R(null)}}};if(m)return(0,X.jsx)(`div`,{className:`p-6 text-sm text-muted-foreground`,children:`Loading...`});if(!f)return(0,X.jsx)(`div`,{className:`p-6 text-sm text-muted-foreground`,children:`Context not found`});let se=dT.find(e=>e.id===u),ce=`/contexts/${e}${d}`;return(0,X.jsx)(`div`,{className:`h-full min-h-0 overflow-y-auto`,children:(0,X.jsxs)(`div`,{className:`mx-auto max-w-3xl p-6 pb-12 max-md:px-4 max-md:pb-rail-stack`,children:[(0,X.jsx)(Dx,{compact:!0,className:`mb-6 border-b pb-4`,title:`${se.label} - ${f.name||f.id}`,description:se.description,backTo:ce,onBack:l?()=>s(`contexts`,`settings`,f.id):void 0}),u===`general`&&(0,X.jsxs)(`div`,{className:`space-y-6`,children:[(0,X.jsxs)(`form`,{onSubmit:B,className:`space-y-4 rounded-lg border p-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{className:`text-sm font-medium`,children:`Context ID`}),(0,X.jsx)(`div`,{className:`mt-1 flex h-10 items-center rounded-md bg-muted px-3 font-mono text-sm text-muted-foreground`,children:f.id})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{htmlFor:`ctx-name`,className:`text-sm font-medium`,children:`Name`}),(0,X.jsx)(K,{id:`ctx-name`,value:b,onChange:e=>x(e.target.value),placeholder:`My Context`})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{htmlFor:`ctx-description`,className:`text-sm font-medium`,children:`Description`}),(0,X.jsx)(K,{id:`ctx-description`,value:S,onChange:e=>C(e.target.value),placeholder:`Optional description`})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{htmlFor:`ctx-color`,className:`text-sm font-medium`,children:`Color`}),(0,X.jsxs)(`div`,{className:`mt-1 flex items-center gap-2`,children:[(0,X.jsx)(K,{id:`ctx-color`,type:`color`,value:/^#[0-9a-f]{6}$/i.test(w||f.color||``)?w||f.color:`#808080`,onChange:e=>T(e.target.value),className:`h-10 w-16 p-1`,disabled:g}),(0,X.jsx)(q,{type:`button`,variant:`outline`,size:`sm`,disabled:g||w===null,onClick:()=>T(null),children:`Use inherited color`})]}),(0,X.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:w===null?`Using the tree folder or workspace color.`:`Applies only to this context.`})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{className:`text-sm font-medium`,children:`Workspace`}),(0,X.jsx)(`div`,{className:`mt-1 flex h-10 items-center rounded-md bg-muted px-3 text-sm text-muted-foreground`,children:f.workspaceName||f.workspaceId||f.workspace})]}),(0,X.jsx)(q,{type:`submit`,disabled:g,children:g?`Saving...`:`Save Changes`})]}),(0,X.jsxs)(`section`,{className:`rounded-lg border border-destructive/30 p-4`,children:[(0,X.jsx)(`h2`,{className:`mb-3 text-sm font-semibold text-destructive`,children:`Danger Zone`}),(0,X.jsxs)(q,{variant:`destructive`,disabled:v,onClick:ie,children:[(0,X.jsx)(ut,{className:`mr-2 h-4 w-4`}),v?`Deleting...`:`Delete Context`]})]})]}),u===`location`&&(0,X.jsxs)(`form`,{onSubmit:re,className:`space-y-4 rounded-lg border p-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{htmlFor:`ctx-url`,className:`text-sm font-medium`,children:`URL`}),(0,X.jsx)(Jw,{id:`ctx-url`,value:E,onChange:D,fixedWorkspaceName:f.workspaceName,pickerTitle:`Switch context to…`,placeholder:`workspace://path`,onPickTarget:(e,t)=>{D(`${t.workspaceName}://${e.replace(/^\/+/,``)}`),j(t.treeName)}}),A&&(0,X.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[`Destination tree: `,A]})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`label`,{htmlFor:`ctx-base-url`,className:`text-sm font-medium`,children:[`Base URL `,(0,X.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:`(optional)`})]}),(0,X.jsx)(Jw,{id:`ctx-base-url`,value:O,onChange:k,fixedWorkspaceName:f.workspaceName,placeholder:`workspace://base/path`,pickerTitle:`Pick a base path…`})]}),(0,X.jsx)(q,{type:`submit`,disabled:g,children:g?`Saving...`:`Save Changes`})]}),u===`shares`&&(0,X.jsxs)(`div`,{className:`space-y-4`,children:[(0,X.jsxs)(`section`,{className:`space-y-3 rounded-lg border p-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`People with access`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Only the context owner can see and change this list.`})]}),(0,X.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>z(),disabled:P,children:[(0,X.jsx)(Te,{className:G(`mr-2 h-3.5 w-3.5`,P&&`animate-spin`)}),`Refresh`]})]}),M.length===0?(0,X.jsx)(`div`,{className:`rounded-md border border-dashed p-4 text-sm text-muted-foreground`,children:`Not shared with anyone.`}):M.map(e=>(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-3 rounded-md border p-3`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`truncate text-sm font-medium`,children:e.userEmail}),(0,X.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[C0.find(t=>t.value===e.accessLevel)?.label||e.accessLevel||`unknown access`,e.sharedAt&&` - since ${new Date(e.sharedAt).toLocaleDateString()}`]})]}),(0,X.jsx)(q,{type:`button`,variant:`outline`,size:`sm`,className:`text-destructive hover:text-destructive`,disabled:ne===e.userEmail,onClick:()=>oe(e),children:(0,X.jsx)(pe,{className:`h-3.5 w-3.5`})})]},e.userEmail))]}),(0,X.jsxs)(`form`,{onSubmit:ae,className:`space-y-4 rounded-lg border p-4`,children:[(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Grant access`}),(0,X.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{htmlFor:`share-email`,className:`text-sm font-medium`,children:`User email`}),(0,X.jsx)(K,{id:`share-email`,type:`email`,value:I,onChange:e=>L(e.target.value),placeholder:`person@example.com`}),(0,X.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`The user must already have an account on this server.`})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{htmlFor:`share-level`,className:`text-sm font-medium`,children:`Access level`}),(0,X.jsx)(`select`,{id:`share-level`,value:ee,onChange:e=>te(e.target.value),className:`mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring`,children:C0.map(e=>(0,X.jsx)(`option`,{value:e.value,children:e.label},e.value))})]})]}),(0,X.jsx)(q,{type:`submit`,disabled:ne===`grant`||!I.trim(),children:ne===`grant`?`Sharing...`:`Share context`})]})]})]})})}function T0({status:e}){let t={running:{icon:ce,color:`text-success`,bg:`bg-success-subtle`,label:`Running`},stopped:{icon:xe,color:`text-muted-foreground`,bg:`bg-muted`,label:`Stopped`},starting:{icon:ln,color:`text-info`,bg:`bg-info-subtle`,label:`Starting`},stopping:{icon:ln,color:`text-warning`,bg:`bg-warning-subtle`,label:`Stopping`},error:{icon:ve,color:`text-destructive`,bg:`bg-destructive-subtle`,label:`Error`},created:{icon:ht,color:`text-muted-foreground`,bg:`bg-muted`,label:`Created`},configured:{icon:ht,color:`text-info`,bg:`bg-info-subtle`,label:`Configured`},removed:{icon:xe,color:`text-destructive`,bg:`bg-destructive-subtle`,label:`Removed`}},n=t[e]||t.created,r=n.icon;return(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-1 rounded text-xs font-medium ${n.bg} ${n.color}`,children:[(0,X.jsx)(r,{className:`w-3 h-3`}),n.label]})}function E0(){let[e,t]=(0,Y.useState)([]),[n,r]=(0,Y.useState)(!0),[i,a]=(0,Y.useState)(null),[o,s]=(0,Y.useState)(null);Cf(()=>s(null),o!==null);let[c,l]=Fx(),[u,d]=(0,Y.useState)([]),[f,p]=(0,Y.useState)([]),[m,h]=(0,Y.useState)(``),[g,_]=(0,Y.useState)(``),[v,y]=(0,Y.useState)(``),[b,x]=(0,Y.useState)(!1),{showToast:S}=mo(),C=nd(),w=(0,Y.useCallback)(async()=>{try{r(!0);let e=await ck.listRoles({type:`workspace`,userId:C?.id});t(e),a(null)}catch(e){let t=e instanceof Error?e.message:`Failed to fetch roles`;a(t)}finally{r(!1)}},[C?.id]);(0,Y.useEffect)(()=>{let e=()=>w();e();let t=setInterval(e,3e4);return()=>clearInterval(t)},[w]),(0,Y.useEffect)(()=>{c&&(ck.listTemplates().then(e=>{let t=e.filter(e=>e.type===`workspace`);d(t),h(e=>e||t[0]?.id||``)}).catch(()=>d([])),Fr().then(e=>{p(e),y(t=>t||e[0]?.id||``)}).catch(()=>p([])))},[c]);let T=async e=>{if(e.preventDefault(),!(!m||!g.trim()||!v)){x(!0);try{let e=await ck.createRole({template:m,name:g.trim(),type:`workspace`,userId:C?.id,workspaceId:v});_(``),l(!1),await w(),S({title:`Created`,description:`Role "${e.name}" created`})}catch(e){S({title:`Error`,description:e instanceof Error?e.message:`Failed to create role`,variant:`destructive`})}finally{x(!1)}}},E=async e=>{try{await ck.startRole(e.id),S({title:`Success`,description:`Role "${e.name}" started successfully`}),w()}catch(e){let t=e instanceof Error?e.message:`Failed to start role`;S({title:`Error`,description:t,variant:`destructive`})}},D=async e=>{try{await ck.stopRole(e.id),S({title:`Success`,description:`Role "${e.name}" stopped successfully`}),w()}catch(e){let t=e instanceof Error?e.message:`Failed to stop role`;S({title:`Error`,description:t,variant:`destructive`})}},O=async e=>{try{await ck.restartRole(e.id),S({title:`Success`,description:`Role "${e.name}" restarted successfully`}),w()}catch(e){let t=e instanceof Error?e.message:`Failed to restart role`;S({title:`Error`,description:t,variant:`destructive`})}},k=async e=>{try{let t=await ck.getRoleLogs(e.id,100);s({role:e,logs:t})}catch(e){let t=e instanceof Error?e.message:`Failed to fetch logs`;S({title:`Error`,description:t,variant:`destructive`})}};return(0,X.jsxs)(`div`,{className:`space-y-6`,children:[(0,X.jsx)(Dx,{title:`My Roles`,description:`Manage your workspace roles and services`,actions:(0,X.jsxs)(X.Fragment,{children:[!c&&(0,X.jsxs)(q,{onClick:()=>l(!0),children:[(0,X.jsx)(H,{className:`mr-2 h-4 w-4`}),`Create Role`]}),(0,X.jsxs)(q,{onClick:w,variant:`outline`,children:[(0,X.jsx)(or,{className:`mr-2 h-4 w-4`}),`Refresh`]})]})}),c&&(0,X.jsx)(Nx,{title:`Create New Role`,onClose:()=>l(!1),children:(0,X.jsxs)(`form`,{onSubmit:T,className:`space-y-4`,children:[(0,X.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{htmlFor:`role-template`,className:`mb-1 block text-sm font-medium`,children:`Template`}),(0,X.jsxs)(`select`,{id:`role-template`,className:`w-full rounded-md border border-border bg-background px-3 py-2`,value:m,onChange:e=>h(e.target.value),disabled:b||u.length===0,children:[u.length===0&&(0,X.jsx)(`option`,{value:``,children:`No workspace templates available`}),u.map(e=>(0,X.jsxs)(`option`,{value:e.id,children:[e.name,` - `,e.description]},e.id))]})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{htmlFor:`role-name`,className:`mb-1 block text-sm font-medium`,children:`Role Name`}),(0,X.jsx)(K,{id:`role-name`,value:g,onChange:e=>_(e.target.value),placeholder:`e.g., canvas-sshd`,disabled:b})]})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`label`,{htmlFor:`role-workspace`,className:`mb-1 block text-sm font-medium`,children:`Workspace`}),(0,X.jsxs)(`select`,{id:`role-workspace`,className:`w-full rounded-md border border-border bg-background px-3 py-2`,value:v,onChange:e=>y(e.target.value),disabled:b||f.length===0,children:[f.length===0&&(0,X.jsx)(`option`,{value:``,children:`No workspaces available. Create one first.`}),f.map(e=>(0,X.jsx)(`option`,{value:e.id,children:e.label||e.name},e.id))]})]}),(0,X.jsxs)(q,{type:`submit`,disabled:b||!m||!g.trim()||!v,children:[(0,X.jsx)(H,{className:`mr-2 h-4 w-4`}),b?`Creating…`:`Create Role`]})]})}),n?(0,X.jsx)(`div`,{className:`text-center py-8`,children:`Loading roles...`}):i?(0,X.jsx)(`div`,{className:`text-center py-8 text-destructive`,children:i}):e.length===0?(0,X.jsxs)(`div`,{className:`text-center py-12 border rounded-lg`,children:[(0,X.jsx)(vt,{className:`w-12 h-12 mx-auto text-muted-foreground mb-4`}),(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`You don't have any workspace roles yet`}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground mt-2`,children:`Contact your administrator to set up roles for your workspaces`})]}):(0,X.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4`,children:e.map(e=>(0,X.jsxs)(`div`,{className:`border rounded-lg p-6 space-y-4 hover:shadow-elevation-2 transition-shadow`,children:[(0,X.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,X.jsxs)(`div`,{className:`flex-1`,children:[(0,X.jsx)(`h3`,{className:`font-semibold text-lg`,children:e.name}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.template})]}),(0,X.jsx)(T0,{status:e.status})]}),e.container&&(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,X.jsx)(vt,{className:`w-3 h-3`}),(0,X.jsx)(`span`,{className:`truncate`,children:e.container.name})]})}),(0,X.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[e.status===`stopped`||e.status===`created`?(0,X.jsxs)(q,{size:`sm`,variant:`outline`,onClick:()=>E(e),className:`flex-1`,children:[(0,X.jsx)(Oe,{className:`w-4 h-4 mr-2`}),`Start`]}):e.status===`running`?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(q,{size:`sm`,variant:`outline`,onClick:()=>D(e),className:`flex-1`,children:[(0,X.jsx)(rn,{className:`w-4 h-4 mr-2`}),`Stop`]}),(0,X.jsxs)(q,{size:`sm`,variant:`outline`,onClick:()=>O(e),className:`flex-1`,children:[(0,X.jsx)(or,{className:`w-4 h-4 mr-2`}),`Restart`]})]}):(0,X.jsxs)(q,{size:`sm`,variant:`outline`,disabled:!0,className:`flex-1`,children:[(0,X.jsx)(ln,{className:`w-4 h-4 mr-2`}),e.status]}),(0,X.jsx)(q,{size:`sm`,variant:`outline`,onClick:()=>k(e),title:`View Logs`,children:(0,X.jsx)(Tn,{className:`w-4 h-4`})})]})]},e.id))}),(0,X.jsxs)(`div`,{className:`border-t pt-6`,children:[(0,X.jsx)(`h2`,{className:`text-lg font-semibold mb-4`,children:`Global Services`}),(0,X.jsxs)(`div`,{className:`text-sm text-muted-foreground space-y-2`,children:[(0,X.jsx)(`p`,{children:`Global roles are server-wide services managed by your administrator. These include services like SSH access, storage, and other shared infrastructure.`}),(0,X.jsx)(`p`,{children:`To check the status of global services, contact your system administrator.`})]})]}),o&&(0,X.jsx)(`div`,{className:`fixed inset-0 bg-scrim flex items-center justify-center z-50`,children:(0,X.jsxs)(`div`,{className:`bg-background rounded-lg shadow-elevation-3 max-w-4xl w-full mx-4 max-h-viewport-modal flex flex-col`,children:[(0,X.jsxs)(`div`,{className:`p-6 border-b`,children:[(0,X.jsxs)(`h2`,{className:`text-xl font-bold`,children:[o.role.name,` - Logs`]}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:o.role.template})]}),(0,X.jsx)(`div`,{className:`flex-1 overflow-y-auto p-6`,children:(0,X.jsx)(`div`,{"data-scheme":`dark`,className:`bg-background text-success p-4 rounded font-mono text-xs overflow-x-auto`,children:o.logs.length===0?(0,X.jsx)(`div`,{className:`text-muted-foreground`,children:`No logs available`}):(0,X.jsx)(`pre`,{children:o.logs.join(`
91
- `)})})}),(0,X.jsx)(`div`,{className:`p-4 border-t flex justify-end`,children:(0,X.jsx)(q,{onClick:()=>s(null),children:`Close`})})]})})]})}function D0(){return(0,X.jsxs)(`div`,{className:`space-y-6`,children:[(0,X.jsx)(Dx,{title:`Remotes`,description:`Connect to remote Canvas instances`}),(0,X.jsx)(`div`,{className:`flex flex-col items-center justify-center py-12 space-y-4`,children:(0,X.jsxs)(`div`,{className:`text-center`,children:[(0,X.jsx)(`h2`,{className:`text-2xl font-semibold mb-2`,children:`Coming Soon`}),(0,X.jsx)(`p`,{className:`text-muted-foreground max-w-md`,children:`Remote connection management is currently under development. Check back later for updates.`})]})})]})}var O0=[`note`,`todo`,`link`,`file`,`photo`];function k0(){let{kind:e}=rl(),t=$c();return e===`sketch`?(0,X.jsx)(Tl,{to:`/apps/sketch?add=1`,replace:!0}):!e||!O0.includes(e)?(0,X.jsx)(Tl,{to:`/home`,replace:!0}):(0,X.jsx)(Ow,{initialKind:e,onInitialCardClose:()=>t(`/home`)})}var A0=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(Dl,{index:!0,element:(0,X.jsx)(Rw,{})},`r1`),(0,X.jsx)(Dl,{path:`home`,element:(0,X.jsx)(Lw,{})},`r2`),(0,X.jsx)(Dl,{path:`share-target`,element:(0,X.jsx)(Gw,{})},`r3`),(0,X.jsx)(Dl,{path:`apps/add/:kind`,element:(0,X.jsx)(k0,{})},`r4`),(0,X.jsx)(Dl,{path:`workspaces`,element:(0,X.jsx)(OS,{})},`r5`),(0,X.jsx)(Dl,{path:`workspaces/:workspaceName`,element:(0,X.jsx)(MC,{})},`r6`),(0,X.jsx)(Dl,{path:`workspaces/:workspaceName/settings`,element:(0,X.jsx)(b0,{})},`r7`),(0,X.jsx)(Dl,{path:`workspaces/:workspaceName/settings/:tab`,element:(0,X.jsx)(b0,{})},`r8`),(0,X.jsx)(Dl,{path:`workspaces/:workspaceName/path/*`,element:(0,X.jsx)(MC,{})},`r9`),(0,X.jsx)(Dl,{path:`workspaces/:workspaceName/trees/:treeName`,element:(0,X.jsx)(MC,{})},`r10`),(0,X.jsx)(Dl,{path:`workspaces/:workspaceName/trees/:treeName/path/*`,element:(0,X.jsx)(MC,{})},`r11`),(0,X.jsx)(Dl,{path:`contexts`,element:(0,X.jsx)(Yw,{})},`r12`),(0,X.jsx)(Dl,{path:`contexts/:contextId`,element:(0,X.jsx)(Zw,{})},`r13`),(0,X.jsx)(Dl,{path:`contexts/:contextId/settings`,element:(0,X.jsx)(w0,{})},`r14`),(0,X.jsx)(Dl,{path:`contexts/:contextId/settings/:tab`,element:(0,X.jsx)(w0,{})},`r15`),(0,X.jsx)(Dl,{path:`agents`,element:(0,X.jsx)(Fk,{})},`r16`),(0,X.jsx)(Dl,{path:`agents/:agentId`,element:(0,X.jsx)(Zk,{})},`r17`),(0,X.jsx)(Dl,{path:`agents/:agentId/:sessionId`,element:(0,X.jsx)(Zk,{})},`r18`),(0,X.jsx)(Dl,{path:`agents/:agentId/settings`,element:(0,X.jsx)(aA,{})},`r19`),(0,X.jsx)(Dl,{path:`agents/:agentId/settings/:tab`,element:(0,X.jsx)(aA,{})},`r20`),(0,X.jsx)(Dl,{path:`roles`,element:(0,X.jsx)(E0,{})},`r21`),(0,X.jsx)(Dl,{path:`remotes`,element:(0,X.jsx)(D0,{})},`r22`),(0,X.jsx)(Dl,{path:`settings`,element:(0,X.jsx)(tE,{})},`settings`),(0,X.jsx)(Dl,{path:`appearance`,element:(0,X.jsx)(lD,{})},`r23`),(0,X.jsx)(Dl,{path:`key-bindings`,element:(0,X.jsx)(vD,{})},`key-bindings`),(0,X.jsx)(Dl,{path:`offline`,element:(0,X.jsx)(rO,{})},`r24`),(0,X.jsx)(Dl,{path:`about`,element:(0,X.jsx)(oO,{})},`r25`),(0,X.jsx)(Dl,{path:`api-tokens`,element:(0,X.jsx)($w,{})},`r26`),(0,X.jsx)(Dl,{path:`devices`,element:(0,X.jsx)(sT,{})},`r27`),(0,X.jsx)(Dl,{path:`embedding`,element:(0,X.jsx)(VO,{})},`r28`),(0,X.jsx)(Dl,{path:`shared`,element:(0,X.jsx)(HO,{})},`r29`),(0,X.jsx)(Dl,{path:`admin/users`,element:(0,X.jsx)(fk,{})},`r30`),(0,X.jsx)(Dl,{path:`admin/contexts`,element:(0,X.jsx)(nk,{})},`r31`),(0,X.jsx)(Dl,{path:`admin/workspaces`,element:(0,X.jsx)(tk,{})},`r32`),(0,X.jsx)(Dl,{path:`admin/agents`,element:(0,X.jsx)(rk,{})},`r33`),(0,X.jsx)(Dl,{path:`admin/logs`,element:(0,X.jsx)(sk,{})},`r34`),(0,X.jsx)(Dl,{path:`admin/roles`,element:(0,X.jsx)(dk,{})},`r35`),(0,X.jsx)(Dl,{path:`admin/embedding`,element:(0,X.jsx)(pk,{})},`r36`),(0,X.jsx)(Dl,{path:`admin/auth`,element:(0,X.jsx)(Nk,{})},`r37`)]});function j0(e){if(typeof e!=`string`||!e.startsWith(`/`)||e.startsWith(`//`)||/[\\\u0000-\u0020]/.test(e))return null;let t=new URL(e,`https://canvas.invalid`);return t.origin!==`https://canvas.invalid`||/^\/(?:login|register|pub|share-target|apps|next)(?:\/|$)/.test(t.pathname)||t.pathname===`/`||[...t.searchParams.keys()].some(e=>/token|password|secret|code/i.test(e))?null:t.pathname+t.search+t.hash}function M0(e){let t=2166136261;for(let n of e)t=Math.imul(t^n.charCodeAt(0),16777619);return`canvas:last-screen:${t>>>0}`}var N0=Al(A0),P0=e=>{let t=j0(e);return t&&Ws(N0,t)?t:null};function F0(){let e=Xc(),[t]=(0,Y.useState)(()=>{if(e.pathname!==`/`||e.search||e.hash)return null;try{let t=localStorage.getItem(`authToken`);return t?{key:e.key,path:P0(localStorage.getItem(M0(t)))||`/home`}:null}catch{return{key:e.key,path:`/home`}}}),n=t&&e.key===t.key&&e.pathname===`/`;return(0,Y.useEffect)(()=>{if(n)return;let t=P0(e.pathname+e.search+e.hash);if(t)try{let e=localStorage.getItem(`authToken`);e&&localStorage.setItem(M0(e),t)}catch{}},[e.pathname,e.search,e.hash,n]),n?(0,X.jsx)(Tl,{to:t.path,replace:!0}):null}var I0={activeSection:null,m0Open:!1,m1Open:!1,m2Open:!1,m2View:null,selectedEntityId:null,user:null};function L0(e,t){switch(t.type){case`SET_SECTION`:return{...e,activeSection:t.section,m1Open:t.section!==null,m2Open:!1,m2View:null,selectedEntityId:null};case`TOGGLE_SECTION`:return e.activeSection===t.section&&e.m1Open?{...e,activeSection:null,m1Open:!1,m2Open:!1,m2View:null}:{...e,activeSection:t.section,m1Open:!0,m2Open:!1,m2View:null,selectedEntityId:null};case`TOGGLE_M0`:return e.m0Open?{...e,m0Open:!1,activeSection:null,m1Open:!1,m2Open:!1,m2View:null}:{...e,m0Open:!0};case`CLOSE_M0`:return{...e,m0Open:!1};case`CLOSE_M1`:return{...e,activeSection:null,m1Open:!1,m2Open:!1,m2View:null};case`OPEN_M2`:return{...e,m2Open:!0,m2View:t.view,selectedEntityId:t.entityId===void 0?e.selectedEntityId:t.entityId};case`OPEN_M2_DRAWER`:return{...e,m0Open:!0,activeSection:t.section,m1Open:!0,m2Open:!0,m2View:t.view,selectedEntityId:t.entityId};case`OPEN_M1_DRAWER`:return{...e,m0Open:!0,activeSection:t.section,m1Open:!0,m2Open:!1,m2View:null,selectedEntityId:null};case`CLOSE_M2`:return{...e,m2Open:!1,m2View:null};case`SELECT_ENTITY`:return{...e,selectedEntityId:t.entityId};case`SYNC_FROM_URL`:return t.section===e.activeSection&&t.entityId===e.selectedEntityId&&t.m2View===e.m2View&&!(t.mobile&&(e.m1Open||e.m0Open))?e:{...e,activeSection:t.section,m0Open:!t.mobile&&e.m0Open,m1Open:!t.mobile&&t.section!==null,selectedEntityId:t.entityId,m2Open:t.m2View!==null,m2View:t.m2View};case`SET_USER`:return{...e,user:t.user};default:return e}}function R0({children:e}){let[t,n]=(0,Y.useReducer)(L0,I0);hS(t,n),(0,Y.useEffect)(()=>{let e=nd();if(e){n({type:`SET_USER`,user:e});return}let t=!1;return rd().then(e=>{!t&&e&&n({type:`SET_USER`,user:e})}).catch(()=>{}),()=>{t=!0}},[]);let r={state:t,dispatch:n,setSection:(0,Y.useCallback)(e=>{n({type:`SET_SECTION`,section:e})},[]),toggleSection:(0,Y.useCallback)(e=>{n({type:`TOGGLE_SECTION`,section:e})},[]),toggleM0:(0,Y.useCallback)(()=>{n({type:`TOGGLE_M0`})},[]),closeM0:(0,Y.useCallback)(()=>{n({type:`CLOSE_M0`})},[]),closeM1:(0,Y.useCallback)(()=>{n({type:`CLOSE_M1`})},[]),openM2:(0,Y.useCallback)((e,t)=>{n({type:`OPEN_M2`,view:e,entityId:t})},[]),openM2Drawer:(0,Y.useCallback)((e,t,r)=>{n({type:`OPEN_M2_DRAWER`,section:e,view:t,entityId:r})},[]),openM1Drawer:(0,Y.useCallback)(e=>{n({type:`OPEN_M1_DRAWER`,section:e})},[]),closeM2:(0,Y.useCallback)(()=>{n({type:`CLOSE_M2`})},[]),selectEntity:(0,Y.useCallback)(e=>{n({type:`SELECT_ENTITY`,entityId:e})},[])};return(0,X.jsx)(fS.Provider,{value:r,children:e})}function z0(){return(0,Y.useSyncExternalStore)(ai,Pr,()=>!1)}function B0(e,t){let n=null,r=!1,i,a;function o(){clearTimeout(i),!r&&Pr()&&(i=setTimeout(()=>{s()},3e4))}function s(s=!1){if(n)return n;if(r)return Promise.resolve(!1);clearTimeout(i),a=new AbortController;let c=setTimeout(()=>a?.abort(),5e3);return n=(async()=>{try{let n=await fetch(e,{cache:`no-store`,credentials:`omit`,signal:a.signal});if(!n.ok||n.headers.get(`x-canvas-offline`)===`fallback`)throw Error(`Unavailable`);if((await n.json()).status!==`success`)throw Error(`Not a Canvas response`);if(r)return!1;let i=Pr();return Er(),(i||s)&&t(),!0}catch{return r||la(),!1}finally{clearTimeout(c),n=null,o()}})(),n}let c=ai(o),l=()=>{s()};return window.addEventListener(`online`,l),o(),{retry:s,stop(){r=!0,clearTimeout(i),a?.abort(),c(),window.removeEventListener(`online`,l)}}}var V0;function H0(){V0=B0(`${ni}/ping`,()=>Zu.retryNow());let e=()=>{V0?.retry()},t=Zu.on(`connect_error`,e),n=Zu.on(`disconnect`,e);return()=>{t(),n(),V0?.stop(),V0=void 0}}function U0(){return V0?.retry(!0)??Promise.resolve(!1)}function W0(){let e=z0(),[t,n]=(0,Y.useState)(!1);return e?(0,X.jsxs)(`details`,{className:`relative`,children:[(0,X.jsx)(`summary`,{"aria-label":`Offline — connection options`,title:`Offline — cached content available`,className:`flex h-10 w-10 cursor-pointer list-none items-center justify-center rounded-lg text-amber-600 hover:bg-accent/50 [&::-webkit-details-marker]:hidden`,children:(0,X.jsx)(Je,{className:`h-5 w-5`})}),(0,X.jsxs)(`div`,{className:`absolute bottom-0 left-full z-50 ml-2 w-60 max-w-[calc(100vw-5rem)] rounded-lg border bg-popover p-3 text-popover-foreground shadow-lg`,children:[(0,X.jsx)(`p`,{className:`text-sm font-medium`,role:`status`,children:`Offline`}),(0,X.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`You can browse cached documents. We’ll reconnect automatically when the server is available.`}),(0,X.jsx)(`button`,{type:`button`,disabled:t,onClick:async()=>{n(!0);try{await U0()}finally{n(!1)}},className:`mt-3 rounded-md bg-secondary px-3 py-2 text-xs font-medium hover:bg-accent disabled:opacity-50`,children:t?`Checking…`:`Retry now`})]})]}):null}var G0=Le,K0=E,q0=rr,J0=Y.forwardRef(({className:e,sideOffset:t=4,...n},r)=>(0,X.jsx)(sr,{children:(0,X.jsx)(Ct,{ref:r,sideOffset:t,className:G(`z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]`,e),...n})}));J0.displayName=Ct.displayName;var Y0=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(mt,{ref:n,className:G(`relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full`,e),...t}));Y0.displayName=mt.displayName;var X0=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(dr,{ref:n,className:G(`aspect-square h-full w-full`,e),...t}));X0.displayName=dr.displayName;var Z0=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(Qn,{ref:n,className:G(`flex h-full w-full items-center justify-center rounded-full bg-muted`,e),...t}));Z0.displayName=Qn.displayName;function Q0({section:e,icon:t,label:n,disabled:r}){let{state:i,toggleSection:a}=pS(),o=i.activeSection===e;return(0,X.jsxs)(K0,{children:[(0,X.jsx)(q0,{asChild:!0,children:(0,X.jsxs)(`button`,{type:`button`,disabled:r,"aria-label":n,onClick:()=>!r&&e&&a(e),className:G(`relative flex items-center justify-center w-10 h-10 rounded-lg transition-colors`,o?`bg-accent text-foreground`:`text-muted-foreground hover:text-foreground hover:bg-accent/50`,r&&`opacity-30 cursor-not-allowed`),children:[o&&(0,X.jsx)(`span`,{className:`absolute right-0 top-1/2 -translate-y-1/2 w-0.5 h-5 bg-foreground rounded-l`}),t]})}),(0,X.jsx)(J0,{side:`right`,sideOffset:8,children:n})]})}function $0({path:e,icon:t,label:n,section:r=`settings`}){let i=$c(),{setSection:a}=pS();return(0,X.jsxs)(K0,{children:[(0,X.jsx)(q0,{asChild:!0,children:(0,X.jsx)(`button`,{type:`button`,"aria-label":n,onClick:()=>{a(r),i(e)},className:`flex items-center justify-center w-10 h-10 rounded-lg text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors`,children:t})}),(0,X.jsx)(J0,{side:`right`,sideOffset:8,children:n})]})}function e2(){let{state:e,toggleM0:t}=pS(),n=z0();return(0,X.jsxs)(`button`,{type:`button`,onClick:t,"aria-label":`${e.m0Open?`Close menu`:`Open menu`}${n?` — offline, connection options in menu`:``}`,"data-shell":`rail`,className:`fixed bottom-rail-inset left-2 z-nav flex h-rail w-rail items-center justify-center rounded-full bg-foreground text-background shadow-elevation-4 md:hidden`,children:[e.m0Open?(0,X.jsx)(Ne,{className:`h-5 w-5`}):(0,X.jsx)(bn,{className:`h-5 w-5`}),n&&(0,X.jsx)(`span`,{"aria-hidden":!0,className:`absolute right-0 top-0 h-3 w-3 rounded-full border-2 border-background bg-amber-500`})]})}function t2(){let{state:e,closeM0:t,closeM1:n}=pS(),{state:r,setView:i,closeT1:a}=Ss(),o=$c(),{showToast:s}=mo(),c=e.user?.userType===`admin`,l=Tx(),u=()=>{r.t1Open?a():i(`tools`),n(),t()},d=(0,Y.useCallback)(async()=>{try{await J.post(`/auth/logout`),localStorage.removeItem(`authToken`),o(`/login`)}catch{s({title:`Error`,description:`Logout failed`,variant:`destructive`})}},[o,s]);return(0,X.jsxs)(G0,{delayDuration:200,children:[e.m0Open&&(0,X.jsx)(`div`,{className:`fixed inset-0 z-nav-scrim bg-scrim animate-fade-in md:hidden`,onClick:t,"aria-hidden":!0}),(0,X.jsxs)(`div`,{"data-shell":`rail`,className:G(`flex flex-col items-center w-rail h-full bg-transparent shrink-0`,e.m0Open?`max-md:fixed max-md:left-2 max-md:top-2 max-md:bottom-rail-stack max-md:z-rail max-md:h-auto max-md:rounded-[var(--panel-radius)] max-md:bg-card max-md:surface-glass max-md:shadow-elevation-5 max-md:animate-fade-in`:`max-md:hidden`),children:[(0,X.jsx)(`div`,{className:`flex items-center justify-center h-12 w-full shrink-0`,children:(0,X.jsx)(`button`,{type:`button`,"aria-label":`Canvas home`,onClick:()=>o(`/home`),className:`flex items-center justify-center w-10 h-10 rounded-lg hover:bg-accent/50 transition-colors`,children:(0,X.jsx)(`img`,{src:`/images/logo-br_128x128.png`,alt:``,className:`w-6 h-6`})})}),(0,X.jsxs)(`nav`,{className:`flex flex-col items-center gap-1 py-2 flex-1 min-h-0 overflow-y-auto`,children:[(0,X.jsx)(Q0,{section:`contexts`,icon:(0,X.jsx)(wt,{className:`w-5 h-5`}),label:`Contexts`}),(0,X.jsx)(Q0,{section:`workspaces`,icon:(0,X.jsx)(fr,{className:`w-5 h-5`}),label:`Workspaces`}),(!l.local||l.agent)&&(0,X.jsx)(Q0,{section:`agents`,icon:(0,X.jsx)(ft,{className:`w-5 h-5`}),label:`Agents`}),(0,X.jsx)($0,{path:`/roles`,section:null,icon:(0,X.jsx)(Zn,{className:`w-5 h-5`}),label:`Roles`}),c&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`w-6 h-px bg-border my-2`}),(0,X.jsx)($0,{path:`/admin/users`,icon:(0,X.jsx)(We,{className:`w-5 h-5`}),label:`All Users`}),(0,X.jsx)($0,{path:`/admin/logs`,icon:(0,X.jsx)(Tn,{className:`w-5 h-5`}),label:`Server Logs`}),(0,X.jsx)($0,{path:`/admin/workspaces`,icon:(0,X.jsx)(Ae,{className:`w-5 h-5`}),label:`All Workspaces`}),(0,X.jsx)($0,{path:`/admin/agents`,icon:(0,X.jsx)(ft,{className:`w-5 h-5`}),label:`All Agents`}),(0,X.jsx)($0,{path:`/admin/roles`,icon:(0,X.jsx)(Zn,{className:`w-5 h-5`}),label:`All Roles`})]})]}),(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-1 py-2 shrink-0`,children:[(0,X.jsx)(`div`,{className:`w-6 h-px bg-border mb-2`}),(0,X.jsx)(W0,{}),(0,X.jsxs)(K0,{children:[(0,X.jsx)(q0,{asChild:!0,children:(0,X.jsx)(`button`,{type:`button`,onClick:u,"aria-label":r.t1Open?`Close toolbox`:`Open toolbox`,className:G(`flex items-center justify-center w-10 h-10 rounded-lg transition-colors`,r.t1Open?`bg-accent text-foreground`:`text-muted-foreground hover:text-foreground hover:bg-accent/50`),children:(0,X.jsx)(hr,{className:`w-5 h-5`})})}),(0,X.jsx)(J0,{side:`right`,sideOffset:8,children:`Toolbox`})]}),!l.local&&(0,X.jsx)($0,{path:`/settings`,section:`settings`,icon:(0,X.jsx)($t,{className:`w-5 h-5`}),label:`Settings`}),(0,X.jsxs)(K0,{children:[(0,X.jsx)(q0,{asChild:!0,children:(0,X.jsx)(`button`,{type:`button`,"aria-label":e.user?.email?`Profile: ${e.user.email}`:`Profile`,onClick:()=>o(`/home`),className:`flex items-center justify-center w-10 h-10 rounded-lg hover:bg-accent/50 transition-colors`,children:(0,X.jsx)(Y0,{className:`h-7 w-7 touch-target`,children:(0,X.jsx)(Z0,{className:`text-[10px] bg-muted`,children:e.user?.email?(e=>e.split(`@`)[0].split(`.`).map(e=>e.charAt(0).toUpperCase()).join(``).slice(0,2))(e.user.email):`U`})})})}),(0,X.jsx)(J0,{side:`right`,sideOffset:8,children:e.user?.email?.split(`@`)[0]||`Profile`})]}),(0,X.jsxs)(K0,{children:[(0,X.jsx)(q0,{asChild:!0,children:(0,X.jsx)(`button`,{type:`button`,"aria-label":`Log out`,onClick:d,className:`flex items-center justify-center w-10 h-10 rounded-lg text-destructive hover:bg-destructive/10 transition-colors`,children:(0,X.jsx)(Bn,{className:`w-5 h-5`})})}),(0,X.jsx)(J0,{side:`right`,sideOffset:8,children:`Logout`})]})]})]})]})}function n2(e){let[t,n]=(0,Y.useState)([]),[r,i]=(0,Y.useState)(!1),a=(0,Y.useRef)(!1),o=(0,Y.useRef)(!1),s=(0,Y.useCallback)(async()=>{if(!o.current){o.current=!0,i(!0);try{let e=await Xo();n(e||[]),a.current=!0}catch(e){console.error(`Failed to fetch contexts:`,e)}finally{o.current=!1,i(!1)}}},[]),c=(0,Y.useRef)(s);(0,Y.useEffect)(()=>{c.current=s});let l=(0,Y.useCallback)(()=>{a.current=!1,s()},[s]);return(0,Y.useEffect)(()=>{e&&!a.current&&s()},[e,s]),(0,Y.useEffect)(()=>{if(!e)return;let t=()=>Zu.emit(`subscribe`,{channel:`context`}),r=()=>Zu.emit(`unsubscribe`,{channel:`context`}),i=Zu.on(`connect`,()=>{t(),s()});t();let o=e=>{let t=e;!t?.id||!t?.userId||n(e=>e.some(e=>e.id===t.id&&e.userId===t.userId)?e:[...e,t])},l=e=>{let t=e;!t?.id||!t?.userId||n(e=>e.map(e=>e.id===t.id&&e.userId===t.userId?{...e,...t}:e))},u=e=>{let t=e,r=t?.contextId??t?.id;r&&n(e=>e.filter(e=>e.id!==r))},d=e=>{let t=e;!t?.id||!t?.userId||n(e=>e.map(e=>e.id===t.id&&e.userId===t.userId?{...e,...t}:e))},f=()=>{a.current=!1,c.current()},p=[[`context:created`,o],[`context.created`,o],[`context:updated`,l],[`context.updated`,l],[`context:deleted`,u],[`context.deleted`,u],[`context:url:changed`,d],[`context.url.set`,d],[`context:url:set`,d],[`workspace:status:changed`,f],[`workspace.status.changed`,f]];return p.forEach(([e,t])=>Zu.on(e,t)),()=>{r(),i?.(),p.forEach(([e,t])=>Zu.off(e,t))}},[e,s]),(0,Y.useEffect)(()=>{let e=e=>{let t=e.detail;n(e=>e.filter(e=>!Wo(e,t)))};return window.addEventListener(Uo,e),()=>window.removeEventListener(Uo,e)},[]),(0,Y.useEffect)(()=>{let e=()=>{a.current=!1,s()};return window.addEventListener(`contexts:refresh`,e),()=>window.removeEventListener(`contexts:refresh`,e)},[s]),{contexts:(0,Y.useMemo)(()=>wS(t),[t]),isLoading:r,refresh:l}}function r2(){let{state:e,selectEntity:t,openM2:n,closeM2:r}=pS(),i=Pm(),{contexts:a,isLoading:o}=n2(e.activeSection===`contexts`),{showToast:s}=mo(),l=$c(),[u,d]=(0,Y.useState)(null),f=u&&u.base===a?u.order:a,p=e=>e.isShared===!0||e.type===`shared`,{rowProps:m,handleProps:h,draggingIndex:g,insertLineClass:_}=DS((e,t)=>{let n=TS(f,e,t);d({base:a,order:n}),ES(n,(e,t)=>p(e)?Promise.resolve():Ko(e.id,{order:t})).then(({failed:e})=>{window.dispatchEvent(new CustomEvent(`contexts:refresh`)),e&&s({title:`Partial reorder`,description:`${e} context(s) could not be reordered`,variant:`destructive`})})}),v=e=>{t(e.id),l(`/contexts/${e.id}`)};return(0,X.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between px-4 h-12 border-b border-border shrink-0`,children:[(0,X.jsx)(`span`,{className:`text-sm font-semibold`,children:`Contexts`}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>{r(),l(`/contexts?create=1`)},title:`Create context`,"aria-label":`Create context`,className:`flex items-center justify-center w-6 h-6 rounded-full bg-foreground text-background hover:opacity-80 transition-opacity`,children:(0,X.jsx)(H,{className:`w-3.5 h-3.5`})})]}),(0,X.jsx)(`div`,{className:`flex-1 overflow-y-auto py-2`,children:o&&a.length===0?(0,X.jsx)(`div`,{className:`px-4 py-3 text-xs text-muted-foreground`,children:`Loading...`}):a.length===0?(0,X.jsx)(`div`,{className:`px-4 py-3 text-xs text-muted-foreground`,children:`No contexts found`}):(0,X.jsx)(`div`,{className:`space-y-1.5 px-2`,children:f.map((r,a)=>{let o=e.selectedEntityId===r.id,s=p(r),u=r.workspaceActive!==!1,d=rp(r.color);return(0,X.jsxs)(`div`,{...m(a),"data-active":o||void 0,className:G(`group relative rounded-md py-2.5 pl-3 pr-7 transition-all shadow-elevation-1`,u?`cursor-pointer hover:shadow `+(o?`bg-accent shadow`:`bg-card hover:bg-accent/50`):`cursor-not-allowed opacity-50 bg-card`,_(a,f.length),g===a&&`opacity-60`),onClick:()=>u&&v(r),title:u?void 0:`Workspace "${r.workspaceName}" is not active`,children:[s?(0,X.jsx)(`div`,{className:G(`absolute inset-y-0 right-0 w-4 rounded-r-md`,!d&&`bg-muted`),style:d?{backgroundColor:d}:void 0}):(0,X.jsx)(`button`,{type:`button`,...h(a),title:`Drag to reorder`,"aria-label":`Drag to reorder`,className:G(`absolute inset-y-0 right-0 flex w-4 cursor-grab items-center justify-center rounded-r-md active:cursor-grabbing`,!d&&`bg-muted`),style:d?{backgroundColor:d}:void 0,children:(0,X.jsx)(Ye,{className:G(`h-3.5 w-3.5`,ip(d))})}),(0,X.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,X.jsx)(c,{icon:r.icon||`ph:stack-fill`,width:16,height:16,color:d,className:G(`mt-0.5 shrink-0`,!d&&`text-muted-foreground`)}),(0,X.jsx)(`span`,{className:`text-sm font-medium truncate flex-1`,children:r.name||r.id}),s&&(0,X.jsx)(`span`,{className:`rounded-full bg-info/10 px-1.5 py-0.5 text-[9px] text-info shrink-0`,children:`Shared`}),u&&(0,X.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),t(r.id),n(`detail`,r.id)},className:`reveal-on-hover shrink-0 mt-0.5`,title:`Switch context URL`,children:(0,X.jsx)(Kt,{className:`w-3.5 h-3.5 text-muted-foreground hover:text-foreground`})}),(0,X.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),t(r.id),i?n(`settings`,r.id):l(`/contexts/${r.id}/settings/general`)},className:`reveal-on-hover shrink-0 mt-0.5`,title:`Settings`,children:(0,X.jsx)($t,{className:`w-3.5 h-3.5 text-muted-foreground hover:text-foreground`})})]}),r.name&&(0,X.jsx)(`div`,{className:`text-[10px] text-muted-foreground/60 truncate font-mono`,children:r.id}),(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground truncate mt-0.5`,children:r.url||`/`}),r.ownerEmail&&(0,X.jsx)(`div`,{className:`text-[10px] text-muted-foreground truncate mt-0.5`,children:r.ownerEmail})]},`${r.userId||`u`}-${r.id}`)})})})]})}function i2({title:e,onBack:t,action:n,className:r,icon:i,accentColor:a}){let{closeM1:o}=pS(),s=rp(a);return(0,X.jsxs)(`div`,{className:G(`flex items-center h-12 px-2 border-b border-border shrink-0 gap-1`,r),style:{...s?{borderLeft:`6px solid ${s}`}:{},borderBottomWidth:3,...s?{borderBottomColor:s}:{}},children:[(0,X.jsxs)(`button`,{type:`button`,onClick:t,className:`flex items-center gap-0.5 h-8 rounded px-1 hover:bg-accent/50 text-muted-foreground hover:text-foreground transition-colors flex-1 min-w-0`,title:`Back`,children:[(0,X.jsx)(ae,{className:`w-4 h-4 shrink-0`}),i&&(0,X.jsx)(c,{icon:i,width:16,height:16,color:s,className:G(`mr-1 shrink-0`,!s&&`text-muted-foreground`)}),(0,X.jsx)(`span`,{className:`text-sm font-semibold truncate`,children:e})]}),n&&(0,X.jsx)(`div`,{className:`shrink-0`,children:n}),(0,X.jsx)(`button`,{type:`button`,onClick:o,className:`flex h-8 w-8 shrink-0 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground`,title:`Close menu`,"aria-label":`Close menu`,children:(0,X.jsx)(Ne,{className:`w-4 h-4`})})]})}var a2=22,o2=44,s2=4;function c2(e,t){if(!t)return null;let n=String(e||``).split(`/`).filter(Boolean);return n[0]===`workspace`&&n.length>=2?{address:`workspace:${n[1]}`,key:n.slice(2).join(`/`)}:n[0]===`device`&&n.length>=3?{address:n[2],key:n.slice(3).join(`/`)}:n[0]===`file`&&n.length>=2?{address:n[1],key:n.slice(2).join(`/`)}:null}function l2(e,t){if(!t)return null;let n=String(e||``).split(`/`).filter(Boolean);return n[0]===`workspace`&&n.length>=2?`workspace:${n[1]}`:n[0]===`device`?n.length>=3?n[2]:null:n.length>=2?n[1]:null}function u2({x:e,y:t,node:n,path:r,isBackendsTree:i,onClose:a,onShowContent:o,onOpenToSide:s,sourceLayer:c,targetLayers:l,clipboard:u,onStartInlineCreate:d,onChangeIcon:f,onNewCanvas:p,onShareCanvas:m,onRemove:h,onRename:g,onLock:_,onUnlock:v,onDestroy:y,onMerge:x,onSubtract:S,onMergeDown:C,onSubtractDown:w,onResyncBackend:T,onAddRule:E,onSyncFolderTree:D,onAddStoreRule:O,onRenameBackendFolder:k,onDeleteBackendFolder:A,onCopy:j,onCut:M,onPaste:N,pastedDocumentIds:P,onPasteDocuments:F,isPinned:I,onTogglePin:L}){let ee=c&&l.size>0&&c.path===r,ne=!i&&(C||w)&&r!==`/`&&n.type!==`canvas`&&r.split(`/`).filter(Boolean).length>1,R=c&&l.size>0&&(c.path===r||l.has(r)),z=async e=>{try{await e()}catch(e){alert(e instanceof Error?e.message:String(e))}a()},B=(e,t,n,r=!1)=>(0,X.jsxs)(`button`,{type:`button`,className:G(`flex items-center gap-2 w-full px-3 py-1.5 text-xs hover:bg-accent rounded-sm text-left`,r&&`text-destructive hover:bg-destructive/10`),onClick:()=>z(n),children:[e,t]});return(0,X.jsxs)(wf,{x:e,y:t,onClose:a,className:`min-w-[11rem] rounded-md border bg-popover p-1 shadow-elevation-3`,children:[o&&B((0,X.jsx)(Ht,{className:`w-3 h-3`}),`Show layer content`,async()=>{o(r,n.id||void 0)}),s&&B((0,X.jsx)(Ht,{className:`w-3 h-3`}),`Open to the side`,async()=>{s(r)}),(o||s)&&(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),n.type===`canvas`&&m&&B((0,X.jsx)(vn,{className:`w-3 h-3`}),`Share canvas`,async()=>{await m(r)}),n.type===`canvas`&&m&&(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),T&&l2(r,i)&&(0,X.jsxs)(X.Fragment,{children:[B((0,X.jsx)(Te,{className:`w-3 h-3`}),`Resync backend (${l2(r,i)})`,async()=>{await T(r)}),(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`})]}),i&&l2(r,i)&&(E||D||O)&&(0,X.jsxs)(X.Fragment,{children:[E&&B((0,X.jsx)(st,{className:`w-3 h-3`}),`Auto-Link documents to…`,async()=>{E(r)}),O&&c2(r,i)&&B((0,X.jsx)(gr,{className:`w-3 h-3`}),`Create storage rule…`,async()=>{O(r)}),D&&B((0,X.jsx)(Nn,{className:`w-3 h-3`}),`Sync folders into Directory`,async()=>{await D(r)}),(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`})]}),!i&&O&&r!==`/`&&(0,X.jsxs)(X.Fragment,{children:[B((0,X.jsx)(gr,{className:`w-3 h-3`}),`Create rule…`,async()=>{O(r)}),B((0,X.jsx)(tr,{className:`w-3 h-3`}),`Create download rule…`,async()=>{O(r,`download`)}),(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`})]}),(!i||c2(r,i))&&(0,X.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2 w-full px-3 py-1.5 text-xs hover:bg-accent rounded-sm text-left`,onClick:()=>{d(r),a()},children:[(0,X.jsx)(H,{className:`w-3 h-3`}),`New folder here`]}),k&&c2(r,i)?.key&&B((0,X.jsx)(vr,{className:`w-3 h-3`}),`Rename folder`,async()=>{let e=r.split(`/`).pop()||``,t=prompt(`New folder name:`,e);!t||t===e||await k(r,t)}),A&&c2(r,i)?.key&&B((0,X.jsx)(ut,{className:`w-3 h-3`}),`Delete folder`,async()=>{confirm(`Delete folder "${r.split(`/`).pop()}" and its contents from the backend?`)&&await A(r)},!0),p&&!i&&(0,X.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2 w-full px-3 py-1.5 text-xs hover:bg-accent rounded-sm text-left`,onClick:()=>{p(r),a()},children:[(0,X.jsx)(er,{className:`w-3 h-3 text-primary`}),`New canvas here…`]}),r!==`/`&&L&&B(I?(0,X.jsx)(V,{className:`w-3 h-3`}):(0,X.jsx)(te,{className:`w-3 h-3`}),I?`Unpin`:`Pin`,async()=>{await L()}),r!==`/`&&f&&(0,X.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2 w-full px-3 py-1.5 text-xs hover:bg-accent rounded-sm text-left`,onClick:()=>{f(),a()},children:[(0,X.jsx)(qe,{className:`w-3 h-3`}),`Change icon`]}),r!==`/`&&!n.locked&&g&&!i&&B((0,X.jsx)(vr,{className:`w-3 h-3`}),`Rename`,async()=>{let e=r.split(`/`).pop()||``,t=prompt(`New name:`,e);!t||t===e||await g(r,t)}),(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),B((0,X.jsx)(He,{className:`w-3 h-3`}),`Copy`,async()=>j(r)),!i&&B((0,X.jsx)(ur,{className:`w-3 h-3`}),`Cut`,async()=>M(r)),u&&!i&&B((0,X.jsx)(b,{className:`w-3 h-3`}),`Paste (${u.mode})`,async()=>N(r)),P&&P.length>0&&F&&B((0,X.jsx)(b,{className:`w-3 h-3`}),`Paste ${P.length} document(s)`,async()=>{await F(r,P)}),r!==`/`&&!n.locked&&h&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),B((0,X.jsx)(ut,{className:`w-3 h-3`}),`Remove`,async()=>{confirm(`Remove "${r}"?`)&&await h(r,!1)},!0),B((0,X.jsx)(ut,{className:`w-3 h-3`}),`Remove recursive`,async()=>{confirm(`Remove "${r}" and all children?`)&&await h(r,!0)},!0),i&&(0,X.jsxs)(X.Fragment,{children:[B((0,X.jsx)(ut,{className:`w-3 h-3`}),`Remove and purge documents`,async()=>{confirm(`Remove "${r}" and all children, and PERMANENTLY purge every document under it from the index?`)&&await h(r,!0,!0)},!0),B((0,X.jsx)(ut,{className:`w-3 h-3`}),`Remove, purge and destroy on backend`,async()=>{confirm(`Remove "${r}" and all children, purge every document under it from the index, and PERMANENTLY DELETE the mirrored files/messages on the backend?`)&&await h(r,!0,!0,!0)},!0)]})]}),(_||v||y)&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),n.locked?v&&B((0,X.jsx)(fn,{className:`w-3 h-3`}),`Unlock layer`,async()=>{await v(n.id)}):_&&B((0,X.jsx)(Ot,{className:`w-3 h-3`}),`Lock layer`,async()=>{await _(n.id)}),n.locked&&n.lockedBy&&n.lockedBy.length>0&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`px-3 pt-1 pb-0.5 text-[10px] uppercase tracking-wide text-muted-foreground`,children:`Locked by`}),n.lockedBy.map(e=>(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-3 py-1 text-xs`,children:[(0,X.jsx)(`span`,{className:`truncate`,title:e,children:e}),v&&(0,X.jsx)(`button`,{type:`button`,title:`Remove lock held by ${e}`,className:`shrink-0 text-muted-foreground hover:text-destructive`,onClick:()=>z(async()=>{await v(n.id,e)}),children:(0,X.jsx)(fn,{className:`w-3 h-3`})})]},e))]}),r!==`/`&&!n.locked&&y&&B((0,X.jsx)(ut,{className:`w-3 h-3`}),`Destroy layer`,async()=>{confirm(`Permanently destroy layer "${n.label||n.name}" and its bitmap?`)&&await y(n.id)},!0)]}),ne&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),C&&B((0,X.jsx)(Xt,{className:`w-3 h-3`}),`Merge down (into ancestors)`,async()=>{confirm(`Merge "${n.label||n.name}" into every layer above it on\n${r}\n\nAfter this, ${r} lists its documents.`)&&await C(r)}),w&&B((0,X.jsx)(dn,{className:`w-3 h-3`}),`Subtract from ancestors`,async()=>{confirm(`Remove "${n.label||n.name}"'s documents from every layer above it on\n${r}\n\nUndo of "Merge down". Documents an ancestor holds for other reasons are removed from it too.`)&&await w(r)})]}),ee&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),x&&B((0,X.jsx)(wt,{className:`w-3 h-3`}),`Merge this layer into ${l.size} selected`,async()=>{confirm(`Merge "${r}" (source) INTO:\n${Array.from(l.keys()).join(`
91
+ `)})})}),(0,X.jsx)(`div`,{className:`p-4 border-t flex justify-end`,children:(0,X.jsx)(q,{onClick:()=>s(null),children:`Close`})})]})})]})}function D0(){return(0,X.jsxs)(`div`,{className:`space-y-6`,children:[(0,X.jsx)(Dx,{title:`Remotes`,description:`Connect to remote Canvas instances`}),(0,X.jsx)(`div`,{className:`flex flex-col items-center justify-center py-12 space-y-4`,children:(0,X.jsxs)(`div`,{className:`text-center`,children:[(0,X.jsx)(`h2`,{className:`text-2xl font-semibold mb-2`,children:`Coming Soon`}),(0,X.jsx)(`p`,{className:`text-muted-foreground max-w-md`,children:`Remote connection management is currently under development. Check back later for updates.`})]})})]})}var O0=[`note`,`todo`,`link`,`file`,`photo`];function k0(){let{kind:e}=rl(),t=$c();return e===`sketch`?(0,X.jsx)(Tl,{to:`/apps/sketch?add=1`,replace:!0}):!e||!O0.includes(e)?(0,X.jsx)(Tl,{to:`/home`,replace:!0}):(0,X.jsx)(Ow,{initialKind:e,onInitialCardClose:()=>t(`/home`)})}var A0=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(Dl,{index:!0,element:(0,X.jsx)(Rw,{})},`r1`),(0,X.jsx)(Dl,{path:`home`,element:(0,X.jsx)(Lw,{})},`r2`),(0,X.jsx)(Dl,{path:`share-target`,element:(0,X.jsx)(Gw,{})},`r3`),(0,X.jsx)(Dl,{path:`apps/add/:kind`,element:(0,X.jsx)(k0,{})},`r4`),(0,X.jsx)(Dl,{path:`workspaces`,element:(0,X.jsx)(OS,{})},`r5`),(0,X.jsx)(Dl,{path:`workspaces/:workspaceName`,element:(0,X.jsx)(MC,{})},`r6`),(0,X.jsx)(Dl,{path:`workspaces/:workspaceName/settings`,element:(0,X.jsx)(b0,{})},`r7`),(0,X.jsx)(Dl,{path:`workspaces/:workspaceName/settings/:tab`,element:(0,X.jsx)(b0,{})},`r8`),(0,X.jsx)(Dl,{path:`workspaces/:workspaceName/path/*`,element:(0,X.jsx)(MC,{})},`r9`),(0,X.jsx)(Dl,{path:`workspaces/:workspaceName/trees/:treeName`,element:(0,X.jsx)(MC,{})},`r10`),(0,X.jsx)(Dl,{path:`workspaces/:workspaceName/trees/:treeName/path/*`,element:(0,X.jsx)(MC,{})},`r11`),(0,X.jsx)(Dl,{path:`contexts`,element:(0,X.jsx)(Yw,{})},`r12`),(0,X.jsx)(Dl,{path:`contexts/:contextId`,element:(0,X.jsx)(Zw,{})},`r13`),(0,X.jsx)(Dl,{path:`contexts/:contextId/settings`,element:(0,X.jsx)(w0,{})},`r14`),(0,X.jsx)(Dl,{path:`contexts/:contextId/settings/:tab`,element:(0,X.jsx)(w0,{})},`r15`),(0,X.jsx)(Dl,{path:`agents`,element:(0,X.jsx)(Fk,{})},`r16`),(0,X.jsx)(Dl,{path:`agents/:agentId`,element:(0,X.jsx)(Zk,{})},`r17`),(0,X.jsx)(Dl,{path:`agents/:agentId/:sessionId`,element:(0,X.jsx)(Zk,{})},`r18`),(0,X.jsx)(Dl,{path:`agents/:agentId/settings`,element:(0,X.jsx)(aA,{})},`r19`),(0,X.jsx)(Dl,{path:`agents/:agentId/settings/:tab`,element:(0,X.jsx)(aA,{})},`r20`),(0,X.jsx)(Dl,{path:`roles`,element:(0,X.jsx)(E0,{})},`r21`),(0,X.jsx)(Dl,{path:`remotes`,element:(0,X.jsx)(D0,{})},`r22`),(0,X.jsx)(Dl,{path:`settings`,element:(0,X.jsx)(tE,{})},`settings`),(0,X.jsx)(Dl,{path:`appearance`,element:(0,X.jsx)(lD,{})},`r23`),(0,X.jsx)(Dl,{path:`key-bindings`,element:(0,X.jsx)(vD,{})},`key-bindings`),(0,X.jsx)(Dl,{path:`offline`,element:(0,X.jsx)(rO,{})},`r24`),(0,X.jsx)(Dl,{path:`about`,element:(0,X.jsx)(oO,{})},`r25`),(0,X.jsx)(Dl,{path:`api-tokens`,element:(0,X.jsx)($w,{})},`r26`),(0,X.jsx)(Dl,{path:`devices`,element:(0,X.jsx)(sT,{})},`r27`),(0,X.jsx)(Dl,{path:`embedding`,element:(0,X.jsx)(VO,{})},`r28`),(0,X.jsx)(Dl,{path:`shared`,element:(0,X.jsx)(HO,{})},`r29`),(0,X.jsx)(Dl,{path:`admin/users`,element:(0,X.jsx)(fk,{})},`r30`),(0,X.jsx)(Dl,{path:`admin/contexts`,element:(0,X.jsx)(nk,{})},`r31`),(0,X.jsx)(Dl,{path:`admin/workspaces`,element:(0,X.jsx)(tk,{})},`r32`),(0,X.jsx)(Dl,{path:`admin/agents`,element:(0,X.jsx)(rk,{})},`r33`),(0,X.jsx)(Dl,{path:`admin/logs`,element:(0,X.jsx)(sk,{})},`r34`),(0,X.jsx)(Dl,{path:`admin/roles`,element:(0,X.jsx)(dk,{})},`r35`),(0,X.jsx)(Dl,{path:`admin/embedding`,element:(0,X.jsx)(pk,{})},`r36`),(0,X.jsx)(Dl,{path:`admin/auth`,element:(0,X.jsx)(Nk,{})},`r37`)]});function j0(e){if(typeof e!=`string`||!e.startsWith(`/`)||e.startsWith(`//`)||/[\\\u0000-\u0020]/.test(e))return null;let t=new URL(e,`https://canvas.invalid`);return t.origin!==`https://canvas.invalid`||/^\/(?:login|register|pub|share-target|apps|next)(?:\/|$)/.test(t.pathname)||t.pathname===`/`||[...t.searchParams.keys()].some(e=>/token|password|secret|code/i.test(e))?null:t.pathname+t.search+t.hash}function M0(e){let t=2166136261;for(let n of e)t=Math.imul(t^n.charCodeAt(0),16777619);return`canvas:last-screen:${t>>>0}`}var N0=Al(A0),P0=e=>{let t=j0(e);return t&&Ws(N0,t)?t:null};function F0(){let e=Xc(),[t]=(0,Y.useState)(()=>{if(e.pathname!==`/`||e.search||e.hash)return null;try{let t=localStorage.getItem(`authToken`);return t?{key:e.key,path:P0(localStorage.getItem(M0(t)))||`/home`}:null}catch{return{key:e.key,path:`/home`}}}),n=t&&e.key===t.key&&e.pathname===`/`;return(0,Y.useEffect)(()=>{if(n)return;let t=P0(e.pathname+e.search+e.hash);if(t)try{let e=localStorage.getItem(`authToken`);e&&localStorage.setItem(M0(e),t)}catch{}},[e.pathname,e.search,e.hash,n]),n?(0,X.jsx)(Tl,{to:t.path,replace:!0}):null}var I0={activeSection:null,m0Open:!1,m1Open:!1,m2Open:!1,m2View:null,selectedEntityId:null,user:null};function L0(e,t){switch(t.type){case`SET_SECTION`:return{...e,activeSection:t.section,m1Open:t.section!==null,m2Open:!1,m2View:null,selectedEntityId:null};case`TOGGLE_SECTION`:return e.activeSection===t.section&&e.m1Open?{...e,activeSection:null,m1Open:!1,m2Open:!1,m2View:null}:{...e,activeSection:t.section,m1Open:!0,m2Open:!1,m2View:null,selectedEntityId:null};case`TOGGLE_M0`:return e.m0Open?{...e,m0Open:!1,activeSection:null,m1Open:!1,m2Open:!1,m2View:null}:{...e,m0Open:!0};case`CLOSE_M0`:return{...e,m0Open:!1};case`CLOSE_M1`:return{...e,activeSection:null,m1Open:!1,m2Open:!1,m2View:null};case`OPEN_M2`:return{...e,m2Open:!0,m2View:t.view,selectedEntityId:t.entityId===void 0?e.selectedEntityId:t.entityId};case`OPEN_M2_DRAWER`:return{...e,m0Open:!0,activeSection:t.section,m1Open:!0,m2Open:!0,m2View:t.view,selectedEntityId:t.entityId};case`OPEN_M1_DRAWER`:return{...e,m0Open:!0,activeSection:t.section,m1Open:!0,m2Open:!1,m2View:null,selectedEntityId:null};case`CLOSE_M2`:return{...e,m2Open:!1,m2View:null};case`SELECT_ENTITY`:return{...e,selectedEntityId:t.entityId};case`SYNC_FROM_URL`:return t.section===e.activeSection&&t.entityId===e.selectedEntityId&&t.m2View===e.m2View&&!(t.mobile&&(e.m1Open||e.m0Open))?e:{...e,activeSection:t.section,m0Open:!t.mobile&&e.m0Open,m1Open:!t.mobile&&t.section!==null,selectedEntityId:t.entityId,m2Open:t.m2View!==null,m2View:t.m2View};case`SET_USER`:return{...e,user:t.user};default:return e}}function R0({children:e}){let[t,n]=(0,Y.useReducer)(L0,I0);hS(t,n),(0,Y.useEffect)(()=>{let e=nd();if(e){n({type:`SET_USER`,user:e});return}let t=!1;return rd().then(e=>{!t&&e&&n({type:`SET_USER`,user:e})}).catch(()=>{}),()=>{t=!0}},[]);let r={state:t,dispatch:n,setSection:(0,Y.useCallback)(e=>{n({type:`SET_SECTION`,section:e})},[]),toggleSection:(0,Y.useCallback)(e=>{n({type:`TOGGLE_SECTION`,section:e})},[]),toggleM0:(0,Y.useCallback)(()=>{n({type:`TOGGLE_M0`})},[]),closeM0:(0,Y.useCallback)(()=>{n({type:`CLOSE_M0`})},[]),closeM1:(0,Y.useCallback)(()=>{n({type:`CLOSE_M1`})},[]),openM2:(0,Y.useCallback)((e,t)=>{n({type:`OPEN_M2`,view:e,entityId:t})},[]),openM2Drawer:(0,Y.useCallback)((e,t,r)=>{n({type:`OPEN_M2_DRAWER`,section:e,view:t,entityId:r})},[]),openM1Drawer:(0,Y.useCallback)(e=>{n({type:`OPEN_M1_DRAWER`,section:e})},[]),closeM2:(0,Y.useCallback)(()=>{n({type:`CLOSE_M2`})},[]),selectEntity:(0,Y.useCallback)(e=>{n({type:`SELECT_ENTITY`,entityId:e})},[])};return(0,X.jsx)(fS.Provider,{value:r,children:e})}function z0(){return(0,Y.useSyncExternalStore)(ai,Pr,()=>!1)}function B0(e,t){let n=null,r=!1,i,a;function o(){clearTimeout(i),!r&&Pr()&&(i=setTimeout(()=>{s()},3e4))}function s(s=!1){if(n)return n;if(r)return Promise.resolve(!1);clearTimeout(i),a=new AbortController;let c=setTimeout(()=>a?.abort(),5e3);return n=(async()=>{try{let n=await fetch(e,{cache:`no-store`,credentials:`omit`,signal:a.signal});if(!n.ok||n.headers.get(`x-canvas-offline`)===`fallback`)throw Error(`Unavailable`);if((await n.json()).status!==`success`)throw Error(`Not a Canvas response`);if(r)return!1;let i=Pr();return Er(),(i||s)&&t(),!0}catch{return r||la(),!1}finally{clearTimeout(c),n=null,o()}})(),n}let c=ai(o),l=()=>{s()};return window.addEventListener(`online`,l),o(),{retry:s,stop(){r=!0,clearTimeout(i),a?.abort(),c(),window.removeEventListener(`online`,l)}}}var V0;function H0(){V0=B0(`${ni}/ping`,()=>Zu.retryNow());let e=()=>{V0?.retry()},t=Zu.on(`connect_error`,e),n=Zu.on(`disconnect`,e);return()=>{t(),n(),V0?.stop(),V0=void 0}}function U0(){return V0?.retry(!0)??Promise.resolve(!1)}function W0(){let e=z0(),[t,n]=(0,Y.useState)(!1);return e?(0,X.jsxs)(`details`,{className:`relative`,children:[(0,X.jsx)(`summary`,{"aria-label":`Offline — connection options`,title:`Offline — cached content available`,className:`flex h-10 w-10 cursor-pointer list-none items-center justify-center rounded-lg text-amber-600 hover:bg-accent/50 [&::-webkit-details-marker]:hidden`,children:(0,X.jsx)(Je,{className:`h-5 w-5`})}),(0,X.jsxs)(`div`,{className:`absolute bottom-0 left-full z-50 ml-2 w-60 max-w-[calc(100vw-5rem)] rounded-lg border bg-popover p-3 text-popover-foreground shadow-lg`,children:[(0,X.jsx)(`p`,{className:`text-sm font-medium`,role:`status`,children:`Offline`}),(0,X.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`You can browse cached documents. We’ll reconnect automatically when the server is available.`}),(0,X.jsx)(`button`,{type:`button`,disabled:t,onClick:async()=>{n(!0);try{await U0()}finally{n(!1)}},className:`mt-3 rounded-md bg-secondary px-3 py-2 text-xs font-medium hover:bg-accent disabled:opacity-50`,children:t?`Checking…`:`Retry now`})]})]}):null}var G0=Le,K0=E,q0=rr,J0=Y.forwardRef(({className:e,sideOffset:t=4,...n},r)=>(0,X.jsx)(sr,{children:(0,X.jsx)(Ct,{ref:r,sideOffset:t,className:G(`z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]`,e),...n})}));J0.displayName=Ct.displayName;var Y0=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(mt,{ref:n,className:G(`relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full`,e),...t}));Y0.displayName=mt.displayName;var X0=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(dr,{ref:n,className:G(`aspect-square h-full w-full`,e),...t}));X0.displayName=dr.displayName;var Z0=Y.forwardRef(({className:e,...t},n)=>(0,X.jsx)(Qn,{ref:n,className:G(`flex h-full w-full items-center justify-center rounded-full bg-muted`,e),...t}));Z0.displayName=Qn.displayName;function Q0({section:e,icon:t,label:n,disabled:r}){let{state:i,toggleSection:a}=pS(),o=i.activeSection===e;return(0,X.jsxs)(K0,{children:[(0,X.jsx)(q0,{asChild:!0,children:(0,X.jsxs)(`button`,{type:`button`,disabled:r,"aria-label":n,onClick:()=>!r&&e&&a(e),className:G(`relative flex items-center justify-center w-10 h-10 rounded-lg transition-colors`,o?`bg-accent text-foreground`:`text-muted-foreground hover:text-foreground hover:bg-accent/50`,r&&`opacity-30 cursor-not-allowed`),children:[o&&(0,X.jsx)(`span`,{className:`absolute right-0 top-1/2 -translate-y-1/2 w-0.5 h-5 bg-foreground rounded-l`}),t]})}),(0,X.jsx)(J0,{side:`right`,sideOffset:8,children:n})]})}function $0({path:e,icon:t,label:n,section:r=`settings`}){let i=$c(),{setSection:a}=pS();return(0,X.jsxs)(K0,{children:[(0,X.jsx)(q0,{asChild:!0,children:(0,X.jsx)(`button`,{type:`button`,"aria-label":n,onClick:()=>{a(r),i(e)},className:`flex items-center justify-center w-10 h-10 rounded-lg text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors`,children:t})}),(0,X.jsx)(J0,{side:`right`,sideOffset:8,children:n})]})}function e2(){let{state:e,toggleM0:t}=pS(),n=z0();return(0,X.jsxs)(`button`,{type:`button`,onClick:t,"aria-label":`${e.m0Open?`Close menu`:`Open menu`}${n?` — offline, connection options in menu`:``}`,"data-shell":`rail`,className:`fixed bottom-rail-inset left-2 z-nav flex h-rail w-rail items-center justify-center rounded-full bg-foreground text-background shadow-elevation-4 md:hidden`,children:[e.m0Open?(0,X.jsx)(Ne,{className:`h-5 w-5`}):(0,X.jsx)(bn,{className:`h-5 w-5`}),n&&(0,X.jsx)(`span`,{"aria-hidden":!0,className:`absolute right-0 top-0 h-3 w-3 rounded-full border-2 border-background bg-amber-500`})]})}function t2(){let{state:e,closeM0:t,closeM1:n}=pS(),{state:r,setView:i,closeT1:a}=Ss(),o=$c(),{showToast:s}=mo(),c=e.user?.userType===`admin`,l=Tx(),u=()=>{r.t1Open?a():i(`tools`),n(),t()},d=(0,Y.useCallback)(async()=>{try{await J.post(`/auth/logout`),localStorage.removeItem(`authToken`),o(`/login`)}catch{s({title:`Error`,description:`Logout failed`,variant:`destructive`})}},[o,s]);return(0,X.jsxs)(G0,{delayDuration:200,children:[e.m0Open&&(0,X.jsx)(`div`,{className:`fixed inset-0 z-nav-scrim bg-scrim animate-fade-in md:hidden`,onClick:t,"aria-hidden":!0}),(0,X.jsxs)(`div`,{"data-shell":`rail`,className:G(`flex flex-col items-center w-rail h-full bg-transparent shrink-0`,e.m0Open?`max-md:fixed max-md:left-2 max-md:top-2 max-md:bottom-rail-stack max-md:z-rail max-md:h-auto max-md:rounded-[var(--panel-radius)] max-md:bg-card max-md:surface-glass max-md:shadow-elevation-5 max-md:animate-fade-in`:`max-md:hidden`),children:[(0,X.jsx)(`div`,{className:`flex items-center justify-center h-12 w-full shrink-0`,children:(0,X.jsx)(`button`,{type:`button`,"aria-label":`Canvas home`,onClick:()=>o(`/home`),className:`flex items-center justify-center w-10 h-10 rounded-lg hover:bg-accent/50 transition-colors`,children:(0,X.jsx)(`img`,{src:`/images/logo-br_128x128.png`,alt:``,className:`w-6 h-6`})})}),(0,X.jsxs)(`nav`,{className:`flex flex-col items-center gap-1 py-2 flex-1 min-h-0 overflow-y-auto`,children:[(!l.local||l.workspace!==!1)&&(0,X.jsx)(Q0,{section:`contexts`,icon:(0,X.jsx)(wt,{className:`w-5 h-5`}),label:`Contexts`}),(!l.local||l.workspace!==!1)&&(0,X.jsx)(Q0,{section:`workspaces`,icon:(0,X.jsx)(fr,{className:`w-5 h-5`}),label:`Workspaces`}),(!l.local||l.agent)&&(0,X.jsx)(Q0,{section:`agents`,icon:(0,X.jsx)(ft,{className:`w-5 h-5`}),label:`Agents`}),(!l.local||l.workspace!==!1)&&(0,X.jsx)($0,{path:`/roles`,section:null,icon:(0,X.jsx)(Zn,{className:`w-5 h-5`}),label:`Roles`}),c&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`w-6 h-px bg-border my-2`}),(0,X.jsx)($0,{path:`/admin/users`,icon:(0,X.jsx)(We,{className:`w-5 h-5`}),label:`All Users`}),(0,X.jsx)($0,{path:`/admin/logs`,icon:(0,X.jsx)(Tn,{className:`w-5 h-5`}),label:`Server Logs`}),(0,X.jsx)($0,{path:`/admin/workspaces`,icon:(0,X.jsx)(Ae,{className:`w-5 h-5`}),label:`All Workspaces`}),(0,X.jsx)($0,{path:`/admin/agents`,icon:(0,X.jsx)(ft,{className:`w-5 h-5`}),label:`All Agents`}),(0,X.jsx)($0,{path:`/admin/roles`,icon:(0,X.jsx)(Zn,{className:`w-5 h-5`}),label:`All Roles`})]})]}),(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-1 py-2 shrink-0`,children:[(0,X.jsx)(`div`,{className:`w-6 h-px bg-border mb-2`}),(0,X.jsx)(W0,{}),(0,X.jsxs)(K0,{children:[(0,X.jsx)(q0,{asChild:!0,children:(0,X.jsx)(`button`,{type:`button`,onClick:u,"aria-label":r.t1Open?`Close toolbox`:`Open toolbox`,className:G(`flex items-center justify-center w-10 h-10 rounded-lg transition-colors`,r.t1Open?`bg-accent text-foreground`:`text-muted-foreground hover:text-foreground hover:bg-accent/50`),children:(0,X.jsx)(hr,{className:`w-5 h-5`})})}),(0,X.jsx)(J0,{side:`right`,sideOffset:8,children:`Toolbox`})]}),!l.local&&(0,X.jsx)($0,{path:`/settings`,section:`settings`,icon:(0,X.jsx)($t,{className:`w-5 h-5`}),label:`Settings`}),(0,X.jsxs)(K0,{children:[(0,X.jsx)(q0,{asChild:!0,children:(0,X.jsx)(`button`,{type:`button`,"aria-label":e.user?.email?`Profile: ${e.user.email}`:`Profile`,onClick:()=>o(`/home`),className:`flex items-center justify-center w-10 h-10 rounded-lg hover:bg-accent/50 transition-colors`,children:(0,X.jsx)(Y0,{className:`h-7 w-7 touch-target`,children:(0,X.jsx)(Z0,{className:`text-[10px] bg-muted`,children:e.user?.email?(e=>e.split(`@`)[0].split(`.`).map(e=>e.charAt(0).toUpperCase()).join(``).slice(0,2))(e.user.email):`U`})})})}),(0,X.jsx)(J0,{side:`right`,sideOffset:8,children:e.user?.email?.split(`@`)[0]||`Profile`})]}),(0,X.jsxs)(K0,{children:[(0,X.jsx)(q0,{asChild:!0,children:(0,X.jsx)(`button`,{type:`button`,"aria-label":`Log out`,onClick:d,className:`flex items-center justify-center w-10 h-10 rounded-lg text-destructive hover:bg-destructive/10 transition-colors`,children:(0,X.jsx)(Bn,{className:`w-5 h-5`})})}),(0,X.jsx)(J0,{side:`right`,sideOffset:8,children:`Logout`})]})]})]})]})}function n2(e){let[t,n]=(0,Y.useState)([]),[r,i]=(0,Y.useState)(!1),a=(0,Y.useRef)(!1),o=(0,Y.useRef)(!1),s=(0,Y.useCallback)(async()=>{if(!o.current){o.current=!0,i(!0);try{let e=await Xo();n(e||[]),a.current=!0}catch(e){console.error(`Failed to fetch contexts:`,e)}finally{o.current=!1,i(!1)}}},[]),c=(0,Y.useRef)(s);(0,Y.useEffect)(()=>{c.current=s});let l=(0,Y.useCallback)(()=>{a.current=!1,s()},[s]);return(0,Y.useEffect)(()=>{e&&!a.current&&s()},[e,s]),(0,Y.useEffect)(()=>{if(!e)return;let t=()=>Zu.emit(`subscribe`,{channel:`context`}),r=()=>Zu.emit(`unsubscribe`,{channel:`context`}),i=Zu.on(`connect`,()=>{t(),s()});t();let o=e=>{let t=e;!t?.id||!t?.userId||n(e=>e.some(e=>e.id===t.id&&e.userId===t.userId)?e:[...e,t])},l=e=>{let t=e;!t?.id||!t?.userId||n(e=>e.map(e=>e.id===t.id&&e.userId===t.userId?{...e,...t}:e))},u=e=>{let t=e,r=t?.contextId??t?.id;r&&n(e=>e.filter(e=>e.id!==r))},d=e=>{let t=e;!t?.id||!t?.userId||n(e=>e.map(e=>e.id===t.id&&e.userId===t.userId?{...e,...t}:e))},f=()=>{a.current=!1,c.current()},p=[[`context:created`,o],[`context.created`,o],[`context:updated`,l],[`context.updated`,l],[`context:deleted`,u],[`context.deleted`,u],[`context:url:changed`,d],[`context.url.set`,d],[`context:url:set`,d],[`workspace:status:changed`,f],[`workspace.status.changed`,f]];return p.forEach(([e,t])=>Zu.on(e,t)),()=>{r(),i?.(),p.forEach(([e,t])=>Zu.off(e,t))}},[e,s]),(0,Y.useEffect)(()=>{let e=e=>{let t=e.detail;n(e=>e.filter(e=>!Wo(e,t)))};return window.addEventListener(Uo,e),()=>window.removeEventListener(Uo,e)},[]),(0,Y.useEffect)(()=>{let e=()=>{a.current=!1,s()};return window.addEventListener(`contexts:refresh`,e),()=>window.removeEventListener(`contexts:refresh`,e)},[s]),{contexts:(0,Y.useMemo)(()=>wS(t),[t]),isLoading:r,refresh:l}}function r2(){let{state:e,selectEntity:t,openM2:n,closeM2:r}=pS(),i=Pm(),{contexts:a,isLoading:o}=n2(e.activeSection===`contexts`),{showToast:s}=mo(),l=$c(),[u,d]=(0,Y.useState)(null),f=u&&u.base===a?u.order:a,p=e=>e.isShared===!0||e.type===`shared`,{rowProps:m,handleProps:h,draggingIndex:g,insertLineClass:_}=DS((e,t)=>{let n=TS(f,e,t);d({base:a,order:n}),ES(n,(e,t)=>p(e)?Promise.resolve():Ko(e.id,{order:t})).then(({failed:e})=>{window.dispatchEvent(new CustomEvent(`contexts:refresh`)),e&&s({title:`Partial reorder`,description:`${e} context(s) could not be reordered`,variant:`destructive`})})}),v=e=>{t(e.id),l(`/contexts/${e.id}`)};return(0,X.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between px-4 h-12 border-b border-border shrink-0`,children:[(0,X.jsx)(`span`,{className:`text-sm font-semibold`,children:`Contexts`}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>{r(),l(`/contexts?create=1`)},title:`Create context`,"aria-label":`Create context`,className:`flex items-center justify-center w-6 h-6 rounded-full bg-foreground text-background hover:opacity-80 transition-opacity`,children:(0,X.jsx)(H,{className:`w-3.5 h-3.5`})})]}),(0,X.jsx)(`div`,{className:`flex-1 overflow-y-auto py-2`,children:o&&a.length===0?(0,X.jsx)(`div`,{className:`px-4 py-3 text-xs text-muted-foreground`,children:`Loading...`}):a.length===0?(0,X.jsx)(`div`,{className:`px-4 py-3 text-xs text-muted-foreground`,children:`No contexts found`}):(0,X.jsx)(`div`,{className:`space-y-1.5 px-2`,children:f.map((r,a)=>{let o=e.selectedEntityId===r.id,s=p(r),u=r.workspaceActive!==!1,d=rp(r.color);return(0,X.jsxs)(`div`,{...m(a),"data-active":o||void 0,className:G(`group relative rounded-md py-2.5 pl-3 pr-7 transition-all shadow-elevation-1`,u?`cursor-pointer hover:shadow `+(o?`bg-accent shadow`:`bg-card hover:bg-accent/50`):`cursor-not-allowed opacity-50 bg-card`,_(a,f.length),g===a&&`opacity-60`),onClick:()=>u&&v(r),title:u?void 0:`Workspace "${r.workspaceName}" is not active`,children:[s?(0,X.jsx)(`div`,{className:G(`absolute inset-y-0 right-0 w-4 rounded-r-md`,!d&&`bg-muted`),style:d?{backgroundColor:d}:void 0}):(0,X.jsx)(`button`,{type:`button`,...h(a),title:`Drag to reorder`,"aria-label":`Drag to reorder`,className:G(`absolute inset-y-0 right-0 flex w-4 cursor-grab items-center justify-center rounded-r-md active:cursor-grabbing`,!d&&`bg-muted`),style:d?{backgroundColor:d}:void 0,children:(0,X.jsx)(Ye,{className:G(`h-3.5 w-3.5`,ip(d))})}),(0,X.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,X.jsx)(c,{icon:r.icon||`ph:stack-fill`,width:16,height:16,color:d,className:G(`mt-0.5 shrink-0`,!d&&`text-muted-foreground`)}),(0,X.jsx)(`span`,{className:`text-sm font-medium truncate flex-1`,children:r.name||r.id}),s&&(0,X.jsx)(`span`,{className:`rounded-full bg-info/10 px-1.5 py-0.5 text-[9px] text-info shrink-0`,children:`Shared`}),u&&(0,X.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),t(r.id),n(`detail`,r.id)},className:`reveal-on-hover shrink-0 mt-0.5`,title:`Switch context URL`,children:(0,X.jsx)(Kt,{className:`w-3.5 h-3.5 text-muted-foreground hover:text-foreground`})}),(0,X.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),t(r.id),i?n(`settings`,r.id):l(`/contexts/${r.id}/settings/general`)},className:`reveal-on-hover shrink-0 mt-0.5`,title:`Settings`,children:(0,X.jsx)($t,{className:`w-3.5 h-3.5 text-muted-foreground hover:text-foreground`})})]}),r.name&&(0,X.jsx)(`div`,{className:`text-[10px] text-muted-foreground/60 truncate font-mono`,children:r.id}),(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground truncate mt-0.5`,children:r.url||`/`}),r.ownerEmail&&(0,X.jsx)(`div`,{className:`text-[10px] text-muted-foreground truncate mt-0.5`,children:r.ownerEmail})]},`${r.userId||`u`}-${r.id}`)})})})]})}function i2({title:e,onBack:t,action:n,className:r,icon:i,accentColor:a}){let{closeM1:o}=pS(),s=rp(a);return(0,X.jsxs)(`div`,{className:G(`flex items-center h-12 px-2 border-b border-border shrink-0 gap-1`,r),style:{...s?{borderLeft:`6px solid ${s}`}:{},borderBottomWidth:3,...s?{borderBottomColor:s}:{}},children:[(0,X.jsxs)(`button`,{type:`button`,onClick:t,className:`flex items-center gap-0.5 h-8 rounded px-1 hover:bg-accent/50 text-muted-foreground hover:text-foreground transition-colors flex-1 min-w-0`,title:`Back`,children:[(0,X.jsx)(ae,{className:`w-4 h-4 shrink-0`}),i&&(0,X.jsx)(c,{icon:i,width:16,height:16,color:s,className:G(`mr-1 shrink-0`,!s&&`text-muted-foreground`)}),(0,X.jsx)(`span`,{className:`text-sm font-semibold truncate`,children:e})]}),n&&(0,X.jsx)(`div`,{className:`shrink-0`,children:n}),(0,X.jsx)(`button`,{type:`button`,onClick:o,className:`flex h-8 w-8 shrink-0 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground`,title:`Close menu`,"aria-label":`Close menu`,children:(0,X.jsx)(Ne,{className:`w-4 h-4`})})]})}var a2=22,o2=44,s2=4;function c2(e,t){if(!t)return null;let n=String(e||``).split(`/`).filter(Boolean);return n[0]===`workspace`&&n.length>=2?{address:`workspace:${n[1]}`,key:n.slice(2).join(`/`)}:n[0]===`device`&&n.length>=3?{address:n[2],key:n.slice(3).join(`/`)}:n[0]===`file`&&n.length>=2?{address:n[1],key:n.slice(2).join(`/`)}:null}function l2(e,t){if(!t)return null;let n=String(e||``).split(`/`).filter(Boolean);return n[0]===`workspace`&&n.length>=2?`workspace:${n[1]}`:n[0]===`device`?n.length>=3?n[2]:null:n.length>=2?n[1]:null}function u2({x:e,y:t,node:n,path:r,isBackendsTree:i,onClose:a,onShowContent:o,onOpenToSide:s,sourceLayer:c,targetLayers:l,clipboard:u,onStartInlineCreate:d,onChangeIcon:f,onNewCanvas:p,onShareCanvas:m,onRemove:h,onRename:g,onLock:_,onUnlock:v,onDestroy:y,onMerge:x,onSubtract:S,onMergeDown:C,onSubtractDown:w,onResyncBackend:T,onAddRule:E,onSyncFolderTree:D,onAddStoreRule:O,onRenameBackendFolder:k,onDeleteBackendFolder:A,onCopy:j,onCut:M,onPaste:N,pastedDocumentIds:P,onPasteDocuments:F,isPinned:I,onTogglePin:L}){let ee=c&&l.size>0&&c.path===r,ne=!i&&(C||w)&&r!==`/`&&n.type!==`canvas`&&r.split(`/`).filter(Boolean).length>1,R=c&&l.size>0&&(c.path===r||l.has(r)),z=async e=>{try{await e()}catch(e){alert(e instanceof Error?e.message:String(e))}a()},B=(e,t,n,r=!1)=>(0,X.jsxs)(`button`,{type:`button`,className:G(`flex items-center gap-2 w-full px-3 py-1.5 text-xs hover:bg-accent rounded-sm text-left`,r&&`text-destructive hover:bg-destructive/10`),onClick:()=>z(n),children:[e,t]});return(0,X.jsxs)(wf,{x:e,y:t,onClose:a,className:`min-w-[11rem] rounded-md border bg-popover p-1 shadow-elevation-3`,children:[o&&B((0,X.jsx)(Ht,{className:`w-3 h-3`}),`Show layer content`,async()=>{o(r,n.id||void 0)}),s&&B((0,X.jsx)(Ht,{className:`w-3 h-3`}),`Open to the side`,async()=>{s(r)}),(o||s)&&(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),n.type===`canvas`&&m&&B((0,X.jsx)(vn,{className:`w-3 h-3`}),`Share canvas`,async()=>{await m(r)}),n.type===`canvas`&&m&&(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),T&&l2(r,i)&&(0,X.jsxs)(X.Fragment,{children:[B((0,X.jsx)(Te,{className:`w-3 h-3`}),`Resync backend (${l2(r,i)})`,async()=>{await T(r)}),(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`})]}),i&&l2(r,i)&&(E||D||O)&&(0,X.jsxs)(X.Fragment,{children:[E&&B((0,X.jsx)(st,{className:`w-3 h-3`}),`Auto-Link documents to…`,async()=>{E(r)}),O&&c2(r,i)&&B((0,X.jsx)(gr,{className:`w-3 h-3`}),`Create storage rule…`,async()=>{O(r)}),D&&B((0,X.jsx)(Nn,{className:`w-3 h-3`}),`Sync folders into Directory`,async()=>{await D(r)}),(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`})]}),!i&&O&&r!==`/`&&(0,X.jsxs)(X.Fragment,{children:[B((0,X.jsx)(gr,{className:`w-3 h-3`}),`Create rule…`,async()=>{O(r)}),B((0,X.jsx)(tr,{className:`w-3 h-3`}),`Create download rule…`,async()=>{O(r,`download`)}),(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`})]}),(!i||c2(r,i))&&(0,X.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2 w-full px-3 py-1.5 text-xs hover:bg-accent rounded-sm text-left`,onClick:()=>{d(r),a()},children:[(0,X.jsx)(H,{className:`w-3 h-3`}),`New folder here`]}),k&&c2(r,i)?.key&&B((0,X.jsx)(vr,{className:`w-3 h-3`}),`Rename folder`,async()=>{let e=r.split(`/`).pop()||``,t=prompt(`New folder name:`,e);!t||t===e||await k(r,t)}),A&&c2(r,i)?.key&&B((0,X.jsx)(ut,{className:`w-3 h-3`}),`Delete folder`,async()=>{confirm(`Delete folder "${r.split(`/`).pop()}" and its contents from the backend?`)&&await A(r)},!0),p&&!i&&(0,X.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2 w-full px-3 py-1.5 text-xs hover:bg-accent rounded-sm text-left`,onClick:()=>{p(r),a()},children:[(0,X.jsx)(er,{className:`w-3 h-3 text-primary`}),`New canvas here…`]}),r!==`/`&&L&&B(I?(0,X.jsx)(V,{className:`w-3 h-3`}):(0,X.jsx)(te,{className:`w-3 h-3`}),I?`Unpin`:`Pin`,async()=>{await L()}),r!==`/`&&f&&(0,X.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2 w-full px-3 py-1.5 text-xs hover:bg-accent rounded-sm text-left`,onClick:()=>{f(),a()},children:[(0,X.jsx)(qe,{className:`w-3 h-3`}),`Change icon`]}),r!==`/`&&!n.locked&&g&&!i&&B((0,X.jsx)(vr,{className:`w-3 h-3`}),`Rename`,async()=>{let e=r.split(`/`).pop()||``,t=prompt(`New name:`,e);!t||t===e||await g(r,t)}),(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),B((0,X.jsx)(He,{className:`w-3 h-3`}),`Copy`,async()=>j(r)),!i&&B((0,X.jsx)(ur,{className:`w-3 h-3`}),`Cut`,async()=>M(r)),u&&!i&&B((0,X.jsx)(b,{className:`w-3 h-3`}),`Paste (${u.mode})`,async()=>N(r)),P&&P.length>0&&F&&B((0,X.jsx)(b,{className:`w-3 h-3`}),`Paste ${P.length} document(s)`,async()=>{await F(r,P)}),r!==`/`&&!n.locked&&h&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),B((0,X.jsx)(ut,{className:`w-3 h-3`}),`Remove`,async()=>{confirm(`Remove "${r}"?`)&&await h(r,!1)},!0),B((0,X.jsx)(ut,{className:`w-3 h-3`}),`Remove recursive`,async()=>{confirm(`Remove "${r}" and all children?`)&&await h(r,!0)},!0),i&&(0,X.jsxs)(X.Fragment,{children:[B((0,X.jsx)(ut,{className:`w-3 h-3`}),`Remove and purge documents`,async()=>{confirm(`Remove "${r}" and all children, and PERMANENTLY purge every document under it from the index?`)&&await h(r,!0,!0)},!0),B((0,X.jsx)(ut,{className:`w-3 h-3`}),`Remove, purge and destroy on backend`,async()=>{confirm(`Remove "${r}" and all children, purge every document under it from the index, and PERMANENTLY DELETE the mirrored files/messages on the backend?`)&&await h(r,!0,!0,!0)},!0)]})]}),(_||v||y)&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),n.locked?v&&B((0,X.jsx)(fn,{className:`w-3 h-3`}),`Unlock layer`,async()=>{await v(n.id)}):_&&B((0,X.jsx)(Ot,{className:`w-3 h-3`}),`Lock layer`,async()=>{await _(n.id)}),n.locked&&n.lockedBy&&n.lockedBy.length>0&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`px-3 pt-1 pb-0.5 text-[10px] uppercase tracking-wide text-muted-foreground`,children:`Locked by`}),n.lockedBy.map(e=>(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-3 py-1 text-xs`,children:[(0,X.jsx)(`span`,{className:`truncate`,title:e,children:e}),v&&(0,X.jsx)(`button`,{type:`button`,title:`Remove lock held by ${e}`,className:`shrink-0 text-muted-foreground hover:text-destructive`,onClick:()=>z(async()=>{await v(n.id,e)}),children:(0,X.jsx)(fn,{className:`w-3 h-3`})})]},e))]}),r!==`/`&&!n.locked&&y&&B((0,X.jsx)(ut,{className:`w-3 h-3`}),`Destroy layer`,async()=>{confirm(`Permanently destroy layer "${n.label||n.name}" and its bitmap?`)&&await y(n.id)},!0)]}),ne&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),C&&B((0,X.jsx)(Xt,{className:`w-3 h-3`}),`Merge down (into ancestors)`,async()=>{confirm(`Merge "${n.label||n.name}" into every layer above it on\n${r}\n\nAfter this, ${r} lists its documents.`)&&await C(r)}),w&&B((0,X.jsx)(dn,{className:`w-3 h-3`}),`Subtract from ancestors`,async()=>{confirm(`Remove "${n.label||n.name}"'s documents from every layer above it on\n${r}\n\nUndo of "Merge down". Documents an ancestor holds for other reasons are removed from it too.`)&&await w(r)})]}),ee&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),x&&B((0,X.jsx)(wt,{className:`w-3 h-3`}),`Merge this layer into ${l.size} selected`,async()=>{confirm(`Merge "${r}" (source) INTO:\n${Array.from(l.keys()).join(`
92
92
  `)}\n\nThe selected layers gain this layer's documents. This layer is unchanged.`)&&await x(n.id,Array.from(l.values()))}),S&&B((0,X.jsx)(wt,{className:`w-3 h-3`}),`Subtract this layer from ${l.size} selected`,async()=>{confirm(`Subtract "${r}" (source) FROM:\n${Array.from(l.keys()).join(`
93
93
  `)}\n\nThe selected layers lose this layer's documents. This layer is unchanged.`)&&await S(n.id,Array.from(l.values()))})]}),R&&!ee&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`my-1 h-px bg-border`}),(0,X.jsxs)(`div`,{className:`px-3 py-1.5 text-[10px] text-muted-foreground italic`,children:[`This is a target. Right-click the source (`,c?.path,`) to merge/subtract`]})]})]})}function d2({onConfirm:e,onCancel:t,placeholder:n=`folder name…`}){let r=(0,Y.useRef)(null);(0,Y.useEffect)(()=>{r.current?.focus()},[]);let i=()=>{let n=r.current?.value.trim()??``;n?e(n):t()};return(0,X.jsxs)(`div`,{className:`flex min-h-11 items-center gap-2 rounded-md px-3 py-2.5 bg-card ring-1 ring-primary/50 shadow-elevation-3 text-sm font-medium`,children:[(0,X.jsx)(Xe,{className:`w-4 h-4 opacity-0 shrink-0`}),(0,X.jsx)(`input`,{ref:r,className:`flex-1 bg-transparent outline-none min-w-0 text-sm font-medium placeholder:font-normal placeholder:text-muted-foreground`,placeholder:n,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),i()),e.key===`Escape`&&t()},onBlur:i})]})}function f2(e,t){return e===`/`?`/${t}`:`${e}/${t}`}function p2(e,t,n){let r=f2(t,e.name);return r.toLowerCase().includes(n)||(e.label||``).toLowerCase().includes(n)?!0:e.children?.some(e=>p2(e,r,n))??!1}function m2({node:e,parentPath:t,depth:n,isLast:r,selectedPath:i,pendingPath:a,contentPath:o,readOnly:s,sourceLayer:l,targetLayers:u,clipboard:d,searchQuery:f,inlineCreateParent:p,onSelect:m,onShiftSelect:h,onShowContent:g,onCtrl:_,onCtxMenu:v,onConfirmCreate:y,onCancelCreate:b,onOpenPicker:x,styleOverrides:S,dragOverPath:C,isCopyDrag:w,onDragStart:T,onDragEnter:E,onDragOver:D,onDragLeave:O,onDragEnd:k,onDrop:A,resyncingPaths:j,accordion:M=!1,trail:N=[]}){let P=vf(),F=f2(t,e.name),I=S.get(F)??Jf(e),[L,ee]=(0,Y.useState)(()=>i!==`/`&&(i===F||i.startsWith(F+`/`))),[te,ne]=(0,Y.useState)(i);if(te!==i&&(ne(i),i!==`/`&&i.startsWith(F+`/`)&&ee(!0)),f&&!p2(e,t,f))return null;let R=L||p===F||f.length>0,z=e.children&&e.children.length>0,B=i===F,re=a===F,ie=l?.path===F,ae=u.has(F),oe=e.type===`canvas`,se=t=>{if(t.ctrlKey||t.metaKey){_(F,e.id);return}if(t.shiftKey&&h){h(F);return}m(F)},ce=[...N].reverse().find(Boolean)??null,V=I.color||ce,le=M?[...N,V]:N,ue=i!==`/`&&i.startsWith(F+`/`),de=!ie&&!ae,fe=de&&B,pe=(e,t)=>`color-mix(in oklab, ${e} ${t}%, var(--card))`,me=e=>`color-mix(in oklab, currentColor ${e}%, transparent)`,he=Math.min(n,5),ge=R&&!!z,_e=n>0&&ce?ce:V,ve=de&&!fe&&!e.locked&&ge,ye=_e?Math.min(12+he*5+(ue?6:0),34):Math.min(he*7+(ue?5:0)+(re?3:0),30),be=fe?`var(--primary)`:ie?pe(`var(--info)`,22):ae?pe(`var(--warning)`,22):e.locked?pe(`var(--warning)`,20+he*4):ve?V?pe(V,84):pe(`var(--foreground)`,38):pe(_e||`var(--foreground)`,ye),xe=fe?`text-primary-foreground`:ve&&V?ap(V):`text-foreground`,H=M&&R&&z&&n<s2,Se=(0,X.jsxs)(`div`,{"data-active":B||void 0,className:G(`group relative flex cursor-pointer select-none items-stretch overflow-hidden text-sm`,`after:pointer-events-none after:absolute after:inset-0 after:bg-foreground/0 after:transition-colors hover:after:bg-foreground/[0.07]`,xe,ie&&`ring-1 ring-inset ring-info/40`,ae&&!ie&&`ring-1 ring-inset ring-warning/40`,C===F&&!s&&!w&&`ring-2 ring-inset ring-info`,C===F&&!s&&w&&`ring-2 ring-inset ring-success`),style:{height:o2,background:be,borderBottom:`1px solid ${me(14)}`,...H?{position:`sticky`,top:n*o2,zIndex:20-n}:{}},draggable:!s,onClick:se,...s?{}:P,onContextMenu:t=>{s||(t.preventDefault(),v(t,F,e))},onDragStart:e=>{s||T(F,e)},onDragEnter:e=>{s||E(F,e)},onDragOver:e=>{s||D(F,e)},onDragLeave:e=>O(F,e),onDragEnd:()=>k(),onDrop:e=>{s||A(F,e)},children:[N.length>0&&(0,X.jsx)(`span`,{className:`flex shrink-0 gap-px`,"aria-hidden":!0,children:N.map((e,t)=>(0,X.jsx)(`span`,{className:`w-[3px]`,style:{background:e||me(28)}},t))}),(()=>{let t=I.color?{background:I.color}:ce?{background:`color-mix(in oklab, ${ce} 45%, transparent)`}:{background:me(10)},n=(0,X.jsx)(c,{icon:I.icon||(oe?`ph:squares-four-fill`:`ph:folder-fill`),width:18,height:18,className:G(`shrink-0`,I.color?ip(I.color):fe?`text-primary-foreground`:ve?`text-current`:`text-foreground/80`)}),r=`flex w-10 shrink-0 items-center justify-center`;return x?(0,X.jsx)(`button`,{type:`button`,className:r,style:t,title:`Change icon`,onClick:t=>{Sr()||(t.stopPropagation(),x(t,F,e))},onContextMenu:t=>{t.preventDefault(),t.stopPropagation(),x(t,F,e)},children:n}):(0,X.jsx)(`span`,{className:r,style:t,children:n})})(),(0,X.jsx)(`span`,{className:G(`min-w-0 flex-1 self-center truncate px-2.5`,B||ue||ge?`font-semibold`:`font-medium`),title:e.description||void 0,children:e.label||e.name}),j?.has(F)&&(0,X.jsx)(Te,{className:`mr-1 h-3.5 w-3.5 shrink-0 animate-spin self-center opacity-70`,"aria-label":`Indexing`}),!s&&(0,X.jsx)(`button`,{type:`button`,className:`reveal-on-hover shrink-0 self-center rounded p-1 hover:bg-foreground/10`,onClick:t=>{t.stopPropagation(),v(t,F,e)},children:(0,X.jsx)(qt,{className:`h-4 w-4`})}),(0,X.jsx)(`button`,{type:`button`,className:G(`relative z-[1] flex w-12 shrink-0 cursor-pointer items-center justify-center transition-colors`,`bg-[color-mix(in_oklab,currentColor_9%,transparent)] hover:bg-[color-mix(in_oklab,currentColor_24%,transparent)] active:bg-[color-mix(in_oklab,currentColor_32%,transparent)]`,!z&&p!==F&&`invisible`),style:{borderLeft:`1px solid ${me(16)}`},"aria-label":R?`Collapse`:`Expand`,"aria-expanded":R,title:R?`Collapse`:`Expand`,onClick:e=>{e.stopPropagation(),ee(e=>!e)},children:R?(0,X.jsx)(Ke,{className:`h-5 w-5`,strokeWidth:2.25}):(0,X.jsx)(Xe,{className:`h-5 w-5`,strokeWidth:2.25})})]});return(0,X.jsxs)(`div`,{className:`relative`,children:[M?Se:(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`pointer-events-none absolute top-0 w-px bg-border`,style:{left:`-${a2/2}px`,...r?{height:`1.375rem`}:{bottom:0}}}),(0,X.jsx)(`div`,{className:`pointer-events-none absolute top-[1.375rem] h-px bg-border`,style:{left:`-${a2/2}px`,width:`${a2/2}px`}}),(0,X.jsxs)(`div`,{"data-active":B||void 0,className:G(`group relative flex min-h-11 items-center gap-2 rounded-md px-3 py-2.5 cursor-pointer transition-all select-none overflow-hidden`,`shadow-elevation-3 hover:shadow-elevation-4 text-sm`,`before:absolute before:left-0 before:top-0 before:bottom-0 before:w-1.5 before:transition-colors`,ie&&`ring-1 ring-info/40 bg-info/10 before:bg-info`,ae&&!ie&&`ring-1 ring-warning/40 bg-warning/10 before:bg-warning`,!ie&&!ae&&B&&!e.locked&&`bg-primary/[0.08] hover:bg-primary/[0.12] before:bg-primary`,!ie&&!ae&&B&&e.locked&&`bg-warning/15 hover:bg-warning/20 before:bg-primary`,!ie&&!ae&&!B&&re&&`bg-primary/[0.03] before:bg-transparent`,!ie&&!ae&&!B&&!re&&!e.locked&&`bg-card hover:bg-primary/[0.04] before:bg-transparent`,!ie&&!ae&&!B&&e.locked&&`bg-warning/15 hover:bg-warning/20 before:bg-warning`,C===F&&!s&&!w&&`ring-2 ring-info bg-info-subtle/50`,C===F&&!s&&w&&`ring-2 ring-success bg-success-subtle/50`),style:{borderRight:I.color?`4px solid ${I.color}`:`4px solid transparent`},draggable:!s,onClick:se,...s?{}:P,onContextMenu:t=>{s||(t.preventDefault(),v(t,F,e))},onDragStart:e=>{s||T(F,e)},onDragEnter:e=>{s||E(F,e)},onDragOver:e=>{s||D(F,e)},onDragLeave:e=>O(F,e),onDragEnd:()=>k(),onDrop:e=>{s||A(F,e)},children:[(0,X.jsx)(`button`,{type:`button`,className:G(`shrink-0 text-muted-foreground hover:text-foreground`,!z&&p!==F&&`invisible`),onClick:e=>{e.stopPropagation(),ee(e=>!e)},children:R?(0,X.jsx)(Ke,{className:`w-4 h-4`}):(0,X.jsx)(Xe,{className:`w-4 h-4`})}),(()=>{let t=(0,X.jsx)(c,{icon:I.icon||(oe?`ph:squares-four-fill`:`ph:folder-fill`),width:16,height:16,color:I.color||void 0,className:G(`shrink-0`,!I.color&&(oe?`text-primary`:`text-muted-foreground`))});return x?(0,X.jsx)(`button`,{type:`button`,className:`shrink-0 rounded p-0.5 -m-0.5 hover:bg-muted-foreground/10 touch-target`,title:`Change icon`,onClick:t=>{Sr()||(t.stopPropagation(),x(t,F,e))},onContextMenu:t=>{t.preventDefault(),t.stopPropagation(),x(t,F,e)},children:t}):t})(),(0,X.jsx)(`span`,{className:`flex-1 truncate font-medium`,title:e.description||void 0,children:e.label||e.name}),j?.has(F)&&(0,X.jsx)(Te,{className:`w-3.5 h-3.5 shrink-0 animate-spin text-muted-foreground`,"aria-label":`Indexing`}),!s&&(0,X.jsx)(`button`,{type:`button`,className:`shrink-0 reveal-on-hover p-1 rounded hover:bg-muted-foreground/10 text-muted-foreground`,onClick:t=>{t.stopPropagation(),v(t,F,e)},children:(0,X.jsx)(qt,{className:`w-4 h-4`})})]})]}),R&&(z||p===F)&&(0,X.jsxs)(`div`,{className:M?void 0:`ml-[22px] mt-2 mb-1 space-y-1.5`,children:[p===F&&(0,X.jsx)(d2,{onConfirm:e=>y(F,e),onCancel:b}),e.children?.map((t,r)=>(0,X.jsx)(m2,{node:t,parentPath:F,depth:n+1,isLast:r===(e.children?.length??0)-1,selectedPath:i,pendingPath:a,contentPath:o,readOnly:s,sourceLayer:l,targetLayers:u,clipboard:d,searchQuery:f,inlineCreateParent:p,onSelect:m,onShiftSelect:h,onShowContent:g,onCtrl:_,onCtxMenu:v,onConfirmCreate:y,onCancelCreate:b,onOpenPicker:x,styleOverrides:S,dragOverPath:C,isCopyDrag:w,onDragStart:T,onDragEnter:E,onDragOver:D,onDragLeave:O,onDragEnd:k,onDrop:A,resyncingPaths:j,accordion:M,trail:le},t.id||t.name))]})]})}function h2({root:e,treeName:t=`context`,isBackendsTree:n=!1,selectedPath:r,pendingPath:i,onSelect:a,isLoading:o=!1,readOnly:s=!1,onAddRule:c,onSyncFolderTree:l,onAddStoreRule:u,rootLabel:d,contentPath:f,onShowContent:p,onOpenToSide:m,onShiftSelect:h,onInsertPath:g,onNewCanvas:_,onShareCanvas:v,onRemovePath:y,onRenamePath:b,onMovePath:x,onCopyPath:S,pastedDocumentIds:C,onPasteDocuments:w,onLockLayer:T,onUnlockLayer:E,onDestroyLayer:D,onMergeLayer:O,onSubtractLayer:k,onMergeDown:A,onSubtractDown:j,onResyncBackend:M,onCreateBackendFolder:N,onRenameBackendFolder:P,onDeleteBackendFolder:F,onUpdateNode:I,isPathPinned:L,onTogglePin:ee,searchQuery:te=``,resyncingPaths:ne}){let R=kE(),[z,B]=(0,Y.useState)(null),[re,ie]=(0,Y.useState)(null),[ae,oe]=(0,Y.useState)(new Map),[se,ce]=(0,Y.useState)(null),[V,le]=(0,Y.useState)(null),[ue,de]=(0,Y.useState)(new Map),[fe,pe]=(0,Y.useState)(e),me=(0,Y.useRef)(new Map),he=(0,Y.useRef)(null),[ge,_e]=(0,Y.useState)(null);if(e!==fe){pe(e);let t=ge;de(t?new Map([[t.path,t.style]]):new Map)}let[ve,ye]=(0,Y.useState)(null),[be,xe]=(0,Y.useState)(null),[H,Se]=(0,Y.useState)(!1),[Ce,we]=(0,Y.useState)(!1),[U,W]=(0,Y.useState)(!1),Te=(0,Y.useRef)(!1),Ee=(0,Y.useRef)(null),De=(0,Y.useRef)(t),Oe=(0,Y.useRef)(!1),ke=(0,Y.useRef)(!1);(0,Y.useEffect)(()=>{let e=e=>{B(e.detail??null)};return window.addEventListener(`tree:path-clipboard`,e),()=>window.removeEventListener(`tree:path-clipboard`,e)},[]),(0,Y.useEffect)(()=>{let e=e=>{let t=e.ctrlKey||e.altKey||ke.current;Oe.current=t,Se(t)};return window.addEventListener(`keydown`,e),window.addEventListener(`keyup`,e),()=>{window.removeEventListener(`keydown`,e),window.removeEventListener(`keyup`,e)}},[]);let Ae=(0,Y.useCallback)((e,n,r)=>{if(De.current!==t)return!0;let i=e.endsWith(`/`)?e.slice(0,-1):e,a=n.endsWith(`/`)?n.slice(0,-1):n,o=i.substring(0,i.lastIndexOf(`/`))||`/`;return!(a.startsWith(i+`/`)||i===a||!r&&a===o)},[t]),je=(0,Y.useCallback)((e,n)=>{Ee.current=e,De.current=t,n.dataTransfer.setData(`text/plain`,e),n.dataTransfer.setData(`application/x-canvas-tree-path`,JSON.stringify({path:e,treeName:t})),n.dataTransfer.effectAllowed=`copyMove`},[t]),Me=e=>e.ctrlKey||e.altKey||ke.current,Ne=(0,Y.useCallback)((e,t)=>{let n=Ee.current,r=Me(t);r!==Oe.current&&(Oe.current=r,Se(r)),!(n&&!Ae(n,e,r))&&(t.preventDefault(),xe(e))},[Ae]),Pe=(0,Y.useCallback)((e,t)=>{let n=Me(t);n!==Oe.current&&(Oe.current=n,Se(n));let r=Ee.current;if(r&&!Ae(r,e,n)){t.dataTransfer.dropEffect=`none`;return}t.preventDefault(),t.dataTransfer.dropEffect=n?`copy`:`move`},[Ae]),Fe=(0,Y.useCallback)((e,t)=>{t.currentTarget.contains(t.relatedTarget)||xe(t=>t===e?null:t)},[]),Ie=(0,Y.useCallback)(()=>{Ee.current=null,De.current=t,Oe.current=!1,Se(!1),xe(null)},[t]),Le=(0,Y.useCallback)(async(e,r)=>{r.preventDefault();let i=(()=>{try{return JSON.parse(r.dataTransfer.getData(`application/json`))}catch{return null}})();if(i?.type===`document`&&Array.isArray(i.documentIds)&&i.documentIds.length){if(Ee.current=null,Oe.current=!1,Se(!1),xe(null),w)try{await w(e,i.documentIds)}catch(e){alert(e instanceof Error?e.message:String(e))}return}let a=(()=>{try{return JSON.parse(r.dataTransfer.getData(`application/x-canvas-tree-path`))}catch{return null}})(),o=a?.path||r.dataTransfer.getData(`text/plain`),s=a?.treeName||De.current||t,c=Me(r)||Oe.current;if(Ee.current=null,De.current=t,Oe.current=!1,Se(!1),xe(null),!o)return;let l=r.shiftKey,u=s!==t;if(!(!u&&o===e)&&!(!u&&!Ae(o,e,c)))try{if(c&&S)await S(o,e,l,s,t);else if(!c&&x){let r=Te.current&&!n&&!!A;await x(o,e,l,s,t,r?{mergeDown:r}:void 0)}}catch(e){alert(e instanceof Error?e.message:String(e))}},[Ae,S,x,w,t,n,A]),Re=te.toLowerCase().trim(),ze=(0,Y.useCallback)((e,t,n)=>{e.stopPropagation(),ce({x:e.clientX,y:e.clientY,path:t,node:n})},[]),Be=(0,Y.useCallback)((e,t,n)=>{e.stopPropagation(),he.current=null,_e(null),le({x:e.clientX,y:e.clientY,path:t,node:n})},[]),Ve=(0,Y.useCallback)(e=>{if(!V||!I)return;let t=V.path,n={...ue.get(t)??(he.current?.path===t?he.current.style:Jf(V.node)),...e};he.current={path:t,style:n},_e({path:t,style:n}),de(e=>new Map(e).set(t,n));let r=Xf(V.node.metadata,n),i=me.current,a=i.get(t);a&&clearTimeout(a),i.set(t,setTimeout(()=>{i.delete(t),I(t,{metadata:r}).catch(e=>alert(e instanceof Error?e.message:String(e)))},350))},[V,I,ue]),He=(0,Y.useCallback)((e,t)=>{re?e===re.path?(ie(null),oe(new Map)):oe(n=>{let r=new Map(n);return r.has(e)?r.delete(e):r.set(e,t),r}):(ie({path:e,id:t}),oe(new Map))},[re]),Ue=(0,Y.useCallback)(async e=>{!z||!x||!S||z.treeName===t&&(e===z.path||e.startsWith(z.path+`/`))||(z.mode===`cut`?(await x(z.path,e,!1,z.treeName,t),B(null),window.dispatchEvent(new CustomEvent(`tree:path-clipboard`,{detail:null}))):await S(z.path,e,!0,z.treeName,t))},[z,x,S,t]);(0,Y.useEffect)(()=>{if(s)return;let e=e=>{let n=e.target;if(n?.tagName===`INPUT`||n?.tagName===`TEXTAREA`||e.key!==`F6`)return;if(e.preventDefault(),z?.mode===`cut`){Ue(r);return}let i={mode:`cut`,path:r,treeName:t};B(i),window.dispatchEvent(new CustomEvent(`tree:path-clipboard`,{detail:i}))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[z,Ue,s,r,t]);let We=(0,Y.useCallback)(async(e,t)=>{ye(null);let r=e===`/`?`/${t}`:`${e}/${t}`;try{c2(e,n)&&N?await N(e,t)&&a(r):g&&await g(r,!0)&&a(r)}catch(e){alert(e instanceof Error?e.message:String(e))}},[g,N,a,n]),Ge=(0,Y.useCallback)(()=>{ye(null)},[]),qe=(0,Y.useCallback)((e,n)=>{let r={mode:n,path:e,treeName:t};B(r),window.dispatchEvent(new CustomEvent(`tree:path-clipboard`,{detail:r}))},[t]),Je=(0,Y.useCallback)(t=>{if(!(s||kf(t.target))){if(Of(t,`Mod+V`)){C?.length&&w&&r?(t.preventDefault(),w(r,C).catch(()=>{})):z&&r&&(t.preventDefault(),Ue(r).catch(e=>alert(e instanceof Error?e.message:String(e))));return}if(r&&r!==`/`&&(Of(t,`Mod+C`)||!n&&Of(t,`Mod+X`))){t.preventDefault(),qe(r,t.key.toLowerCase()===`x`?`cut`:`copy`);return}if(y&&(t.key===`Delete`||t.key===`Backspace`)&&!(!r||r===`/`)){if(t.preventDefault(),Or(e,r)?.locked){alert(`"${r}" is locked`);return}confirm(`Remove "${r}"?`)&&y(r,!1).catch(e=>alert(e instanceof Error?e.message:String(e)))}}},[s,y,r,e,C,w,z,Ue,n,qe]),Ye=(0,Y.useCallback)(()=>{we(e=>{let t=!e;return ke.current=t,Oe.current=t,Se(t),t})},[]);if(o)return(0,X.jsx)(`div`,{className:`px-3 py-3 text-xs text-muted-foreground`,children:`Loading tree…`});if(!e)return(0,X.jsx)(`div`,{className:`px-3 py-3 text-xs text-muted-foreground`,children:`No tree available`});let Xe=re||ae.size>0,Ze={accordion:R,selectedPath:r,pendingPath:i,contentPath:f,readOnly:s,sourceLayer:re,targetLayers:ae,clipboard:z,searchQuery:Re,inlineCreateParent:ve,onSelect:a,onShiftSelect:h,onShowContent:p,onCtrl:He,onCtxMenu:ze,onConfirmCreate:We,onCancelCreate:Ge,onOpenPicker:I?Be:void 0,styleOverrides:ue,dragOverPath:be,isCopyDrag:H,onDragStart:je,onDragEnter:Ne,onDragOver:Pe,onDragLeave:Fe,onDragEnd:Ie,onDrop:Le,resyncingPaths:ne};return(0,X.jsxs)(`div`,{className:`px-3 py-2 space-y-1.5 outline-none`,tabIndex:0,onKeyDown:Je,children:[!s&&(0,X.jsxs)(`div`,{className:`flex items-center justify-end px-1 pb-0.5 text-[10px]`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:Ye,title:`Toggle drag-drop mode (or hold Ctrl / Alt while dragging)`,className:G(`px-2 py-0.5 rounded-full border transition-colors select-none`,Ce?`border-success bg-success/15 text-success dark:text-success`:`border-border text-muted-foreground hover:bg-muted`),children:Ce?`Drag → Copy`:`Drag → Move`}),A&&!n&&!Ce&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>W(e=>(Te.current=!e,!e)),title:`When moving a layer, also merge it into its new ancestors so the new path lists its documents`,className:G(`ml-1 px-2 py-0.5 rounded-full border transition-colors select-none`,U?`border-info bg-info/15 text-info dark:text-info`:`border-border text-muted-foreground hover:bg-muted`),children:U?`+ merge down`:`merge down: off`})]}),Xe&&(0,X.jsxs)(`div`,{className:`flex items-center justify-between px-1 pb-1 text-[10px] text-muted-foreground`,children:[(0,X.jsx)(`span`,{children:re?`Source: ${re.path} · ${ae.size} target(s)`:`Select source with ⌃-click`}),(0,X.jsx)(`button`,{type:`button`,className:`hover:text-foreground underline`,onClick:()=>{ie(null),oe(new Map)},children:`clear`})]}),(0,X.jsxs)(`div`,{"data-active":r===`/`&&!f||void 0,className:G(`group relative flex min-h-11 items-center gap-2 rounded-md px-3 py-2.5 cursor-pointer transition-all select-none`,`shadow-elevation-3 hover:shadow-elevation-4 text-sm`,r===`/`&&!f?`bg-primary/[0.06]`:`bg-card hover:bg-primary/[0.04]`,be===`/`&&!s&&!H&&`ring-2 ring-info bg-info-subtle/50`,be===`/`&&!s&&H&&`ring-2 ring-success bg-success-subtle/50`),style:{borderRight:`4px solid transparent`},onClick:()=>a(`/`),onDragEnter:e=>{s||Ne(`/`,e)},onDragOver:e=>{s||Pe(`/`,e)},onDragLeave:e=>Fe(`/`,e),onDrop:e=>{s||Le(`/`,e)},onContextMenu:e=>{!s&&g&&(e.preventDefault(),ce({x:e.clientX,y:e.clientY,path:`/`,node:{id:``,name:`/`,label:`/`,type:`root`,description:``,color:null,locked:!1,children:[]}}))},children:[(0,X.jsx)(Ke,{className:`w-4 h-4 shrink-0 text-muted-foreground`}),(0,X.jsxs)(`span`,{className:`flex-1 font-medium truncate`,children:[`/ `,d&&(0,X.jsxs)(`span`,{className:`text-muted-foreground font-normal`,children:[`[`,d,`]`]})]}),!s&&g&&(0,X.jsx)(`button`,{type:`button`,className:`shrink-0 reveal-on-hover p-1 rounded hover:bg-muted-foreground/10 text-muted-foreground`,onClick:e=>{e.stopPropagation(),ce({x:e.clientX,y:e.clientY,path:`/`,node:{id:``,name:`/`,label:`/`,type:`root`,description:``,color:null,locked:!1,children:[]}})},children:(0,X.jsx)(qt,{className:`w-4 h-4`})})]}),(0,X.jsxs)(`div`,{className:R?`mt-1.5 border-t border-border/60`:`ml-[22px] mt-1.5 space-y-1.5`,children:[ve===`/`&&(0,X.jsx)(d2,{onConfirm:e=>We(`/`,e),onCancel:Ge}),e.children?.map((t,n)=>(0,X.jsx)(m2,{node:t,parentPath:`/`,depth:0,isLast:n===(e.children?.length??0)-1,...Ze},t.id||t.name)),!e.children?.length&&ve!==`/`&&(0,X.jsx)(`div`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`Empty tree`})]}),se&&(0,X.jsx)(u2,{x:se.x,y:se.y,node:se.node,path:se.path,isBackendsTree:n,onClose:()=>ce(null),onShowContent:p,onOpenToSide:m?e=>m(e,t):void 0,sourceLayer:re,targetLayers:ae,clipboard:z,onStartInlineCreate:e=>ye(e),onChangeIcon:I?()=>Be({clientX:se.x,clientY:se.y,stopPropagation:()=>{}},se.path,se.node):void 0,onNewCanvas:_,onShareCanvas:v,onRemove:s?void 0:y,onRename:s?void 0:b,onLock:s?void 0:T,onUnlock:s?void 0:E,onDestroy:s?void 0:D,onMerge:s?void 0:O,onSubtract:s?void 0:k,onMergeDown:s?void 0:A,onSubtractDown:s?void 0:j,onResyncBackend:M,onAddRule:c,onSyncFolderTree:l,onAddStoreRule:u,onRenameBackendFolder:P,onDeleteBackendFolder:F,onCopy:e=>qe(e,`copy`),onCut:e=>qe(e,`cut`),onPaste:Ue,pastedDocumentIds:C,onPasteDocuments:w,isPinned:L?L(se.path):!1,onTogglePin:ee?()=>ee(se.path,se.node):void 0}),V&&I&&(0,X.jsx)(jx,{x:V.x,y:V.y,current:ue.get(V.path)??Jf(V.node),onChange:Ve,onClose:()=>le(null)})]})}function g2(){let{state:e,closeM2:t,closeM1:n,closeM0:r,openM2:i}=pS(),a=Pm(),o=$c(),s=e.selectedEntityId,{showToast:c}=mo(),[l,u]=(0,Y.useState)(null),[d,f]=(0,Y.useState)(null),[p,m]=(0,Y.useState)(``),[h,g]=(0,Y.useState)(),[_,v]=(0,Y.useState)(``),[y,b]=(0,Y.useState)(`/`),[x,S]=(0,Y.useState)(null),[C,w]=(0,Y.useState)(!1),[T,E]=(0,Y.useState)(null),[D,O]=(0,Y.useState)(!1),k=(0,Y.useCallback)(async e=>{w(!0);try{let t=await $o(e);f(t),E(null)}catch(e){E(e instanceof Error?e.message:`Failed to load the tree`)}finally{w(!1)}},[]);(0,Y.useEffect)(()=>{if(!s)return;let e=s,t=!1;async function n(){try{let n=await os(e);if(t)return;u(n),m(n.url||``),g(void 0),v(``),S(null),b(n.path||`/`),w(!0);try{let n=await $o(e);t||(f(n),E(null))}catch(e){t||E(e instanceof Error?e.message:`Failed to load the tree`)}finally{t||w(!1)}}catch{t||c({title:`Error`,description:`Failed to load context`,variant:`destructive`})}}return n(),()=>{t=!0}},[s,c]);let A=F_({contextId:s??void 0,onRefresh:()=>{s&&k(s)}}),j=e=>{g(void 0),S(e),m(l?.workspaceName?`${l.workspaceName}://${e.replace(/^\//,``)}`:e)},M=l!=null&&(p.trim()!==(l.url||``)||h!==void 0);return(0,X.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,X.jsx)(i2,{title:s||`Context`,icon:l?.icon||`ph:stack-fill`,accentColor:l?.color,onBack:t,action:(0,X.jsx)(`button`,{type:`button`,onClick:()=>{s&&(a?i(`settings`,s):o(`/contexts/${s}/settings/general`))},className:`flex items-center justify-center w-8 h-8 rounded hover:bg-accent/50 text-muted-foreground hover:text-foreground transition-colors`,title:`Settings`,children:(0,X.jsx)($t,{className:`w-3.5 h-3.5`})})}),(0,X.jsxs)(`div`,{className:`p-3 border-b border-border shrink-0`,children:[(0,X.jsx)(`div`,{className:`text-[10px] text-muted-foreground mb-1.5 font-medium uppercase tracking-wide`,children:`Context URL`}),(0,X.jsxs)(`div`,{className:`flex gap-2`,children:[(0,X.jsx)(Jw,{value:p,fixedWorkspaceName:l?.workspaceName,pickerTitle:`Switch context to…`,onPickTarget:(e,t)=>{m(`${t.workspaceName}://${e.replace(/^\/+/,``)}`),g(t.treeName),S(null)},onChange:m,className:`min-w-0 flex-1`,inputClassName:G(`text-xs h-7 font-mono transition-colors`,M&&`border-warning/60 bg-warning/10`),placeholder:`workspace://path`}),(0,X.jsx)(q,{size:`sm`,className:`h-7 px-2 text-xs shrink-0`,onClick:async()=>{if(!s)return;let e=s;O(!0);try{await Vo(e,p,void 0,h);let t=await os(e);u(t),m(t.url||``),b(t.path||`/`),S(null),g(void 0),window.dispatchEvent(new CustomEvent(`contexts:refresh`)),await k(e),c({title:`Saved`,description:`Context URL updated`}),window.matchMedia(`(max-width: 767px)`).matches&&(n(),r())}catch(e){c({title:`Error`,description:e instanceof Error?e.message:`Save failed`,variant:`destructive`})}finally{O(!1)}},disabled:D,children:D?`…`:`Set`})]})]}),h&&(0,X.jsxs)(`p`,{className:`px-3 py-1 text-xs text-muted-foreground`,children:[`Destination tree: `,h,` · press Set to apply`]}),(0,X.jsx)(`div`,{className:`px-3 py-2 border-b shrink-0`,children:(0,X.jsx)(K,{"aria-label":`Search context tree`,placeholder:`Search paths…`,value:_,onChange:e=>v(e.target.value),className:`h-7 text-xs`})}),(0,X.jsxs)(`div`,{className:`flex-1 overflow-y-auto`,children:[(0,X.jsxs)(`div`,{className:`text-[10px] text-muted-foreground px-3 pt-2 pb-1 font-medium uppercase tracking-wide shrink-0`,children:[l?.workspaceName||`Workspace`,` · `,d?.type===`directory`?`directory`:`context`,` tree`]}),T&&!d&&(0,X.jsx)(`p`,{className:`px-3 pb-1 text-xs text-destructive`,children:T}),(0,X.jsx)(h2,{root:d,searchQuery:_,selectedPath:y,pendingPath:x,onSelect:j,isLoading:C,rootLabel:l?.workspaceName,...A})]})]})}function _2({items:e,activeId:t,onSelect:n}){let[r,i]=(0,Y.useState)(``),a=e.filter(e=>Gx(r,e.label,e.description||``));return(0,X.jsx)(`div`,{className:`flex-1 overflow-y-auto py-2`,children:(0,X.jsxs)(`div`,{className:`space-y-1 px-2`,children:[(0,X.jsx)(K,{type:`search`,"aria-label":`Search settings sections`,placeholder:`Find a setting…`,className:`mb-3`,value:r,onChange:e=>i(e.target.value)}),!a.length&&(0,X.jsx)(`p`,{role:`status`,className:`p-3 text-sm text-muted-foreground`,children:`No matching settings.`}),a.map(e=>{let r=e.id===t;return(0,X.jsxs)(`button`,{type:`button`,"aria-current":r?`page`:void 0,onClick:()=>n(e.id),className:G(`flex w-full items-center gap-2.5 rounded-md px-3 py-2 text-left transition-colors`,r?`bg-accent text-foreground`:`text-muted-foreground hover:bg-accent/50 hover:text-foreground`),children:[(0,X.jsx)(`span`,{className:G(`shrink-0`,r?`text-foreground`:`text-muted-foreground`),children:e.icon}),(0,X.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`span`,{className:`block text-sm font-medium text-foreground`,children:e.label}),e.description&&(0,X.jsx)(`span`,{className:`mt-1 block text-xs leading-relaxed text-muted-foreground`,children:e.description})]}),(0,X.jsx)(Xe,{className:G(`h-3.5 w-3.5 shrink-0`,r?`opacity-100`:`opacity-0`)})]},e.id)})]})})}function v2(){let{state:e,closeM2:t}=pS(),n=Pm(),r=$c(),i=Xc(),a=e.selectedEntityId,[o,s]=(0,Y.useState)(null);(0,Y.useEffect)(()=>{if(!a)return;let e=!1;return os(a).then(t=>{e||s(t)}).catch(()=>{}),()=>{e=!0}},[a]);let c=i.pathname.split(`/`).filter(Boolean),l=c[2]===`settings`?fT(c[3]):null,u=a?`/contexts/${a}`:null,d=(0,Y.useMemo)(()=>dT.map(({id:e,label:t,description:n,icon:r})=>({id:e,label:t,description:n,icon:(0,X.jsx)(r,{className:`h-4 w-4`})})),[]);return(0,X.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,X.jsx)(i2,{title:`Settings: ${o?.name||a||`Context`}`,icon:o?.icon||`ph:stack-fill`,accentColor:o?.color??null,onBack:()=>u&&!n?r(u):t(),action:(0,X.jsx)(`button`,{type:`button`,onClick:()=>u&&r(u),className:`flex h-8 w-8 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground`,title:`Open context`,children:(0,X.jsx)(_n,{className:`h-3.5 w-3.5`})})}),(0,X.jsx)(_2,{items:d,activeId:l,onSelect:e=>a&&r(`/contexts/${a}/settings/${e}`)})]})}function y2(e){let[t,n]=(0,Y.useState)([]),[r,i]=(0,Y.useState)(!1),a=(0,Y.useRef)(!1),o=(0,Y.useRef)(!1),s=(0,Y.useCallback)(async()=>{if(!o.current){o.current=!0,i(!0);try{let e=await Fr();n(e||[]),a.current=!0}catch(e){console.error(`Failed to fetch workspaces:`,e)}finally{o.current=!1,i(!1)}}},[]),c=(0,Y.useCallback)(()=>{a.current=!1,s()},[s]);return(0,Y.useEffect)(()=>{e&&!a.current&&s()},[e,s]),(0,Y.useEffect)(()=>{if(!e)return;let t=()=>Zu.emit(`subscribe`,{channel:`workspace`}),r=()=>Zu.emit(`unsubscribe`,{channel:`workspace`}),i=Zu.on(`connect`,()=>{t(),s()});t();let a=e=>{let t=e,r=t?.workspaceId??t?.id,i=t?.status;!r||!i||n(e=>e.map(e=>e.id===r?{...e,status:i}:e))},o=e=>{let t=e?.workspace??e;t?.id&&n(e=>e.some(e=>e.id===t.id)?e:[...e,t])},c=e=>{let t=e,r=t?.workspaceId??t?.id;r&&n(e=>e.filter(e=>e.id!==r))},l=[[`workspace:status:changed`,a],[`workspace.status.changed`,a],[`workspace:created`,o],[`workspace.created`,o],[`workspace:deleted`,c],[`workspace.deleted`,c]];return l.forEach(([e,t])=>Zu.on(e,t)),()=>{r(),i?.(),l.forEach(([e,t])=>Zu.off(e,t))}},[e,s]),(0,Y.useEffect)(()=>{let e=()=>{a.current=!1,s()};return window.addEventListener(`workspaces:refresh`,e),()=>window.removeEventListener(`workspaces:refresh`,e)},[s]),{workspaces:(0,Y.useMemo)(()=>wS(t),[t]),isLoading:r,refresh:c}}function b2({status:e}){return(0,X.jsx)(`span`,{className:G(`inline-block w-2 h-2 rounded-full shrink-0`,e===`active`?`bg-success`:e===`error`?`bg-destructive`:`bg-muted-foreground`),title:e})}function x2(){let e=Tx(),{state:t,selectEntity:n,openM2:r,closeM2:i}=pS(),a=Pm(),{workspaces:o,isLoading:s}=y2(t.activeSection===`workspaces`),{showToast:l}=mo(),u=$c(),[d,f]=(0,Y.useState)(new Set),[p,m]=(0,Y.useState)(null),[h,g]=(0,Y.useState)(new Map),_=(0,Y.useRef)(new Map),[v,y]=(0,Y.useState)(null),b=v&&v.base===o?v.order:o,{rowProps:x,handleProps:S,draggingIndex:C,insertLineClass:w}=DS((e,t)=>{let n=TS(b,e,t);y({base:o,order:n}),ES(n,(e,t)=>Ra(Ex(e),{order:t})).then(({failed:e})=>{window.dispatchEvent(new CustomEvent(`workspaces:refresh`)),e&&l({title:`Partial reorder`,description:`${e} workspace(s) could not be reordered`,variant:`destructive`})})}),T=e=>h.get(Ex(e))??{icon:e.icon??void 0,color:e.color??void 0},E=(e,t,n)=>{let r={...t,...n};g(t=>new Map(t).set(e,r));let i=_.current,a=i.get(e);a&&clearTimeout(a),i.set(e,setTimeout(()=>{i.delete(e);let t={icon:r.icon??null};r.color&&(t.color=r.color),Ra(e,t).then(()=>window.dispatchEvent(new CustomEvent(`workspaces:refresh`))).catch(e=>l({title:`Error`,description:e instanceof Error?e.message:`Update failed`,variant:`destructive`}))},350))},D=e=>{n(Ex(e)),r(`detail`,Ex(e)),!a&&Vx(Ex(e))&&u(Hx(Ex(e)))},O=async(e,t)=>{e.stopPropagation(),f(e=>new Set(e).add(Ex(t)));try{await di(Ex(t)),l({title:`Success`,description:`${t.label||t.name} started`}),window.dispatchEvent(new CustomEvent(`workspaces:refresh`))}catch(e){l({title:`Error`,description:e instanceof Error?e.message:`Start failed`,variant:`destructive`})}finally{f(e=>{let n=new Set(e);return n.delete(Ex(t)),n})}},k=async(e,t)=>{e.stopPropagation(),f(e=>new Set(e).add(Ex(t)));try{await wr(Ex(t)),l({title:`Success`,description:`${t.label||t.name} stopped`}),window.dispatchEvent(new CustomEvent(`workspaces:refresh`))}catch(e){l({title:`Error`,description:e instanceof Error?e.message:`Stop failed`,variant:`destructive`})}finally{f(e=>{let n=new Set(e);return n.delete(Ex(t)),n})}};return(0,X.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between px-4 h-12 border-b border-border shrink-0`,children:[(0,X.jsx)(`span`,{className:`text-sm font-semibold`,children:`Workspaces`}),!e.local&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>{i(),u(`/workspaces?create=1`)},title:`Create workspace`,"aria-label":`Create workspace`,className:`flex items-center justify-center w-6 h-6 rounded-full bg-foreground text-background hover:opacity-80 transition-opacity`,children:(0,X.jsx)(H,{className:`w-3.5 h-3.5`})})]}),(0,X.jsx)(`div`,{className:`flex-1 overflow-y-auto py-2`,children:s&&o.length===0?(0,X.jsx)(`div`,{className:`px-4 py-3 text-xs text-muted-foreground`,children:`Loading...`}):o.length===0?(0,X.jsx)(`div`,{className:`px-4 py-3 text-xs text-muted-foreground`,children:`No workspaces found`}):(0,X.jsx)(`div`,{className:`space-y-1.5 px-2`,children:b.map((e,i)=>{let o=t.selectedEntityId===Ex(e),s=d.has(Ex(e)),l=e.status!==`active`,f=T(e),p=rp(f.color);return(0,X.jsxs)(`div`,{...x(i),"data-active":o||void 0,className:G(`group relative rounded-md py-2.5 pl-3 pr-7 transition-all shadow-elevation-1`,o?`bg-accent shadow cursor-pointer hover:shadow`:l?`bg-card opacity-60 cursor-not-allowed`:`bg-card hover:bg-accent/50 cursor-pointer hover:shadow`,w(i,b.length),C===i&&`opacity-60`),onClick:()=>{l||D(e)},children:[(0,X.jsx)(`button`,{type:`button`,...S(i),title:`Drag to reorder`,"aria-label":`Drag to reorder`,className:G(`absolute inset-y-0 right-0 flex w-4 cursor-grab items-center justify-center rounded-r-md active:cursor-grabbing`,!p&&`bg-muted`),style:p?{backgroundColor:p}:void 0,children:(0,X.jsx)(Ye,{className:G(`h-3.5 w-3.5`,ip(p))})}),(0,X.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,X.jsx)(`button`,{type:`button`,title:`Change icon`,onClick:t=>{Sr()||(t.stopPropagation(),m({x:Math.min(t.clientX,window.innerWidth-290),y:Math.min(t.clientY,window.innerHeight-360),name:Ex(e)}))},onContextMenu:t=>{t.preventDefault(),t.stopPropagation(),m({x:Math.min(t.clientX,window.innerWidth-290),y:Math.min(t.clientY,window.innerHeight-360),name:Ex(e)})},className:`shrink-0 rounded p-0.5 hover:bg-muted-foreground/10 touch-target`,children:(0,X.jsx)(c,{icon:f.icon||`ph:stack-fill`,width:18,height:18,color:p,className:G(!p&&`text-muted-foreground`)})}),(0,X.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,X.jsx)(b2,{status:e.status}),(0,X.jsx)(`span`,{className:`text-sm font-medium truncate`,children:e.label||e.name})]})}),(0,X.jsxs)(`div`,{className:`flex items-center gap-0.5 shrink-0`,children:[e.status===`active`?(0,X.jsx)(`button`,{type:`button`,disabled:s,onClick:t=>k(t,e),className:`flex items-center justify-center w-6 h-6 rounded hover:bg-muted-foreground/10 text-muted-foreground disabled:opacity-50 transition-colors`,title:`Stop`,children:(0,X.jsx)(rn,{className:`w-3.5 h-3.5`})}):(0,X.jsx)(`button`,{type:`button`,disabled:s,onClick:t=>O(t,e),className:`flex items-center justify-center w-6 h-6 rounded hover:bg-muted-foreground/10 text-muted-foreground disabled:opacity-50 transition-colors`,title:`Start`,children:(0,X.jsx)(Oe,{className:`w-3.5 h-3.5`})}),(0,X.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),n(Ex(e)),a?r(`settings`,Ex(e)):u(`/workspaces/${Ex(e)}/settings/general`)},className:`flex items-center justify-center w-6 h-6 rounded hover:bg-muted-foreground/10 text-muted-foreground transition-colors`,title:`Settings`,children:(0,X.jsx)($t,{className:`w-3.5 h-3.5`})})]})]}),e.description&&(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground truncate mt-0.5 pl-3.5`,children:e.description}),(0,X.jsxs)(`div`,{className:`flex items-center gap-2 mt-1 pl-3.5`,children:[e.host&&(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground truncate`,children:e.host}),e.ownerEmail&&(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground truncate`,children:e.ownerEmail})]})]},e.id||e.name)})})}),p&&(()=>{let e=o.find(e=>Ex(e)===p.name);if(!e)return null;let t=T(e);return(0,X.jsx)(jx,{x:p.x,y:p.y,current:t,onChange:e=>E(p.name,t,e),onClose:()=>m(null)})})()]})}function S2(e,t){let n=(0,Y.useRef)(null),r=(0,Y.useRef)(0);return(0,Y.useEffect)(()=>{if(!e)return;let n=e=>{if(e.defaultPrevented||e.repeat||e.isComposing||e.getModifierState(`AltGraph`))return;let n=e.target;if(n instanceof Element&&n.closest(`input, textarea, select, [contenteditable]:not([contenteditable="false"]), [role="textbox"], [role="dialog"], [role="alertdialog"]`)||document.querySelector(`[aria-modal="true"], dialog[open]`))return;let r=hD(e);if(!r)return;let i=pD(),a=r===i.previousTree?-1:+(r===i.nextTree);a&&(e.preventDefault(),t(a))};return window.addEventListener(`keydown`,n),()=>window.removeEventListener(`keydown`,n)},[e,t]),{onTouchStart(e){r.current=0,n.current=e.touches.length===1?{x:e.touches[0].clientX,y:e.touches[0].clientY}:null},onTouchMove(e){e.touches.length!==1&&(n.current=null)},onTouchCancel(){n.current=null},onTouchEnd(i){if(!n.current||!e)return;let a=i.changedTouches[0],o=_D(a.clientX-n.current.x,a.clientY-n.current.y);n.current=null,o&&(r.current=Date.now()+500,i.stopPropagation(),t(o))},onClickCapture(e){Date.now()<r.current&&(e.preventDefault(),e.stopPropagation(),r.current=0)}}}function C2(e,t,n,r=!1){if(!t.startsWith(`/`)||!n.length)throw Error(`Choose a source folder and at least one destination.`);let i=new Map;for(let e of n){if(![`context`,`directory`].includes(e.tree)||!e.path.startsWith(`/`))throw Error(`Choose a context or directory destination.`);if(e.path.includes(`{{`))throw Error(`Auto-Link destinations cannot contain {{ template markers.`);i.set(`${e.tree}:${e.path}`,e)}return{id:e,enabled:!0,description:`Auto-Link backends:${t} → ${[...i.keys()].join(`, `)}`,cascade:!0,when:{event:[`document.inserted`,`document.updated`,`document.linked`],...r?{path:`backends:${t}`}:{pathExact:`backends:${t}`}},then:[...i.values()].map(e=>({action:`link`,paths:[`${e.tree===`context`?`ctx`:`dir`}:${e.path}`],...r?{recursive:!0}:{}}))}}function w2(e,t,n,r=!1,i=`forward`,a=`copy`,o){let s=C2(e,t,n,r);if(i===`forward`)return[s];let c=t.split(`/`).filter(Boolean);if(c.length<2||t.includes(`{{`)||c.some(e=>e===`.`||e===`..`))throw Error(`Choose a backend folder with a valid storage address.`);if(!o)throw Error(`Choose a writable backend folder.`);let l=o.address,u=o.key,d=[...new Map(n.map(e=>[`${e.tree}:${e.path}`,e])).values()],f={id:`${e}-reverse`,enabled:!0,description:`Auto-Link ${d.map(e=>`${e.tree}:${e.path}`).join(`, `)} → backends:${t} (${a})`,cascade:!1,when:{event:[`document.inserted`,`document.linked`],[r?`path`:`pathExact`]:d.map(e=>`${e.tree}:${e.path}`)},then:[{action:`store`,to:l,folder:u,mode:a,autoLink:!0,onConflict:`error`,...r?{recursive:!0}:{}}]};return i===`both`?[s,f]:[f]}function T2({workspaceId:e,sourcePath:t,onClose:n,onManageRules:r}){let[i,a]=(0,Y.useState)([]),[o,s]=(0,Y.useState)(!1),[c,l]=(0,Y.useState)(`forward`),[u,d]=(0,Y.useState)(`copy`),[f,p]=(0,Y.useState)(0),[m,h]=(0,Y.useState)(!1),[g,_]=(0,Y.useState)(!0),[v]=(0,Y.useState)(()=>`autolink-${crypto.randomUUID()}`),[y,b]=(0,Y.useState)(!1),[x,S]=(0,Y.useState)(!1),[C,w]=(0,Y.useState)(!1),[T,E]=(0,Y.useState)(``),[D,O]=(0,Y.useState)(0),[k,A]=(0,Y.useState)(0),[j,M]=(0,Y.useState)(0);Cf(n,!x&&!o);let N=()=>{x||n()};return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(Op,{onClose:N,children:(0,X.jsxs)(`section`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":`autolink-title`,className:`${Dp} flex flex-col overflow-hidden rounded-2xl border bg-card shadow-elevation-4`,children:[(0,X.jsxs)(`div`,{className:`flex h-12 shrink-0 items-center justify-between border-b px-4`,children:[(0,X.jsxs)(`h2`,{id:`autolink-title`,className:`flex items-center gap-2 text-sm font-medium`,children:[(0,X.jsx)(Kt,{className:`h-4 w-4`}),`Auto-Link folder`]}),(0,X.jsx)(`button`,{type:`button`,onClick:N,disabled:x,"aria-label":`Close`,className:`p-1 disabled:opacity-40`,children:(0,X.jsx)(Ne,{className:`h-4 w-4`})})]}),(0,X.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-5 overflow-y-auto p-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Backend folder`}),(0,X.jsx)(`p`,{className:`mt-1 break-words text-sm`,children:t})]}),(0,X.jsxs)(`fieldset`,{disabled:x||y,className:`space-y-2 text-sm`,children:[(0,X.jsx)(`label`,{className:`block font-medium`,htmlFor:`autolink-direction`,children:`Direction`}),(0,X.jsxs)(`select`,{id:`autolink-direction`,className:`w-full rounded-md border bg-background p-2`,value:c,onChange:e=>l(e.target.value),children:[(0,X.jsx)(`option`,{value:`forward`,children:`Backend → virtual tree`}),(0,X.jsx)(`option`,{value:`reverse`,children:`Virtual tree → backend`}),(0,X.jsx)(`option`,{value:`both`,children:`Both`})]}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:c===`forward`?`Link indexed files into your virtual paths. Files stay where they are.`:`Store files explicitly added to these virtual paths in the backend folder. Documents appearing through context filters are not copied.`}),c!==`forward`&&(0,X.jsxs)(`details`,{children:[(0,X.jsx)(`summary`,{className:`cursor-pointer`,children:`Advanced: storage operation`}),(0,X.jsxs)(`label`,{className:`mt-2 flex items-start gap-2`,children:[(0,X.jsx)(`input`,{type:`checkbox`,checked:u===`move`,onChange:e=>d(e.target.checked?`move`:`copy`)}),`Move instead of copy — release the source only after the destination is safely stored.`]})]})]}),(0,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(`h3`,{className:`text-sm font-medium`,children:`Virtual paths`}),i.map((e,t)=>(0,X.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border p-2 text-sm`,children:[(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.tree===`context`?`Context tree`:`Directory tree`}),(0,X.jsx)(`p`,{className:`break-words`,children:e.path})]}),!y&&(0,X.jsx)(`button`,{type:`button`,"aria-label":`Remove ${e.tree}:${e.path}`,disabled:x,onClick:()=>a(e=>e.filter((e,n)=>n!==t)),children:(0,X.jsx)(Ne,{className:`h-4 w-4`})})]},`${e.tree}:${e.path}`)),!y&&(0,X.jsxs)(q,{variant:`outline`,size:`sm`,disabled:x,onClick:()=>s(!0),children:[(0,X.jsx)(H,{className:`mr-1 h-4 w-4`}),`Add virtual path…`]}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Choose a context path, a directory path, or both.`})]}),(0,X.jsxs)(`fieldset`,{disabled:x||y,className:`space-y-3 text-sm`,children:[(0,X.jsxs)(`label`,{className:`flex items-start gap-2`,children:[(0,X.jsx)(`input`,{type:`checkbox`,checked:m,onChange:e=>h(e.target.checked),className:`mt-1`}),`Recursive — include subfolders and recreate their structure at each destination`]}),(0,X.jsxs)(`label`,{className:`flex items-start gap-2`,children:[(0,X.jsx)(`input`,{type:`checkbox`,checked:g,onChange:e=>_(e.target.checked),className:`mt-1`}),`Apply to existing documents`]})]}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Without Recursive, only direct folder contents are included. Context paths keep their usual layer membership. Both creates two independently manageable rules in workspace Rules. Removing rules keeps existing files and links. Renames and deletions are not synchronized. Filename conflicts stop the transfer without overwriting.`}),x&&(0,X.jsx)(`p`,{role:`status`,className:`text-sm`,children:y?`Applying to existing documents… ${k} processed`:`Saving Auto-Link…`}),C&&(0,X.jsxs)(`p`,{role:`status`,className:`text-sm`,children:[`Auto-Link is enabled for future documents.`,g?` ${k} existing document matches processed.`:``]}),j>0&&(0,X.jsxs)(`p`,{role:`alert`,className:`text-sm text-destructive`,children:[j,` document operations failed. Check the rule’s run log in Rules and rerun it after resolving the errors.`]}),T&&(0,X.jsxs)(`p`,{role:`alert`,className:`text-sm text-destructive`,children:[y?`Auto-Link is enabled. `:``,T]})]}),(0,X.jsxs)(`div`,{className:`flex shrink-0 justify-end gap-2 border-t p-3`,children:[(0,X.jsx)(q,{variant:`ghost`,disabled:x,onClick:r,children:`Manage rules`}),C?(0,X.jsx)(q,{onClick:n,children:`Done`}):(0,X.jsx)(q,{disabled:x||!i.length,onClick:async()=>{if(!x){S(!0),E(``);try{let n=c===`forward`?void 0:Ho(t,await Ta(e));if(n?.driver===`cacache`)throw Error(`Choose a backend that preserves folder paths.`);let r=w2(v,t,i,m,c,u,n);if(y||(await bv(e,r),b(!0)),g){for(let t=f;t<r.length;t++){let n=t===f?D:0;for(;n!==null;){let i=await hv(e,{ruleId:r[t].id,limit:100,offset:n});if(A(e=>e+i.matched-i.failed),M(e=>e+i.failed),i.nextOffset===void 0)throw Error(`The rule is enabled, but applying the full folder needs an updated server. Use Rules to rerun existing documents after updating.`);n=i.nextOffset,n!==null&&O(n)}p(t+1),O(0)}window.dispatchEvent(new CustomEvent(`workspace:documents:refresh`)),window.dispatchEvent(new CustomEvent(`workspace:tree:refresh`))}w(!0)}catch(e){E(e instanceof Error?e.message:`Could not configure Auto-Link`)}finally{S(!1)}}},children:x?`Applying…`:y?`Retry existing documents`:`Enable Auto-Link`})]})]})}),o&&(0,X.jsx)(Op,{onClose:()=>s(!1),children:(0,X.jsx)(Ep,{fixedWorkspaceName:e,title:`Choose virtual paths`,confirmLabel:`Add paths`,sizeClassName:`h-full w-[380px] max-w-[90vw] max-md:w-full`,onClose:()=>s(!1),onConfirm:(e,t)=>{a(n=>{let r=[...n];for(let n of e)r.some(e=>e.tree===t.treeType&&e.path===n)||r.push({tree:t.treeType,path:n});return r}),s(!1)}})})]})}async function E2(){return await J.get(`${ni}/users/me/config/webui`)??{}}async function D2(e){return await J.put(`${ni}/users/me/config/webui`,e)??e}var O2=`application/x-canvas-workspace-pin`;function k2({pins:e,isLoading:t,searchQuery:n=``,activeKey:r,onOpen:i,onShowInTree:a,onUnpin:o,onMove:s}){let[l,u]=(0,Y.useState)(null),[d,f]=(0,Y.useState)(null),p=n.toLowerCase().trim(),m=p?e.filter(e=>(e.label||e.name||``).toLowerCase().includes(p)||e.path.toLowerCase().includes(p)||(e.description||``).toLowerCase().includes(p)):e,h=()=>{u(null),f(null)},g=async()=>{let t=d,n=l;if(h(),!n||!t||t.id===n)return;let r=t.id;if(t.id&&!t.before&&(r=e[e.findIndex(e=>e.id===t.id)+1]?.id??null),r!==n)try{await s(n,r)}catch(e){alert(e instanceof Error?e.message:String(e))}};return t&&!e.length?(0,X.jsx)(`div`,{className:`px-3 py-3 text-xs text-muted-foreground`,children:`Loading pins…`}):e.length?m.length?(0,X.jsx)(`div`,{className:`p-2 flex flex-col gap-2`,onDragOver:e=>{l&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`)},onDrop:e=>{e.preventDefault(),l&&!d&&f({id:null,before:!1}),g()},children:m.map(e=>{let t=e.resolvable===!1,n=rp(e.color),s=e.icon||(e.type===`canvas`?`ph:squares-four-fill`:`ph:folder-fill`),m=r===ha(e.tree,e.path),_=d?.id===e.id&&d.before,v=d?.id===e.id&&!d.before;return(0,X.jsxs)(`div`,{role:`button`,tabIndex:0,"data-active":m||void 0,draggable:!p,onDragStart:t=>{t.dataTransfer.setData(O2,e.id),t.dataTransfer.setData(`text/plain`,e.path),t.dataTransfer.effectAllowed=`move`,u(e.id)},onDragEnd:h,onDragOver:t=>{if(!l||l===e.id)return;t.preventDefault(),t.stopPropagation(),t.dataTransfer.dropEffect=`move`;let n=t.currentTarget.getBoundingClientRect(),r=t.clientY<n.top+n.height/2;f(t=>t?.id===e.id&&t.before===r?t:{id:e.id,before:r})},onDrop:e=>{e.preventDefault(),e.stopPropagation(),g()},onClick:()=>{t||i(e)},onKeyDown:n=>{n.target===n.currentTarget&&(n.key===`Enter`||n.key===` `)&&!t&&(n.preventDefault(),i(e))},title:t?`${e.path} — folder no longer exists`:`Open ${e.tree}:${e.path}`,className:G(`group relative flex items-stretch gap-2.5 rounded-lg border bg-card shadow-elevation-1 text-left transition-colors`,t?`opacity-70 cursor-default`:`cursor-pointer hover:bg-accent/40`,m&&`ring-1 ring-primary/60`,l===e.id&&`opacity-40`,_&&`border-t-2 border-t-primary`,v&&`border-b-2 border-b-primary`),style:{borderLeft:`5px solid ${n??`transparent`}`},children:[(0,X.jsx)(`div`,{className:`flex items-center justify-center w-12 shrink-0 rounded-l-[5px] my-0 self-stretch`,style:n?{backgroundColor:`${n}22`}:void 0,children:t?(0,X.jsx)(ot,{className:`w-5 h-5 text-warning`}):(0,X.jsx)(c,{icon:s,width:22,height:22,color:n,className:G(!n&&(e.type===`canvas`?`text-primary`:`text-muted-foreground`))})}),(0,X.jsxs)(`div`,{className:`flex flex-col min-w-0 flex-1 py-2 pr-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,X.jsx)(`span`,{className:`text-sm font-semibold leading-tight truncate`,children:e.label||e.name||e.path.split(`/`).pop()}),e.locked&&(0,X.jsx)(Ot,{className:`w-3 h-3 shrink-0 text-warning`})]}),(0,X.jsxs)(`span`,{className:`text-[11px] text-muted-foreground truncate leading-tight font-mono mt-0.5`,children:[e.tree,`:`,e.path]}),e.description&&(0,X.jsx)(`span`,{className:`text-[11px] text-muted-foreground/80 truncate leading-tight mt-1`,children:e.description}),t&&(0,X.jsx)(`span`,{className:`text-[11px] text-warning leading-tight mt-1`,children:`Folder no longer exists`})]}),(0,X.jsxs)(`div`,{className:`flex flex-col items-center justify-between py-1.5 pr-1.5 shrink-0`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,X.jsx)(`button`,{type:`button`,disabled:t,onClick:t=>{t.stopPropagation(),a(e)},title:`Show in tree`,"aria-label":`Show in tree`,className:`flex items-center justify-center w-6 h-6 rounded text-muted-foreground reveal-on-hover focus-visible:opacity-100 hover:bg-accent hover:text-foreground transition-colors disabled:opacity-40 disabled:cursor-default`,children:(0,X.jsx)(Nn,{className:`w-3.5 h-3.5`})}),(0,X.jsx)(`button`,{type:`button`,onClick:async t=>{t.stopPropagation();try{await o(e)}catch(e){alert(e instanceof Error?e.message:String(e))}},title:`Unpin`,"aria-label":`Unpin`,className:`flex items-center justify-center w-6 h-6 rounded text-muted-foreground reveal-on-hover hover:bg-destructive/10 hover:text-destructive transition-colors`,children:(0,X.jsx)(V,{className:`w-3.5 h-3.5`})})]}),!p&&(0,X.jsx)(Ye,{className:`w-3.5 h-3.5 text-muted-foreground/50 cursor-grab active:cursor-grabbing`,"aria-hidden":!0})]})]},e.id)})}):(0,X.jsxs)(`div`,{className:`px-3 py-3 text-xs text-muted-foreground`,children:[`No pins match “`,n,`”`]}):(0,X.jsxs)(`div`,{className:`px-3 py-6 text-xs text-muted-foreground text-center space-y-1`,children:[(0,X.jsx)(`p`,{children:`No pinned folders yet.`}),(0,X.jsxs)(`p`,{className:`text-muted-foreground/70`,children:[`Right-click a folder in the context, directory or backends tree and choose `,(0,X.jsx)(`span`,{className:`font-medium`,children:`Pin`}),`.`]})]})}var A2=[`pins`,`context`,`layers`,`directory`,`backends`],j2=e=>typeof e==`string`&&A2.includes(e),M2=e=>{let t=Array.isArray(e)?e.filter(j2).filter((e,t,n)=>n.indexOf(e)===t):[];return[...t,...A2.filter(e=>!t.includes(e))]},N2={pins:(0,X.jsx)(te,{className:`w-3.5 h-3.5`}),context:(0,X.jsx)(Ge,{className:`w-3.5 h-3.5`}),layers:(0,X.jsx)(wt,{className:`w-3.5 h-3.5`}),directory:(0,X.jsx)(Nn,{className:`w-3.5 h-3.5`}),backends:(0,X.jsx)(Tt,{className:`w-3.5 h-3.5`})},P2={pins:`Pins`,context:`Context tree`,layers:`Context layers`,directory:`Directory tree`,backends:`Backends tree`},F2=e=>e===`directory`||e===`backends`?e:Pa,I2=(e,t)=>t?`layers`:e===`directory`?`directory`:e===`backends`?`backends`:`context`;function L2(){let{state:e}=pS();return e.selectedEntityId?(0,X.jsx)(MS,{workspaceName:e.selectedEntityId,children:(0,X.jsx)(R2,{},e.selectedEntityId)}):null}function R2(){let{state:e,closeM2:t,openM2:n}=pS(),r=qg(),i=Pm(),a=e.selectedEntityId,o=$c(),s=Xc(),{treeName:c,path:l}=Cy(s.pathname),u=new URLSearchParams(s.search).get(`layer`)===`1`,d=new URLSearchParams(s.search).get(`layerId`),f=/\/trees\/|\/path(\/|$)/.test(s.pathname)||!!d,p=f?I2(c,d):A2[0],[m,h]=(0,Y.useState)(null),[g,_]=(0,Y.useState)(null),[v,y]=(0,Y.useState)({icon:null,color:null}),[b,x]=(0,Y.useState)(p),[S,C]=(0,Y.useState)(null),[w,T]=(0,Y.useState)(null),[E,D]=(0,Y.useState)(null),[O,k]=(0,Y.useState)([]),[A,j]=(0,Y.useState)(!1),[M,N]=(0,Y.useState)(!1),[P,F]=(0,Y.useState)(!1),[I,L]=(0,Y.useState)(!1),[ee,te]=(0,Y.useState)(l),[ne,R]=(0,Y.useState)(new Set),[z,B]=(0,Y.useState)(u&&l!==`/`?l:null),[re,ie]=(0,Y.useState)(``),[ae,oe]=(0,Y.useState)(null),[se,ce]=(0,Y.useState)(null),[V,le]=(0,Y.useState)([]),[ue,de]=(0,Y.useState)(!1),[fe,pe]=(0,Y.useState)(!1),me=(0,Y.useRef)(null),he=(0,Y.useRef)(!1),[ge,_e]=(0,Y.useState)(!1),[ve,ye]=(0,Y.useState)(A2),be=!f;(0,Y.useEffect)(()=>{let e=!1;return E2().then(t=>{if(e)return;let n=M2(t?.m2?.tabOrder);ye(n),be&&x(e=>e===A2[0]?n[0]:e)}).catch(()=>{}),()=>{e=!0}},[]);let xe=(0,Y.useCallback)(async e=>{let t=ve;ye(e);try{let t=await E2();await D2({...t,m2:{...t.m2,tabOrder:e}})}catch{ye(t)}},[ve]),[H,Se]=(0,Y.useState)(null),[Ce,we]=(0,Y.useState)(null),U=()=>{Se(null),we(null)},W=()=>{if(H&&Ce&&H!==Ce.id){let e=ve.filter(e=>e!==H),t=e.indexOf(Ce.id);t>=0&&(e.splice(Ce.before?t:t+1,0,H),e.some((e,t)=>e!==ve[t])&&xe(e))}U()};(0,Y.useEffect)(()=>{let e=e=>oe(e.detail??null);return window.addEventListener(`documents:clipboard`,e),()=>window.removeEventListener(`documents:clipboard`,e)},[]);let[Te,Ee]=(0,Y.useState)(l);l!==Te&&(Ee(l),te(l));let De=(0,Y.useRef)(new Map),Oe=(0,Y.useCallback)(async(e,t,n=!1,r=!1)=>{let i=Symbol();De.current.set(t,i);let a=()=>De.current.get(t)===i,o=t===`context`?j:t===`directory`?N:F,s=t===`context`?C:t===`directory`?T:D;n||o(!0);try{n&&!r&&pa(e,t);let i=await yi(e,t);a()&&s(i)}catch{}finally{a()&&o(!1)}},[]),ke=(0,Y.useCallback)(async(e,t=!1)=>{let n=Symbol();De.current.set(`pins`,n);let r=()=>De.current.get(`pins`)===n;t||de(!0);try{let t=await Ja(e);r()&&le(t)}catch{}finally{r()&&de(!1)}},[]),Ae=(0,Y.useCallback)(async(e,t=!1)=>{let n=Symbol();De.current.set(`layers`,n);let r=()=>De.current.get(`layers`)===n;t||L(!0);try{let t=await Za(e,`context`);r()&&k(t)}catch{}finally{r()&&L(!1)}},[]);(0,Y.useEffect)(()=>{if(!a)return;let e=a,t=!1,n=De.current;async function r(){Ti(e).then(e=>{t||(h(e.label||null),_(e.id||null),y({icon:e.icon??null,color:e.color??null}))}).catch(()=>{}),await Promise.all([Oe(e,`context`),Oe(e,`directory`),Oe(e,`backends`),Ae(e),ke(e)])}return r(),()=>{t=!0,n.clear()}},[a,Oe,Ae,ke]);let je=(0,Y.useCallback)((e,t,n=!1)=>{for(let r of[`context`,`directory`,`backends`])(!t||t===r)&&Oe(e,r,!0,n);(!t||t===`context`)&&Ae(e,!0),ke(e,!0)},[Oe,Ae,ke]),Me=(0,Y.useCallback)(()=>{a&&je(a)},[a,je]);(0,Y.useEffect)(()=>{if(!a)return;let e=e=>{e.detail?.workspaceName&&e.detail.workspaceName!==a||je(a,e.detail?.treeName,e.detail?.cacheInvalidated)};return window.addEventListener(`workspace:tree:refresh`,e),()=>window.removeEventListener(`workspace:tree:refresh`,e)},[a,je]),(0,Y.useEffect)(()=>{if(!a)return;let e=!1;return Ta(a).then(t=>{e||R(new Set(t.filter(e=>e.resyncing&&e.treePath).map(e=>e.treePath)))}).catch(()=>{}),()=>{e=!0}},[a]),(0,Y.useEffect)(()=>{if(!a)return;let e=[`workspace:${a}`,g?`workspace:${g}`:null].filter(Boolean),t=()=>e.forEach(e=>Zu.emit(`subscribe`,{channel:e})),n=Zu.on(`connect`,t);t();let r=wC(a,g),i=e=>{if(e?.workspaceId&&g&&e.workspaceId!==g)return;let t=e?.treePath;t&&R(n=>{let r=new Set(n);return e.resyncing?r.add(t):r.delete(t),r})};Zu.on(`backend.resync.changed`,i);let o=e=>{e?.workspaceId&&g&&e.workspaceId!==g||ke(a,!0)};return Zu.on(`pins.changed`,o),()=>{r(),n?.(),Zu.off(`backend.resync.changed`,i),Zu.off(`pins.changed`,o)}},[a,g,ke]);let[Ne,Pe]=(0,Y.useState)(null),Fe=`${s.pathname}|${s.search}`;if(Fe!==Ne){Pe(Fe);let{treeName:e,path:t}=Cy(s.pathname),n=new URLSearchParams(s.search).get(`layerId`),r=/\/trees\/|\/path(\/|$)/.test(s.pathname)||!!n;fe?pe(!1):x(r||ge?r?I2(e,n):b:ve[0]),te(t),B(t===`/`?null:t)}let{showToast:Ie,showProgress:Le}=mo(),Re=(0,Y.useCallback)(async e=>{if(!a)return!1;let t=Z_(e);if(!t)throw Error(`Not a backend folder`);let n=tv(await L_(a));if(!n)throw Error(`No backend-tree-sync hook in this workspace (git/hooks/started/). Recreate the seed hooks from Settings → Hooks.`);let r=await gv(a,{hookFile:n,payload:{backend:t.backend,subdir:t.rel,target:Q_(e)}});if(r.status===`error`)throw Error(r.error||`Sync failed`);return Ie({title:`Folders synced`,description:`${t.backend}${t.rel?`/${t.rel}`:``} → ${Q_(e)} (see Hooks → Runs)`}),je(a),!0},[a,Ie,je]),ze=F_({workspaceId:a??void 0,treeName:F2(b),onRefresh:Me}),Be=new Set(V.map(e=>ha(e.tree,e.path))),Ve=F2(b),He=(0,Y.useCallback)(e=>Be.has(ha(Ve,e)),[V,Ve]),Ue=(0,Y.useCallback)(async e=>{if(!a)return;let t=V.find(t=>ha(t.tree,t.path)===ha(Ve,e));t?await Vi(a,t.id):await ri(a,e,Ve),await ke(a)},[a,V,Ve,ke]),We=(0,Y.useCallback)(async e=>{if(a){le(t=>t.filter(t=>t.id!==e.id));try{await Vi(a,e.id)}finally{await ke(a)}}},[a,ke]),Ge=(0,Y.useCallback)(async(e,t)=>{if(!a)return;let n=V.find(t=>t.id===e);if(!n)return;let r=V.filter(t=>t.id!==e),i=t===null?r.length:r.findIndex(e=>e.id===t);if(i===-1)return;let o=[...r.slice(0,i),n,...r.slice(i)];if(!o.every((e,t)=>e===V[t])){le(o);try{le(await wi(a,o.map(e=>e.id)))}catch(e){throw await ke(a),e}}},[a,V,ke]),Ke=(0,Y.useCallback)(e=>{if(!a)return;pe(!0),te(e.path),B(null);let t=wy(a,e.path,e.tree);if(r){r.activateRow(`pin:${a}:${e.id}`,e.label||e.name||e.path,t);return}o(t)},[a,o,r]),qe=(0,Y.useCallback)(e=>{!a||e.resolvable===!1||(pe(!1),_e(!0),x(I2(e.tree)),te(e.path),B(null),ie(``),he.current=!0,r?.setFocus(`main`),o(wy(a,e.path,e.tree)))},[a,o,r]),Je=b===`context`?S:b===`directory`?w:b===`backends`?E:null,Ye=b===`context`?A:b===`directory`?M:b===`backends`&&P;(0,Y.useEffect)(()=>{if(!he.current||Ye||b===`pins`)return;let e=me.current?.querySelector(`[data-active="true"]`);e&&(e.scrollIntoView({block:`nearest`,inline:`nearest`}),he.current=!1)},[b,ee,Je,Ye]);let Xe=(0,Y.useCallback)(e=>{_e(!0),x(e),te(`/`),B(null),ie(``)},[]),Ze=(0,Y.useCallback)(e=>{Xe(gD(ve,b,e))},[ve,b,Xe]),Qe=S2(e.m2Open,Ze),$e=e=>{B(null),te(e);let t=F2(b);r?.setFocus(`main`),o(wy(a,e,t))},et=(0,Y.useCallback)((e,t)=>{te(e),B(e);let n=F2(b),i=new URLSearchParams;i.set(`layer`,`1`),t&&i.set(`layerId`,t),r?.setFocus(`main`),o(`${wy(a,e,n)}?${i.toString()}`)},[a,b,o,r]),tt=(0,Y.useCallback)((e,t)=>{if(a){if(r){r.openCanvas({kind:`route`,location:wy(a,e,t)});return}window.dispatchEvent(new CustomEvent(`workspace:open-to-side`,{detail:{workspaceName:a,treeName:t,path:e}}))}},[a,r]),nt=(0,Y.useCallback)(async e=>{if(!a)return;let t=F2(b),n=await ji(a,e,t),r=`${window.location.origin}${n.url}`;await navigator.clipboard?.writeText(r),alert(`Canvas share link copied:\n${r}`)},[a,b]),rt=re.toLowerCase().trim(),it=rt?O.filter(e=>e.name.toLowerCase().includes(rt)||(e.label||``).toLowerCase().includes(rt)||(e.description||``).toLowerCase().includes(rt)):O;return(0,X.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,X.jsx)(i2,{title:m||a||`Workspace`,icon:v.icon||`ph:stack-fill`,accentColor:v.color,onBack:t,action:(0,X.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:()=>a&&o(Hx(a)),className:`flex items-center justify-center w-8 h-8 rounded hover:bg-accent/50 text-muted-foreground hover:text-foreground transition-colors`,title:`Open workspace`,children:(0,X.jsx)(_n,{className:`w-3.5 h-3.5`})}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>{i?n(`settings`,a??null):o(`/workspaces/${a}/settings/general`)},className:`flex items-center justify-center w-8 h-8 rounded hover:bg-accent/50 text-muted-foreground hover:text-foreground transition-colors`,title:`Settings`,children:(0,X.jsx)($t,{className:`w-3.5 h-3.5`})})]})}),(0,X.jsx)(`div`,{...Qe,className:`flex border-b border-border shrink-0 touch-pan-y`,"aria-label":`Workspace trees`,children:ve.map(e=>(0,X.jsxs)(`button`,{type:`button`,onClick:()=>Xe(e),title:`${P2[e]} — drag to reorder; the first tab opens by default`,"aria-label":P2[e],"aria-pressed":b===e,draggable:!0,onDragStart:t=>{t.dataTransfer.setData(`text/plain`,e),t.dataTransfer.effectAllowed=`move`,Se(e)},onDragEnd:U,onDragOver:t=>{if(!H||H===e)return;t.preventDefault(),t.dataTransfer.dropEffect=`move`;let n=t.currentTarget.getBoundingClientRect(),r=t.clientX<n.left+n.width/2;we(t=>t?.id===e&&t.before===r?t:{id:e,before:r})},onDrop:e=>{e.preventDefault(),W()},className:G(`relative flex-1 flex items-center justify-center py-2 transition-colors`,b===e?`text-foreground border-b-2 border-foreground -mb-px`:`text-muted-foreground hover:text-foreground`,H===e&&`opacity-40`,Ce?.id===e&&Ce.before&&`shadow-[inset_2px_0_0_0_hsl(var(--primary))]`,Ce?.id===e&&!Ce.before&&`shadow-[inset_-2px_0_0_0_hsl(var(--primary))]`),children:[N2[e],e===`pins`&&V.length>0&&(0,X.jsx)(`span`,{className:`absolute top-1 right-[calc(50%-14px)] min-w-[14px] h-[14px] px-0.5 rounded-full bg-primary text-primary-foreground text-[9px] leading-[14px] text-center font-medium`,children:V.length})]},e))}),(0,X.jsx)(`div`,{className:`px-2 py-1.5 border-b border-border shrink-0 shadow-elevation-2 z-10`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5 rounded-md border bg-muted/40 px-2 py-1`,children:[(0,X.jsx)(mr,{className:`w-3 h-3 shrink-0 text-muted-foreground`}),(0,X.jsx)(`input`,{className:`flex-1 bg-transparent text-xs outline-none placeholder:text-muted-foreground min-w-0`,placeholder:b===`layers`?`Search layers…`:b===`pins`?`Search pins…`:`Search paths…`,value:re,onChange:e=>ie(e.target.value)})]})}),(0,X.jsx)(`div`,{ref:me,className:`flex-1 overflow-y-auto`,children:b===`pins`?(0,X.jsx)(k2,{pins:V,isLoading:ue,searchQuery:re,activeKey:ha(c,l),onOpen:Ke,onShowInTree:qe,onUnpin:We,onMove:Ge}):b===`layers`?(0,X.jsx)(G2,{layers:it,isLoading:I,wsName:a??``,onSelect:e=>{let t=new URLSearchParams;t.set(`layerId`,e.id),t.set(`layer`,`1`),o(`${wy(a,`/`)}?${t.toString()}`)},onLock:async e=>{await oi(a,e.id,a,`context`),je(a)},onUnlock:async e=>{await Ma(a,e.id,a,`context`),je(a)},onRename:async(e,t)=>{await bi(a,e.id,t,`context`),je(a)},onDestroy:async e=>{confirm(`Destroy layer "${e.label||e.name}"? This cannot be undone.`)&&(await ii(a,e.id,`context`),je(a))}}):(0,X.jsx)(h2,{root:Je,treeName:b,isBackendsTree:b===`backends`,onShiftSelect:r?e=>tt(e,F2(b)):void 0,selectedPath:ee,contentPath:z,onSelect:$e,onShowContent:b===`context`?et:void 0,onOpenToSide:tt,onShareCanvas:nt,onNewCanvas:a&&b!==`backends`?e=>{o(`${wy(a,e,b)}?createCanvas=1`)}:void 0,isLoading:Ye,rootLabel:a??void 0,searchQuery:re,resyncingPaths:b===`backends`?ne:void 0,onAddRule:a&&b===`backends`?ce:void 0,onSyncFolderTree:a&&b===`backends`?Re:void 0,onAddStoreRule:a?(e,t=`store`)=>{let n=b===`backends`?(()=>{let n=Z_(e);return{kind:t,storeTo:n?.backend||``,storeFolder:n?.rel||``}})():{kind:t,path:`${b===`directory`?`dir`:`ctx`}:${e}`,storeFolder:t===`download`?`Downloads`:ev(e)};o(`/workspaces/${a}/settings/hooks?${$_(n).toString()}`)}:void 0,pastedDocumentIds:ae?.documentIds,isPathPinned:He,onTogglePin:a?Ue:void 0,onPasteDocuments:a&&b!==`backends`?async(e,t)=>{let n=b===`directory`?`directory`:`context`,r=b===`directory`?`directory`:Pa,i=Le({title:`Pasting…`,description:`${t.length} document(s) → "${e}"`}),o=!1;try{o=await ei(a,e,t,r,n)}catch(e){return i.fail({title:`Error`,description:e instanceof Error?e.message:`Failed to paste documents`,variant:`destructive`}),!1}return i.done(o?{title:`Success`,description:`${t.length} document(s) pasted to "${e}"`}:void 0),o&&(ae&&(oe(null),window.dispatchEvent(new CustomEvent(`documents:clipboard`,{detail:null}))),window.dispatchEvent(new CustomEvent(`workspace:documents:refresh`,{detail:{workspaceName:a,path:e,treeName:r}}))),o}:void 0,...ze})}),se&&a&&(0,X.jsx)(T2,{workspaceId:a,sourcePath:se,onClose:()=>ce(null),onManageRules:()=>{ce(null),o(`/workspaces/${a}/settings/hooks?section=rules`)}})]})}var z2={canvas:{label:`Canvases`,order:0},dataset:{label:`Datasets`,order:1},context:{label:`Context layers`,order:2},workspace:{label:`Workspaces`,order:3},universe:{label:`Universe`,order:4},label:{label:`Labels`,order:5},system:{label:`System`,order:6}},B2=100,V2=e=>e&&e.charAt(0).toUpperCase()+e.slice(1),H2=e=>z2[e]??{label:`${V2(e)} layers`,order:B2};function U2({type:e}){return e===`canvas`?(0,X.jsx)(er,{className:`w-3.5 h-3.5 shrink-0 text-primary`,"aria-label":`Canvas`}):e===`dataset`?(0,X.jsx)(Tt,{className:`w-3.5 h-3.5 shrink-0 text-secondary`,"aria-label":`Dataset`}):(0,X.jsx)(wt,{className:`w-3.5 h-3.5 shrink-0 text-muted-foreground/60`,"aria-label":`Layer`})}function W2(e){let t=new Map;for(let n of e){let e=n.type||`context`,r=t.get(e);r?r.push(n):t.set(e,[n])}return[...t.entries()].map(([e,t])=>({type:e,items:t,meta:H2(e)})).sort((e,t)=>e.meta.order-t.meta.order||e.meta.label.localeCompare(t.meta.label)).map(({type:e,items:t,meta:n})=>({type:e,label:n.label,items:t}))}function G2({layers:e,isLoading:t,onSelect:n,onLock:r,onUnlock:i,onRename:a,onDestroy:o}){let[s,c]=(0,Y.useState)(null),l=(0,Y.useRef)(null);if((0,Y.useEffect)(()=>{s&&l.current?.focus()},[s]),t)return(0,X.jsx)(`div`,{className:`px-3 py-3 text-xs text-muted-foreground`,children:`Loading layers…`});if(!e.length)return(0,X.jsx)(`div`,{className:`px-3 py-3 text-xs text-muted-foreground`,children:`No layers found`});let u=async(e,t)=>{e.stopPropagation();try{await t()}catch(e){alert(e instanceof Error?e.message:String(e))}},d=async(e,t)=>{c(null);let n=t.trim();if(!(!n||n===e.name))try{await a(e,n)}catch(e){alert(e instanceof Error?e.message:String(e))}},f=W2(e);return(0,X.jsx)(`div`,{className:`px-2 py-1.5 space-y-2`,children:f.map(e=>(0,X.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,X.jsxs)(`div`,{className:`px-1 pt-1 pb-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:[e.label,(0,X.jsxs)(`span`,{className:`ml-1 text-muted-foreground/60`,children:[`(`,e.items.length,`)`]})]}),e.items.map(e=>(0,X.jsxs)(`div`,{className:`group flex items-center gap-2 rounded-l-md px-2 py-1.5 text-xs bg-card shadow-elevation-1 cursor-pointer hover:bg-accent/40 transition-colors`,style:{borderRight:e.color?`4px solid ${e.color}`:`4px solid transparent`},onClick:()=>s!==e.id&&n(e),children:[(0,X.jsx)(`div`,{className:G(`w-2 h-2 rounded-full shrink-0`,!e.color&&`bg-muted-foreground/20`),style:e.color?{backgroundColor:e.color}:void 0}),(0,X.jsx)(U2,{type:e.type}),s===e.id?(0,X.jsx)(`input`,{ref:l,defaultValue:e.label||e.name,className:`flex-1 bg-transparent outline-none min-w-0 font-medium border-b border-primary`,onClick:e=>e.stopPropagation(),onKeyDown:t=>{t.key===`Enter`&&d(e,t.target.value),t.key===`Escape`&&c(null)},onBlur:t=>d(e,t.target.value)}):(0,X.jsx)(`span`,{className:`flex-1 truncate font-medium`,children:e.label||e.name}),e.locked&&s!==e.id&&(0,X.jsx)(Ot,{className:`w-2.5 h-2.5 shrink-0 text-warning group-hover:hidden`}),s!==e.id&&(0,X.jsxs)(`div`,{className:`flex items-center gap-0.5 reveal-on-hover`,children:[e.locked?(0,X.jsx)(`button`,{type:`button`,title:`Unlock layer`,className:`p-0.5 rounded hover:bg-muted-foreground/10 text-warning hover:text-foreground touch-target`,onClick:t=>u(t,()=>i(e)),children:(0,X.jsx)(fn,{className:`w-3 h-3`})}):(0,X.jsx)(`button`,{type:`button`,title:`Lock layer`,className:`p-0.5 rounded hover:bg-muted-foreground/10 text-muted-foreground hover:text-foreground touch-target`,onClick:t=>u(t,()=>r(e)),children:(0,X.jsx)(Ot,{className:`w-3 h-3`})}),!e.locked&&(0,X.jsx)(`button`,{type:`button`,title:`Rename layer`,className:`p-0.5 rounded hover:bg-muted-foreground/10 text-muted-foreground hover:text-foreground touch-target`,onClick:t=>{t.stopPropagation(),c(e.id)},children:(0,X.jsx)(vr,{className:`w-3 h-3`})}),!e.locked&&(0,X.jsx)(`button`,{type:`button`,title:`Destroy layer`,className:`p-0.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive touch-target`,onClick:t=>u(t,()=>o(e)),children:(0,X.jsx)(ut,{className:`w-3 h-3`})})]})]},e.id))]},e.type))})}function K2(){let{state:e,closeM2:t}=pS(),n=Pm(),r=$c(),i=Xc(),a=e.selectedEntityId,[o,s]=(0,Y.useState)(null),[c,l]=(0,Y.useState)({icon:null,color:null});(0,Y.useEffect)(()=>{if(!a)return;let e=!1;return Ti(a).then(t=>{e||(s(t.label||null),l({icon:t.icon??null,color:t.color??null}))}).catch(()=>{}),()=>{e=!0}},[a]);let u=i.pathname.split(`/`).filter(Boolean),d=u[2]===`settings`?uT(u[3]):null,f=(0,Y.useMemo)(()=>cT.map(({id:e,label:t,description:n,icon:r})=>({id:e,label:t,description:n,icon:(0,X.jsx)(r,{className:`h-4 w-4`})})),[]);return(0,X.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,X.jsx)(i2,{title:`Settings: ${o||a||`Workspace`}`,icon:c.icon||`ph:stack-fill`,accentColor:c.color,onBack:()=>{n||!a?t():r(`/workspaces/${a}`)},action:(0,X.jsx)(`button`,{type:`button`,onClick:()=>a&&r(`/workspaces/${a}`),className:`flex h-8 w-8 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground`,title:`Open workspace`,children:(0,X.jsx)(_n,{className:`h-3.5 w-3.5`})})}),(0,X.jsx)(_2,{items:f,activeId:d,onSelect:e=>a&&r(`/workspaces/${a}/settings/${e}`)})]})}function q2(e){let[t,n]=(0,Y.useState)([]),[r,i]=(0,Y.useState)(!1),a=(0,Y.useRef)(!1),o=(0,Y.useRef)(!1),s=(0,Y.useCallback)(async()=>{if(!o.current){o.current=!0,i(!0);try{let e=await AT();n(e||[]),a.current=!0}catch(e){console.error(`Failed to fetch agents:`,e)}finally{o.current=!1,i(!1)}}},[]),c=(0,Y.useCallback)(()=>{a.current=!1,s()},[s]);return(0,Y.useEffect)(()=>{e&&!a.current&&s()},[e,s]),(0,Y.useEffect)(()=>{if(!e)return;let t=()=>Zu.emit(`subscribe`,{channel:`agent`}),r=()=>Zu.emit(`unsubscribe`,{channel:`agent`}),i=Zu.on(`connect`,()=>{t(),s()});t();let a=e=>{let t=e?.agent??e;t?.id&&n(e=>e.some(e=>e.id===t.id)?e:[...e,t])},o=e=>{let t=e?.agent??e;t?.id&&n(e=>e.map(e=>e.id===t.id?{...e,...t}:e))},c=e=>{let t=e,r=t?.agentId??t?.id;r&&n(e=>e.filter(e=>e.id!==r))},l=e=>{let t=e,r=t?.agentId??t?.id,i=t?.status;!r||!i||n(e=>e.map(e=>e.id===r?{...e,status:i}:e))},u=[[`agent:created`,a],[`agent.created`,a],[`agent:updated`,o],[`agent.updated`,o],[`agent:deleted`,c],[`agent.deleted`,c],[`agent:status:changed`,l],[`agent.status.changed`,l]];return u.forEach(([e,t])=>Zu.on(e,t)),()=>{r(),i?.(),u.forEach(([e,t])=>Zu.off(e,t))}},[e,s]),(0,Y.useEffect)(()=>{let e=()=>{a.current=!1,s()};return window.addEventListener(`agents:refresh`,e),()=>window.removeEventListener(`agents:refresh`,e)},[s]),{agents:t,isLoading:r,refresh:c}}function J2({status:e}){return(0,X.jsx)(`span`,{className:G(`inline-block w-2 h-2 rounded-full shrink-0`,e===`active`?`bg-success`:e===`error`?`bg-destructive`:e===`starting`||e===`stopping`?`bg-warning`:`bg-muted-foreground`),title:e})}function Y2(){let e=Tx(),{state:t,selectEntity:n,openM2:r,closeM2:i}=pS(),a=Pm(),{agents:o,isLoading:s,refresh:c}=q2(t.activeSection===`agents`),{showToast:l}=mo(),[u,d]=(0,Y.useState)(new Set),f=$c(),p=e=>{n(e.id),r(`detail`,e.id),f(`/agents/${encodeURIComponent(e.name||e.id)}`)},m=async(e,t)=>{e.stopPropagation(),d(e=>new Set(e).add(t.id));try{await WT(t.id),c(),l({title:`Success`,description:`${t.label||t.name} started`})}catch(e){l({title:`Error`,description:e instanceof Error?e.message:`Start failed`,variant:`destructive`})}finally{d(e=>{let n=new Set(e);return n.delete(t.id),n})}},h=async(e,t)=>{e.stopPropagation(),d(e=>new Set(e).add(t.id));try{await GT(t.id),c(),l({title:`Success`,description:`${t.label||t.name} stopped`})}catch(e){l({title:`Error`,description:e instanceof Error?e.message:`Stop failed`,variant:`destructive`})}finally{d(e=>{let n=new Set(e);return n.delete(t.id),n})}};return(0,X.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between px-4 h-12 border-b border-border shrink-0`,children:[(0,X.jsx)(`span`,{className:`text-sm font-semibold`,children:`Agents`}),!e.local&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>{i(),f(`/agents?create=1`)},title:`Create agent`,"aria-label":`Create agent`,className:`flex items-center justify-center w-6 h-6 rounded-full bg-foreground text-background hover:opacity-80 transition-opacity`,children:(0,X.jsx)(H,{className:`w-3.5 h-3.5`})})]}),(0,X.jsx)(`div`,{className:`flex-1 overflow-y-auto py-2`,children:s&&o.length===0?(0,X.jsx)(`div`,{className:`px-4 py-3 text-xs text-muted-foreground`,children:`Loading...`}):o.length===0?(0,X.jsx)(`div`,{className:`px-4 py-3 text-xs text-muted-foreground`,children:`No agents found`}):(0,X.jsx)(`div`,{className:`space-y-1.5 px-2`,children:o.map(e=>{let i=t.selectedEntityId===e.id,o=u.has(e.id);return(0,X.jsxs)(`div`,{"data-active":i||void 0,className:G(`group relative rounded-md px-3 py-2.5 cursor-pointer transition-all shadow-elevation-1 hover:shadow`,i?`bg-accent shadow`:`bg-card hover:bg-accent/50`),style:{borderRight:`6px solid ${e.color||`transparent`}`,borderRadius:e.color?`6px 0 0 6px`:void 0},onClick:()=>p(e),children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,X.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,X.jsx)(J2,{status:e.status}),(0,X.jsx)(`span`,{className:`text-sm font-medium truncate`,children:e.label||e.name})]})}),(0,X.jsxs)(`div`,{className:`flex items-center gap-0.5 shrink-0`,children:[e.status===`active`?(0,X.jsx)(`button`,{type:`button`,disabled:o,onClick:t=>h(t,e),className:`flex items-center justify-center w-6 h-6 rounded hover:bg-muted-foreground/10 text-muted-foreground disabled:opacity-50 transition-colors`,title:`Stop`,children:(0,X.jsx)(rn,{className:`w-3.5 h-3.5`})}):(0,X.jsx)(`button`,{type:`button`,disabled:o,onClick:t=>m(t,e),className:`flex items-center justify-center w-6 h-6 rounded hover:bg-muted-foreground/10 text-muted-foreground disabled:opacity-50 transition-colors`,title:`Start`,children:(0,X.jsx)(Oe,{className:`w-3.5 h-3.5`})}),(0,X.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),n(e.id),a?r(`settings`,e.id):f(`/agents/${encodeURIComponent(e.name||e.id)}/settings/identity`)},className:`flex items-center justify-center w-6 h-6 rounded hover:bg-muted-foreground/10 text-muted-foreground transition-colors`,title:`Settings`,children:(0,X.jsx)($t,{className:`w-3.5 h-3.5`})})]})]}),e.description&&(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground truncate mt-0.5 pl-3.5`,children:e.description})]},e.id)})})})]})}function X2(e){return e.name?.trim()?e.name.trim():e.firstMessage?.trim()?e.firstMessage.trim():e.isExperimental?`Experimental`:e.id.slice(0,8)}function Z2(e){let t=new Date(e.updatedAt).toLocaleString();return e.messageCount>0?`${e.messageCount} msg${e.messageCount===1?``:`s`} • ${t}`:`Empty • ${t}`}function Q2(e){return e.sessions.sessions.find(t=>t.id===e.current.sessionId||t.path===e.current.sessionFile||t.id===e.sessions.currentSessionId||t.path===e.sessions.currentSessionPath||t.isCurrent)||null}function $2(){let{state:e,closeM2:t}=pS(),n=e.selectedEntityId||``,r=$c(),{showToast:i}=mo(),[a,o]=(0,Y.useState)(null),[s,c]=(0,Y.useState)(!1),[l,u]=(0,Y.useState)(``),[d,f]=(0,Y.useState)(null),[p,m]=(0,Y.useState)(``),{current:h,sessions:g,isLoading:_,error:v,refresh:y,create:b,select:x,rename:S,remove:C}=Vk(n);(0,Y.useEffect)(()=>{n&&(jT(n).then(o).catch(()=>{}),y().catch(e=>{i({title:`Error`,description:e instanceof Error?e.message:`Failed to load sessions`,variant:`destructive`})}))},[n,y,i]);let w=(0,Y.useMemo)(()=>g?.sessions?g.currentSessionId?g.sessions.find(e=>e.id===g.currentSessionId)||null:g.currentSessionPath?g.sessions.find(e=>e.path===g.currentSessionPath)||null:g.sessions.find(e=>e.isCurrent)||null:null,[g]),E=a?.name||n,D=e=>e?.slug||e?.id,O=e=>{let t=typeof e==`string`?e:D(e);r(t?`/agents/${encodeURIComponent(E)}/${encodeURIComponent(t)}`:`/agents/${encodeURIComponent(E)}`)},k=async()=>{try{let e=await b({mode:`persistent`,name:l.trim()||void 0});c(!1),u(``),O(Q2(e))}catch(e){i({title:`Error`,description:e instanceof Error?e.message:`Failed to create session`,variant:`destructive`})}},A=async()=>{try{let e=await b({mode:`experimental`});O(Q2(e))}catch(e){i({title:`Error`,description:e instanceof Error?e.message:`Failed to open experimental session`,variant:`destructive`})}},j=async()=>{try{await b({mode:`incognito`}),O()}catch(e){i({title:`Error`,description:e instanceof Error?e.message:`Failed to open incognito session`,variant:`destructive`})}},M=async e=>{try{e.isExperimental?await x({mode:`experimental`}):await x({mode:`persistent`,sessionId:e.id}),O(e)}catch(e){i({title:`Error`,description:e instanceof Error?e.message:`Failed to select session`,variant:`destructive`})}},P=async e=>{if(p.trim())try{let t=(await S(e.id,p.trim())).sessions.sessions.find(t=>t.id===e.id);f(null),m(``),w?.id===e.id&&O(t||e)}catch(e){i({title:`Error`,description:e instanceof Error?e.message:`Failed to rename session`,variant:`destructive`})}},F=async e=>{if(!e.isExperimental&&window.confirm(`Delete session "${X2(e)}"?`))try{await C(e.id),O()}catch(e){i({title:`Error`,description:e instanceof Error?e.message:`Failed to delete session`,variant:`destructive`})}};return(0,X.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,X.jsx)(i2,{title:a?.label||a?.name||n,onBack:t,action:(0,X.jsx)(`button`,{type:`button`,onClick:()=>r(`/agents/${encodeURIComponent(E)}/settings`),className:`flex h-8 w-8 items-center justify-center rounded hover:bg-accent/50 text-muted-foreground hover:text-foreground transition-colors`,title:`Agent settings`,children:(0,X.jsx)($t,{className:`h-3.5 w-3.5`})})}),(0,X.jsxs)(`div`,{className:`border-b border-border px-4 py-3`,children:[(0,X.jsx)(`div`,{className:`text-sm font-semibold`,children:`Sessions`}),(0,X.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:g?.mode===`incognito`?`Incognito mode`:g?.mode===`experimental`?`Experimental mode`:`Persistent history`}),(0,X.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[(0,X.jsxs)(q,{size:`sm`,variant:s?`default`:`outline`,onClick:()=>{c(e=>!e),u(``)},disabled:_,children:[(0,X.jsx)(H,{className:`mr-1 h-3.5 w-3.5`}),`New`]}),(0,X.jsxs)(q,{size:`sm`,variant:g?.mode===`experimental`?`default`:`outline`,onClick:A,disabled:_,children:[(0,X.jsx)(N,{className:`mr-1 h-3.5 w-3.5`}),`Experimental`]}),(0,X.jsx)(q,{size:`sm`,variant:g?.mode===`incognito`?`default`:`outline`,onClick:j,disabled:_,children:`Incognito`})]})]}),(0,X.jsxs)(`div`,{className:`flex-1 overflow-y-auto p-2`,children:[v&&(0,X.jsx)(`div`,{className:`px-2 py-2 text-xs text-destructive`,children:v}),s&&(0,X.jsxs)(`div`,{className:`mb-2 rounded-md border bg-muted/20 p-2`,children:[(0,X.jsx)(`div`,{className:`mb-2 text-xs text-muted-foreground`,children:`Name the new session or leave it blank.`}),(0,X.jsxs)(`div`,{className:`flex gap-2`,children:[(0,X.jsx)(K,{value:l,onChange:e=>u(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),k()),e.key===`Escape`&&(c(!1),u(``))},placeholder:`Debugging auth`,className:`h-8`}),(0,X.jsx)(q,{size:`sm`,onClick:k,disabled:_,children:`Create`})]})]}),g?.sessions.length?(0,X.jsx)(`div`,{className:`space-y-1.5`,children:g.sessions.map(e=>{let t=w?.id===e.id&&g.mode!==`incognito`,n=d===e.id;return(0,X.jsx)(`div`,{onClick:()=>M(e),onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),M(e))},role:`button`,tabIndex:_?-1:0,className:`group w-full rounded-md border px-3 py-2 text-left transition-colors ${t?`border-foreground bg-accent`:`border-transparent hover:bg-accent/50`} ${_?`opacity-60`:``}`,children:(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,X.jsx)(`div`,{className:`min-w-0 flex-1`,children:n?(0,X.jsxs)(`div`,{className:`flex gap-2`,children:[(0,X.jsx)(K,{value:p,onChange:e=>m(e.target.value),onClick:e=>e.stopPropagation(),onKeyDown:t=>{t.key===`Enter`&&(t.preventDefault(),P(e)),t.key===`Escape`&&(f(null),m(``))},placeholder:`Session name`,className:`h-8`}),(0,X.jsx)(q,{size:`sm`,onClick:t=>{t.stopPropagation(),P(e)},disabled:!p.trim()||_,children:`Save`})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`span`,{className:`truncate text-sm font-medium`,children:X2(e)}),e.isExperimental&&(0,X.jsx)(`span`,{className:`rounded-full bg-primary/10 px-1.5 py-0.5 text-[10px] text-primary`,children:`∞`}),e.isCurrent&&(0,X.jsx)(`span`,{className:`rounded-full bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground`,children:`Current`})]}),(0,X.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:Z2(e)})]})}),!n&&(0,X.jsxs)(`div`,{className:`flex items-center gap-0.5 reveal-on-hover`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),f(e.id),m(e.name||X2(e))},className:`flex h-7 w-7 items-center justify-center rounded hover:bg-muted-foreground/10 text-muted-foreground touch-target`,title:`Rename`,children:(0,X.jsx)(T,{className:`h-3.5 w-3.5`})}),!e.isExperimental&&(0,X.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),F(e)},className:`flex h-7 w-7 items-center justify-center rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive touch-target`,title:`Delete session`,children:(0,X.jsx)(ut,{className:`h-3.5 w-3.5`})})]})]})},e.id)})}):(0,X.jsx)(`div`,{className:`flex h-full items-center justify-center text-center text-muted-foreground`,children:(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`div`,{className:`text-sm`,children:_?`Loading sessions...`:`No persistent sessions yet.`}),(0,X.jsx)(`div`,{className:`mt-1 text-xs`,children:"Use `New`, `Experimental`, or `Incognito`."})]})}),h?.mode===`incognito`&&(0,X.jsx)(`div`,{className:`mt-3 rounded-md border border-dashed px-3 py-2 text-xs text-muted-foreground`,children:`Incognito session is active. It lives in memory and stays out of the session list.`})]})]})}function e4(){let{state:e,closeM2:t}=pS(),n=Pm(),r=$c(),i=Xc(),a=e.selectedEntityId,[o,s]=(0,Y.useState)(null);(0,Y.useEffect)(()=>{if(!a)return;let e=!1;return jT(a).then(t=>{e||s(t)}).catch(()=>{}),()=>{e=!0}},[a]);let c=i.pathname.split(`/`).filter(Boolean),l=c[2]===`settings`?mT(c[3]):null,u=encodeURIComponent(o?.name||a||``),d=(0,Y.useMemo)(()=>pT.map(({id:e,label:t,description:n,icon:r})=>({id:e,label:t,description:n,icon:(0,X.jsx)(r,{className:`h-4 w-4`})})),[]);return(0,X.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,X.jsx)(i2,{title:`Settings: ${o?.label||o?.name||a||`Agent`}`,accentColor:o?.color??null,onBack:()=>{n||!u?t():r(`/agents/${u}`)},action:(0,X.jsx)(`button`,{type:`button`,onClick:()=>u&&r(`/agents/${u}`),className:`flex h-8 w-8 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground`,title:`Open agent`,children:(0,X.jsx)(_n,{className:`h-3.5 w-3.5`})})}),(0,X.jsx)(_2,{items:d,activeId:l,onSelect:e=>u&&r(`/agents/${u}/settings/${e}`)})]})}function t4(){let e=Xc(),{state:t}=pS(),[n,r]=(0,Y.useState)(``),i=(0,Y.useRef)(null);(0,Y.useLayoutEffect)(()=>{let e=i.current,t=e?.querySelector(`[aria-current="page"]`);if(!e||!t)return;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();r.top<n.top?e.scrollTop+=r.top-n.top:r.bottom>n.bottom&&(e.scrollTop+=r.bottom-n.bottom)},[e.pathname,t.user?.userType]);let a=Ux.filter(e=>e.id!==`server`||t.user?.userType===`admin`).map(e=>({...e,items:e.items.filter(t=>Gx(n,e.label,t.label,t.description))})).filter(e=>e.items.length);return(0,X.jsxs)(`nav`,{"aria-label":`Settings`,className:`flex h-full flex-col`,children:[(0,X.jsxs)(`div`,{className:`shrink-0 space-y-3 border-b border-border p-3`,children:[(0,X.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Settings`}),(0,X.jsx)(K,{type:`search`,"aria-label":`Search settings menu`,placeholder:`Find a setting…`,value:n,onChange:e=>r(e.target.value)})]}),(0,X.jsxs)(`div`,{ref:i,className:`min-h-0 flex-1 space-y-4 overflow-y-auto p-2`,children:[a.map(t=>(0,X.jsxs)(`section`,{"aria-label":t.label,children:[(0,X.jsx)(`h2`,{className:`px-3 py-2 text-xs font-semibold text-muted-foreground`,children:t.label}),t.items.map(({path:t,icon:n,label:r,description:i})=>(0,X.jsxs)(gu,{to:t,"aria-current":e.pathname===t?`page`:void 0,className:G(`flex items-start gap-3 rounded-md px-3 py-2 text-left hover:bg-accent/50`,e.pathname===t&&`bg-accent`),children:[(0,X.jsx)(n,{className:`mt-0.5 h-4 w-4 shrink-0 text-muted-foreground`}),(0,X.jsxs)(`span`,{children:[(0,X.jsx)(`span`,{className:`block text-sm font-medium`,children:r}),(0,X.jsx)(`span`,{className:`mt-0.5 block text-xs leading-relaxed text-muted-foreground`,children:i})]})]},t))]},t.id)),!a.length&&(0,X.jsx)(`p`,{role:`status`,className:`p-3 text-sm text-muted-foreground`,children:`No settings match. Try “cache”, “model” or “token”.`})]})]})}var n4=280,r4=220,i4=560;function a4(){let{state:e}=pS(),{activeSection:t,m2View:n}=e;if(t===`contexts`){if(n===`settings`)return(0,X.jsx)(v2,{});if(n===`detail`)return(0,X.jsx)(g2,{})}if(t===`workspaces`){if(n===`settings`)return(0,X.jsx)(K2,{});if(n===`detail`)return(0,X.jsx)(L2,{})}if(t===`agents`){if(n===`settings`)return(0,X.jsx)(e4,{});if(n===`detail`)return(0,X.jsx)($2,{})}return null}function o4(){let{state:e,closeM1:t,closeM2:n}=pS();Cf(t,e.m1Open&&!e.m2Open),Cf(n,e.m2Open);let r=Pm(),[i,a]=(0,Y.useState)(n4),[o,s]=(0,Y.useState)(!1),c=(0,Y.useRef)(null),l=(0,Y.useCallback)(e=>{e.preventDefault(),s(!0),c.current={startX:e.clientX,startWidth:i};let t=e=>{if(!c.current)return;let t=e.clientX-c.current.startX,n=Math.min(i4,Math.max(r4,c.current.startWidth+t));a(n)},n=()=>{c.current=null,s(!1),window.removeEventListener(`mousemove`,t),window.removeEventListener(`mouseup`,n)};window.addEventListener(`mousemove`,t),window.addEventListener(`mouseup`,n)},[i]),u=r&&e.m1Open;return(0,X.jsxs)(X.Fragment,{children:[u&&(0,X.jsx)(`div`,{className:`fixed inset-0 z-40 bg-scrim animate-fade-in`,onClick:t,"aria-hidden":!0}),(0,X.jsxs)(`div`,{style:e.m1Open&&!u?{width:i}:void 0,className:G(`flex-shrink-0 overflow-hidden bg-card surface-glass`,!o&&!u&&`transition-[width] duration-200 ease-out`,e.m1Open?`rounded-[var(--panel-radius)] shadow-elevation-2`:`w-0`,u?`fixed bottom-2 left-[calc(0.5rem+var(--spacing-rail)+0.5rem)] right-2 top-2 z-40 shadow-elevation-5 animate-fade-in`:`relative`),children:[(0,X.jsxs)(`div`,{className:G(`absolute inset-0 flex flex-col transition-opacity duration-200 ease-out`,e.m2Open&&`opacity-0 pointer-events-none`),style:u?void 0:{minWidth:i},children:[e.activeSection===`contexts`&&(0,X.jsx)(r2,{}),e.activeSection===`workspaces`&&(0,X.jsx)(x2,{}),e.activeSection===`agents`&&(0,X.jsx)(Y2,{}),e.activeSection===`admin`&&(0,X.jsx)(t4,{}),e.activeSection===`settings`&&(0,X.jsx)(t4,{})]}),(0,X.jsx)(`div`,{className:G(`absolute inset-0 z-10 bg-card flex flex-col transition-transform duration-200 ease-out`,e.m2Open?`translate-x-0`:`translate-x-full`),children:e.m2Open&&(0,X.jsx)(a4,{})}),e.m1Open&&!u&&(0,X.jsx)(`div`,{onMouseDown:l,className:`absolute right-0 top-0 bottom-0 z-20 w-1 cursor-col-resize hover:bg-primary/20 transition-colors`})]})]})}var s4=`canvas:readerWidth`,c4=320,l4=1600;function u4(){try{let e=Number(sessionStorage.getItem(s4));return Number.isFinite(e)&&e>=c4&&e<=l4?e:null}catch{return null}}var d4=u4(),f4=new Set;function p4(e){return f4.add(e),()=>{f4.delete(e)}}function m4(e){d4=e===null?null:Math.round(Math.max(c4,Math.min(l4,e)));try{d4===null?sessionStorage.removeItem(s4):sessionStorage.setItem(s4,String(d4))}catch{}f4.forEach(e=>e())}function h4(){return(0,Y.useSyncExternalStore)(p4,()=>d4,()=>null)}var g4=320,_4=1600;function v4({edge:e}){let t=h4(),n=(0,Y.useRef)(null),r=e===`left`?-1:1;return(0,X.jsx)(`div`,{role:`separator`,"aria-label":`Resize document reader`,"aria-orientation":`vertical`,"aria-valuemin":g4,"aria-valuemax":_4,"aria-valuenow":t??560,tabIndex:0,title:`Drag to resize; arrow keys adjust width; double-click to reset`,className:`absolute inset-y-0 ${e===`left`?`left-0`:`right-0`} z-20 hidden w-2 touch-none cursor-col-resize select-none hover:bg-primary/20 focus-visible:bg-primary/20 focus-visible:outline-none md:block`,onPointerDown:t=>{if(t.button!==0)return;t.preventDefault(),t.stopPropagation();let r=t.currentTarget.closest(`[data-reader-pane]`),i=e===`left`?(r.parentElement?.clientWidth??window.innerWidth)-240:window.innerWidth;n.current={x:t.clientX,width:r.getBoundingClientRect().width,max:Math.max(g4,i)},t.currentTarget.setPointerCapture(t.pointerId)},onPointerMove:e=>{n.current&&m4(Math.min(n.current.max,n.current.width+r*(e.clientX-n.current.x)))},onPointerUp:e=>{n.current=null,e.currentTarget.hasPointerCapture(e.pointerId)&&e.currentTarget.releasePointerCapture(e.pointerId)},onPointerCancel:()=>{n.current=null},onLostPointerCapture:()=>{n.current=null},onDoubleClick:()=>m4(null),onKeyDown:e=>{if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`&&e.key!==`Home`)return;e.preventDefault(),e.stopPropagation();let t=e.currentTarget.closest(`[data-reader-pane]`);e.key===`Home`?m4(null):m4(t.getBoundingClientRect().width+(e.key===`ArrowRight`?1:-1)*r*(e.shiftKey?64:16))}})}function y4(e){return e.schema===`data/schema/note`?Sn:e.schema===`data/schema/tab`?Zt:e.schema===`data/schema/file`?xt:e.schema===`data/schema/message/email`?wn:pn}function b4({entry:e,onClose:t,frame:n}={}){let r=tm(),i=e??r.entry,a=t??r.close,{document:o,refresh:s}=v_(i?.workspaceId,i?.document??null);if(!i||!o)return null;let{workspaceId:c}=i;return(0,X.jsx)(qC,{title:xo(o).title,icon:y4(o),onClose:a,onSave:async e=>(await ei(c,e.path,[o.id],e.treeName,e.treeType),[o.id]),canSave:!0,successMessage:`Linked`,lockedWorkspaceName:c,relationSubjectId:o.id,frame:n,fillParent:!0,fullWidthContent:Hh(o)===Km,children:(0,X.jsx)(__,{document:o,workspaceId:c,onChanged:s,compact:!0},`${c}:${o.id}`)})}function x4(e){let[t]=e.split(`/`).filter(Boolean);return!t||t===`home`||t===`share-target`}function S4(e){let[t,n]=e.split(`/`).filter(Boolean);return[`contexts`,`workspaces`,`agents`].includes(t)&&!!n}var C4=`max-md:fixed max-md:left-2 max-md:right-2 max-md:top-2 max-md:bottom-2 max-md:z-side max-md:py-0 max-md:pr-0 max-md:rounded-2xl max-md:shadow-elevation-5 max-md:animate-fade-in`,w4=`fixed inset-0 z-side-scrim bg-scrim animate-fade-in md:hidden`;function T4(){let e=h4(),{pathname:t}=Xc(),n=S4(t),r=x4(t),{entry:i,close:a}=tm();return(0,X.jsx)(`div`,{className:G(`relative flex flex-col flex-1 min-w-0`,!r&&`surface-sheet`),children:(0,X.jsxs)(`div`,{className:`flex flex-1 min-h-0 gap-shell`,children:[(0,X.jsx)(`main`,{id:`content-area`,className:G(`relative flex-1 min-h-0 min-w-0 overflow-auto`,!n&&!r&&`p-page max-md:pb-rail-stack`),children:(0,X.jsx)(El,{})}),i&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:w4,onClick:a,"aria-hidden":!0}),(0,X.jsxs)(`div`,{"data-reader-pane":!0,style:{"--reader-width":`${e??560}px`,"--document-card-width":`100%`},className:G(`relative flex shrink-0 items-stretch py-2 pr-2 md:w-[var(--reader-width)] md:max-w-[calc(100%_-_240px)]`,C4),children:[(0,X.jsx)(v4,{edge:`left`}),(0,X.jsx)(b4,{})]})]})]})})}function E4(){let{state:e,setView:t}=Ss(),{pathname:n}=Xc();return e.t1Open||e.addOpen||!x4(n)?null:(0,X.jsx)(`button`,{type:`button`,onClick:()=>t(`tools`),"aria-label":`Open toolbox`,title:`Open toolbox`,className:`fixed z-50 hidden md:flex h-16 w-16 items-center justify-center rounded-full shadow-elevation-4 transition-colors bottom-fab-inset right-6 bg-foreground text-background hover:bg-foreground`,children:(0,X.jsx)(At,{className:`h-7 w-7`,strokeWidth:1.75,"aria-hidden":!0})})}var D4={current:null,sessions:null,isLoading:!1,error:null};function O4(e){return e instanceof Error?e.message:`Session request failed`}function k4({children:e}){let[t,n]=(0,Y.useState)({}),r=(0,Y.useCallback)((e,t)=>{n(n=>({...n,[e]:{...n[e]||D4,...t}}))},[]),i=(0,Y.useCallback)((e,t)=>(r(e,{current:t.current,sessions:t.sessions,isLoading:!1,error:null}),t),[r]),a=(0,Y.useCallback)(async e=>{if(e){r(e,{isLoading:!0,error:null});try{let[t,n]=await Promise.all([MT(e),NT(e)]);r(e,{current:t,sessions:n,isLoading:!1,error:null})}catch(t){throw r(e,{isLoading:!1,error:O4(t)}),t}}},[r]),o=(0,Y.useCallback)(async(e,t)=>{r(e,{isLoading:!0,error:null});try{return i(e,await PT(e,t))}catch(t){throw r(e,{isLoading:!1,error:O4(t)}),t}},[i,r]),s=(0,Y.useCallback)(async(e,t)=>{r(e,{isLoading:!0,error:null});try{return i(e,await FT(e,t))}catch(t){throw r(e,{isLoading:!1,error:O4(t)}),t}},[i,r]),c=(0,Y.useCallback)(async(e,t,n)=>{r(e,{isLoading:!0,error:null});try{return i(e,await IT(e,t,{name:n}))}catch(t){throw r(e,{isLoading:!1,error:O4(t)}),t}},[i,r]),l=(0,Y.useCallback)(async(e,t)=>{r(e,{isLoading:!0,error:null});try{return i(e,await LT(e,t))}catch(t){throw r(e,{isLoading:!1,error:O4(t)}),t}},[i,r]),u=(0,Y.useMemo)(()=>({getState:e=>t[e]||D4,refresh:a,create:o,select:s,rename:c,remove:l}),[t,a,o,s,c,l]);return(0,X.jsx)(Bk.Provider,{value:u,children:e})}var A4=`data/schema/`,j4={"data/schema/file":{label:`Files`,icon:Tn},"data/schema/note":{label:`Notes`,icon:Sn},"data/schema/task":{label:`Todos`,icon:kn},"data/schema/tab":{label:`Tabs`,icon:ie},"data/schema/message/email":{label:`Emails`,icon:wn},"data/schema/link":{label:`Links`,icon:Zt},"data/schema/identity":{label:`Identities`,icon:Qe},"data/schema/drawing":{label:`Sketches`,icon:it}};function M4(e){return j4[e]??{label:e.startsWith(`data/schema/`)?e.slice(12).replace(/(^|\/)(\w)/g,(e,t,n)=>t+n.toUpperCase()):e,icon:h}}function N4(e){return j4[e]?.icon??h}function P4(e){return{...e,lens:Lb.lens}}function F4(e,t,n=!1){let r=n?e=>e:P4;return JSON.stringify(r(e))!==JSON.stringify(r(t??Lb))}var I4={savedGeoSelection:null,liveEnabled:!1,liveError:null,t1Open:!1,t1View:null,toolsTab:`features`,appsAppletId:null,t2Open:!1,t2AgentId:null,addOpen:!1,addKind:null,addRelateTo:null,editDocument:null,editWorkspaceId:null,activeContextPath:null,activeContextType:null,activeWorkspaceName:null,activeTreeName:null,activeCanvasId:null,activeContextId:null,activeAccentColor:null,filters:Lb,geoSelection:null,mapDocuments:[],mapWorkspaceId:null,savedFilters:null,savedSearchQuery:null,isDirty:!1,isSaving:!1,availableBitmaps:[],bitmapsLoading:!1,availableTimelines:[],timelineScales:{},timelinesLoading:!1};function L4(e,t){switch(t.type){case`SET_VIEW`:return{...e,t1Open:t.view!==null,t1View:t.view};case`TOGGLE_VIEW`:return e.t1View===t.view?{...e,t1Open:!1,t1View:null}:{...e,t1Open:!0,t1View:t.view};case`CLOSE_T1`:return{...e,t1Open:!1,t1View:null,t2Open:!1,t2AgentId:null};case`OPEN_T2_AGENT`:return{...e,t2Open:!0,t2AgentId:t.agentId};case`CLOSE_T2`:return{...e,t2Open:!1,t2AgentId:null};case`OPEN_ADD`:return{...e,addOpen:!0,addKind:t.kind,addRelateTo:t.relateTo===void 0?e.addRelateTo:t.relateTo,editDocument:null,editWorkspaceId:null};case`CLOSE_ADD`:return{...e,addOpen:!1,addKind:null,addRelateTo:null,editDocument:null,editWorkspaceId:null};case`OPEN_EDIT`:return{...e,addOpen:!0,addKind:null,addRelateTo:null,editDocument:t.document,editWorkspaceId:t.workspaceId};case`SET_TOOLS_TAB`:return{...e,toolsTab:t.tab};case`SET_APPS_APPLET`:return{...e,appsAppletId:t.appletId};case`SET_ACCENT_COLOR`:return e.activeAccentColor===t.color?e:{...e,activeAccentColor:t.color};case`SET_GEO_SELECTION`:return{...e,geoSelection:t.selection,isDirty:e.activeContextType===`context`?F4(e.filters,e.savedFilters,!0)||JSON.stringify(t.selection)!==JSON.stringify(e.savedGeoSelection):e.isDirty};case`SET_SAVED_GEO_SELECTION`:return{...e,savedGeoSelection:t.selection,isDirty:e.activeContextType===`context`?F4(e.filters,e.savedFilters,!0)||JSON.stringify(e.geoSelection)!==JSON.stringify(t.selection):e.isDirty};case`SET_MAP_DOCUMENTS`:return e.mapDocuments===t.documents&&e.mapWorkspaceId===t.workspaceId?e:{...e,mapDocuments:t.documents,mapWorkspaceId:t.workspaceId};case`SET_NAVIGATION`:{let n=e.activeContextType===t.contextType&&e.activeContextId===t.contextId&&e.activeCanvasId===t.canvasId;return{...e,activeWorkspaceName:t.workspaceName,activeTreeName:t.treeName,activeCanvasId:t.canvasId,activeContextId:t.contextId,activeContextType:t.contextType,activeContextPath:t.contextPath,geoSelection:null,...n?{}:{filters:Lb,savedFilters:null,savedSearchQuery:null,isDirty:!1,savedGeoSelection:null,liveEnabled:!1,liveError:null}}}case`SET_CONTEXT_SCOPE`:return e.activeContextType!==`context`||e.activeWorkspaceName===t.workspaceName&&e.activeContextPath===t.contextPath&&e.activeTreeName===t.treeId?e:{...e,activeWorkspaceName:t.workspaceName,activeContextPath:t.contextPath,activeTreeName:t.treeId};case`SET_LIVE`:return{...e,liveEnabled:t.enabled,liveError:null};case`SET_LIVE_ERROR`:return{...e,liveError:t.error};case`SET_FILTERS`:return{...e,filters:t.filters,isDirty:e.activeContextType===null?!1:F4(t.filters,e.savedFilters,e.activeContextType===`context`)||e.activeContextType===`context`&&JSON.stringify(e.geoSelection)!==JSON.stringify(e.savedGeoSelection)};case`SET_SAVED_FILTERS`:{let n=t.hydrating===!0&&e.isDirty,r=n?e.filters:t.savedFilters??Lb;return{...e,savedFilters:t.savedFilters,savedSearchQuery:t.savedSearchQuery??null,filters:r,isDirty:n?F4(r,t.savedFilters,e.activeContextType===`context`):!1}}case`SET_SAVING`:return{...e,isSaving:t.isSaving};case`SET_BITMAPS`:return{...e,availableBitmaps:t.keys,bitmapsLoading:!1};case`SET_BITMAPS_LOADING`:return{...e,bitmapsLoading:t.loading};case`SET_TIMELINES`:return{...e,availableTimelines:t.names,timelineScales:t.scales??e.timelineScales,timelinesLoading:!1};case`SET_TIMELINES_LOADING`:return{...e,timelinesLoading:t.loading};default:return e}}var R4=`toolbox:session:filters`;function z4(){try{let e=localStorage.getItem(R4);if(!e)return null;let t=JSON.parse(e);return{...Lb,...t,features:{...Lb.features,...t.features??{}},timeline:{...Lb.timeline,...t.timeline??{}},geo:{...Lb.geo,...t.geo??{}},lens:Lb.lens,sort:{...Ib,...t.sort??{}}}}catch{return null}}function B4(e){try{localStorage.setItem(R4,JSON.stringify(P4(e)))}catch{}}function V4(e,t=!1){if(!e?.toolbox)return null;try{let n=e.toolbox;return{features:{allOf:n.features?.allOf??[],anyOf:n.features?.anyOf??[],noneOf:n.features?.noneOf??[]},timeline:{quickFilter:n.timeline?.quickFilter??null,customRanges:n.timeline?.customRanges??(n.timeline?.customRange?[n.timeline.customRange]:[]),indexCreated:n.timeline?.indexCreated??!0,indexUpdated:n.timeline?.indexUpdated??!0,indexDeleted:n.timeline?.indexDeleted??!1,contentEvents:n.timeline?.contentEvents??!1,selectedTimelines:n.timeline?.selectedTimelines??[]},geo:{bbox:n.geo?.bbox??null,includeUnlocated:n.geo?.includeUnlocated??!1},lens:t?{...Lb.lens,...n.lens??{}}:Lb.lens,sort:{sortBy:n.sort?.sortBy??Ib.sortBy,order:n.sort?.order===`asc`?`asc`:`desc`}}}catch{return null}}function H4(e,t){let n=e;for(let e of t.split(`/`).filter(Boolean))if(n=n?.children?.find(t=>t.name===e)??null,!n)break;return n}function U4({children:e}){let[t,n]=(0,Y.useReducer)(L4,I4),r=Xc(),i=$c(),a=new URLSearchParams(r.search).get(`ownerId`)||void 0,o=(0,Y.useRef)(null),s=(0,Y.useRef)(t);(0,Y.useEffect)(()=>{s.current=t}),(0,Y.useEffect)(()=>{let e=!1,t=r.pathname.split(`/`).filter(Boolean),i=t[0]===`workspaces`&&t[1]||null,a=t[0]===`contexts`&&t[1]||null,{path:o,treeName:c}=i?Cy(r.pathname):{path:`/`,treeName:``},l=t=>{if(e)return;let r=t?`canvas`:a?`context`:null,l=s.current;l.activeContextType!==null&&r===null&&B4(l.filters),n({type:`SET_NAVIGATION`,workspaceName:i,treeName:i?c:null,canvasId:t,contextId:a,contextType:r,contextPath:i?o:null})};return i&&o!==`/`?(yi(i,c).then(t=>{if(e)return;let n=H4(t,o);l(n?.type===`canvas`?n.id:null)}).catch(()=>l(null)),()=>{e=!0}):(l(null),()=>{e=!0})},[r.pathname]),(0,Y.useEffect)(()=>{let e=t.activeWorkspaceName;e&&(n({type:`SET_BITMAPS_LOADING`,loading:!0}),$i(e).then(e=>{n({type:`SET_BITMAPS`,keys:e})}))},[t.activeWorkspaceName]),(0,Y.useEffect)(()=>{let e=t.activeWorkspaceName;e&&(n({type:`SET_TIMELINES_LOADING`,loading:!0}),vi(e).then(e=>{n({type:`SET_TIMELINES`,names:e.map(e=>e.name),scales:Object.fromEntries(e.filter(e=>e.scales?.length).map(e=>[e.name,e.scales]))})}))},[t.activeWorkspaceName]),(0,Y.useEffect)(()=>{let{activeContextType:e,activeCanvasId:r,activeWorkspaceName:i,activeTreeName:a,activeContextPath:o}=t;if(e!==`context`){if(e===`canvas`&&r&&i&&o)yi(i,a||`context`).then(e=>{let t=H4(e,o),r=V4(t?.metadata);n({type:`SET_SAVED_FILTERS`,savedFilters:r,savedSearchQuery:t?.querySpec?.query??null,hydrating:!0})}).catch(()=>{n({type:`SET_SAVED_FILTERS`,savedFilters:null,savedSearchQuery:null,hydrating:!0})});else{let e=z4();n({type:`SET_SAVED_FILTERS`,savedFilters:e,savedSearchQuery:null})}}},[t.activeCanvasId,t.activeContextPath,t.activeContextType,t.activeTreeName,t.activeWorkspaceName]),(0,Y.useEffect)(()=>{let{activeContextType:e,activeContextId:c}=t;if(e!==`context`||!c)return;let l=!1;o.current=null;let u=0,d=e=>{let t=new URLSearchParams(window.location.search);t.delete(`q`),t.delete(`search`);for(let n of e)t.append(`q`,n);let n=t.toString();i(`${r.pathname}${n?`?${n}`:``}`,{replace:!0})},f=(e,t,r,i=null,a=r?[r]:[])=>{let s=e?.filters??t??Lb,c=e?.geoSelection??i;o.current=JSON.stringify({filters:s,geoSelection:c,queries:e?.queries??a}),n({type:`SET_SAVED_FILTERS`,savedFilters:t,savedSearchQuery:r}),n({type:`SET_FILTERS`,filters:s}),n({type:`SET_GEO_SELECTION`,selection:c}),n({type:`SET_SAVED_GEO_SELECTION`,selection:i}),n({type:`SET_LIVE`,enabled:e!==null}),d(e?.queries??a)},p=e=>{let t=++u;return os(c,a).then(r=>{if(l||t!==u)return;let i=r.metadata,a=V4(i,!0),c=typeof i?.toolboxSearchQuery==`string`?i.toolboxSearchQuery:null;if(n({type:`SET_CONTEXT_SCOPE`,workspaceName:r.workspaceName||r.workspaceId||null,contextPath:r.path||`/`,treeId:r.treeId||null}),r.liveQuery)f(r.liveQuery,a,c,i?.toolboxGeoSelection??null,r.queryOptions?.queries);else if(e){n({type:`SET_LIVE`,enabled:!1});let e=s.current.isDirty?s.current.filters:a??Lb,t=i?.toolboxGeoSelection??null;o.current=JSON.stringify({filters:e,geoSelection:t,queries:[]}),n({type:`SET_SAVED_FILTERS`,savedFilters:a,savedSearchQuery:c,hydrating:!0}),n({type:`SET_GEO_SELECTION`,selection:t}),n({type:`SET_SAVED_GEO_SELECTION`,selection:t});let l=new URLSearchParams(window.location.search),u=r.queryOptions?.queries?.length?r.queryOptions.queries:c?[c]:[];!l.has(`q`)&&!l.has(`search`)&&u.length&&d(u)}}).catch(e=>{l||t!==u||n({type:`SET_LIVE_ERROR`,error:e instanceof Error?e.message:`Could not load context`})})};p(!0);let m=()=>{p(!1)},h=Zu.on(`context.url.set`,e=>{e?.id===c&&m()}),g=Zu.on(`context.updated`,e=>{let t=e;if((t.contextId||t.id)!==c)return;if(!t.metadata){p(!0);return}++u;let n=V4(t.metadata,!0);f(t.liveQuery??null,n,typeof t.metadata.toolboxSearchQuery==`string`?t.metadata.toolboxSearchQuery:null,t.metadata.toolboxGeoSelection??null,t.queryOptions?.queries)}),_=Zu.on(`connect`,()=>{p(!0)}),v=Zu.on(`disconnect`,()=>{s.current.liveEnabled&&n({type:`SET_LIVE_ERROR`,error:`Disconnected — Live updates will resume when connected.`})});return window.addEventListener(`contexts:refresh`,m),()=>{l=!0,o.current=null,h(),g(),_(),v(),window.removeEventListener(`contexts:refresh`,m)}},[t.activeContextId,t.activeContextType,a]);let c=(0,Y.useMemo)(()=>{let e=new URLSearchParams(r.search),t=e.getAll(`q`).map(e=>e.trim()).filter(Boolean),n=(e.get(`search`)||``).trim();return t.length?t:n?[n]:[]},[r.search]),l=(0,Y.useRef)(c);(0,Y.useEffect)(()=>{l.current=c},[c]);let u=(0,Y.useRef)(!1),d=(0,Y.useRef)(null),[f,p]=(0,Y.useState)(0);(0,Y.useEffect)(()=>()=>{d.current!==null&&window.clearTimeout(d.current),d.current=null},[t.activeContextType,t.activeContextId,t.liveEnabled,a]),(0,Y.useEffect)(()=>{t.activeContextType!==`context`||!t.activeContextId||a||!t.liveEnabled||o.current===null||u.current||d.current!==null||!Zu.isConnected()||JSON.stringify({filters:t.filters,geoSelection:t.geoSelection,queries:c})!==o.current&&(d.current=window.setTimeout(()=>{d.current=null;let e=s.current;if(e.activeContextId!==t.activeContextId||!e.liveEnabled)return;let r=l.current,i=JSON.stringify({filters:e.filters,geoSelection:e.geoSelection,queries:r});if(i===o.current)return;let a=o.current;u.current=!0;let c={filters:e.filters,geoSelection:e.geoSelection,queries:r,binding:Hb(e.filters,e.geoSelection,r)};Zu.request(`context.filters.set`,{contextId:e.activeContextId,liveQuery:c}).then(()=>{s.current.activeContextId===e.activeContextId&&o.current===a&&(o.current=i,n({type:`SET_LIVE_ERROR`,error:null}))}).catch(t=>{s.current.activeContextId===e.activeContextId&&n({type:`SET_LIVE_ERROR`,error:t instanceof Error?t.message:`Live update failed`})}).finally(()=>{u.current=!1,p(e=>e+1)})},t.liveError?1500:100))},[t.activeContextType,t.activeContextId,t.liveEnabled,t.filters,t.geoSelection,c,a,f,t.liveError]);let m=(0,Y.useCallback)(async e=>{let t=s.current;if(t.activeContextType!==`context`||!t.activeContextId||a)return;let r=c,i=e?{filters:t.filters,geoSelection:t.geoSelection,queries:r,binding:Hb(t.filters,t.geoSelection,r)}:null;try{await Zu.request(`context.filters.set`,{contextId:t.activeContextId,liveQuery:i}),o.current=JSON.stringify({filters:t.filters,geoSelection:t.geoSelection,queries:r}),n({type:`SET_LIVE`,enabled:e})}catch(e){n({type:`SET_LIVE_ERROR`,error:e instanceof Error?e.message:`Could not change Live mode`})}},[a,c]);(0,Y.useEffect)(()=>{t.activeContextType===null&&B4(t.filters)},[t.filters,t.activeContextType]);let h=(0,Y.useCallback)(e=>n({type:`SET_VIEW`,view:e}),[]),g=(0,Y.useCallback)(e=>n({type:`TOGGLE_VIEW`,view:e}),[]),_=(0,Y.useCallback)(()=>n({type:`CLOSE_T1`}),[]),v=(0,Y.useCallback)(e=>n({type:`OPEN_T2_AGENT`,agentId:e}),[]),y=(0,Y.useCallback)(()=>n({type:`CLOSE_T2`}),[]),b=(0,Y.useCallback)(e=>n({type:`OPEN_ADD`,kind:e}),[]),x=(0,Y.useCallback)(()=>n({type:`OPEN_ADD`,kind:null,relateTo:null}),[]),S=(0,Y.useCallback)(e=>n({type:`OPEN_ADD`,kind:null,relateTo:e}),[]),C=(0,Y.useCallback)(()=>n({type:`CLOSE_ADD`}),[]),w=(0,Y.useCallback)((e,t)=>n({type:`OPEN_EDIT`,document:e,workspaceId:t}),[]),T=(0,Y.useCallback)(e=>n({type:`SET_TOOLS_TAB`,tab:e}),[]),E=(0,Y.useCallback)(e=>n({type:`SET_APPS_APPLET`,appletId:e}),[]),D=(0,Y.useCallback)(e=>n({type:`SET_ACCENT_COLOR`,color:e}),[]),O=(0,Y.useCallback)(e=>{n({type:`SET_FILTERS`,filters:e})},[]),k=(0,Y.useCallback)((e,t)=>{let{filters:r}=s.current,i=e.startsWith(A4),a=i?r.features.allOf.filter(t=>t!==e):t?[...new Set([...r.features.allOf,e])]:r.features.allOf.filter(t=>t!==e),o=i&&t?[...new Set([...r.features.anyOf,e])]:r.features.anyOf.filter(t=>t!==e),c=r.features.noneOf.filter(t=>t!==e);n({type:`SET_FILTERS`,filters:{...r,features:{allOf:a,anyOf:o,noneOf:c}}})},[]),A=(0,Y.useCallback)((e,t)=>{let{filters:r}=s.current,i=r.features.allOf.filter(t=>t!==e),a=r.features.anyOf.filter(t=>t!==e),o=r.features.noneOf.filter(t=>t!==e);t===`allOf`?i.push(e):t===`anyOf`?a.push(e):t===`noneOf`&&o.push(e),n({type:`SET_FILTERS`,filters:{...r,features:{allOf:i,anyOf:a,noneOf:o}}})},[]),j=(0,Y.useCallback)(()=>{let{filters:e}=s.current;n({type:`SET_GEO_SELECTION`,selection:null}),n({type:`SET_FILTERS`,filters:{...Lb,timeline:{...e.timeline,quickFilter:null,customRanges:[],customRange:null,selectedTimelines:[]}}})},[]),M=(0,Y.useCallback)(e=>{let{filters:t}=s.current;n({type:`SET_FILTERS`,filters:{...t,sort:e}})},[]),N=(0,Y.useCallback)(e=>{let{filters:t}=s.current;n({type:`SET_FILTERS`,filters:{...t,timeline:{...t.timeline,...e}}})},[]),P=(0,Y.useCallback)(e=>{let{filters:t}=s.current;n({type:`SET_FILTERS`,filters:{...t,geo:{...t.geo,bbox:e}}})},[]),F=(0,Y.useCallback)(e=>{let{filters:t}=s.current;n({type:`SET_FILTERS`,filters:{...t,lens:{...t.lens,gps:e}}})},[]),I=(0,Y.useCallback)(e=>{let{filters:t}=s.current;n({type:`SET_FILTERS`,filters:{...t,lens:{...t.lens,ids:e}}})},[]),L=(0,Y.useCallback)(e=>{n({type:`SET_GEO_SELECTION`,selection:e})},[]),ee=(0,Y.useCallback)((e,t=null)=>{n({type:`SET_MAP_DOCUMENTS`,documents:e,workspaceId:t})},[]),te=(0,Y.useCallback)(async()=>{let{activeContextType:e,activeContextId:t,activeWorkspaceName:i,activeTreeName:o,activeContextPath:l,filters:u,geoSelection:d,isSaving:f}=s.current;if(!f){n({type:`SET_SAVING`,isSaving:!0});try{if(e===`canvas`&&i&&l){let e=o||`context`,t=H4(await yi(i,e),l),n=new URLSearchParams(r.search).get(`q`)||new URLSearchParams(r.search).get(`search`)||``;await wa(i,l,{metadata:{...t?.metadata||{},toolbox:P4(u)},querySpec:{features:u.features,filters:[...Vb(u.timeline),...Rb(u.geo)],query:n.trim()||void 0,sort:u.sort?.sortBy?u.sort:null}},e),pa(i,e)}else if(e===`context`&&t){let e=(await os(t,a)).metadata||{},n=new URLSearchParams(r.search).get(`q`)||new URLSearchParams(r.search).get(`search`)||``;await zo(t,{metadata:{...e,toolbox:u,toolboxGeoSelection:d,toolboxSearchQuery:n.trim()||void 0},...Hb(u,d,c)},a)}let s=new URLSearchParams(r.search).get(`q`)||new URLSearchParams(r.search).get(`search`)||``;n({type:`SET_SAVED_FILTERS`,savedFilters:u,savedSearchQuery:s.trim()||null,hydrating:!0}),e===`context`&&n({type:`SET_SAVED_GEO_SELECTION`,selection:d})}finally{n({type:`SET_SAVING`,isSaving:!1})}}},[r.search,a,c]),ne=(0,Y.useCallback)(e=>{let t=s.current.availableBitmaps.filter(t=>t!==e);n({type:`SET_BITMAPS`,keys:t});let r=s.current.filters,i={...r,features:{allOf:r.features.allOf.filter(t=>t!==e),anyOf:r.features.anyOf.filter(t=>t!==e),noneOf:r.features.noneOf.filter(t=>t!==e)}};JSON.stringify(i.features)!==JSON.stringify(r.features)&&n({type:`SET_FILTERS`,filters:i})},[]),R=(0,Y.useCallback)(async e=>{let t=s.current.activeWorkspaceName;if(!t)throw Error(`No active workspace`);await mi(t,e),ne(e)},[ne]),z=(0,Y.useCallback)(async e=>{let t=s.current.activeWorkspaceName;if(!t)throw Error(`No active workspace`);let n=await Ar(t,e);return ne(e),window.dispatchEvent(new CustomEvent(`workspace:documents:refresh`,{detail:{workspaceName:t}})),n.documentsDeleted},[ne]),B=(0,Y.useCallback)(()=>{let e=s.current.activeWorkspaceName;e&&(n({type:`SET_TIMELINES_LOADING`,loading:!0}),vi(e).then(e=>{n({type:`SET_TIMELINES`,names:e.map(e=>e.name),scales:Object.fromEntries(e.filter(e=>e.scales?.length).map(e=>[e.name,e.scales]))})}))},[]),re=(0,Y.useCallback)(async e=>{let t=s.current.activeWorkspaceName;if(!t)throw Error(`No active workspace`);await Li(t,e),B()},[B]),ie=(0,Y.useCallback)(async e=>{let t=s.current.activeWorkspaceName;if(!t)throw Error(`No active workspace`);await Ir(t,e);let r=s.current.availableTimelines.filter(t=>t!==e);n({type:`SET_TIMELINES`,names:r});let i=s.current.filters,a=i.timeline.selectedTimelines.filter(t=>t!==e);a.length!==i.timeline.selectedTimelines.length&&n({type:`SET_FILTERS`,filters:{...i,timeline:{...i.timeline,selectedTimelines:a}}})},[]),{features:ae,timeline:oe,geo:se,lens:ce}=t.filters,V=ae.allOf.length>0||ae.anyOf.length>0||ae.noneOf.length>0||oe.quickFilter!==null||(oe.customRanges?.length??0)>0||(oe.selectedTimelines?.length??0)>0||se.bbox!==null||ce.gps!==null||ce.ids!==null||t.geoSelection!==null;return(0,X.jsx)(Yo.Provider,{value:{state:t,setView:h,toggleView:g,closeT1:_,openAgentT2:v,closeT2:y,openAdd:b,openAddPicker:x,openAddRelated:S,closeAdd:C,openEdit:w,setToolsTab:T,openApplet:E,setAccentColor:D,setFilters:O,setFeatureToggle:k,setFeatureMode:A,clearFilters:j,hasActiveFilters:V,setTimelineFilter:N,setGeoBBox:P,setLensGps:F,setLensIds:I,setGeoSelection:L,setMapDocuments:ee,setSort:M,setLiveEnabled:m,saveFilters:te,deleteBitmap:R,deleteDataset:z,createTimeline:re,deleteTimeline:ie,refreshTimelines:B},children:e})}var W4=`references`;function G4(e){return e?e.documents.map(e=>({predicate:W4,direction:`out`,targetId:e.id,document:e})):[]}function K4(e,t){let[n,r]=(0,Y.useState)(()=>G4(t)),[i,a]=(0,Y.useState)([...Oa]),o=e?.mode===`context`?e.contextId:null,[s,c]=(0,Y.useState)(null);(0,Y.useEffect)(()=>{if(!o)return;let e=!1;return hs({mode:`context`,contextId:o}).then(t=>{e||c({contextId:o,workspaceName:t.workspaceName})}).catch(()=>{}),()=>{e=!0}},[o]);let l=e?.mode===`workspace`?e.workspaceName:o&&s?.contextId===o?s.workspaceName:t?.workspaceName??null;return(0,Y.useEffect)(()=>{let e=!1;if(l)return Di(l).then(t=>{e||a(t)}),()=>{e=!0}},[l]),{rows:n,predicates:i,workspaceName:l,add:(0,Y.useCallback)(async(e,t,i)=>{let a=i.filter(r=>!n.some(n=>n.targetId===r&&n.predicate===e&&n.direction===t));if(a.length===0)return;let o=await Promise.all(a.map(e=>l?Cr(l,e).catch(()=>null):Promise.resolve(null)));r(n=>[...n,...a.map((n,r)=>({predicate:e,direction:t,targetId:n,document:o[r]??null}))])},[n,l]),update:(0,Y.useCallback)((e,t)=>{r(n=>n.map((n,r)=>r===e?{...n,...t}:n))},[]),remove:(0,Y.useCallback)(e=>{r(t=>t.filter((t,n)=>n!==e))},[]),write:(0,Y.useCallback)(async e=>{if(n.length===0||e.length===0||!l)return 0;let t=new Map;for(let e of n){let n=`${e.direction}:${e.predicate}`,r=t.get(n)??{predicate:e.predicate,direction:e.direction,targets:[]};r.targets.push(e.targetId),t.set(n,r)}let r=0;for(let n of e)for(let e of t.values())try{await Zi(l,n,e.predicate,e.targets,e.direction)}catch(t){r+=1,console.error(`Failed to relate document`,n,e.predicate,t)}return r<e.length*t.size&&pm(),r},[n,l]),hasRows:n.length>0}}function q4({f:e,idPrefix:t}){let[n,r]=(0,Y.useState)(!1),[i,a]=(0,Y.useState)(!1),o=!e.workspaceName;return(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,X.jsx)(Z,{children:`Related documents`}),(0,X.jsxs)(q,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs`,disabled:o,onClick:()=>r(!0),title:o?`No workspace to relate within`:`Pick documents the new one relates to`,children:[(0,X.jsx)(H,{className:`mr-1 h-3 w-3`}),` Add`]})]}),e.rows.length===0?(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`None. Relations are written right after the document is created.`}):(0,X.jsx)(`ul`,{className:`space-y-1`,children:e.rows.map((n,r)=>{let i=n.document?xo(n.document).title:`Document ${n.targetId}`,a=`${t}-relation-${r}`;return(0,X.jsxs)(`li`,{className:`flex items-center gap-1.5 rounded-md border border-input px-2 py-1.5 text-sm`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:()=>e.update(r,{direction:n.direction===`out`?`in`:`out`}),className:`shrink-0 rounded p-0.5 text-muted-foreground hover:bg-accent hover:text-foreground`,title:n.direction===`out`?`The new document ${n.predicate} this one (click to flip)`:`This document ${n.predicate} the new one (click to flip)`,"aria-label":`Flip relation direction`,children:n.direction===`out`?(0,X.jsx)(Jn,{className:`h-3.5 w-3.5`}):(0,X.jsx)(Vt,{className:`h-3.5 w-3.5`})}),(0,X.jsx)(`label`,{htmlFor:a,className:`sr-only`,children:`Predicate`}),(0,X.jsx)(`select`,{id:a,value:n.predicate,onChange:t=>e.update(r,{predicate:t.target.value}),className:`w-[9.5rem] shrink-0 rounded-md border border-input bg-background px-1.5 py-1 font-mono text-[11px] focus:outline-none focus:ring-2 focus:ring-ring`,children:(e.predicates.includes(n.predicate)?e.predicates:[n.predicate,...e.predicates]).map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))}),n.document?(0,X.jsx)(hp,{document:n.document,size:3.5}):null,(0,X.jsx)(`span`,{className:G(`min-w-0 flex-1 truncate`,!n.document&&`italic text-muted-foreground`),title:`#${n.targetId}`,children:i}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>e.remove(r),className:`shrink-0 rounded p-0.5 text-muted-foreground hover:bg-destructive/10 hover:text-destructive`,title:`Remove`,"aria-label":`Remove relation`,children:(0,X.jsx)(Ne,{className:`h-3.5 w-3.5`})})]},`${n.direction}:${n.predicate}:${n.targetId}`)})}),n&&e.workspaceName&&(0,X.jsx)(Op,{onClose:()=>{i||r(!1)},children:(0,X.jsx)(Ep,{sizeClassName:`h-full w-[380px] max-w-[90vw] max-md:w-full`,title:`Relate to…`,confirmLabel:`Add`,tabs:[`relations`],fixedWorkspaceName:e.workspaceName,documentCount:1,saving:i,relationPredicates:e.predicates.length?e.predicates:[`references`],relationExcludeIds:new Set(e.rows.map(e=>e.targetId)),onClose:()=>r(!1),onConfirm:()=>{},onConfirmRelation:async({predicate:t,direction:n,targetIds:i})=>{a(!0);try{await e.add(t,n,i),r(!1)}finally{a(!1)}}})})]})}function J4(){let{closeAdd:e,state:t}=Ss(),n=us(),{showSuccessToast:r,showErrorToast:i}=co(),a=UC(),o=K4(n,t.addRelateTo),s=dw(t.activeWorkspaceName),c=!!n&&a.canSave;return(0,X.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{htmlFor:`note-title`,children:`Title`}),(0,X.jsx)(K,{id:`note-title`,value:a.title,onChange:e=>a.setTitle(e.target.value),placeholder:`Optional; defaults to today's date`})]}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{children:`Body`}),(0,X.jsx)(Eo,{kind:`markdown`,value:a.content,onChange:a.setContent,placeholder:`Write your note…`})]}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{htmlFor:`note-comment`,children:`Comment`}),(0,X.jsx)(`textarea`,{id:`note-comment`,value:a.comment,onChange:e=>a.setComment(e.target.value),rows:2,placeholder:`Optional; context you can't infer from the body`,className:`flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-elevation-1 transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50`})]}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{children:`Tags`}),(0,X.jsx)(jp,{tags:a.tags,onChange:a.setTags,suggestions:s})]}),(0,X.jsx)(GC,{geotag:a.geotag,idPrefix:`note-geotag`}),(0,X.jsx)(q4,{f:o,idPrefix:`note`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:ms(n)}),(0,X.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(q,{variant:`outline`,size:`sm`,onClick:e,disabled:a.saving,children:`Cancel`}),(0,X.jsx)(q,{size:`sm`,onClick:async()=>{if(n)try{let t=await a.save(n),i=await o.write(t);r(i?`Note created; some relations failed`:`Note created`),e()}catch(e){i(e instanceof Error?e.message:`Failed to create note`)}},disabled:!c,children:a.saving?`Saving…`:`Save note`})]})]})}function Y4(){let{closeAdd:e,state:t}=Ss(),n=us(),{showSuccessToast:r,showErrorToast:i}=co(),a=QC(),o=K4(n,t.addRelateTo),s=dw(t.activeWorkspaceName),c=!!n&&a.canSave;return(0,X.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{htmlFor:`link-url`,children:`URL`}),(0,X.jsx)(K,{id:`link-url`,value:a.url,onChange:e=>a.setUrl(e.target.value),placeholder:`https://example.com`,autoFocus:!0}),a.showUrlError&&(0,X.jsx)(`p`,{className:`text-xs text-destructive`,children:`Enter a valid URL, e.g. https://example.com`})]}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{htmlFor:`link-title`,children:`Title`}),(0,X.jsx)(K,{id:`link-title`,value:a.title,onChange:e=>a.setTitle(e.target.value),placeholder:`Optional display title`})]}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{children:`Tags`}),(0,X.jsx)(jp,{tags:a.tags,onChange:a.setTags,suggestions:s})]}),(0,X.jsx)(GC,{geotag:a.geotag,idPrefix:`link-geotag`}),(0,X.jsx)(q4,{f:o,idPrefix:`link`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:ms(n)}),(0,X.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(q,{variant:`outline`,size:`sm`,onClick:e,disabled:a.saving,children:`Cancel`}),(0,X.jsx)(q,{size:`sm`,onClick:async()=>{if(n)try{let t=await a.save(n),i=await o.write(t);r(i?`Link created; some relations failed`:`Link created`),e()}catch(e){i(e instanceof Error?e.message:`Failed to create link`)}},disabled:!c,children:a.saving?`Saving…`:`Save link`})]})]})}function X4(e){let[t,n]=(0,Y.useState)({key:``,list:[]});return(0,Y.useEffect)(()=>{if(!e)return;let t=!1;return Ta(e,`github`).then(async r=>{let i=r.filter(e=>e.capabilities?.write),a=[];for(let t of i){let n=await za(e,`github`,t.address).catch(()=>[]);for(let e of n){if(e.writable===!1)continue;let n=e.id||e.name;a.push({driver:`github`,address:t.address,container:n,label:`GitHub: ${n}`})}}t||n({key:e,list:a})}).catch(()=>{t||n({key:e,list:[]})}),()=>{t=!0}},[e]),e&&t.key===e?t.list:[]}function Z4(){let{closeAdd:e,state:t}=Ss(),n=us(),{showSuccessToast:r,showErrorToast:i}=co(),a=yh(),o=K4(n,t.addRelateTo),s=dw(t.activeWorkspaceName),c=X4(t.activeWorkspaceName),[l,u]=(0,Y.useState)(`canvas`),[d,f]=(0,Y.useState)(!1),p=c.find(e=>`${e.driver}:${e.address}:${e.container}`===l),m=p?a.title.trim().length>0&&!d:!!n&&a.canSave,h=async()=>{if(p){f(!0);try{await ea(t.activeWorkspaceName||``,p.driver,p.address,p.container,{title:a.title.trim(),...a.description.trim()?{description:a.description.trim()}:{},...a.tags.length?{labels:a.tags}:{}}),r(`Issue created in ${p.container}`),e()}catch(e){i(e instanceof Error?e.message:`Failed to create issue`)}finally{f(!1)}return}if(n)try{let t=await a.save(n),i=await o.write(t);r(i?`Todo created; some relations failed`:`Todo created`),e()}catch(e){i(e instanceof Error?e.message:`Failed to create todo`)}};return(0,X.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,X.jsx)(Sg,{...a}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{children:`Tags`}),(0,X.jsx)(jp,{tags:a.tags,onChange:a.setTags,suggestions:s})]}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{htmlFor:`todo-comment`,children:`Comment`}),(0,X.jsx)(`textarea`,{id:`todo-comment`,value:a.comment,onChange:e=>a.setComment(e.target.value),rows:3,placeholder:`Optional context`,className:`flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-elevation-1 transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`})]}),c.length>0&&(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{htmlFor:`todo-destination`,children:`Save to`}),(0,X.jsxs)(`select`,{id:`todo-destination`,value:l,onChange:e=>u(e.target.value),className:`flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-elevation-1 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,children:[(0,X.jsxs)(`option`,{value:`canvas`,children:[`Canvas: `,ms(n)]}),c.map(e=>(0,X.jsx)(`option`,{value:`${e.driver}:${e.address}:${e.container}`,children:e.label},`${e.driver}:${e.address}:${e.container}`))]}),p&&(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Creates a GitHub issue (due date, priority and status stay Canvas-side until the issue syncs back).`})]}),(0,X.jsx)(GC,{geotag:a.geotag,idPrefix:`todo-geotag`}),!p&&(0,X.jsx)(q4,{f:o,idPrefix:`todo`}),!p&&(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:ms(n)}),(0,X.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(q,{variant:`outline`,size:`sm`,onClick:e,disabled:a.saving||d,children:`Cancel`}),(0,X.jsx)(q,{size:`sm`,onClick:h,disabled:!m,children:a.saving||d?`Saving…`:p?`Create issue`:`Save todo`})]})]})}function Q4(){let{closeAdd:e,state:t}=Ss(),n=us(),{showSuccessToast:r,showErrorToast:i}=co(),a=jg(),o=K4(n,t.addRelateTo),s=dw(t.activeWorkspaceName),c=async()=>{if(n)try{let t=await a.save(n),i=await o.write(t);r(i?`Identity created; some relations failed`:`Identity created`),e()}catch(e){i(e instanceof Error?e.message:`Failed to create identity`)}};return(0,X.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,X.jsx)(Ig,{idPrefix:`add-identity`,workspaceName:t.activeWorkspaceName??void 0,...a,emailValid:a.emailValid}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{children:`Tags`}),(0,X.jsx)(jp,{tags:a.tags,onChange:a.setTags,suggestions:s})]}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{htmlFor:`identity-comment`,children:`Comment`}),(0,X.jsx)(`textarea`,{id:`identity-comment`,value:a.comment,onChange:e=>a.setComment(e.target.value),rows:3,placeholder:`How you know them, where they came from…`,className:`flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-elevation-1 transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`})]}),(0,X.jsx)(q4,{f:o,idPrefix:`identity`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:ms(n)}),(0,X.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(q,{variant:`outline`,size:`sm`,onClick:e,disabled:a.saving,children:`Cancel`}),(0,X.jsx)(q,{size:`sm`,onClick:c,disabled:!n||!a.canSave,children:a.saving?`Saving…`:`Save identity`})]})]})}function $4({capture:e=!1}={}){let{closeAdd:t,state:n}=Ss(),r=us(),i=r?.mode===`workspace`&&r.treeName===`backends`,a=K4(r,n.addRelateTo),{showSuccessToast:o,showErrorToast:s}=co(),c=(0,Y.useRef)(null),[l,u]=(0,Y.useState)(!1),d=iw(),{items:f,running:p}=d,[m,h]=(0,Y.useState)(null);(0,Y.useEffect)(()=>{if(r?.mode!==`context`)return;let e=!1;return hs(r).then(t=>{e||h({contextId:r.contextId,workspaceName:t.workspaceName})}).catch(()=>{}),()=>{e=!0}},[r]);let g=mw(r?.mode===`workspace`?r.workspaceName:r&&m?.contextId===r.contextId?m.workspaceName:null),_=e=>{e&&d.addFiles(Array.from(e))},v=e=>{e.preventDefault(),u(!1),_(e.dataTransfer.files)},y=f.filter(e=>e.status===`error`).length,b=f.filter(e=>e.status===`done`).length,x=f.length-b,S=!!r&&!p&&x>0;return(0,X.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,X.jsxs)(`div`,{onDragOver:e=>{e.preventDefault(),u(!0)},onDragLeave:()=>u(!1),onDrop:v,onClick:()=>c.current?.click(),className:G(`flex cursor-pointer flex-col items-center justify-center gap-2 rounded-md border border-dashed px-4 py-8 text-center transition-colors`,l?`border-primary bg-primary/5`:`border-input hover:bg-muted/40`),children:[(0,X.jsx)(ne,{className:`h-6 w-6 text-muted-foreground touch-target`}),(0,X.jsx)(`p`,{className:`text-sm`,children:e?`Take a photo or video`:`Drag & drop files here`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e?`click to open the camera`:`or click to browse`}),(0,X.jsx)(`input`,{ref:c,type:`file`,multiple:!0,accept:e?`image/*,video/*`:void 0,capture:e?`environment`:void 0,className:`hidden`,onChange:e=>{_(e.target.files),e.target.value=``}})]}),(0,X.jsx)(lw,{items:f,running:p,onRemove:d.removeItem}),!i&&(0,X.jsx)(_w,{fields:g,idPrefix:`file`,multiple:f.length>1}),(0,X.jsx)(q4,{f:a,idPrefix:`file`}),(0,X.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[ms(r),i?`. Existing files are never overwritten.`:``]}),(0,X.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(q,{variant:`outline`,size:`sm`,onClick:()=>p?d.cancel():t(),children:`Cancel`}),(0,X.jsx)(q,{size:`sm`,onClick:async()=>{if(!(!S||!r))try{let e=i?null:await g.geotag.capture(),n=await d.start(r,(t,n)=>hw(t,n,{tags:g.tags,comment:g.comment,geo:e})),c=await a.write(n.docIds);if(n.failed===0){let e=n.resumed?` (${n.resumed} already uploaded)`:``,r=c?`; some relations failed`:``;o(`${n.done} file(s) uploaded${e}${r}`),t()}else s(`${n.failed} of ${n.total} file(s) failed — retry keeps what already made it`)}catch(e){s(e instanceof Error?e.message:`Failed to upload files`)}},disabled:!S,children:p?`Uploading…`:y>0?(0,X.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,X.jsx)(Ue,{className:`h-3.5 w-3.5`}),`Retry failed (`,y,`)`]}):`Add files`})]})]})}function e3(){let{closeAdd:e}=Ss(),t=us(),{showSuccessToast:n,showErrorToast:r}=co(),[i,a]=(0,Y.useState)(``),[o,s]=(0,Y.useState)(!1),c=i.trim().replace(/^\/+|\/+$/g,``),l=!!t&&!!c&&!o,u=async()=>{if(!(!l||!t)){s(!0);try{let{workspaceName:r,path:i,treeName:a}=await hs(t),o=i===`/`?``:i;if(a===`backends`){let e=await fs(r,i);await Pi(r,e.driver,e.address,[[e.key,c].filter(Boolean).join(`/`)]),es(t)}else await Hi(r,`${o}/${c}`,!0,a);n(`Folder created`),e()}catch(e){r(e instanceof Error?e.message:`Failed to create folder`)}finally{s(!1)}}};return(0,X.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{htmlFor:`add-folder-name`,children:`Folder name`}),(0,X.jsx)(K,{id:`add-folder-name`,value:i,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&u()},placeholder:`e.g. projects/alpha`,autoFocus:!0}),(0,X.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Nested paths are created as needed. Target: `,ms(t)]})]}),(0,X.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(q,{variant:`outline`,size:`sm`,onClick:e,disabled:o,children:`Cancel`}),(0,X.jsx)(q,{size:`sm`,onClick:u,disabled:!l,children:o?`Creating…`:`Create folder`})]})]})}function t3(){let{openAddPicker:e,closeAdd:t}=Ss(),n=us(),{showSuccessToast:r,showErrorToast:i}=co(),[a,o]=(0,Y.useState)(!1);return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`fixed inset-0 z-picker-scrim bg-scrim animate-fade-in md:hidden`,onClick:e,"aria-hidden":!0}),(0,X.jsx)(`div`,{className:`fixed inset-y-0 right-0 z-picker flex items-stretch py-2 pr-2 max-md:bottom-2 max-md:left-2 max-md:top-2 max-md:py-0 max-md:pr-0 max-md:animate-fade-in`,children:(0,X.jsx)(Qp,{sizeClassName:`h-full w-[420px] max-w-full max-md:w-full max-md:shadow-elevation-5`,fixedWorkspaceName:n?.mode===`workspace`?n.workspaceName:void 0,saving:a,onConfirm:async e=>{o(!0);try{await ss(n,e),r(`${e.length} document${e.length===1?``:`s`} added`),t()}catch(e){i(e instanceof Error?e.message:`Failed to add documents`)}finally{o(!1)}},onClose:e})})]})}function n3(e,t){let[n,r]=(0,Y.useState)(String(e.data?.title??``)),[i,a]=(0,Y.useState)(String(e.data?.content??``)),[o,s]=(0,Y.useState)(Np(e.metadata?.features)),[c,l]=(0,Y.useState)(!1),u=i.trim().length>0&&!c;async function d(){l(!0);try{await Wi(t,{id:e.id,schema:e.schema,schemaVersion:e.schemaVersion,data:{...n.trim()?{title:n.trim()}:{},content:i},metadata:{features:Mp(o)}}),window.dispatchEvent(new CustomEvent(`workspace:documents:refresh`))}finally{l(!1)}}return{title:n,setTitle:r,content:i,setContent:a,tags:o,setTags:s,saving:c,canSave:u,save:d}}function r3(){let{state:e,closeAdd:t}=Ss(),{editDocument:n,editWorkspaceId:r}=e,{showSuccessToast:i,showErrorToast:a}=co();return!n||!r?null:(0,X.jsx)(i3,{doc:n,workspaceId:r,onCancel:t,onSaved:t,showSuccessToast:i,showErrorToast:a})}function i3({doc:e,workspaceId:t,onCancel:n,onSaved:r,showSuccessToast:i,showErrorToast:a}){let o=n3(e,t),s=dw(t);return(0,X.jsxs)(`div`,{className:`flex h-full flex-col gap-4 p-4`,children:[(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{htmlFor:`edit-note-title`,children:`Title`}),(0,X.jsx)(K,{id:`edit-note-title`,value:o.title,onChange:e=>o.setTitle(e.target.value),placeholder:`Optional; defaults to today's date`})]}),(0,X.jsxs)(`div`,{className:`flex flex-1 flex-col gap-1.5`,children:[(0,X.jsx)(Z,{children:`Body`}),(0,X.jsx)(`div`,{className:`flex-1`,children:(0,X.jsx)(Eo,{kind:`markdown`,value:o.content,onChange:o.setContent,placeholder:`Write your note…`})})]}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{children:`Tags`}),(0,X.jsx)(jp,{tags:o.tags,onChange:o.setTags,suggestions:s})]}),(0,X.jsxs)(`div`,{className:`flex shrink-0 justify-end gap-2`,children:[(0,X.jsx)(q,{variant:`outline`,size:`sm`,onClick:n,disabled:o.saving,children:`Cancel`}),(0,X.jsx)(q,{size:`sm`,onClick:async()=>{try{await o.save(),i(`Note updated`),r()}catch(e){a(e instanceof Error?e.message:`Failed to update note`)}},disabled:!o.canSave,children:o.saving?`Saving…`:`Save note`})]})]})}function a3(e,t){let n=Np(e.metadata?.features),[r,i]=(0,Y.useState)(String(e.data?.label??``)),[a,o]=(0,Y.useState)(n.length?n:e.data?.tags??[]),[s,c]=(0,Y.useState)(!1),l=!s;async function u(){c(!0);try{let n=a.map(e=>e.trim()).filter(Boolean);await Wi(t,{id:e.id,schema:e.schema,schemaVersion:e.schemaVersion,data:{...e.data,...r.trim()?{label:r.trim()}:{},tags:n},metadata:{features:Mp(a)}}),window.dispatchEvent(new CustomEvent(`workspace:documents:refresh`))}finally{c(!1)}}return{url:String(e.data?.uri??e.data?.url??``),label:r,setLabel:i,tags:a,setTags:o,saving:s,canSave:l,save:u}}function o3(){let{state:e,closeAdd:t}=Ss(),{editDocument:n,editWorkspaceId:r}=e,{showSuccessToast:i,showErrorToast:a}=co();return!n||!r?null:(0,X.jsx)(s3,{doc:n,workspaceId:r,onCancel:t,onSaved:t,showSuccessToast:i,showErrorToast:a})}function s3({doc:e,workspaceId:t,onCancel:n,onSaved:r,showSuccessToast:i,showErrorToast:a}){let o=a3(e,t),s=dw(t);return(0,X.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsxs)(Z,{children:[`URL `,(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`(frozen)`})]}),(0,X.jsx)(K,{value:o.url,disabled:!0,className:`font-mono text-xs`})]}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{htmlFor:`edit-link-label`,children:`Label`}),(0,X.jsx)(K,{id:`edit-link-label`,value:o.label,onChange:e=>o.setLabel(e.target.value),placeholder:`Optional display name`,autoFocus:!0})]}),(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,X.jsx)(Z,{children:`Tags`}),(0,X.jsx)(jp,{tags:o.tags,onChange:o.setTags,suggestions:s})]}),(0,X.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(q,{variant:`outline`,size:`sm`,onClick:n,disabled:o.saving,children:`Cancel`}),(0,X.jsx)(q,{size:`sm`,onClick:async()=>{try{await o.save(),i(`Link updated`),r()}catch(e){a(e instanceof Error?e.message:`Failed to update link`)}},disabled:!o.canSave,children:o.saving?`Saving…`:`Save link`})]})]})}var c3=380,l3=300,u3=560,d3={message:{label:`New Message`,icon:Lt},note:{label:`New Note`,icon:Sn},link:{label:`New Link`,icon:Zt},todo:{label:`New Todo`,icon:kn},identity:{label:`New Identity`,icon:Qe},sketch:{label:`New Sketch`,icon:it},file:{label:`Add Files`,icon:ne},photo:{label:`Photo/Video`,icon:z},existing:{label:`Add Existing`,icon:kt},folder:{label:`New Folder`,icon:dt}};function f3(){let{state:e,openAdd:t,closeAdd:n}=Ss();Cf(n,e.addOpen);let{addOpen:r,addKind:i,editDocument:a}=e,o=us(),s=_s(o),c=s.isBackend&&!!i&&![`file`,`photo`,`folder`,`message`].includes(i),l=e.activeWorkspaceName,u=!l||!!e.addRelateTo,d=c||i===`message`&&u,f=s.isBackend?[`note`,`link`,`todo`,`identity`,`sketch`,`existing`]:[];u&&f.push(`message`);let p=o?.mode===`workspace`?`${o.workspaceName}:${o.treeName}:${o.path}`:o?.contextId,m=$c();(0,Y.useEffect)(()=>{!r||i!==`sketch`||s.isBackend||(n(),m(LC.createUrl(o)))},[r,i,o,n,m,s.isBackend]);let h=Fm(),[g,_]=(0,Y.useState)(c3),v=(0,Y.useRef)(null),y=(0,Y.useCallback)(e=>{e.preventDefault(),v.current={startX:e.clientX,startWidth:g};let t=e=>{if(!v.current)return;let t=v.current.startX-e.clientX,n=Math.min(u3,Math.max(l3,v.current.startWidth+t));_(n)},n=()=>{v.current=null,window.removeEventListener(`mousemove`,t),window.removeEventListener(`mouseup`,n)};window.addEventListener(`mousemove`,t),window.addEventListener(`mouseup`,n)},[g]);if(!r)return null;let b=!!a,x=!b&&(!i||d),S,C;return b?(S=a.schema===`data/schema/note`?`Edit Note`:`Edit Link`,C=a.schema===`data/schema/note`?Sn:Zt):i&&!d?(S=d3[i].label,C=d3[i].icon):(S=`Add`,C=H),(0,X.jsxs)(X.Fragment,{children:[h&&(0,X.jsx)(`div`,{className:`fixed inset-0 z-panel-scrim bg-scrim animate-fade-in`,onClick:n,"aria-hidden":!0}),(0,X.jsxs)(`div`,{style:h?void 0:{width:g},className:G(`flex flex-col overflow-hidden rounded-[var(--panel-radius)] border bg-card surface-glass`,h?`fixed bottom-2 left-2 right-2 top-2 z-panel shadow-elevation-5 animate-fade-in`:`relative shrink-0 shadow-elevation-3`),children:[!h&&(0,X.jsx)(`div`,{onMouseDown:y,className:`absolute left-0 top-0 bottom-0 z-10 w-1 cursor-col-resize transition-colors hover:bg-primary/20`}),(0,X.jsxs)(`div`,{className:`flex h-12 shrink-0 items-center justify-between border-b px-4`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-2 text-sm font-medium`,children:[b?(0,X.jsx)(Ie,{className:`h-4 w-4`}):(0,X.jsx)(C,{className:`h-4 w-4`}),S]}),(0,X.jsx)(`button`,{type:`button`,onClick:n,className:`text-muted-foreground transition-colors hover:text-foreground`,"aria-label":`Close`,children:(0,X.jsx)(Ne,{className:`h-4 w-4`})})]}),(0,X.jsxs)(`div`,{className:`flex-1 overflow-y-auto`,children:[b&&a.schema===`data/schema/note`&&(0,X.jsx)(r3,{}),b&&a.schema===`data/schema/link`&&(0,X.jsx)(o3,{}),!b&&x&&e.addRelateTo&&(0,X.jsxs)(`p`,{className:`border-b px-4 py-2 text-xs text-muted-foreground`,children:[`The new document will be related to `,e.addRelateTo.documents.length,` selected document`,e.addRelateTo.documents.length===1?``:`s`,`.`]}),!b&&s.isBackend&&i!==`message`&&(0,X.jsx)(`p`,{className:`border-b px-4 py-3 text-xs text-muted-foreground`,children:s.loading?`Checking storage destination…`:s.error||`Files are saved directly to this backend folder. Notes and other database documents belong in context or directory trees.`}),!b&&x&&(!s.isBackend||s.destination)&&(0,X.jsx)(BC,{onSelect:t,omit:f}),!b&&i===`message`&&!u&&l&&(0,X.jsx)(ng,{workspaceId:l,onClose:n},l),!b&&!s.isBackend&&i===`note`&&(0,X.jsx)(J4,{}),!b&&!s.isBackend&&i===`link`&&(0,X.jsx)(Y4,{}),!b&&!s.isBackend&&i===`todo`&&(0,X.jsx)(Z4,{}),!b&&!s.isBackend&&i===`identity`&&(0,X.jsx)(Q4,{}),!b&&(!s.isBackend||s.destination)&&i===`file`&&(0,X.jsx)($4,{},p),!b&&(!s.isBackend||s.destination)&&i===`photo`&&(0,X.jsx)($4,{capture:!0},p),!b&&!s.isBackend&&i===`existing`&&(0,X.jsx)(t3,{}),!b&&(!s.isBackend||s.destination)&&i===`folder`&&(0,X.jsx)(e3,{},p)]})]})]})}var p3=(0,Y.createContext)(null);function m3(){return(0,Y.useContext)(p3)}function h3(){let e=m3(),t=e?.notifications??[];return(0,X.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,X.jsx)(`div`,{className:`flex items-center justify-between px-4 h-12 bg-foreground shrink-0`,children:(0,X.jsx)(`span`,{className:`text-sm font-medium text-background`,children:`Home`})}),(0,X.jsx)(`div`,{className:`px-4 py-4 border-b border-border shrink-0`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,X.jsx)(ln,{className:`w-4 h-4`}),(0,X.jsx)(`span`,{className:`text-xs font-mono`,children:new Date().toLocaleTimeString()})]})}),(0,X.jsxs)(`div`,{className:`flex-1 overflow-y-auto p-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(en,{className:`w-3.5 h-3.5 text-muted-foreground`}),(0,X.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground uppercase tracking-wide`,children:`Notifications`})]}),t.length>0&&(0,X.jsx)(q,{size:`sm`,variant:`ghost`,className:`h-6 px-1.5 text-xs text-muted-foreground`,onClick:()=>void e?.clear(),title:`Clear notifications`,children:(0,X.jsx)(ut,{className:`w-3 h-3`})})]}),t.length===0?(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground text-center py-10 border border-dashed rounded-lg`,children:`No notifications`}):(0,X.jsx)(`div`,{className:`space-y-2`,children:[...t].reverse().map(e=>(0,X.jsxs)(`div`,{className:`rounded-lg border p-2.5`,children:[(0,X.jsx)(`p`,{className:`text-xs whitespace-pre-wrap break-words`,children:e.text}),(0,X.jsx)(`p`,{className:`mt-1 text-[10px] text-muted-foreground`,children:new Date(e.timestamp).toLocaleString()})]},e.id))})]})]})}function g3(){let{state:e,setFilters:t}=Ss();return(0,X.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,X.jsx)(`input`,{type:`checkbox`,checked:e.filters.geo.includeUnlocated??!1,onChange:n=>t({...e.filters,geo:{...e.filters.geo,includeUnlocated:n.target.checked}})}),`Include documents without a location`]})}var _3=l();Po();var v3=`#8b5cf6`,y3=`#94a3b8`,b3={color:v3,weight:2,fillColor:v3,fillOpacity:.12},x3={color:v3,weight:2,dashArray:`5,5`,fillColor:v3,fillOpacity:.06},S3=e=>Math.round(e*1e6)/1e6;function C3(e){let t=e<10?32:e<100?38:44,n=`<div style="display:flex;align-items:center;justify-content:center;width:${t}px;height:${t}px;border-radius:9999px;background:${v3};color:#fff;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.4);font:600 12px system-ui,sans-serif;cursor:pointer">${e}</div>`;return Ip.default.divIcon({html:n,className:`canvas-map-cluster`,iconSize:[t,t],iconAnchor:[t/2,t/2]})}var w3=e=>e.replace(/[&<>"']/g,e=>({"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`})[e]),T3=new Map;function E3(e){let t=T3.get(e);return t??(t=(0,_3.renderToStaticMarkup)((0,Y.createElement)(N4(e),{width:13,height:13,strokeWidth:2.5})),T3.set(e,t)),t}var D3=new Map;function O3(e,t){let n=`${e}|${+!!t}`,r=D3.get(n);if(!r){let i=`<div style="display:flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:9999px;background:${t?v3:y3};color:#fff;border:2px solid #fff;box-shadow:0 1px 3px rgba(0,0,0,.4);cursor:pointer">${E3(e)}</div>`;r=Ip.default.divIcon({html:i,className:`canvas-map-pin`,iconSize:[26,26],iconAnchor:[13,13]}),D3.set(n,r)}return r}function k3(){let{state:e,setGeoSelection:t,setGeoBBox:n}=Ss(),{mapDocuments:r,geoSelection:i,mapWorkspaceId:a}=e,o=e.filters.geo.bbox,{open:s}=Wg(),c=(0,Y.useRef)(null),l=(0,Y.useRef)(null),u=(0,Y.useRef)(null),d=(0,Y.useRef)(null),f=(0,Y.useRef)(null),p=(0,Y.useRef)([]),m=(0,Y.useRef)(!1),[h,g]=(0,Y.useState)(`idle`),[_,v]=(0,Y.useState)(0),y=(0,Y.useRef)(h),b=(0,Y.useMemo)(()=>r.reduce((e,t)=>e+ +!!d_(t),0),[r]),x=(0,Y.useMemo)(()=>i?r.reduce((e,t)=>{let n=d_(t);return e+(n&&p_(n.lat,n.lon,i)?1:0)},0):0,[r,i]),S=(0,Y.useCallback)(()=>{let e=f.current;if(!e)return;e.clearLayers();let t=p.current;t.length!==0&&(t.length>=2&&Ip.default.polyline(t,x3).addTo(e),t.forEach(t=>Ip.default.circleMarker(t,{radius:4,color:v3,weight:2,fillColor:`#fff`,fillOpacity:1}).addTo(e)))},[]),C=(0,Y.useCallback)(()=>{p.current=[],v(0),f.current?.clearLayers()},[]),w=(0,Y.useCallback)(()=>{let e=p.current;e.length>=3&&t({kind:`polygon`,points:e.map(e=>({lat:S3(e.lat),lon:S3(e.lng)}))}),C(),g(`idle`)},[t,C]),T=(0,Y.useCallback)(()=>{C(),g(`idle`),t(null),n(null)},[C,t,n]);(0,Y.useEffect)(()=>{let e=c.current;if(!e||l.current)return;let t=Ip.default.map(e,{center:[20,0],zoom:2,worldCopyJump:!0});Ip.default.tileLayer(`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`,{attribution:`&copy; OpenStreetMap contributors`,maxZoom:19}).addTo(t),u.current=Ip.default.markerClusterGroup({showCoverageOnHover:!1,maxClusterRadius:44,spiderfyOnMaxZoom:!0,chunkedLoading:!0,iconCreateFunction:e=>C3(e.getChildCount())}).addTo(t),f.current=Ip.default.layerGroup().addTo(t),l.current=t;let r=t.getContainer(),i=null,a=null,o=()=>{a&&=(a.remove(),null)},s=e=>{if(y.current===`rect`){e.preventDefault(),i=t.mouseEventToLatLng(e),o();try{r.setPointerCapture(e.pointerId)}catch{}}},m=e=>{if(y.current!==`rect`||!i)return;e.preventDefault();let n=Ip.default.latLngBounds(i,t.mouseEventToLatLng(e));a?a.setBounds(n):a=Ip.default.rectangle(n,x3).addTo(t)},h=e=>{if(y.current!==`rect`||!i)return;let a=Ip.default.latLngBounds(i,t.mouseEventToLatLng(e));i=null,o();try{r.releasePointerCapture(e.pointerId)}catch{}let s=a.getSouthWest(),c=a.getNorthEast();s.lat!==c.lat&&s.lng!==c.lng&&n({minLat:S3(s.lat),minLon:S3(s.lng),maxLat:S3(c.lat),maxLon:S3(c.lng)}),g(`idle`)};r.addEventListener(`pointerdown`,s),r.addEventListener(`pointermove`,m),r.addEventListener(`pointerup`,h),r.addEventListener(`pointercancel`,h);let _=e=>{y.current===`polygon`&&(p.current=[...p.current,e.latlng],v(p.current.length),S())};t.on(`click`,_);let b=new ResizeObserver(()=>t.invalidateSize());b.observe(e);let x=window.setTimeout(()=>t.invalidateSize(),120);return()=>{r.removeEventListener(`pointerdown`,s),r.removeEventListener(`pointermove`,m),r.removeEventListener(`pointerup`,h),r.removeEventListener(`pointercancel`,h),t.off(`click`,_),b.disconnect(),window.clearTimeout(x),t.remove(),l.current=null,u.current=null,f.current=null,d.current=null}},[t,n,S]),(0,Y.useEffect)(()=>{y.current=h;let e=l.current;if(!e)return;let t=e.getContainer();h!==`polygon`&&p.current.length&&C(),h===`rect`?(e.dragging.disable(),e.doubleClickZoom.disable(),t.style.cursor=`crosshair`,t.style.touchAction=`none`):h===`polygon`?(e.dragging.enable(),e.doubleClickZoom.disable(),t.style.cursor=`crosshair`,t.style.touchAction=``):(e.dragging.enable(),e.doubleClickZoom.enable(),t.style.cursor=``,t.style.touchAction=``)},[h,C]),(0,Y.useEffect)(()=>{let e=l.current,t=c.current;if(!e||!t)return;let n=new ResizeObserver(()=>e.invalidateSize());return n.observe(t),()=>n.disconnect()},[]),(0,Y.useEffect)(()=>{let e=l.current,t=u.current;if(!e||!t)return;t.clearLayers();let n=[],o=[];for(let e of r){let t=d_(e);if(!t)continue;n.push([t.lat,t.lon]);let r=!i||p_(t.lat,t.lon,i),c=Ip.default.marker([t.lat,t.lon],{icon:O3(e.schema,r),opacity:i&&!r?.55:1,zIndexOffset:r?1e3:0});c.bindTooltip(w3(xo(e).title),{direction:`top`,offset:[0,-14]}),c.on(`click`,()=>{y.current===`idle`&&s(e,a??``)}),o.push(c)}t.addLayers(o),!m.current&&n.length&&!i&&(m.current=!0,e.fitBounds(Ip.default.latLngBounds(n),{padding:[30,30],maxZoom:14,animate:!1}))},[r,i,s,a]),(0,Y.useEffect)(()=>{let e=l.current;if(!e||(d.current&&=(d.current.remove(),null),!o&&!i))return;let t=Ip.default.layerGroup();o&&Ip.default.rectangle(Ip.default.latLngBounds([o.minLat,o.minLon],[o.maxLat,o.maxLon]),b3).addTo(t),i?.kind===`polygon`&&Ip.default.polygon(i.points.map(e=>[e.lat,e.lon]),b3).addTo(t),t.addTo(e),d.current=t},[o,i]);let E=h===`rect`?`Drag a box on the map…`:h===`polygon`?`Tap to add points${_?` · ${_}`:``}`:o||i?`Area selected`:`Pan & pick an area`,D=`flex items-center gap-1.5 rounded-md border px-2.5 py-1.5 text-xs font-medium transition-colors`;return(0,X.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 border-b border-border px-3 py-2 shrink-0`,children:[(0,X.jsxs)(`button`,{type:`button`,onClick:()=>g(h===`rect`?`idle`:`rect`),className:G(D,h===`rect`?`border-primary bg-primary/10 text-foreground`:`border-border text-muted-foreground hover:bg-muted hover:text-foreground`),title:`Drag a rectangle to select an area`,children:[(0,X.jsx)(rn,{className:`h-3.5 w-3.5`}),`Box`]}),(0,X.jsxs)(`button`,{type:`button`,onClick:()=>g(h===`polygon`?`idle`:`polygon`),className:G(D,h===`polygon`?`border-primary bg-primary/10 text-foreground`:`border-border text-muted-foreground hover:bg-muted hover:text-foreground`),title:`Tap points to enclose an area`,children:[(0,X.jsx)(L,{className:`h-3.5 w-3.5`}),`Polygon`]}),h===`polygon`&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`button`,{type:`button`,onClick:w,disabled:_<3,className:G(D,`border-primary bg-primary text-primary-foreground hover:bg-primary disabled:opacity-40 disabled:hover:bg-primary`),title:`Close the polygon and filter`,children:[(0,X.jsx)(et,{className:`h-3.5 w-3.5`}),`Finish`]}),_>0&&(0,X.jsx)(`button`,{type:`button`,onClick:C,className:G(D,`border-border text-muted-foreground hover:bg-muted hover:text-foreground`),title:`Discard the points placed so far`,children:(0,X.jsx)(Ne,{className:`h-3.5 w-3.5`})})]}),(0,X.jsxs)(`button`,{type:`button`,onClick:T,disabled:!o&&!i&&h===`idle`,className:G(D,`border-border text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-40 disabled:hover:bg-transparent`),title:`Clear the area selection`,children:[(0,X.jsx)(ut,{className:`h-3.5 w-3.5`}),`Clear`]}),(0,X.jsx)(`span`,{className:`ml-auto text-[11px] text-muted-foreground`,children:E})]}),(0,X.jsxs)(`div`,{className:`relative isolate flex-1 min-h-0`,children:[(0,X.jsx)(`div`,{ref:c,className:`absolute inset-0`}),b===0&&(0,X.jsx)(`div`,{className:`pointer-events-none absolute inset-0 z-[2] flex items-center justify-center`,children:(0,X.jsxs)(`div`,{className:`rounded-lg border bg-card/95 px-4 py-3 text-center shadow-elevation-2`,children:[(0,X.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:`No located documents`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`None of the current results carry location metadata.`})]})})]}),(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5 border-t border-border px-3 py-2 shrink-0 text-[11px] text-muted-foreground`,children:[(0,X.jsx)(bt,{className:`h-3 w-3`}),b,` of `,r.length,` located`,i&&(0,X.jsxs)(`span`,{className:`text-foreground font-medium`,children:[`· `,x,` in area`]})]})]})}var A3=[{label:`25 m`,m:25},{label:`100 m`,m:100},{label:`500 m`,m:500},{label:`2 km`,m:2e3},{label:`10 km`,m:1e4}],j3=`h-7 rounded-md border border-input bg-transparent px-1.5 text-xs outline-none focus-visible:ring-1 focus-visible:ring-ring`,M3=`h-7 rounded-md border border-input bg-transparent px-2 text-xs outline-none focus-visible:ring-1 focus-visible:ring-ring`,N3=e=>Math.round(e*1e4)/1e4;function P3(){let{state:e,setLensGps:t,setLensIds:n}=Ss(),r=e.filters.lens,i=e.activeWorkspaceName,a=r.gps?.radiusM??100,[o,s]=(0,Y.useState)(!1),[c,l]=(0,Y.useState)(r.gps?.radiusM??100),[u,d]=(0,Y.useState)(null),[f,p]=(0,Y.useState)(0),[m,h]=(0,Y.useState)(`prompt`),g=(0,Y.useRef)(null),_=(0,Y.useRef)(c);(0,Y.useEffect)(()=>{_.current=c},[c]);let v=`geolocation`in navigator&&window.isSecureContext;(0,Y.useEffect)(()=>{if(!navigator.permissions?.query)return;let e=null;return navigator.permissions.query({name:`geolocation`}).then(t=>{e=t,h(t.state===`granted`?`granted`:t.state===`denied`?`denied`:`prompt`),t.onchange=()=>h(t.state===`granted`?`granted`:t.state===`denied`?`denied`:`prompt`)}).catch(()=>{}),()=>{e&&(e.onchange=null)}},[]),(0,Y.useEffect)(()=>{if(!o||!v)return;let e=navigator.geolocation.watchPosition(e=>{let n=N3(e.coords.latitude),r=N3(e.coords.longitude);t({lat:n,lon:r,radiusM:_.current})},e=>d(e.code===e.PERMISSION_DENIED?`Location permission denied.`:e.message),{enableHighAccuracy:!0,maximumAge:15e3,timeout:2e4});return g.current=e,()=>{navigator.geolocation.clearWatch(e),g.current=null}},[o,v,f,t]);let y=e=>{s(e),d(null),e||t(null)},b=()=>{d(null),s(!0),p(e=>e+1)},x=e=>{l(e),r.gps&&t({...r.gps,radiusM:e})},S=Tb(),{rateMs:C,setRateMs:w,maxDistance:T,setMaxDistance:E,error:D}=S,O=S.running&&S.consumer===`filter`,k=S.running&&S.consumer!==`filter`;Eb(O);let A=t=>{i&&S.start(t,`filter`,{workspaceRef:i,contextPath:e.activeContextPath})},j=O,M=S.snapshotSize??S.camera?.size,N=!!M&&M.height>M.width;return(0,X.jsxs)(`div`,{className:`flex flex-col gap-4 p-3 text-sm`,children:[e.activeContextType===`context`&&(0,X.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Point the camera at an object to find visually related content in this context. `,e.liveEnabled?`Bound devices follow your matches as you move.`:`Enable Live to show the matches on your other devices.`]}),(0,X.jsx)(g3,{}),(0,X.jsxs)(`section`,{className:`space-y-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,X.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`input`,{type:`checkbox`,checked:o,disabled:!v,onChange:e=>y(e.target.checked)}),(0,X.jsx)(Yn,{className:`h-4 w-4 text-muted-foreground`}),(0,X.jsx)(`span`,{children:`Track this device’s GPS`})]}),(0,X.jsx)(`select`,{className:j3,value:c,onChange:e=>x(Number(e.target.value)),disabled:!o,children:A3.map(e=>(0,X.jsx)(`option`,{value:e.m,children:e.label},e.m))})]}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:v?m===`denied`?(0,X.jsx)(`span`,{className:`text-destructive`,children:`Location is blocked for this site. Allow it in your browser/app settings, then retry.`}):u?(0,X.jsxs)(`span`,{className:`text-destructive`,children:[u,` `,(0,X.jsx)(`button`,{type:`button`,onClick:b,className:`underline hover:text-foreground`,children:`Request again`})]}):r.gps?`Showing documents within ${a>=1e3?`${a/1e3} km`:`${a} m`} of ${r.gps.lat}, ${r.gps.lon}.`:o?`Waiting for a position fix…`:`Resurface documents geotagged near your current position.`:`Needs a secure context (https or localhost) with location access.`})]}),(0,X.jsxs)(`section`,{className:`space-y-2 border-t border-border pt-3`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[j?(0,X.jsxs)(`button`,{type:`button`,onClick:S.stop,className:`flex h-7 items-center gap-1 rounded-md bg-destructive px-2.5 text-xs font-medium text-destructive-foreground hover:bg-destructive/90`,children:[(0,X.jsx)(Ce,{className:`h-3.5 w-3.5`}),` `,S.source===`photo`?`Close photo`:`Stop ${S.source===`camera`?`camera`:`recording`}`]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`button`,{type:`button`,onClick:()=>A(`camera`),disabled:!i||k,className:`flex h-7 items-center gap-1 rounded-md bg-foreground px-2.5 text-xs font-medium text-background hover:bg-foreground/90 disabled:opacity-50`,children:[(0,X.jsx)(z,{className:`h-3.5 w-3.5`}),` Camera`]}),(0,X.jsxs)(`button`,{type:`button`,onClick:()=>A(`screen`),disabled:!i||k,className:`flex h-7 items-center gap-1 rounded-md bg-foreground px-2.5 text-xs font-medium text-background hover:bg-foreground/90 disabled:opacity-50`,children:[(0,X.jsx)(fe,{className:`h-3.5 w-3.5`}),` Desktop`]})]}),(0,X.jsx)(ex,{consumer:`filter`,workspaceRef:i??``,contextPath:e.activeContextPath,disabled:k,className:`flex h-7 items-center gap-1 rounded-md bg-foreground px-2.5 text-xs font-medium text-background hover:bg-foreground/90 disabled:opacity-50`}),(0,X.jsx)(`select`,{className:j3,value:C,onChange:e=>w(Number(e.target.value)),disabled:!i,title:`Frame rate. High rates (10–30 fps) are experimental; the loop never overlaps requests, so the effective rate is capped by search latency.`,children:Pb.map(e=>(0,X.jsx)(`option`,{value:e.ms,children:e.label},e.ms))}),(0,X.jsx)(`input`,{className:G(M3,`w-24`),placeholder:`max dist`,inputMode:`decimal`,value:T,onChange:e=>E(e.target.value),title:`Cosine-distance floor (0 = identical). Empty = top-K (loose but tunable).`})]}),(0,X.jsxs)(`div`,{className:G(`relative overflow-hidden rounded-lg border border-border bg-black/80`,j?N?`aspect-[3/4] max-h-[60vh]`:`aspect-video`:`hidden`),children:[(0,X.jsx)(Kb,{className:`h-full w-full`,interactive:!0}),(0,X.jsx)(Qb,{})]}),j&&(0,X.jsx)(Zb,{}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:D?(0,X.jsx)(`span`,{className:`text-destructive`,children:D}):j?S.snapshot?`Snapshot: view narrowed to ${S.lastCount??`…`} match${S.lastCount===1?``:`es`}. The photo is not stored. Tap Live to resume the feed.`:`Live: view narrowed to ${S.lastCount??`…`} match${S.lastCount===1?``:`es`}. Tap the shutter to search one still frame. Frames are ephemeral, never stored. Closing the toolbox keeps it running.`:k?`The Lens applet is using the camera. Stop it there first.`:r.ids===null?i?`Point a camera (or share a screen). The view narrows to what the feed matches.`:`Open a workspace to refine with a live feed.`:`The current view holds ${r.ids.length} camera match${r.ids.length===1?``:`es`}. Save to keep this view, or clear matches to remove the camera filter.`}),!j&&r.ids!==null&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>n(null),className:`min-h-10 rounded-md border border-border px-3 text-xs hover:bg-muted`,children:`Clear matches`})]})]})}var F3={"crud:created":`var(--data-5)`,"crud:updated":`var(--data-8)`,"crud:deleted":`var(--data-3)`,content:`var(--data-10)`,tasks:`var(--data-1)`};function I3(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)|0;return(t%360+360)%360}function L3(e){return F3[e]??`oklch(var(--data-l) var(--data-c) ${I3(e)})`}var R3=[{label:`Day`,cells:[`yesterday`,`today`,`tomorrow`]},{label:`Week`,cells:[`lastWeek`,`thisWeek`,`nextWeek`]},{label:`Month`,cells:[`lastMonth`,`thisMonth`,`nextMonth`]},{label:`Year`,cells:[`lastYear`,`thisYear`,`nextYear`]}],z3=[{label:`Decade`,cells:[`lastDecade`,`thisDecade`,`nextDecade`]},{label:`Century`,cells:[`lastCentury`,`thisCentury`,`nextCentury`]},{label:`Millennium`,cells:[`lastMillennium`,`thisMillennium`,`nextMillennium`]}],B3=[`Yesterday`,`Today`,`Tomorrow`],V3=[{label:`Millennium`,unit:`millennium`},{label:`Century`,unit:`century`},{label:`Decade`,unit:`decade`},{label:`Year`,unit:`year`},{label:`Month`,unit:`month`},{label:`Week`,unit:`week`}],H3=10,U3=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function W3(e,t){let n=new Date;switch(e){case`millennium`:{let e=Math.floor(n.getFullYear()/1e3)*1e3;return new Date(e-t*1e3,0,1)}case`century`:{let e=Math.floor(n.getFullYear()/100)*100;return new Date(e-t*100,0,1)}case`decade`:{let e=Math.floor(n.getFullYear()/10)*10;return new Date(e-t*10,0,1)}case`year`:return new Date(n.getFullYear()-t,0,1);case`month`:return new Date(n.getFullYear(),n.getMonth()-t,1);case`week`:{let e=(n.getDay()+6)%7,r=new Date(n.getFullYear(),n.getMonth(),n.getDate()-e);return r.setDate(r.getDate()-t*7),r}}}function G3(e,t){let n=new Date(t);switch(e){case`millennium`:n.setFullYear(n.getFullYear()+1e3);break;case`century`:n.setFullYear(n.getFullYear()+100);break;case`decade`:n.setFullYear(n.getFullYear()+10);break;case`year`:n.setFullYear(n.getFullYear()+1);break;case`month`:n.setMonth(n.getMonth()+1);break;case`week`:n.setDate(n.getDate()+7)}return n}function K3(e,t,n){if(n===0)return`Now`;switch(e){case`millennium`:case`century`:case`decade`:{let e=t.getFullYear();return e<=0?`${1-e} BCE`:`${e}`}case`year`:return`${t.getFullYear()}`;case`month`:return`${U3[t.getMonth()]} ${t.getFullYear()}`;case`week`:{let e=new Date(t);return e.setDate(e.getDate()+6),`${t.getDate()} ${U3[t.getMonth()]} – ${e.getDate()} ${U3[e.getMonth()]}`}}}function q3(e,t){return Array.from({length:t},(t,n)=>{let r=W3(e,n),i=G3(e,r);return{offset:n,label:K3(e,r,n),start:r,end:i,isNow:n===0}})}var J3={yesterday:5,today:5,tomorrow:5,lastWeek:5,thisWeek:5,nextWeek:5,lastMonth:4,thisMonth:4,nextMonth:4,lastYear:3,thisYear:3,nextYear:3,lastDecade:2,thisDecade:2,nextDecade:2,lastCentury:1,thisCentury:1,nextCentury:1,lastMillennium:0,thisMillennium:0,nextMillennium:0};function Y3(e){let t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}function X3(e,t){let n=t6(e);return n?(n.setDate(n.getDate()+t),Y3(n)):e}function Z3(e){let t=[...e].sort((e,t)=>e.start.localeCompare(t.start)),n=[];for(let e of t){let t=n[n.length-1];t&&e.start<=X3(t.end,1)?e.end>t.end&&(t.end=e.end):n.push({...e})}return n}function Q3(e,t){let n=e.find(e=>t>=e.start&&t<=e.end);if(!n)return Z3([...e,{start:t,end:t}]);let r=e.filter(e=>e!==n);return n.start<=X3(t,-1)&&r.push({start:n.start,end:X3(t,-1)}),X3(t,1)<=n.end&&r.push({start:X3(t,1),end:n.end}),r.sort((e,t)=>e.start.localeCompare(t.start))}function $3(e,t){if(e===`week`||e===`month`){let e=new Date(t.end);return e.setDate(e.getDate()-1),{start:Y3(t.start),end:Y3(e)}}return{start:String(t.start.getFullYear()),end:String(t.end.getFullYear()-1)}}function e6({quickFilterKey:e,activeRangeCount:t,onSelectRanges:n,histogramNames:r}){let{state:i}=Ss(),{activeWorkspaceName:a,activeTreeName:o,activeContextPath:s,filters:c}=i,[l,u]=(0,Y.useState)(3),[d,f]=(0,Y.useState)(H3),[p,m]=(0,Y.useState)(new Set),[h,g]=(0,Y.useState)([]),[_,v]=(0,Y.useState)(e);e!==_&&(v(e),e&&J3[e]!==void 0&&u(J3[e]),m(new Set));let[y,b]=(0,Y.useState)(t);t!==y&&(b(t),t===0&&m(new Set));let x=V3[l],S=q3(x.unit,d),C=JSON.stringify(c.features)+JSON.stringify(c.geo),w=r.join(`,`);(0,Y.useEffect)(()=>{if(!a||r.length===0)return;let e=!1,t=setTimeout(()=>{Qa(a,{names:r,buckets:q3(x.unit,d).map(e=>$3(x.unit,e)),context:s??`/`,...o?{treeNameOrTreeId:o}:{},allOf:c.features.allOf,anyOf:c.features.anyOf,noneOf:c.features.noneOf,filters:Rb(c.geo),applyCanvasSpec:!1}).then(t=>{e||g(t)}).catch(()=>{e||g([])})},250);return()=>{e=!0,clearTimeout(t)}},[a,o,s,x.unit,d,w,C]);let T=a&&r.length>0?h:[],E=Math.max(1,...T.map(e=>e.total)),D=e=>{u(t=>Math.max(0,Math.min(5,t+e))),f(H3),m(new Set)},O=(0,Y.useCallback)((e,t)=>{m(r=>{let i;if(t&&r.size>0){let t=Math.min(e,...r),n=Math.max(e,...r);i=new Set(r);for(let e=t;e<=n;e++)i.add(e)}else i=new Set(r),i.has(e)?i.delete(e):i.add(e);let a=[...i].sort((e,t)=>e-t),o=[];for(let e of a){let t=o[o.length-1];t&&e===t[1]+1?t[1]=e:o.push([e,e])}return n(o.map(([e,t])=>{let n=S.find(e=>e.offset===t).start,r=new Date(S.find(t=>t.offset===e).end);return r.setDate(r.getDate()-1),{start:Y3(n),end:Y3(r)}})),i})},[S,n]);return(0,X.jsxs)(`div`,{className:`w-48 shrink-0 flex flex-col border-r border-border bg-muted/20`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-1 px-2 py-1.5 border-b border-border shrink-0`,children:[(0,X.jsx)(`span`,{className:`text-[11px] font-semibold text-foreground/80 select-none`,children:x.label}),(0,X.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:()=>D(1),className:`p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,title:`Zoom in (finer periods)`,children:(0,X.jsx)(se,{className:`w-3.5 h-3.5`})}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>D(-1),className:`p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,title:`Zoom out (coarser periods)`,children:(0,X.jsx)(I,{className:`w-3.5 h-3.5`})})]})]}),(0,X.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto p-1.5 space-y-1 touch-target`,children:[S.map(e=>{let t=p.has(e.offset),n=T[e.offset],r=n?.total??0,i=r>0?Math.log1p(r)/Math.log1p(E):0,a=n&&r>0?`: ${r} doc${r===1?``:`s`} (${Object.entries(n.counts).map(([e,t])=>`${e}: ${t}`).join(`, `)})`:``;return(0,X.jsxs)(`button`,{type:`button`,onClick:t=>O(e.offset,t.shiftKey),title:`${e.isNow?`Now`:e.label}${a}. Click to tag, shift-click to fill range`,className:G(`w-full flex items-center gap-2 rounded-2xl px-3 py-1.5 text-xs font-medium transition-colors select-none text-left`,t?`bg-primary text-primary-foreground`:e.isNow?`bg-primary/10 text-primary hover:bg-primary/20`:`bg-card text-foreground hover:bg-muted shadow-elevation-1`),children:[e.isNow&&(0,X.jsx)(ln,{className:`w-3 h-3 shrink-0`}),(0,X.jsxs)(`span`,{className:`flex-1 min-w-0 flex flex-col`,children:[(0,X.jsxs)(`span`,{className:`flex items-baseline justify-between gap-1`,children:[(0,X.jsx)(`span`,{className:`truncate`,children:e.label}),r>0&&(0,X.jsx)(`span`,{className:G(`text-[9px] tabular-nums shrink-0`,t?`text-primary-foreground/80`:`text-muted-foreground/70`),children:r})]}),r>0&&(0,X.jsx)(`span`,{className:`mt-1 flex h-[3px] overflow-hidden rounded-full`,style:{width:`${Math.max(8,i*100)}%`},children:Object.entries(n.counts).map(([e,t])=>(0,X.jsx)(`span`,{style:{width:`${t/r*100}%`,backgroundColor:L3(e)}},e))})]})]},e.offset)}),d<200&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>f(e=>e+H3),className:`w-full text-[11px] text-muted-foreground/60 hover:text-muted-foreground py-1.5 transition-colors text-center`,children:`Show older…`})]})]})}function t6(e){let t=/^(-?\d{1,6})-(\d{2})-(\d{2})$/.exec(e);return t?new Date(Number(t[1]),Number(t[2])-1,Number(t[3])):null}function n6({ranges:e,onCommitRange:t,onToggleDay:n}){let r=new Date,[i,a]=(0,Y.useState)(()=>{let t=e[0]?.start&&t6(e[0].start)||r;return{y:t.getFullYear(),m:t.getMonth()}}),[o,s]=(0,Y.useState)(null),[c,l]=(0,Y.useState)(null),u=e=>a(t=>{let n=new Date(t.y,t.m+e,1);return{y:n.getFullYear(),m:n.getMonth()}}),d=(e,r)=>{if(r){n(e),s(null),l(null);return}if(!o){s(e);return}let[i,a]=o<=e?[o,e]:[e,o];t(i,a),s(null),l(null)},f=new Date(i.y,i.m,1),p=new Date(f);p.setDate(p.getDate()-(f.getDay()+6)%7);let m=Array.from({length:42},(e,t)=>{let n=new Date(p);return n.setDate(n.getDate()+t),n}),[h,g]=o?c&&c!==o?o<=c?[o,c]:[c,o]:[o,o]:[null,null],_=t=>e.some(e=>t>=e.start&&t<=e.end),v=t=>e.some(e=>t===e.start||t===e.end),y=Y3(r);return(0,X.jsxs)(`div`,{className:`select-none`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between mb-1.5`,children:[(0,X.jsxs)(`div`,{className:`flex items-center`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:()=>u(-12),className:`p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,title:`Previous year`,children:(0,X.jsx)(w,{className:`w-3.5 h-3.5`})}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>u(-1),className:`p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,title:`Previous month`,children:(0,X.jsx)(ae,{className:`w-3.5 h-3.5`})})]}),(0,X.jsxs)(`button`,{type:`button`,onClick:()=>a({y:r.getFullYear(),m:r.getMonth()}),className:`text-xs font-semibold text-foreground hover:text-primary transition-colors`,title:`Jump to current month`,children:[U3[i.m],` `,i.y]}),(0,X.jsxs)(`div`,{className:`flex items-center`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:()=>u(1),className:`p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,title:`Next month`,children:(0,X.jsx)(Xe,{className:`w-3.5 h-3.5`})}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>u(12),className:`p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,title:`Next year`,children:(0,X.jsx)(_r,{className:`w-3.5 h-3.5`})})]})]}),(0,X.jsx)(`div`,{className:`grid grid-cols-7 mb-0.5`,children:[`Mo`,`Tu`,`We`,`Th`,`Fr`,`Sa`,`Su`].map(e=>(0,X.jsx)(`span`,{className:`text-center text-[9px] font-semibold uppercase text-muted-foreground/60 py-0.5`,children:e},e))}),(0,X.jsx)(`div`,{className:`grid grid-cols-7 gap-y-0.5`,children:m.map(e=>{let t=Y3(e),n=e.getMonth()===i.m,r=h!==null&&g!==null&&t>=h&&t<=g,a=t===h||t===g,s=!o&&_(t),c=a||s&&v(t);return(0,X.jsx)(`button`,{type:`button`,onClick:e=>d(t,e.ctrlKey||e.metaKey),onMouseEnter:()=>o&&l(t),className:G(`h-6 text-[11px] tabular-nums transition-colors`,c?`bg-primary text-primary-foreground rounded-md`:r||s?`bg-primary/15 text-foreground`:n?`text-foreground hover:bg-muted rounded-md`:`text-muted-foreground/40 hover:bg-muted rounded-md`,t===y&&!c&&`font-bold text-primary`),children:e.getDate()},t)})}),(0,X.jsx)(`p`,{className:`mt-1.5 text-[10px] text-muted-foreground/70`,children:o?`From ${o}: pick the end date`:`Click start + end. Ctrl+click adds/removes single days.`})]})}function r6({label:e,checked:t,onChange:n,color:r}){return(0,X.jsxs)(`div`,{role:`switch`,"aria-checked":t,tabIndex:0,onClick:()=>n(!t),onKeyDown:e=>(e.key===` `||e.key===`Enter`)&&n(!t),className:`flex items-center justify-between gap-3 cursor-pointer select-none outline-none focus-visible:ring-2 focus-visible:ring-ring rounded`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-2 min-w-0`,children:[(0,X.jsx)(`span`,{className:`w-2 h-2 rounded-full shrink-0`,style:{backgroundColor:r}}),(0,X.jsx)(`span`,{className:`text-sm text-foreground truncate`,children:e})]}),(0,X.jsx)(`div`,{className:G(`relative w-10 h-5 rounded-full transition-colors shrink-0`,!t&&`bg-accent dark:bg-muted-foreground`),style:t?{backgroundColor:r}:void 0,children:(0,X.jsx)(`div`,{className:G(`absolute top-[2px] w-4 h-4 rounded-full bg-background shadow-elevation-1 transition-transform`,t?`translate-x-[22px]`:`translate-x-[2px]`)})})]})}function i6(){let{state:e,setTimelineFilter:t,createTimeline:n,deleteTimeline:r,refreshTimelines:i}=Ss(),{timeline:a}=e.filters,{availableTimelines:o,timelineScales:s,timelinesLoading:c}=e,[l,u]=(0,Y.useState)(``),[d,f]=(0,Y.useState)(!1),[p,m]=(0,Y.useState)(null),[h,g]=(0,Y.useState)(`quick`),[_,v]=(0,Y.useState)(!1),{showToast:y}=mo(),b=new Set(a.selectedTimelines??[]),x=(0,Y.useMemo)(()=>{let e=[];return a.indexCreated&&e.push(`crud:created`),a.indexUpdated&&e.push(`crud:updated`),a.indexDeleted&&e.push(`crud:deleted`),a.contentEvents&&e.push(`content`),e.push(...a.selectedTimelines??[]),e.length>0?e:[`crud:created`]},[a.indexCreated,a.indexUpdated,a.indexDeleted,a.contentEvents,a.selectedTimelines]),S=e=>{let n=new Set(b);n.has(e)?n.delete(e):n.add(e),t({selectedTimelines:[...n]})},C=async()=>{let e=l.trim();if(e){f(!0);try{await n(e),u(``),y({title:`Timeline created`,description:e})}catch(e){y({title:`Failed to create timeline`,description:e instanceof Error?e.message:String(e),variant:`destructive`})}finally{f(!1)}}},w=async e=>{if(window.confirm(`Delete timeline "${e}"?\n\nThis removes all interval data for this timeline.`)){m(e);try{await r(e),y({title:`Timeline deleted`,description:e})}catch(e){y({title:`Failed to delete timeline`,description:e instanceof Error?e.message:String(e),variant:`destructive`})}finally{m(null)}}},T=o.filter(e=>!e.startsWith(`crud:`)&&e!==`content`),E=Bb(a),D=E.length>0,O=(0,Y.useCallback)(e=>{t({customRanges:e,customRange:null,...e.length>0?{quickFilter:null}:{}})},[t]),k=e=>{t({quickFilter:a.quickFilter===e?null:e,customRanges:[],customRange:null})},A=e=>{t({customRanges:E.filter((t,n)=>n!==e),customRange:null})},j=(e,t)=>(0,X.jsxs)(`div`,{className:`grid grid-cols-[3.5rem_1fr_1fr_1fr] gap-1 items-center`,children:[(0,X.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:e.label}),e.cells.map((e,n)=>{let r=a.quickFilter===e&&!D;return(0,X.jsx)(`button`,{type:`button`,onClick:()=>k(e),className:G(`text-xs px-1.5 py-1 rounded-md transition-colors truncate`,r?`bg-primary text-primary-foreground font-medium`:`bg-muted/50 text-foreground hover:bg-muted`),title:e,children:t?B3[n]:[`Last`,`This`,`Next`][n]},e)})]},e.label);return(0,X.jsxs)(`div`,{className:`flex h-full min-h-0`,children:[(0,X.jsx)(e6,{quickFilterKey:a.quickFilter,activeRangeCount:E.length,onSelectRanges:O,histogramNames:x}),(0,X.jsxs)(`div`,{className:`flex-1 overflow-y-auto p-4 space-y-5`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,X.jsx)(`p`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:h===`quick`?`Quick filter`:`Date range`}),(0,X.jsxs)(`div`,{className:`flex rounded-md overflow-hidden border border-border divide-x divide-border`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:()=>g(`quick`),className:G(`px-2 py-0.5 transition-colors`,h===`quick`?`bg-primary text-primary-foreground`:`text-muted-foreground hover:bg-muted hover:text-foreground`),title:`Quick filters`,children:(0,X.jsx)(_e,{className:`w-3 h-3`})}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>g(`calendar`),className:G(`px-2 py-0.5 transition-colors`,h===`calendar`?`bg-primary text-primary-foreground`:`text-muted-foreground hover:bg-muted hover:text-foreground`),title:`Calendar range picker`,children:(0,X.jsx)(Pn,{className:`w-3 h-3`})})]})]}),h===`quick`?(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsxs)(`div`,{className:`grid grid-cols-[3.5rem_1fr_1fr_1fr] gap-1`,children:[(0,X.jsx)(`span`,{}),[`Last`,`This`,`Next`].map(e=>(0,X.jsx)(`span`,{className:`text-center text-[9px] font-semibold uppercase tracking-wide text-muted-foreground/60`,children:e},e))]}),R3.map((e,t)=>j(e,t===0)),(0,X.jsxs)(`button`,{type:`button`,onClick:()=>v(e=>!e),className:`flex items-center gap-1 text-[11px] text-muted-foreground/70 hover:text-muted-foreground pt-1 transition-colors`,children:[(0,X.jsx)(Ke,{className:G(`w-3 h-3 transition-transform`,!_&&`-rotate-90`)}),`Deep time`]}),_&&z3.map(e=>j(e,!1))]}):(0,X.jsx)(n6,{ranges:E,onCommitRange:(e,n)=>t({customRanges:[{start:e,end:n}],customRange:null,quickFilter:null}),onToggleDay:e=>t({customRanges:Q3(E,e),customRange:null,quickFilter:null})}),D&&(0,X.jsx)(`div`,{className:`mt-2 space-y-1`,children:E.map((e,t)=>(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2 rounded-md bg-primary/10 border border-primary/30 px-2.5 py-1.5`,children:[(0,X.jsx)(`span`,{className:`text-xs text-foreground truncate`,children:e.start===e.end?e.start:`${e.start} → ${e.end}`}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>A(t),className:`text-muted-foreground hover:text-foreground shrink-0`,title:`Remove range`,children:(0,X.jsx)(Ne,{className:`w-3.5 h-3.5`})})]},`${e.start}..${e.end}`))})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground mb-2`,children:`Apply to`}),(0,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(r6,{label:`crud:created`,checked:a.indexCreated,onChange:e=>t({indexCreated:e}),color:L3(`crud:created`)}),(0,X.jsx)(r6,{label:`crud:updated`,checked:a.indexUpdated,onChange:e=>t({indexUpdated:e}),color:L3(`crud:updated`)}),(0,X.jsx)(r6,{label:`crud:deleted`,checked:a.indexDeleted,onChange:e=>t({indexDeleted:e}),color:L3(`crud:deleted`)}),(0,X.jsx)(r6,{label:`content`,checked:a.contentEvents,onChange:e=>t({contentEvents:e}),color:L3(`content`)})]}),(0,X.jsx)(`p`,{className:`text-[10px] text-muted-foreground/70 mt-1`,children:`content = content-derived timestamps (EXIF, logs, extracted periods)`})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,X.jsx)(`p`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Domain timelines`}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>i(),className:`text-muted-foreground/60 hover:text-muted-foreground transition-colors`,title:`Refresh timelines`,children:(0,X.jsx)(Te,{className:`w-3 h-3`})})]}),c?(0,X.jsxs)(`div`,{className:`flex items-center gap-2 py-2 text-xs text-muted-foreground`,children:[(0,X.jsx)(Nt,{className:`w-3 h-3 animate-spin`}),`Loading…`]}):T.length===0?(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground py-1`,children:`No domain timelines yet`}):(0,X.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:T.map(e=>{let t=b.has(e),n=L3(e);return(0,X.jsxs)(`div`,{className:G(`flex items-center gap-2.5 group rounded-md px-2 py-1.5 cursor-pointer transition-colors`,t?`bg-muted/60`:`hover:bg-muted/30`),onClick:()=>S(e),children:[(0,X.jsx)(`div`,{className:G(`shrink-0 w-4 h-4 rounded border-2 flex items-center justify-center transition-colors`,!t&&`border-muted-foreground/40 bg-transparent group-hover:border-muted-foreground/70`),style:t?{backgroundColor:n,borderColor:n}:void 0,children:t&&(0,X.jsx)(`svg`,{className:G(`w-2.5 h-2.5`,ip(n)),viewBox:`0 0 10 10`,fill:`none`,children:(0,X.jsx)(`path`,{d:`M2 5l2.5 2.5L8 3`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})}),(0,X.jsx)(`span`,{className:`flex-1 text-sm text-foreground truncate select-none`,children:e}),(s[e]?.length??0)>0&&(0,X.jsx)(`span`,{className:`shrink-0 text-[10px] px-1 py-0.5 rounded bg-muted text-muted-foreground select-none`,title:`Observed granularity for "${e}" — each entry is indexed at its own precision (a bare year at year cells, a full date at day cells)`,children:(s[e]??[]).join(`·`)}),(0,X.jsx)(`button`,{type:`button`,disabled:p===e,onClick:t=>{t.stopPropagation(),w(e)},className:`shrink-0 p-1 rounded text-muted-foreground/40 hover:text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-50 reveal-on-hover`,title:`Delete timeline "${e}"`,children:p===e?(0,X.jsx)(Nt,{className:`w-3 h-3 animate-spin`}):(0,X.jsx)(ut,{className:`w-3 h-3`})})]},e)})}),(0,X.jsxs)(`div`,{className:`mt-3 flex gap-1.5`,children:[(0,X.jsx)(`input`,{type:`text`,value:l,onChange:e=>u(e.target.value),onKeyDown:e=>e.key===`Enter`&&C(),placeholder:`New timeline (e.g. wikipedia, trips)…`,title:`A timeline is a named time axis. Entries index at their own precision — a bare year at year granularity, a full date at day granularity — nothing to configure.`,className:`flex-1 px-2 py-1 text-xs rounded-md bg-muted border border-transparent focus:border-ring focus:outline-none`}),(0,X.jsx)(`button`,{type:`button`,onClick:C,disabled:d||!l.trim(),className:`shrink-0 p-1.5 rounded-md bg-muted hover:bg-muted/80 text-muted-foreground hover:text-foreground transition-colors disabled:opacity-50 touch-target`,title:`Create timeline`,children:d?(0,X.jsx)(Nt,{className:`w-3.5 h-3.5 animate-spin`}):(0,X.jsx)(H,{className:`w-3.5 h-3.5`})})]})]})]})]})}var a6={data:`Data`,"data/backend":`Backends`,"data/mime":`MIME types`,"data/dataset":`Datasets`,client:`Client`,tag:`Tags`,device:`Device`,custom:`Custom`,feature:`Feature`},o6=`data/dataset/default`;function s6(e){let t=new Map;for(let n of e){let e=n.startsWith(`data/backend/`)?`data/backend`:n.startsWith(`data/mime/`)?`data/mime`:n.startsWith(`data/dataset/`)?`data/dataset`:n.split(`/`)[0];t.has(e)||t.set(e,[]),t.get(e).push(n)}return t}var c6=[`off`,`anyOf`,`allOf`,`noneOf`];function l6(e){return c6[(c6.indexOf(e)+1)%c6.length]}var u6=[{m:`anyOf`,label:`any`,on:`bg-info text-info-foreground`},{m:`allOf`,label:`all`,on:`bg-success text-success-foreground`},{m:`noneOf`,label:`not`,on:`bg-destructive text-destructive-foreground`}];function d6({mode:e,onSet:t}){return(0,X.jsx)(`div`,{className:`flex shrink-0 rounded-md overflow-hidden border border-border divide-x divide-border`,children:u6.map(n=>(0,X.jsx)(`button`,{type:`button`,onClick:()=>t(e===n.m?`off`:n.m),className:G(`px-2 py-0.5 text-[11px] font-medium transition-colors`,e===n.m?n.on:`bg-transparent text-muted-foreground hover:bg-muted hover:text-foreground`),title:`${n.label}: ${n.m}`,children:n.label},n.m))})}function f6({keys:e,modeOf:t,onCycle:n}){return e.length?(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground mb-2`,children:`Document types`}),(0,X.jsx)(`div`,{className:`grid grid-cols-2 gap-2 sm:grid-cols-3`,children:e.map(e=>{let{label:r,icon:i}=M4(e),a=t(e),o=u6.find(e=>e.m===a);return(0,X.jsxs)(`button`,{type:`button`,onClick:()=>n(e),title:`${e}: ${a===`off`?`tap to filter`:a}`,className:G(`relative flex flex-col items-center justify-center gap-1.5 rounded-lg border p-3 min-h-[4.5rem] transition-colors select-none`,a===`off`?`border-border bg-muted/40 text-foreground hover:bg-muted`:a===`anyOf`?`border-info bg-info/10 text-foreground`:a===`allOf`?`border-success bg-success/10 text-foreground`:`border-destructive bg-destructive/10 text-foreground`),children:[o&&(0,X.jsx)(`span`,{className:G(`absolute right-1.5 top-1.5 rounded px-1 py-0.5 text-[9px] font-semibold leading-none`,o.on),children:o.label}),(0,X.jsx)(i,{className:`h-5 w-5 text-muted-foreground`}),(0,X.jsx)(`span`,{className:`text-xs font-medium leading-none`,children:r})]},e)})})]}):null}function p6(){let{state:e,setFeatureMode:t,clearFilters:n,hasActiveFilters:r,deleteBitmap:i,deleteDataset:a}=Ss(),{availableBitmaps:o,bitmapsLoading:s,filters:c}=e,l=new Set(c.features.allOf),u=new Set(c.features.anyOf),d=new Set(c.features.noneOf),f=e=>l.has(e)?`allOf`:u.has(e)?`anyOf`:d.has(e)?`noneOf`:`off`,[p,m]=(0,Y.useState)(``),[h,g]=(0,Y.useState)(null),{showToast:_}=mo(),v=async e=>{if(e.startsWith(`data/dataset/`)&&e!==o6){let t=e.slice(13);if(!window.confirm(`Drop dataset "${t}"?\n\nALL documents stamped with this dataset will be PERMANENTLY DELETED. Documents in other datasets (or the default dataset) are unaffected. Re-ingesting recreates the dataset from scratch.`))return;g(e);try{let n=await a(e);_({title:`Dataset dropped`,description:`"${t}": ${n} document(s) deleted`})}catch(e){_({title:`Dataset drop failed`,description:e instanceof Error?e.message:String(e),variant:`destructive`})}finally{g(null)}return}if(!e.startsWith(`data/`)&&window.confirm(`Delete bitmap "${e}"?\n\nThis removes the bitmap from the database. Documents are unaffected, but any features/filters relying on this bitmap will lose their grouping.`)){g(e);try{await i(e),_({title:`Bitmap deleted`,description:e})}catch(e){_({title:`Delete failed`,description:e instanceof Error?e.message:String(e),variant:`destructive`})}finally{g(null)}}};if(s)return(0,X.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,X.jsx)(Nt,{className:`w-4 h-4 animate-spin text-muted-foreground`})});let y=[...c.features.allOf,...c.features.anyOf,...c.features.noneOf],b=[...new Set([...o,...y])];if(!b.length)return(0,X.jsx)(`div`,{className:`p-4 text-xs text-muted-foreground text-center py-10`,children:`No feature bitmaps found`});let x=p.trim().toLowerCase(),S=x?b.filter(e=>e.toLowerCase().includes(x)):b,C=S.filter(e=>e.startsWith(A4)).sort((e,t)=>{let n=Object.keys(j4),r=n.indexOf(e),i=n.indexOf(t);return(r===-1?n.length:r)-(i===-1?n.length:i)||e.localeCompare(t)}),w=s6(S.filter(e=>!e.startsWith(A4))),T=w.get(`data/dataset`);return T&&!T.includes(o6)&&(!x||o6.includes(x))&&T.unshift(o6),(0,X.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,X.jsxs)(`div`,{className:`px-4 py-2 border-b border-border shrink-0 space-y-2`,children:[(0,X.jsxs)(`div`,{className:`relative`,children:[(0,X.jsx)(mr,{className:`absolute left-2 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground pointer-events-none`}),(0,X.jsx)(`input`,{type:`text`,value:p,onChange:e=>m(e.target.value),placeholder:`Search features…`,className:`w-full pl-7 pr-3 py-1.5 text-xs rounded-md bg-muted border border-transparent focus:border-ring focus:outline-none`})]}),(0,X.jsxs)(`button`,{type:`button`,onClick:n,disabled:!r,className:`flex items-center gap-1.5 w-full justify-center px-2.5 py-1.5 text-xs rounded-md border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors disabled:opacity-40 disabled:hover:bg-transparent`,children:[(0,X.jsx)(Ne,{className:`w-3 h-3`}),`Clear all filters`]})]}),(0,X.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto p-4 space-y-5`,children:[(0,X.jsx)(f6,{keys:C,modeOf:f,onCycle:e=>t(e,l6(f(e)))}),w.size===0&&C.length===0?(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground text-center py-6`,children:`No matches`}):Array.from(w.entries()).map(([e,n])=>(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground mb-2`,children:a6[e]??e}),(0,X.jsx)(`div`,{className:`flex flex-col gap-1`,children:n.map((e,n)=>{let r=e.startsWith(`data/`),i=e===o6,a=e.startsWith(`data/dataset/`)&&!i,o=f(e);return(0,X.jsxs)(`div`,{onClick:()=>t(e,l6(o)),role:`button`,tabIndex:0,onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),t(e,l6(o)))},className:G(`flex items-center gap-2 group rounded-md pl-2 pr-1.5 py-1 border-l-2 transition-colors cursor-pointer select-none`,n%2==0?`bg-muted/50`:`bg-transparent`,`hover:bg-muted`,o===`off`?`border-l-transparent`:o===`anyOf`?`border-l-blue-500 !bg-info/10`:o===`allOf`?`border-l-emerald-500 !bg-success/10`:`border-l-rose-500 !bg-destructive/10`),children:[(0,X.jsxs)(`span`,{className:`flex-1 min-w-0 text-xs font-mono text-foreground truncate`,title:i?`Virtual dataset: documents not stamped with any dataset. Included by default; "not" hides them, "all" shows only them.`:e,children:[e,i&&(0,X.jsx)(`span`,{className:`ml-1.5 text-[10px] text-muted-foreground font-sans`,children:`virtual · on by default`})]}),(0,X.jsx)(`span`,{onClick:e=>e.stopPropagation(),children:(0,X.jsx)(d6,{mode:o,onSet:n=>t(e,n)})}),(!r||a)&&(0,X.jsx)(`button`,{type:`button`,disabled:h===e,onClick:t=>{t.stopPropagation(),v(e)},className:`shrink-0 p-1 rounded text-muted-foreground/40 hover:text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-50 reveal-on-hover`,title:a?`Drop dataset "${e.slice(13)}" (DELETES its documents)`:`Delete bitmap "${e}" from database`,"aria-label":a?`Drop dataset ${e}`:`Delete bitmap ${e}`,children:h===e?(0,X.jsx)(Nt,{className:`w-3.5 h-3.5 animate-spin`}):(0,X.jsx)(ut,{className:`w-3.5 h-3.5`})})]},e)})})]},e))]})]})}function m6(){let{state:e,setToolsTab:t,saveFilters:n,clearFilters:r,hasActiveFilters:i,setLiveEnabled:a}=Ss(),{toolsTab:o,isDirty:s,isSaving:c,activeContextType:l,savedSearchQuery:u}=e,d=Xc(),f=new URLSearchParams(d.search).get(`q`)||new URLSearchParams(d.search).get(`search`)||``,p=l!==null&&f.trim()!==(u||``),m=l!==null&&(s||p);return(0,X.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,X.jsx)(`div`,{className:`flex border-b border-border shrink-0`,children:[{id:`features`,label:`Features`},{id:`timeline`,label:`Timeline`},{id:`map`,label:`Map`},{id:`lens`,label:`Lens`}].map(e=>(0,X.jsx)(`button`,{type:`button`,onClick:()=>t(e.id),className:G(`flex-1 py-2.5 text-xs transition-colors`,o===e.id?`-mb-px border-b-2 border-foreground font-semibold text-foreground`:`font-medium text-muted-foreground hover:text-foreground`),children:e.label},e.id))}),l===`context`&&(0,X.jsxs)(`div`,{className:`space-y-2 border-b border-border px-3 py-2 shrink-0`,children:[(0,X.jsxs)(`label`,{className:`flex min-h-10 cursor-pointer items-center justify-between gap-3 text-sm font-medium`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`span`,{className:G(`h-2 w-2 rounded-full`,e.liveEnabled?`bg-success`:`bg-muted-foreground`)}),`Live`]}),(0,X.jsx)(`input`,{type:`checkbox`,className:`h-5 w-5 accent-current`,checked:e.liveEnabled,disabled:new URLSearchParams(d.search).has(`ownerId`),onChange:e=>{a(e.target.checked)}})]}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.liveEnabled?`Filters and camera matches update every device bound to this context. Save to keep the current view.`:`Preview on this device. Turn on Live to update bound devices.`}),e.liveError&&(0,X.jsx)(`p`,{role:`status`,className:`text-xs text-destructive`,children:e.liveError})]}),(i||m)&&(0,X.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-b border-border px-3 py-1.5 shrink-0`,children:[i&&(0,X.jsxs)(`button`,{type:`button`,onClick:r,className:`flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,title:`Clear all active filters`,children:[(0,X.jsx)(Ne,{className:`w-3 h-3`}),`Clear`]}),m&&(0,X.jsxs)(`button`,{type:`button`,onClick:n,disabled:c,className:`flex items-center gap-1.5 rounded-md bg-primary px-2.5 py-1 text-xs text-primary-foreground transition-colors hover:bg-primary disabled:opacity-60`,children:[c?(0,X.jsx)(Nt,{className:`w-3 h-3 animate-spin`}):(0,X.jsx)(k,{className:`w-3 h-3`}),l===`context`&&e.liveEnabled?`Save current view`:`Save filters`]})]}),(0,X.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-hidden`,children:[o===`features`&&(0,X.jsx)(p6,{}),o===`timeline`&&(0,X.jsx)(i6,{}),o===`map`&&(0,X.jsx)(k3,{}),o===`lens`&&(0,X.jsx)(P3,{})]})]})}function h6({status:e}){return(0,X.jsx)(`span`,{className:G(`inline-block w-2 h-2 rounded-full shrink-0`,e===`active`?`bg-success`:e===`error`?`bg-destructive`:e===`starting`||e===`stopping`?`bg-warning`:`bg-muted-foreground`),title:e})}function g6(){let{openAgentT2:e}=Ss(),{setSection:t}=pS(),n=$c(),{agents:r,isLoading:i,refresh:a}=q2(!0),{showToast:o}=mo(),[s,c]=(0,Y.useState)(new Set),l=(e,t)=>c(n=>{let r=new Set(n);return t?r.add(e):r.delete(e),r}),u=async(e,t)=>{e.stopPropagation(),l(t.id,!0);try{await WT(t.id),a()}catch(e){o({title:`Error`,description:e instanceof Error?e.message:`Failed`,variant:`destructive`})}finally{l(t.id,!1)}},d=async(e,t)=>{e.stopPropagation(),l(t.id,!0);try{await GT(t.id),a()}catch(e){o({title:`Error`,description:e instanceof Error?e.message:`Failed`,variant:`destructive`})}finally{l(t.id,!1)}};return(0,X.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,X.jsx)(`div`,{className:`flex items-center justify-between px-4 h-12 border-b border-border shrink-0`,children:(0,X.jsx)(`span`,{className:`text-sm font-semibold`,children:`Agents`})}),(0,X.jsx)(`div`,{className:`flex-1 overflow-y-auto py-2`,children:i&&r.length===0?(0,X.jsx)(`div`,{className:`px-4 py-3 text-xs text-muted-foreground`,children:`Loading…`}):r.length===0?(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-12 text-muted-foreground`,children:[(0,X.jsx)(ft,{className:`w-8 h-8 opacity-30`}),(0,X.jsx)(`span`,{className:`text-xs`,children:`No agents yet`}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>{t(`agents`),n(`/agents?create=1`)},className:`text-xs text-primary hover:underline`,children:`Create an agent`})]}):(0,X.jsx)(`div`,{className:`space-y-1 px-2`,children:r.map(t=>{let n=s.has(t.id);return(0,X.jsxs)(`div`,{className:`group relative px-3 py-2.5 cursor-pointer transition-colors bg-card hover:bg-accent/50`,style:{borderLeft:`6px solid ${t.color||`transparent`}`},onClick:()=>e(t.id),children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(h6,{status:t.status}),(0,X.jsx)(`span`,{className:`text-sm font-medium flex-1 truncate`,children:t.label||t.name}),(0,X.jsx)(`div`,{className:`flex items-center gap-0.5 shrink-0 reveal-on-hover`,children:t.status===`active`?(0,X.jsx)(`button`,{type:`button`,disabled:n,onClick:e=>d(e,t),className:`flex items-center justify-center w-6 h-6 rounded hover:bg-muted-foreground/10 text-muted-foreground disabled:opacity-50`,title:`Stop`,children:(0,X.jsx)(rn,{className:`w-3 h-3`})}):(0,X.jsx)(`button`,{type:`button`,disabled:n,onClick:e=>u(e,t),className:`flex items-center justify-center w-6 h-6 rounded hover:bg-muted-foreground/10 text-muted-foreground disabled:opacity-50`,title:`Start`,children:(0,X.jsx)(Oe,{className:`w-3 h-3`})})})]}),t.description&&(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground truncate mt-0.5 pl-4`,children:t.description})]},t.id)})})})]})}function _6(){return(0,X.jsx)(`div`,{className:`flex h-full flex-col`,children:(0,X.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3 p-8 text-center`,children:[(0,X.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-full bg-muted`,children:(0,X.jsx)(en,{className:`h-5 w-5 text-muted-foreground`})}),(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:`No notifications yet`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This is where activity, agent updates, and alerts will appear once notifications are wired in.`})]})]})})}function v6(e){if(!e)return``;if(typeof e.errorMessage==`string`&&e.errorMessage.trim())return e.errorMessage.trim();let t=e.content;return typeof t==`string`?t:Array.isArray(t)&&t.filter(e=>e?.type===`text`&&typeof e.text==`string`).map(e=>e.text??``).join(`
94
94
  `)||``}function y6(e){let[t,n]=(0,Y.useState)([]),[r,i]=(0,Y.useState)(!1),[a,o]=(0,Y.useState)(null),s=(0,Y.useRef)(null),[c,l]=(0,Y.useState)(e);return c!==e&&(l(e),e||n([])),(0,Y.useEffect)(()=>{let t=!1;if(e)return MT(e).then(e=>{t||n(e.messages.map(e=>({role:e.role,content:e.content,isComplete:!0,...e.metadata?.reasoning?{reasoning:e.metadata.reasoning}:{},...e.metadata?{metadata:e.metadata}:{}})))}).catch(()=>{t||n([])}),()=>{t=!0}},[e]),{messages:t,isStreaming:r,error:a,send:(0,Y.useCallback)(async t=>{if(r||!t.trim()||!e)return;o(null),n(e=>[...e,{role:`user`,content:t,isComplete:!0},{role:`assistant`,content:``,isComplete:!1}]),i(!0);try{await WT(e)}catch(e){let t=e instanceof Error?e.message:void 0;if(!t?.includes(`not active`)&&!t?.includes(`already`)){o(t??`Failed to start agent`),i(!1);return}}s.current=new AbortController;let a=``,c=``,l=``,u;try{await J.stream(`${ni}/agents/${e}/prompt/stream`,{message:t},{signal:s.current.signal,onChunk:e=>{a+=e;let t=a.split(`