@augmentd-labs/canvas-web 2.15.4 → 2.15.8

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.
@@ -0,0 +1 @@
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{wt as t,xt as n}from"./react-DQazvoR7.js";import{Ct as r}from"./ui-BX_B5WCf.js";import{x as i}from"./alert-dialog-CI8w9egc.js";import{f as a,o}from"./blobs-DS4_Kfmr.js";import{_ as s,a as c,c as l,i as u,n as d,o as f,r as p,t as m}from"./text-documents-CXCOKgVf.js";import{pn as h}from"./workspace-DtHtsT4U.js";import{t as g}from"./EditorOverlay-Dqn7acGf.js";var _=e(t(),1),v=n();function y({doc:e,workspaceName:t,onSaved:n,onClose:y,onDetails:b}){let{showSuccessToast:x,showErrorToast:S}=o(),C=e.schema===a,w=u(e),T=w&&c(e),E=p(e)??`markdown`,D=l(t,e.id,{mode:`text`,enabled:w&&!T,maxTextLength:d,version:e.checksumArray?.[0]??null}),[O,k]=(0,_.useState)(C?String(e.data?.content??``):``),[A,j]=(0,_.useState)(null),M=`${e.id}:${e.checksumArray?.[0]??``}`;w&&D.text!=null&&A!==M&&(j(M),k(D.text));let[N,P]=(0,_.useState)(!1),F=C||D.text!=null&&!D.loading,I=async()=>{P(!0);try{C?await h(t,{id:e.id,schema:e.schema,schemaVersion:e.schemaVersion,data:{...e.data,content:O}}):await m(t,e,O),x(`Document saved`),window.dispatchEvent(new CustomEvent(`workspace:documents:refresh`)),n()}catch(e){S(e instanceof Error?e.message:`Failed to save document`)}finally{P(!1)}},L=C?String(e.data?.title??`Note`):s(e)||`document-${e.id}`;return(0,v.jsx)(g,{onClose:y,onDetails:b,title:(0,v.jsx)(`span`,{className:`truncate text-sm font-medium`,children:L}),actions:(0,v.jsxs)(i,{size:`sm`,onClick:I,disabled:N||!F||T,children:[(0,v.jsx)(r,{className:`mr-1.5 h-4 w-4`}),N?`Saving…`:`Save`]}),children:(0,v.jsx)(`div`,{className:`flex h-full min-h-0 flex-col px-4 py-4 md:px-8`,children:(0,v.jsx)(`div`,{className:`mx-auto flex min-h-0 w-full max-w-3xl flex-1 flex-col`,children:T?(0,v.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`This file is too large to edit here (`,`>`,Math.round(d/1e3),` kB) — download it instead.`]}):D.error?(0,v.jsx)(`p`,{className:`text-sm text-destructive`,children:D.error}):F?(0,v.jsx)(f,{kind:C?`markdown`:E,value:O,onChange:k,placeholder:C?`Write your note…`:void 0,fill:!0}):(0,v.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading content…`})})})})}export{y as default};
@@ -0,0 +1 @@
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{wt as t,xt as n}from"./react-DQazvoR7.js";import{A as r,D as i,E as a,M as o,N as s,O as c,P as l,j as u,k as d,yi as f}from"./ui-BX_B5WCf.js";import{i as p}from"./utils-BxVxyehK.js";import{t as m}from"./utils-2pl1SbIp.js";var h=e(t(),1),g=p([`inline-flex items-center justify-center gap-2 whitespace-nowrap`,`text-sm transition-colors`,`rounded-(--btn-radius) font-(number:--btn-font-weight)`,`focus-ring`,`disabled:pointer-events-none disabled:opacity-50`,`[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0`],{variants:{variant:{default:`bg-primary text-primary-foreground shadow-elevation-1 hover:bg-primary/90`,destructive:`bg-destructive text-destructive-foreground shadow-elevation-1 hover:bg-destructive/90`,outline:`border-(length:--btn-border-width) border-input bg-background shadow-elevation-1 hover:bg-accent hover:text-accent-foreground`,secondary:`bg-secondary text-secondary-foreground shadow-elevation-1 hover:bg-secondary/80`,ghost:`hover:bg-accent hover:text-accent-foreground`,link:`text-primary underline-offset-4 hover:underline`},size:{default:`h-(--btn-height) px-(--btn-padding-x)`,sm:`h-control-sm rounded-(--btn-radius) px-3 text-xs`,lg:`h-control-lg rounded-(--btn-radius) px-8`,icon:`h-(--btn-height) w-(--btn-height)`}},defaultVariants:{variant:`default`,size:`default`}}),_=n(),v=h.forwardRef(({className:e,variant:t,size:n,asChild:r=!1,...i},a)=>(0,_.jsx)(r?f:`button`,{className:m(g({variant:t,size:n,className:e})),ref:a,...i}));v.displayName=`Button`;var y=h.forwardRef(({className:e,type:t,...n},r)=>(0,_.jsx)(`input`,{type:t,className:m(`flex w-full bg-transparent px-3 py-1 text-base transition-colors md:text-sm`,`h-(--input-height) rounded-(--input-radius)`,`border-(length:--input-border-width) border-input shadow-elevation-1`,`file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground`,`placeholder:text-muted-foreground`,`focus-ring`,`disabled:cursor-not-allowed disabled:opacity-50`,e),ref:r,...n}));y.displayName=`Input`;function b(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&Object.prototype.hasOwnProperty.call(e,`status`)&&Object.prototype.hasOwnProperty.call(e,`payload`)}var ee=`/rest/v2`,te=3e4,ne=`X-App-Name`,x=`.workspace`;Object.freeze([`**/.*`,`**/.*/**`,`**/node_modules/**`,`**/__pycache__/**`,`**/bower_components/**`,`**/vendor/bundle/**`,`**/target/debug/**`,`**/target/release/**`,`**/*.swp`,`**/*.tmp`,`**/Cache/**`,`**/Caches/**`,`**/CachedData/**`]),Object.freeze([x,`${x}/**`]);function re(e){return String(e||``).replace(/^\/+/,``).split(`/`).map(encodeURIComponent).join(`/`)}function ie(e){let t=String(e||`/`);return t.startsWith(`/`)?t:`/${t}`}var S={login:()=>`/auth/login`,logout:()=>`/auth/logout`,me:()=>`/auth/me`,status:()=>`/auth/status`,tokens:()=>`/auth/tokens`,token:e=>`/auth/tokens/${e}`,tokenRefresh:()=>`/auth/token/refresh`,devices:()=>`/auth/devices`,device:e=>`/auth/devices/${e}`,deviceRegister:()=>`/auth/devices/register`},C={collection:()=>`/workspaces`,byId:e=>`/workspaces/${e}`,start:e=>`/workspaces/${e}/start`,stop:e=>`/workspaces/${e}/stop`,status:e=>`/workspaces/${e}/status`,stats:e=>`/workspaces/${e}/stats`,tree:e=>`/workspaces/${e}/tree`,trees:e=>`/workspaces/${e}/trees`,treePath:(e,t,n)=>`/workspaces/${e}/trees/${encodeURIComponent(t)}/path${ie(n)}`,pins:e=>`/workspaces/${e}/pins`,pin:(e,t)=>`/workspaces/${e}/pins/${encodeURIComponent(t)}`,pinsOrder:e=>`/workspaces/${e}/pins/order`,documents:e=>`/workspaces/${e}/documents`,documentsRemove:e=>`/workspaces/${e}/documents/remove`,treeByName:(e,t)=>`/workspaces/${e}/trees/${t}`,blobs:e=>`/workspaces/${e}/blobs`,dotfiles:e=>`/workspaces/${e}/dotfiles`,dotfilesStatus:e=>`/workspaces/${e}/dotfiles/status`,dotfilesInit:e=>`/workspaces/${e}/dotfiles/init`,backends:(e,t=null)=>`/workspaces/${e}/backends${t?`/${encodeURIComponent(t)}`:``}`,backend:(e,t,n)=>`/workspaces/${e}/backends/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,backendSync:(e,t,n)=>`${C.backend(e,t,n)}/sync`,backendUsage:(e,t,n)=>`${C.backend(e,t,n)}/usage`,backendDocuments:(e,t,n)=>`${C.backend(e,t,n)}/documents`,backendObjects:(e,t,n)=>`${C.backend(e,t,n)}/objects`,backendObject:(e,t,n,r)=>`${C.backend(e,t,n)}/objects/${re(r)}`,backendObjectRename:(e,t,n)=>`${C.backend(e,t,n)}/objects/rename`,backendChanges:(e,t,n)=>`${C.backend(e,t,n)}/changes`,mirrors:e=>`/workspaces/${e}/mirrors`,mirror:(e,t)=>`/workspaces/${e}/mirrors/${encodeURIComponent(t)}`,mirrorStatus:(e,t)=>`${C.mirror(e,t)}/status`,syncConflicts:e=>`/workspaces/${e}/sync/conflicts`,syncConflictResolve:(e,t)=>`/workspaces/${e}/sync/conflicts/${t}/resolve`,hooks:e=>`/workspaces/${e}/hooks`,hook:(e,t)=>`/workspaces/${e}/hooks/${t}`,hookRuns:e=>`/workspaces/${e}/hooks/runs`,hookReplay:(e,t)=>`/workspaces/${e}/hooks/runs/${t}/replay`,hooksExplain:e=>`/workspaces/${e}/hooks/explain`,hooksBackfill:e=>`/workspaces/${e}/hooks/backfill`},ae={collection:()=>`/contexts`,byId:e=>`/contexts/${e}`,tree:e=>`/contexts/${e}/tree`,treePaths:e=>`/contexts/${e}/tree/paths`,documents:e=>`/contexts/${e}/documents`,document:(e,t)=>`/contexts/${e}/documents/${t}`,documentsRemove:e=>`/contexts/${e}/documents/remove`,blobs:e=>`/contexts/${e}/blobs`,dotfiles:e=>`/contexts/${e}/dotfiles`,url:e=>`/contexts/${e}/url`},w={collection:()=>`/agents`,byId:e=>`/agents/${e}`,status:e=>`/agents/${e}/status`,prompt:e=>`/agents/${e}/prompt`},T={collection:()=>`/roles`,byId:e=>`/roles/${e}`},oe=()=>`/ping`,E=class extends Error{constructor(e,{code:t,statusCode:n,status:r,cause:i,retryable:a,reason:o,stoppedAt:s,hint:c}={}){super(e),this.name=`CanvasError`,this.code=t||`CANVAS_ERROR`,this.statusCode=n??r,this.status=r??n,i&&(this.cause=i),Object.assign(this,{retryable:a,reason:o,stoppedAt:s,hint:c})}},se=new Set([`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`ECONNRESET`,`EAI_AGAIN`,`EPIPE`,`UND_ERR_CONNECT_TIMEOUT`,`UND_ERR_SOCKET`]),ce=new Set([`ConnectionRefused`,`ConnectionClosed`,`FailedToOpenSocket`,`DNSException`,`Timeout`]);function D(e,t=new Set,n=0){if(!e||typeof e!=`object`||n>6)return t;if(typeof e.code==`string`&&t.add(e.code),Array.isArray(e.errors))for(let r of e.errors)D(r,t,n+1);return e.cause&&D(e.cause,t,n+1),t}function le(e){for(let t of D(e))if(se.has(t)||ce.has(t))return!0;return!1}function ue(e){if(!b(e))return e;if(e.status===`error`){let t=e.message||`Request failed`,n=typeof e.payload==`string`?e.payload.trim():``;throw new E(n&&!t.includes(n)?`${t}: ${n}`:t,{retryable:e.retryable,reason:e.reason,stoppedAt:e.stoppedAt,hint:e.hint,code:e.code,statusCode:e.statusCode,status:e.statusCode})}return e.payload}function de(e){let t=e[Symbol.asyncIterator]();return new ReadableStream({async pull(e){let{value:n,done:r}=await t.next();if(r){e.close();return}e.enqueue(typeof n==`string`?new TextEncoder().encode(n):n)},cancel(e){return t.return?t.return(e).then(()=>void 0):void 0}})}var fe=e=>!!e&&typeof e==`object`&&typeof e.pipe==`function`&&typeof e[Symbol.asyncIterator]==`function`;function pe(e){return e==null?{}:typeof e==`string`||typeof Blob<`u`&&e instanceof Blob||e instanceof ArrayBuffer||ArrayBuffer.isView(e)||typeof URLSearchParams<`u`&&e instanceof URLSearchParams?{body:e}:typeof ReadableStream<`u`&&e instanceof ReadableStream?{body:e,duplex:`half`}:fe(e)?{body:de(e),duplex:`half`}:{body:JSON.stringify(e),isJson:!0}}function me(e){return{login:t=>e.post(S.login(),{strategy:`auto`,...t}),logout:()=>e.post(S.logout()),me:()=>e.get(S.me()),status:()=>e.get(S.status()),tokens:{list:()=>e.get(S.tokens()),create:t=>e.post(S.tokens(),t),delete:t=>e.delete(S.token(t)),update:(t,n)=>e.put(S.token(t),n)},devices:{register:t=>e.post(S.deviceRegister(),t),list:()=>e.get(S.devices()),update:(t,n)=>e.patch(S.device(t),n),remove:t=>e.delete(S.device(t))}}}var O=C;function he(e){return{list:()=>e.get(O.collection()),get:t=>e.get(O.byId(t)),create:t=>e.post(O.collection(),t),update:(t,n)=>e.put(O.byId(t),n),delete:t=>e.delete(O.byId(t)),start:(t,n={})=>e.post(O.start(t),n),stop:t=>e.post(O.stop(t)),status:t=>e.get(O.status(t)),stats:t=>e.get(O.stats(t)),tree:t=>e.get(O.tree(t)),trees:t=>e.get(O.trees(t)),removeTreePath:(t,n,r,{recursive:i=!1,purge:a=!1,destroy:o=!1}={})=>e.delete(O.treePath(t,n,r),{params:{recursive:i,...a?{purge:!0}:{},...o?{destroy:!0}:{}}}),documents:(t,n)=>e.get(O.documents(t),{params:n}),insertDocuments:(t,n)=>e.post(O.documents(t),n),uploadBlob:(t,n)=>e.request(`POST`,O.blobs(t),{data:n,headers:{"Content-Type":`application/octet-stream`}}),dotfiles:{list:(t,n)=>e.get(O.dotfiles(t),{params:n}),create:(t,n,r={})=>e.post(O.dotfiles(t),{dotfiles:Array.isArray(n)?n:[n],...r}),update:(t,n,r={})=>e.put(O.dotfiles(t),{documents:n,...r}),delete:(t,n)=>e.delete(O.dotfiles(t),{data:n}),status:t=>e.get(O.dotfilesStatus(t)),init:t=>e.post(O.dotfilesInit(t))},backends:{list:(t,n=null)=>e.get(O.backends(t,n)),get:(t,n,r)=>e.get(O.backend(t,n,r)),add:(t,n,r)=>e.post(O.backends(t,n),r),update:(t,n,r,i)=>e.patch(O.backend(t,n,r),i),remove:(t,n,r)=>e.delete(O.backend(t,n,r)),sync:(t,n,r)=>e.post(O.backendSync(t,n,r)),usage:(t,n,r)=>e.get(O.backendUsage(t,n,r)),documents:(t,n,r,i={})=>e.get(O.backendDocuments(t,n,r),{params:i}),objects:(t,n,r,i={})=>e.get(O.backendObjects(t,n,r),{params:i}),changes:(t,n,r,i={})=>e.get(O.backendChanges(t,n,r),{params:i}),putObject:(t,n,r,i,a,{headers:o={},params:s}={})=>e.request(`PUT`,O.backendObject(t,n,r,i),{data:a,...s?{params:s}:{},headers:{"Content-Type":`application/octet-stream`,...o}}),deleteObject:(t,n,r,i,{ifMatch:a,origin:o}={})=>e.delete(O.backendObject(t,n,r,i),{headers:{...a?{"If-Match":a}:{},...o?{"X-Canvas-Origin":o}:{}}}),renameObject:(t,n,r,i)=>e.post(O.backendObjectRename(t,n,r),i)},sync:{mirrors:t=>e.get(O.mirrors(t)),reportMirror:(t,n,r)=>e.post(O.mirrorStatus(t,n),r),forgetMirror:(t,n)=>e.delete(O.mirror(t,n)),conflicts:t=>e.get(O.syncConflicts(t)),resolveConflict:(t,n,r)=>e.post(O.syncConflictResolve(t,n),{keep:r})},hooks:{list:t=>e.get(O.hooks(t)),get:(t,n)=>e.get(O.hook(t,n)),set:(t,n,r)=>e.put(O.hook(t,n),{content:r}),delete:(t,n)=>e.delete(O.hook(t,n)),runs:(t,n={})=>e.get(O.hookRuns(t),{params:n}),explain:(t,n)=>e.post(O.hooksExplain(t),n),backfill:(t,n)=>e.post(O.hooksBackfill(t),n),replay:(t,n)=>e.post(O.hookReplay(t,n))}}}var k=ae;function ge(e){return{list:()=>e.get(k.collection()),get:t=>e.get(k.byId(t)),create:t=>e.post(k.collection(),t),update:(t,n)=>e.put(k.byId(t),n),delete:t=>e.delete(k.byId(t)),tree:t=>e.get(k.tree(t)),documents:(t,n)=>e.get(k.documents(t),{params:n}),insertDocuments:(t,n)=>e.post(k.documents(t),n),uploadBlob:(t,n)=>e.request(`POST`,k.blobs(t),{data:n,headers:{"Content-Type":`application/octet-stream`}}),dotfiles:t=>e.get(k.dotfiles(t)),url:t=>e.get(k.url(t)),setUrl:(t,n)=>e.post(k.url(t),{url:n})}}function _e(e){return{list:()=>e.get(w.collection()),get:t=>e.get(w.byId(t)),status:t=>e.get(w.status(t)),prompt:(t,n)=>e.post(w.prompt(t),n)}}function ve(e){return{list:()=>e.get(T.collection()),get:t=>e.get(T.byId(t))}}function ye(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e||{}))if(r!=null){if(Array.isArray(r))for(let e of r)e!=null&&t.append(n,String(e));else t.append(n,String(r))}return t}function be(e){let t=null,n=e;for(let e=0;n&&typeof n==`object`&&e<6;e++){if(typeof n.code==`string`&&(t=n),Array.isArray(n.errors)&&n.errors.length){let e=n.errors.find(e=>e&&typeof e.code==`string`);e&&(t=e)}n=n.cause}return t}var xe=class{constructor({baseUrl:e,apiBase:t=ee,getToken:n,token:r,timeout:i=te,userAgent:a,appName:o,headers:s={},unwrap:c=!0,fetch:l}={}){if(!e)throw new E(`baseUrl is required`);this.baseUrl=String(e).replace(/\/$/,``),this.apiBase=t,this.getToken=n||(()=>r||null),this.timeout=i,this.userAgent=a,this.appName=o,this.defaultHeaders=s,this.unwrapEnvelopes=c,this._fetch=l||((...e)=>globalThis.fetch(...e)),this.auth=me(this),this.workspaces=he(this),this.contexts=ge(this),this.agents=_e(this),this.roles=ve(this)}async request(e,t,{params:n,data:r,headers:i,timeout:a,signal:o}={}){let s=new URL(this.baseUrl+this.apiBase+t),c=ye(n);for(let[e,t]of c)s.searchParams.append(e,t);let{body:l,duplex:u,isJson:d}=pe(r),f={...this.defaultHeaders,...i||{}},p=e=>Object.keys(f).some(t=>t.toLowerCase()===e);d&&!p(`content-type`)&&(f[`Content-Type`]=`application/json`),this.userAgent&&!p(`user-agent`)&&(f[`User-Agent`]=this.userAgent),this.appName&&!p(`x-app-name`)&&(f[ne]=this.appName);let m=this.getToken();m&&!p(`authorization`)&&(f.Authorization=`Bearer ${m}`);let h=a??this.timeout,g=[];h&&g.push(AbortSignal.timeout(h)),o&&g.push(o);let _=g.length>1?AbortSignal.any(g):g[0],v;try{v=await this._fetch(s,{method:e,headers:f,...l===void 0?{}:{body:l},...u?{duplex:u}:{},..._?{signal:_}:{}})}catch(e){if(e?.name===`TimeoutError`||e?.cause?.name===`TimeoutError`)throw new E(`Request timed out after ${h}ms`,{code:`TIMEOUT`,cause:e});if(e?.name===`AbortError`)throw new E(`Request aborted`,{code:`ABORTED`,cause:e});let t=be(e)||e.cause||e;throw new E(t?.message||e.message||`Request failed`,{cause:t})}let y=await this._parseBody(v);if(b(y))return y.status===`error`||this.unwrapEnvelopes?ue(y):y;if(v.ok)return y;throw new E(y&&typeof y==`object`&&y.message||(typeof y==`string`&&y.trim()?y.trim().slice(0,200):``)||`HTTP ${v.status}${v.statusText?` ${v.statusText}`:``}`,{statusCode:v.status,status:v.status})}async _parseBody(e){if(e.status===204)return null;let t=e.headers.get(`content-type`)||``,n=await e.text();if(!n)return null;if(t.includes(`application/json`))try{return JSON.parse(n)}catch(t){throw new E(`Invalid JSON in response`,{statusCode:e.status,status:e.status,cause:t})}return n}get(e,t){return this.request(`GET`,e,t)}post(e,t,n){return this.request(`POST`,e,{...n,data:t??{}})}put(e,t,n){return this.request(`PUT`,e,{...n,data:t??{}})}patch(e,t,n){return this.request(`PATCH`,e,{...n,data:t??{}})}delete(e,t){return this.request(`DELETE`,e,t)}ping(){return this.get(oe())}};function Se(){return`${window.location.origin}/rest/v2`}var A=Se(),j=A.split(`/rest`)[0],Ce={login:`${A}/auth/login`,register:`${A}/auth/register`,logout:`${A}/auth/logout`,me:`${A}/auth/me`,authConfig:`${A}/auth/config`,verifyEmailRequest:`${A}/auth/verify-email`,tokens:`${A}/auth/tokens`,users:`${A}/users`,currentUser:`${A}/auth/me`,workspaces:`${A}/workspaces`,contexts:`${A}/contexts`,inferd:`${A}/inferd`,admin:{users:`${A}/admin/users`,workspaces:`${A}/admin/workspaces`,logs:`${A}/admin/logs`,logsStream:`${A}/admin/logs/stream`,inferd:`${A}/admin/inferd`,authConfig:`${A}/admin/auth-config`},roles:`${A}/roles`,roleTemplates:`${A}/role-templates`,devices:`${A}/auth/devices`,ws:j},M=null;function we(e){M=e}function Te(e,t){e.message.includes(`socket.io`)||e.message.includes(`websocket`)||(console.error(`API Error:`,e,t),M&&M(e,t))}function Ee(e,t){return!e.statusCode&&e.code!==`ABORTED`&&e.code!==`TIMEOUT`&&(t||/fetch failed|failed to fetch|networkerror|load failed/i.test(e.message))}var N=typeof navigator<`u`&&navigator.onLine===!1,P=new Set;function F(e){if(N!==e){N=e;for(let e of P)e(N)}}function De(){return N}function I(){F(!0)}function L(){F(!1)}var Oe=/Network error:/i;function ke(e){return e!=null&&Oe.test(e)}function Ae(e){return P.add(e),()=>{P.delete(e)}}typeof window<`u`&&window.addEventListener(`offline`,()=>F(!0));var R=!1;function z(){let e=localStorage.getItem(`appName`);return e||(e=window.location.hostname,localStorage.setItem(`appName`,e)),e}function B(e){e&&localStorage.removeItem(`authToken`),R=!0,window.location.pathname.includes(`/login`)||(window.location.href=`/login`)}function V(){return localStorage.getItem(`authToken`)}function H(e){return e?e.startsWith(`canvas-`)&&e.length>10?!0:/^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$/.test(e):!1}function U(e,t){if(R&&!e&&!t)throw Error(`Authentication required`);if(e)return;let n=V();if(!n)throw console.warn(`Attempting authenticated request without token`),t||B(!1),Error(`Authentication required`);if(!H(n))throw console.warn(`Invalid token format detected, clearing`),t||B(!0),Error(`Invalid authentication token format`)}function W(e){throw!e&&!R&&(console.error(`Authentication failed, redirecting to login`),B(!0)),Error(`Authentication required`)}function je(e){if(e.startsWith(A))return e.slice(A.length);if(e.startsWith(`http`))throw Error(`api.* endpoints must live under API_URL (${A}); got ${e}`);return e}var Me=(e,t={})=>fetch(e,{...t,credentials:`include`}).then(e=>(e.headers.get(`x-canvas-offline`)===`fallback`?I():L(),e),e=>{throw!t.signal?.aborted&&!(e instanceof Error&&e.name===`AbortError`)&&I(),e});function G(e,t){return new xe({baseUrl:A,apiBase:``,getToken:e?V:()=>null,appName:z(),timeout:0,unwrap:!t,fetch:Me})}var K={authed:G(!0,!1),anon:G(!1,!1),authedEnvelope:G(!0,!0),anonEnvelope:G(!1,!0)};function Ne(e,t){return t?e?K.anonEnvelope:K.authedEnvelope:e?K.anon:K.authed}async function q(e,t,n,r={}){let{skipAuth:i=!1,noAuthRedirect:a=!1,envelope:o=!1,headers:s,signal:c,body:l}=r;U(i,a);let u=Ne(i,o);try{let r=await u.request(e,je(t),{data:n===void 0?l??void 0:n,headers:s,signal:c??void 0});return R=!1,r===null?void 0:r}catch(n){if(n instanceof E){if(n.code===`WORKSPACE_STOPPED`)throw n;if(n.code===`ABORTED`)throw new DOMException(`Request aborted`,`AbortError`);if(n.statusCode===401&&!i&&W(a),Ee(n,le(n)))throw Error(`Network error: server unreachable. Check your connection and try again.`)}throw console.error(`API Error: ${t}`,n),n instanceof Error&&Te(n,`${e} ${t}`),n}}var Pe={async get(e,t={}){return q(`GET`,e,void 0,t)},async post(e,t,n={}){return q(`POST`,e,t,n)},async put(e,t,n={}){return q(`PUT`,e,t,n)},async patch(e,t,n={}){return q(`PATCH`,e,t,n)},async delete(e,t={}){return q(`DELETE`,e,void 0,t)},async getEnvelope(e,t={}){return q(`GET`,e,void 0,{...t,envelope:!0})},async postEnvelope(e,t,n={}){return q(`POST`,e,t,{...n,envelope:!0})},setAuthToken(e){if(!e){console.warn(`Attempted to set empty auth token`);return}if(!H(e)){console.error(`Attempted to set invalid token format:`,e.substring(0,10)+`...`);return}localStorage.setItem(`authToken`,e),console.log(`Auth token set successfully`),R=!1},clearAuthToken(){localStorage.removeItem(`authToken`),console.log(`Auth token cleared`)},isAuthenticated(){let e=V();return!!e&&H(e)},async stream(e,t,n={}){let{onOpen:r,onChunk:i,onError:a,onComplete:o,signal:s}=n;try{U(!1,!1);let n=V(),a,c={"X-App-Name":z(),...n?{Authorization:`Bearer ${n}`}:{}};t!==void 0&&(typeof t==`object`&&t&&!(t instanceof FormData)&&!(t instanceof URLSearchParams)&&!(t instanceof Blob)?(a=JSON.stringify(t),c[`Content-Type`]=`application/json`):a=t);let l=e.startsWith(`http`)?e:`${A}${e}`,u=await fetch(l,{method:`POST`,credentials:`include`,headers:c,body:a,signal:s});if(!u.ok){u.status===401&&W(!1);let e=null;try{e=await u.json()}catch{}let t=e?.message||e?.error||u.statusText||`Request failed`;throw Error(`HTTP ${u.status}: ${t}`)}if(R=!1,r?.(),!u.body)throw Error(`Response body is null - streaming not supported`);if(typeof u.body.getReader!=`function`){console.warn(`ReadableStream.getReader not available, falling back to text response`);let e=await u.text();i&&i(e),o&&o();return}let d=u.body.getReader(),f=new TextDecoder;try{for(;;){if(s?.aborted)throw d.cancel(),Error(`Stream aborted`);let{done:e,value:t}=await d.read();if(e){o&&o();break}let n=f.decode(t,{stream:!0});n&&i&&i(n)}}finally{d.releaseLock()}}catch(e){throw console.error(`Streaming error:`,e),a&&a(e instanceof Error?e:Error(String(e))),e}}},Fe=o,Ie=l,Le=u,J=h.forwardRef(({className:e,...t},n)=>(0,_.jsx)(r,{className:m(`fixed inset-0 z-50 bg-scrim data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,e),...t,ref:n}));J.displayName=r.displayName;var Y=h.forwardRef(({className:e,...t},n)=>(0,_.jsxs)(Le,{children:[(0,_.jsx)(J,{}),(0,_.jsx)(c,{ref:n,className:m(`fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-elevation-3 duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg`,e),...t})]}));Y.displayName=c.displayName;var X=({className:e,...t})=>(0,_.jsx)(`div`,{className:m(`flex flex-col space-y-2 text-center sm:text-left`,e),...t});X.displayName=`AlertDialogHeader`;var Z=({className:e,...t})=>(0,_.jsx)(`div`,{className:m(`flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2`,e),...t});Z.displayName=`AlertDialogFooter`;var Q=h.forwardRef(({className:e,...t},n)=>(0,_.jsx)(s,{ref:n,className:m(`text-lg font-semibold`,e),...t}));Q.displayName=s.displayName;var $=h.forwardRef(({className:e,...t},n)=>(0,_.jsx)(d,{ref:n,className:m(`text-sm text-muted-foreground`,e),...t}));$.displayName=d.displayName;var Re=h.forwardRef(({className:e,...t},n)=>(0,_.jsx)(a,{ref:n,className:m(g(),e),...t}));Re.displayName=a.displayName;var ze=h.forwardRef(({className:e,...t},n)=>(0,_.jsx)(i,{ref:n,className:m(g({variant:`outline`}),`mt-2 sm:mt-0`,e),...t}));ze.displayName=i.displayName;export{Ce as _,$ as a,y as b,Q as c,ke as d,De as f,we as g,L as h,Y as i,Ie as l,I as m,Re as n,Z as o,Ae as p,ze as r,X as s,Fe as t,Pe as u,A as v,v as x,j as y};
@@ -0,0 +1 @@
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{wt as t}from"./react-DQazvoR7.js";import{_ as n,u as r}from"./alert-dialog-CI8w9egc.js";var i=e(t(),1),a=(0,i.createContext)(void 0);function o(){let e=(0,i.useContext)(a);if(e===void 0)throw Error(`useToast must be used within a ToastContainer`);return e}var s=`data/schema/note`,c=`data/schema/link`,l=`data/schema/tab`,u=`data/schema/file`,d=`data/schema/drawing`,f=`data/schema/message/email`,p=`data/schema/task`,m=`data/schema/identity`;function h(e,t){return e.startsWith(`${t}/`)?e.slice(t.length+1):``}var g={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,bmp:`image/bmp`,svg:`image/svg+xml`,avif:`image/avif`,heic:`image/heic`,heif:`image/heif`,mp3:`audio/mpeg`,wav:`audio/wav`,ogg:`audio/ogg`,oga:`audio/ogg`,m4a:`audio/mp4`,flac:`audio/flac`,aac:`audio/aac`,mp4:`video/mp4`,m4v:`video/mp4`,webm:`video/webm`,mov:`video/quicktime`,mkv:`video/x-matroska`,avi:`video/x-msvideo`,ogv:`video/ogg`,pdf:`application/pdf`,md:`text/markdown`,markdown:`text/markdown`,txt:`text/plain`,json:`application/json`,xml:`application/xml`,csv:`text/csv`,log:`text/plain`,yml:`text/yaml`,yaml:`text/yaml`};function _(e){let t=/\.([a-z0-9]+)$/i.exec(e||``);return t?t[1].toLowerCase():``}function v(e){return g[_(e)]}function y(e){return e.startsWith(`image/`)?`image`:e.startsWith(`audio/`)?`audio`:e.startsWith(`video/`)?`video`:e===`application/pdf`?`pdf`:e.startsWith(`text/`)||e.endsWith(`+json`)||e===`application/json`||e===`application/xml`?`text`:null}function b(e,t){if(e===`text/markdown`||/\.(md|markdown)$/i.test(t||``))return`markdown`;if(e&&e!==`application/octet-stream`){let t=y(e);if(t)return t}let n=v(t);if(n){let e=y(n);if(e)return e}return`binary`}function x(e){if(!e)return null;try{let t=new URL(e),n=t.hostname.replace(/^www\.|^m\./,``);if(n===`youtu.be`)return t.pathname.slice(1).split(`/`)[0]||null;if(n===`youtube.com`||n===`youtube-nocookie.com`){if(t.pathname===`/watch`)return t.searchParams.get(`v`);let e=t.pathname.match(/^\/(shorts|embed|live)\/([^/]+)/);if(e)return e[2]}return null}catch{return null}}function S(){let{showToast:e}=o();return{showErrorToast:(t,n=`Error`)=>e({title:n,description:t,variant:`destructive`}),showSuccessToast:(t,n=`Success`)=>e({title:n,description:t})}}async function C(e,t){return r.post(`${n.workspaces}/${e}/blobs`,t,{headers:{"Content-Type":`application/octet-stream`}})}async function w(e,t){return r.post(`${n.workspaces}/${e}/blobs/exists`,{checksums:t})}async function T(e,t,i,{ifMatch:a,contentType:o}={}){let s=t.key.split(`/`).map(encodeURIComponent).join(`/`),c=`${n.workspaces}/${encodeURIComponent(e)}/backends/${encodeURIComponent(t.driver)}/${encodeURIComponent(t.address)}/objects/${s}`;return r.put(c,i,{headers:{"Content-Type":o||`application/octet-stream`,"X-Canvas-Mtime":String(Date.now()),...a?{"If-Match":`"${a}"`}:{"If-None-Match":`*`}}})}function E(e,t,{onProgress:r,signal:i}={}){return O(`${n.workspaces}/${e}/blobs`,`POST`,t,{onProgress:r,signal:i})}function D(e,t,r,i={}){let a=t.key.split(`/`).map(encodeURIComponent).join(`/`);return O(`${n.workspaces}/${encodeURIComponent(e)}/backends/${encodeURIComponent(t.driver)}/${encodeURIComponent(t.address)}/objects/${a}`,`PUT`,r,i,{"If-None-Match":`*`,"X-Canvas-Mtime":String(r.lastModified)})}function O(e,t,n,{onProgress:r,signal:i},a={}){return new Promise((o,s)=>{if(i?.aborted){s(new DOMException(`Upload aborted`,`AbortError`));return}let c=new XMLHttpRequest;c.open(t,e),c.withCredentials=!0,c.responseType=`json`,c.setRequestHeader(`Content-Type`,`application/octet-stream`);for(let[e,t]of Object.entries(a))c.setRequestHeader(e,t);let l=localStorage.getItem(`authToken`);l&&c.setRequestHeader(`Authorization`,`Bearer ${l}`),r&&c.upload.addEventListener(`progress`,e=>{e.lengthComputable&&r(e.loaded,e.total)});let u=()=>c.abort();i?.addEventListener(`abort`,u,{once:!0}),c.addEventListener(`load`,()=>{i?.removeEventListener(`abort`,u);let e=c.response;c.status>=200&&c.status<300&&e?.payload?o(e.payload):s(Error(c.status===412?`A file with this name already exists. Rename the file before uploading; nothing was overwritten.`:e?.message||`Upload failed (HTTP ${c.status})`))}),c.addEventListener(`error`,()=>{i?.removeEventListener(`abort`,u),s(Error(`Network error during upload`))}),c.addEventListener(`abort`,()=>{i?.removeEventListener(`abort`,u),s(new DOMException(`Upload aborted`,`AbortError`))}),c.send(n)})}export{x as _,T as a,f as c,c as d,s as f,h as g,b as h,E as i,u as l,p as m,D as n,S as o,l as p,C as r,d as s,w as t,m as u,a as v,o as y};