@bud.sh/app 0.2.0 → 0.4.0
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.
- package/dist/client/assets/bud/design.js +1 -1
- package/dist/client/assets/canvas-C8hyPWoT.js +1 -0
- package/dist/client/assets/difference-worker-BfF4_N3e.js +8 -0
- package/dist/client/assets/files-D_Tm7gCK.js +1 -0
- package/dist/client/assets/i18n-BtfXum8P.js +1 -0
- package/dist/client/assets/index-Dpxjiok1.js +2 -0
- package/dist/client/assets/pages-B-_CKvDS.js +1 -0
- package/dist/client/assets/project-branches-DzXdaT9L.js +1 -0
- package/dist/client/assets/project-comments-CQkB2jbE.js +1 -0
- package/dist/client/assets/project-thread-links-BN7zL0AX.js +1 -0
- package/dist/client/assets/{project-threads-DezXiVK6.js → project-threads-CHGG-6fo.js} +104 -104
- package/dist/client/assets/{project-work-CB1JHqGW.js → project-work-L5fYMSOu.js} +1 -1
- package/dist/client/assets/task-design-DYqcqq1b.js +23 -0
- package/dist/client/assets/tasks-A2FKo3_h.js +1 -0
- package/dist/client/assets/tasks-request-DGigNdyK.js +1 -0
- package/dist/client/assets/workspace-CvWmU2RK.js +2 -0
- package/dist/client/index.html +2 -1
- package/dist/hosted/assets/{canvas-C69-96GR.js → canvas-MWtOwaWm.js} +69 -41
- package/dist/hosted/assets/{comment-data-CiDuvXi2.js → comment-data-DsgJWq4n.js} +7195 -1067
- package/dist/hosted/assets/{files-DQL5hzs3.js → files-Wvo11G2A.js} +92 -89
- package/dist/hosted/assets/{pages-DFs7jB6M.js → pages-BAmRFVtU.js} +31 -22
- package/dist/hosted/assets/{project-branches-CffV4IS1.js → project-branches-BNloVosX.js} +5 -5
- package/dist/hosted/assets/{project-thread-links-B1Y2bDUx.js → project-thread-links-BmY8HQXt.js} +12 -12
- package/dist/hosted/assets/{screen-BroBb1Z_.js → screen-QmqmI2Aq.js} +18 -18
- package/dist/hosted/assets/{tasks-mzmNhe2d.js → tasks-C8iWPrWg.js} +29 -29
- package/dist/hosted/assets/{tasks-request-Dcrpd2_8.js → tasks-request-C89fN1dK.js} +7 -7
- package/dist/hosted/hosted.js +159 -31
- package/dist/node/design.js +6235 -139
- package/dist/node/index.js +99 -2
- package/dist/node-host/assets/{canvas-BZhzizzt.js → canvas-D_F8SIlm.js} +70 -42
- package/dist/node-host/assets/{comment-data-nUlI0szN.js → comment-data-q_8INiZz.js} +7221 -1093
- package/dist/node-host/assets/{files-CTzcWGjb.js → files-xazOrNCX.js} +92 -89
- package/dist/node-host/assets/{pages-0aWH7z1j.js → pages-D6VkmdfQ.js} +31 -22
- package/dist/node-host/assets/{project-branches-1zs_0J_y.js → project-branches-C26hwmo3.js} +5 -5
- package/dist/node-host/assets/{project-thread-links-LpUAGcDr.js → project-thread-links-BOzjws5W.js} +12 -12
- package/dist/node-host/assets/{screen-DQoTOWYR.js → screen-Dog-YByu.js} +18 -18
- package/dist/node-host/assets/{tasks-C0WqnM7Q.js → tasks-A1_bpb3_.js} +30 -30
- package/dist/node-host/assets/{tasks-request-Bwky5ORf.js → tasks-request-Bie1PpQP.js} +7 -7
- package/dist/node-host/node-host.js +1765 -1630
- package/dist/server/assets/{branch-previews-C_TVt_HQ.js → branch-previews-ClkoJ0lM.js} +116 -5
- package/dist/server/assets/{canvas-D6tIkONI.js → canvas-Dn4RYoU2.js} +70 -42
- package/dist/server/assets/{comment-data-BuArfgcc.js → comment-data-B0OLHBGp.js} +7219 -1091
- package/dist/server/assets/{files-DkrEB48U.js → files-C5Vilfe4.js} +92 -89
- package/dist/server/assets/{listener-BVbFsnmX.js → listener-o1STuLju.js} +43 -29
- package/dist/server/assets/{pages-iEdmK_o2.js → pages-BNa0MHEc.js} +31 -22
- package/dist/server/assets/{project-branches-B7rtrvMl.js → project-branches-GtQYyOH5.js} +5 -5
- package/dist/server/assets/{project-thread-links-ue_ad9IX.js → project-thread-links-Nfz9NIny.js} +12 -12
- package/dist/server/assets/{project-work-6aOyja4v.js → project-work-Cy_BpHwR.js} +2 -2
- package/dist/server/assets/{screen-DMUB9a-K.js → screen-BtcJmZwj.js} +18 -18
- package/dist/server/assets/{server-DUBjmaBw.js → server-CYvuOSBA.js} +1 -1
- package/dist/server/assets/{services-Og5rcF50.js → services-DK4fqrlF.js} +2 -2
- package/dist/server/assets/{tasks-C2oa2wSC.js → tasks-B82tHwyQ.js} +31 -31
- package/dist/server/assets/{tasks-request-Bk5EoY_p.js → tasks-request-BtJBlkxV.js} +7 -6
- package/dist/server/capture.js +1 -1
- package/dist/server/migration.js +3 -3
- package/dist/server/runtime.js +4 -4
- package/dist/server/server.js +3 -3
- package/dist/types/assets/{config-BzzRLcL-.d.ts → config-DIC2cf_S.d.ts} +27 -1
- package/dist/types/assets/{contract-jA5pqK6h.d.ts → contract-CAT-XFNq.d.ts} +3 -1
- package/dist/types/companion.d.ts +1 -1
- package/dist/types/hosted.d.ts +2 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/node-host.d.ts +7 -1
- package/dist/types/screen.d.ts +1 -1
- package/package.json +1 -1
- package/dist/client/assets/canvas-DxaIItAs.js +0 -1
- package/dist/client/assets/difference-worker-BpqPBs5g.js +0 -8
- package/dist/client/assets/files-C-7xoSt4.js +0 -1
- package/dist/client/assets/index-sj6mWw9-.js +0 -2
- package/dist/client/assets/pages-BVrTX_Eq.js +0 -1
- package/dist/client/assets/project-branches-DpxQx-T4.js +0 -1
- package/dist/client/assets/project-comments-D897aU5O.js +0 -1
- package/dist/client/assets/project-thread-links-Bp_TseD0.js +0 -1
- package/dist/client/assets/task-design-bktfn_Ok.js +0 -23
- package/dist/client/assets/tasks-Cqfj4fQN.js +0 -1
- package/dist/client/assets/tasks-request-mWMk9pBo.js +0 -1
- package/dist/client/assets/workspace-9KxFcfyV.js +0 -2
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e,t}from"./lru-BkhKJhvt.js";import{t as n}from"./jsx-B4XNFIzB.js";import{n as r}from"./attrs-mixin-CmlG_FtV.js";import{t as i}from"./preload-helper-BLdHbfdN.js";import{l as a}from"./loader-Q6-HPKft.js";import{t as o}from"./screen-Dfvzj6n2.js";import{$t as s,Bt as c,Ft as l,Gt as u,Ht as d,Jt as f,Kt as p,Lt as m,Pt as h,Qt as g,Rt as _,T as v,Vt as y,Wt as ee,Xt as te,Yt as ne,cn as re,dn as b,ht as x,jt as ie,ln as ae,nn as S,rn as oe,un as se,zt as C}from"./task-design-bktfn_Ok.js";import{B as w,C as T,S as ce,x as E}from"./cloneFileDiffMetadata-CWfw01dG.js";import{$t as D,A as le,At as O,B as ue,Bt as de,Ct as k,D as fe,Et as A,F as pe,Ft as j,Gt as M,Ht as N,I as P,It as F,Jt as I,K as me,Kt as L,L as R,Lt as z,M as B,Mt as he,N as V,Nt as ge,O as _e,P as ve,Pt as ye,Qt as H,R as be,Rt as xe,St as Se,Tt as U,Ut as Ce,Vt as we,W as Te,Wt as Ee,Xt as De,Yt as Oe,Zt as ke,_t as Ae,a as je,at as Me,b as W,bt as Ne,c as Pe,d as Fe,dt as G,en as K,f as q,ft as Ie,gt as Le,ht as Re,j as ze,jt as Be,k as Ve,lt as He,mt as Ue,nn as We,pt as Ge,qt as J,s as Ke,st as qe,tn as Je,u as Ye,ut as Xe,vt as Ze,wt as Qe,xt as $e,y as Y,yt as et,z as tt,zt as nt}from"./project-threads-DezXiVK6.js";import{i as rt,t as it}from"./project-comments-D897aU5O.js";import{t as at}from"./project-thread-links-Bp_TseD0.js";function ot(e){let t=[];for(let n of e){let e=We.get(n);if(e==null)throw Error(`getResolvedLanguages: ${n} is not resolved. Please resolve languages before calling getResolvedLanguages`);t.push(e)}return t}function st(e){for(let t of Array.isArray(e)?e:[e])if(!We.has(t))return!1;return!0}async function ct(e){let t=[],n=[];for(let r of e){if(r===`text`||r===`ansi`)continue;let e=D(r)??K(r);`then`in e?n.push(e):t.push(e)}return n.length>0&&await Promise.all(n).then(e=>{for(let n of e){if(n==null)throw Error(`resolvedLanguages: unable to resolve language`);t.push(n)}}),t}function lt(e){return ke.getResolvedThemes(e)}async function ut(e){for(let t of e)I(t);let t=await ke.resolveThemes(e);for(let n=0;n<e.length;n++)Oe(e[n],t[n]);return t}var dt=e(t(),1),ft=Symbol(`IGNORE_RESPONSE`),pt=1e4,mt=class{options;highlighter;preferredHighlighter;renderOptions;renderOptionsRequestVersion=0;renderOptionsVersion=0;initialized=!1;workers=[];queuedTasks=[];queuedTaskByInstance=new Map;taskByHighlightKey=new Map;activeTaskById=new Map;activeRequestByInstance=new Map;nextRequestId=0;themeSubscribers=new Set;workersFailed=!1;statSubscribers=new Set;fileCache;diffCache;_queuedBroadcast;lifecycleGeneration=0;constructor(e,{langs:t,theme:n=w,useTokenTransformer:r=!1,lineDiffType:i=`word-alt`,maxLineDiffLength:a=1e3,tokenizeMaxLineLength:o=1e3,preferredHighlighter:s=`shiki-js`}){this.options=e,this.preferredHighlighter=s,this.renderOptions={theme:n,useTokenTransformer:r,lineDiffType:i,maxLineDiffLength:a,tokenizeMaxLineLength:o},this.fileCache=new dt.default.LRUMap(e.totalASTLRUCacheSize??100),this.diffCache=new dt.default.LRUMap(e.totalASTLRUCacheSize??100),this.queueInitialization(t)}isWorkingPool(){return!this.workersFailed}getFileResultCache(e){return e.cacheKey==null?void 0:this.fileCache.get(e.cacheKey)}getDiffResultCache(e){return e.cacheKey==null?void 0:this.diffCache.get(e.cacheKey)}inspectCaches(){let{fileCache:e,diffCache:t}=this;return{fileCache:e,diffCache:t}}evictFileFromCache(e){try{return this.fileCache.delete(e)!==void 0}finally{this.queueBroadcastStateChanges()}}evictDiffFromCache(e){try{return this.diffCache.delete(e)!==void 0}finally{this.queueBroadcastStateChanges()}}async setRenderOptions({theme:e=this.renderOptions.theme??w,useTokenTransformer:t=this.renderOptions.useTokenTransformer??!1,lineDiffType:n=this.renderOptions.lineDiffType??`word-alt`,maxLineDiffLength:r=this.renderOptions.maxLineDiffLength??1e3,tokenizeMaxLineLength:i=this.renderOptions.tokenizeMaxLineLength??1e3}){let{lifecycleGeneration:a}=this,o=++this.renderOptionsRequestVersion,s=()=>this.isCurrentLifecycle(a)&&this.renderOptionsRequestVersion===o;try{let a={theme:e,useTokenTransformer:t,lineDiffType:n,maxLineDiffLength:r,tokenizeMaxLineLength:i};if(this.isInitialized()||await this.initialize(),!s()||ye(a,this.renderOptions))return;let o=H(e),c=[];if(L(a.theme,this.renderOptions.theme)||(c=M(o)?lt(o):await ut(o)),!s())return;if(this.highlighter!=null)De(c,this.highlighter);else{let e=await J({themes:o,langs:[`text`],preferredHighlighter:this.preferredHighlighter});if(!s())return;this.highlighter=e}let l=this.setRenderOptionsOnWorkers(a,c);this.renderOptions=a,this.renderOptionsVersion++,this.diffCache.clear(),this.fileCache.clear(),this.invalidateRenderTasks();for(let e of this.themeSubscribers)e.onThemeChange();await l}catch(e){if(e instanceof xe||!s())return;throw e}}getPreferredHighlighter(){return this.preferredHighlighter}getFileRenderOptions(){let{tokenizeMaxLineLength:e,theme:t,useTokenTransformer:n}=this.renderOptions;return{theme:t,useTokenTransformer:n,tokenizeMaxLineLength:e}}getDiffRenderOptions(){return{...this.renderOptions}}async setRenderOptionsOnWorkers(e,t){if(this.workersFailed)return;this.isInitialized()||await this.initialize();let n=[];for(let r of this.workers){if(!r.initialized)throw console.log({managedWorker:r}),Error(`setRenderOptionsOnWorkers: Somehow we have an uninitialized worker`);n.push(new Promise((n,i)=>{let a=this.generateRequestId(),o={type:`set-render-options`,id:a,request:{type:`set-render-options`,id:a,renderOptions:e,resolvedThemes:t},resolve:n,reject:i,requestStart:Date.now()};this.activeTaskById.set(a,o),r.pendingSetupRequestId=a,r.worker.postMessage(o.request)}))}await Promise.all(n)}subscribeToThemeChanges(e){return this.themeSubscribers.add(e),this.queueBroadcastStateChanges(),()=>{this.unsubscribeToThemeChanges(e),this.queueBroadcastStateChanges()}}unsubscribeToThemeChanges(e){this.themeSubscribers.delete(e),this.queueBroadcastStateChanges()}subscribeToStatChanges(e){return this.statSubscribers.add(e),e(this.getStats()),()=>{this.statSubscribers.delete(e)}}queueBroadcastStateChanges(){this._queuedBroadcast??=requestAnimationFrame(this._broadcastStateChanges)}_broadcastStateChanges=()=>{this._queuedBroadcast!=null&&(cancelAnimationFrame(this._queuedBroadcast),this._queuedBroadcast=void 0);let e=this.getStats();for(let t of this.statSubscribers)t(e)};cleanUpTasks(e){this.detachInstanceFromQueuedTasks(e);let t=this.activeRequestByInstance.get(e);if(t!=null){let n=this.activeTaskById.get(t);X(n)?(this.detachInstanceFromRenderTask(n,e),!n.primeCache&&n.instances.size===0&&this.removeActiveTask(n)):this.activeTaskById.delete(t)}this.activeRequestByInstance.delete(e),this.queueBroadcastStateChanges()}isInitialized(){return this.initialized===!0}async initialize(e=[]){if(this.initialized!==!0){if(this.initialized===!1){let{lifecycleGeneration:t}=this,n=new Promise((n,r)=>{(async()=>{try{let r=H(this.renderOptions.theme),i=[];if(i=M(r)?lt(r):await ut(r),!this.isCurrentLifecycle(t)){n();return}let a=[];if(a=st(e)?ot(e):await ct(e),!this.isCurrentLifecycle(t)){n();return}let[o]=await Promise.all([J({themes:r,langs:[`text`,...e],preferredHighlighter:this.preferredHighlighter}),this.initializeWorkers(i,a)]);if(!this.isCurrentLifecycle(t)){this.terminateWorkers(),n();return}this.highlighter=o,this.initialized=!0,this.diffCache.clear(),this.fileCache.clear(),this.drainQueue(),this.queueBroadcastStateChanges(),n()}catch(e){if(e instanceof xe||!this.isCurrentLifecycle(t)){n();return}this.initialized=!1,this.workersFailed=!0,this.cancelActiveWorkerTasks(),this.terminateWorkers(),this.activeTaskById.clear();for(let t of this.queuedTasks)this.rejectRenderTaskCallbacks(t,vt(e));this.queueBroadcastStateChanges(),r(e)}})()});return this.initialized=n,this.queueBroadcastStateChanges(),n}return this.initialized}}async initializeWorkers(e,t){this.workersFailed=!1;let n=[],r=ce(),i=r>0?E():void 0;this.workers.length>0&&this.terminateWorkers();for(let a=0;a<(this.options.poolSize??8);a++){let a=this.options.workerFactory(),o={worker:a,requestId:void 0,pendingSetupRequestId:void 0,initialized:!1,langs:new Set([`text`,...t.map(({name:e})=>e)]),customExtensionsVersion:0};a.addEventListener(`message`,e=>{this.handleWorkerMessage(o,e.data)}),a.addEventListener(`error`,e=>this.handleWorkerError(o,e)),this.workers.push(o),n.push(new Promise((n,a)=>{let s=this.generateRequestId(),c={type:`initialize`,id:s,request:{type:`initialize`,id:s,renderOptions:this.renderOptions,preferredHighlighter:this.preferredHighlighter,resolvedThemes:e,resolvedLanguages:t,customExtensionsVersion:i==null?void 0:r,customExtensionMap:i},resolve(){o.initialized=!0,n()},reject:a,requestStart:Date.now()};o.pendingSetupRequestId=s,this.activeTaskById.set(s,c),this.executeTask(o,c)}))}let a=this.options.workerInitializationTimeout??pt,o;try{await Promise.race([Promise.all(n),new Promise((e,t)=>{o=setTimeout(()=>{t(Error(`WorkerPoolManager: worker initialization timed out after ${a}ms`))},a)})])}finally{o!=null&&clearTimeout(o)}}handleWorkerError(e,t){let{onWorkerError:n}=this.options;if(n!=null)try{n(t,e.worker)}catch(e){console.error(`WorkerPoolManager: onWorkerError threw:`,e)}else console.error(`Worker error:`,t,e);let{pendingSetupRequestId:r}=e;if(r==null)return;let i=this.activeTaskById.get(r);if(i?.type!==`initialize`)return;let a=yt(t);n!=null&&we(a),i.reject(a),this.cleanWorkerAndTask(e,i)}drainQueue=()=>{if(this._queuedDrain=void 0,this.initialized===!0&&this.queuedTasks.length!==0){for(let e=0;e<this.queuedTasks.length;){let t=this.queuedTasks[e];if(this.hasActiveRequest(t)){e++;continue}let n=gt(t),r=this.getAvailableWorker(n);if(r==null)break;this.queuedTasks.splice(e,1),this.assignWorkerToTask(t,r),this.resolveLanguagesAndExecuteTask(r,t,n)}this.queueBroadcastStateChanges()}};highlightFileAST(e,t){let n=this.getFileResultCache(t);N(t)||n!=null&&Ee(n.options,this.getFileRenderOptions())||this.hasMatchingFileInstanceTask(e,t)||this.submitTask(e,{type:`file`,file:t})}primeFileHighlightCache(e){if(!this.isWorkingPool())return Promise.reject(Error(`WorkerPoolManager.primeFileHighlightCache: worker pool is not working`));let t=this.getOrCreateFileHighlightCacheTask(e);return t==null?Promise.resolve():this.createRenderTaskCallbacks(t)}getOrCreateFileHighlightCacheTask(e){if(e.cacheKey==null){console.warn(`WorkerPoolManager.primeFileHighlightCache: priming highlight cache requires file.cacheKey; skipping "${e.name}".`);return}let t=this.getFileResultCache(e),n=this.getFileHighlightKey(e);if(n==null||N(e)||t!=null&&Ee(t.options,this.getFileRenderOptions()))return;let r=this.getTaskByHighlightKey(n);if(r!=null)return r.primeCache=!0,r.type===`file`?r:void 0;{let t=this.submitCacheTask({type:`file`,file:e},n);return t.type===`file`?t:void 0}}getPlainFileAST(e,t,n,r){if(this.highlighter==null)this.queueInitialization();else return Ce(e,this.highlighter,this.renderOptions,{forcePlainText:!0,startingLine:t,totalLines:n,lines:r})}highlightDiffAST(e,t){let n=this.getDiffResultCache(t);he(t)||n!=null&&ye(n.options,this.getDiffRenderOptions())||this.hasMatchingDiffInstanceTask(e,t)||this.submitTask(e,{type:`diff`,diff:t})}primeDiffHighlightCache(e){if(!this.isWorkingPool())return Promise.reject(Error(`WorkerPoolManager.primeDiffHighlightCache: worker pool is not working`));let t=this.getOrCreateDiffHighlightCacheTask(e);return t==null?Promise.resolve():this.createRenderTaskCallbacks(t)}getOrCreateDiffHighlightCacheTask(e){if(e.cacheKey==null){console.warn(`WorkerPoolManager.primeDiffHighlightCache: priming highlight cache requires diff.cacheKey; skipping "${e.prevName??e.name}" -> "${e.name}".`);return}let t=this.getDiffResultCache(e),n=this.getDiffHighlightKey(e);if(n==null||he(e)||t!=null&&ye(t.options,this.getDiffRenderOptions()))return;let r=this.getTaskByHighlightKey(n);if(r!=null)return r.primeCache=!0,r.type===`diff`?r:void 0;{let t=this.submitCacheTask({type:`diff`,diff:e},n);return t.type===`diff`?t:void 0}}getPlainDiffAST(e,t,n,r,i){return this.highlighter==null?void 0:ge(e,this.highlighter,this.renderOptions,{forcePlainText:!0,startingLine:t,totalLines:n,expandedHunks:r,collapsedContextThreshold:i})}terminate(){this.lifecycleGeneration++,this.cancelActiveWorkerTasks(),this.terminateWorkers();let e=new xe;for(let t of this.queuedTasks)this.rejectRenderTaskCallbacks(t,e);this.fileCache.clear(),this.diffCache.clear(),this.activeRequestByInstance.clear(),this.queuedTasks.length=0,this.queuedTaskByInstance.clear(),this.taskByHighlightKey.clear(),this.activeTaskById.clear(),this.highlighter=void 0,this.initialized=!1,this.workersFailed=!1,this.queueBroadcastStateChanges()}isCurrentLifecycle(e){return this.lifecycleGeneration===e}queueInitialization(e){this.initialize(e).catch(e=>{de(e)||console.error(e)})}cancelActiveWorkerTasks(){let e=new xe;for(let t of this.activeTaskById.values())`reject`in t?t.reject(e):X(t)&&this.rejectRenderTaskCallbacks(t,e)}terminateWorkers(){for(let e of this.workers)e.worker.terminate();this.workers.length=0}getStats(){return{managerState:this.initialized===!1?`waiting`:this.initialized===!0?`initialized`:`initializing`,totalWorkers:this.workers.length,workersFailed:this.workersFailed,busyWorkers:this.workers.filter(e=>e.requestId!=null||e.pendingSetupRequestId!=null).length,queuedTasks:this.queuedTasks.length,activeTasks:this.activeTaskById.size,themeSubscribers:this.themeSubscribers.size,fileCacheSize:this.fileCache.size,diffCacheSize:this.diffCache.size}}submitTask(e,t){this.initialized===!1&&this.queueInitialization();let n=this.getHighlightKeyForRequest(t),r=n==null?void 0:this.getTaskByHighlightKey(n);if(r!=null){this.detachInstanceFromQueuedTasks(e,r),this.addInstanceToTask(r,e),this.queueBroadcastStateChanges();return}this.detachInstanceFromQueuedTasks(e);let i=this.generateRequestId(),a=Date.now(),{renderOptionsVersion:o}=this,s=(()=>{switch(t.type){case`file`:return{type:`file`,id:i,request:{...t,id:i},instances:new Set([e]),primeCache:!1,highlightKey:n,callbacks:new Set,renderOptionsVersion:o,requestStart:a};case`diff`:return{type:`diff`,id:i,request:{...t,id:i},instances:new Set([e]),primeCache:!1,highlightKey:n,callbacks:new Set,renderOptionsVersion:o,requestStart:a}}})();this.enqueueRenderTask(s,e)}submitCacheTask(e,t){this.initialized===!1&&this.queueInitialization();let n=this.generateRequestId(),r=Date.now(),{renderOptionsVersion:i}=this,a=(()=>{switch(e.type){case`file`:return{type:`file`,id:n,request:{...e,id:n},instances:new Set,primeCache:!0,highlightKey:t,callbacks:new Set,renderOptionsVersion:i,requestStart:r};case`diff`:return{type:`diff`,id:n,request:{...e,id:n},instances:new Set,primeCache:!0,highlightKey:t,callbacks:new Set,renderOptionsVersion:i,requestStart:r}}})();return this.enqueueRenderTask(a),a}enqueueRenderTask(e,t){this.queuedTasks.push(e),t!=null&&this.queuedTaskByInstance.set(t,e),e.highlightKey!=null&&this.taskByHighlightKey.set(e.highlightKey,e),this.queueDrain()}async resolveLanguagesAndExecuteTask(e,t,n){try{let r=n.filter(e=>!Je(e));r.length>0&&J({themes:H(this.renderOptions.theme),langs:[`text`,...r],preferredHighlighter:this.preferredHighlighter}).catch(e=>{console.error(e)});let i=n.filter(t=>!e.langs.has(t));if(i.length>0&&(st(i)?t.request.resolvedLanguages=ot(i):t.request.resolvedLanguages=await ct(i)),!this.activeTaskById.has(t.id)){e.requestId===t.id&&(this.cleanWorkerAndTask(e,t),this.queueBroadcastStateChanges(),this.queuedTasks.length>0&&this.queueDrain());return}this.executeTask(e,t)}catch(n){this.rejectRenderTaskCallbacks(t,vt(n)),this.cleanWorkerAndTask(e,t),this.queueBroadcastStateChanges(),this.queuedTasks.length>0&&this.queueDrain()}}handleWorkerMessage(e,t){let n=this.activeTaskById.get(t.id);try{if(n==null)throw ft;if(t.type===`error`){let e=Error(t.error);if(t.stack&&(e.stack=t.stack),`reject`in n)n.reject(e);else if(X(n))this.notifyHighlightError(n,e),this.rejectRenderTaskCallbacks(n,e);else throw Error(`handleWorkerMessage: unknown task type`);throw e}if(X(n))for(let{name:t}of n.request.resolvedLanguages??[])e.langs.add(t);switch(t.requestType){case`initialize`:if(n.type!==`initialize`)throw Error(`handleWorkerMessage: task/response dont match`);this.syncCustomExtensionVersion(e,n.request),n.resolve();break;case`set-render-options`:if(n.type!==`set-render-options`)throw Error(`handleWorkerMessage: task/response dont match`);n.resolve();break;case`file`:{if(n.type!==`file`)throw Error(`handleWorkerMessage: task/response dont match`);let{result:r,options:i}=t;if(!this.isCurrentRenderTask(n)||!Ee(i,this.getFileRenderOptions()))throw ft;let{request:a}=n;this.syncCustomExtensionVersion(e,a),n.cacheKeyAtDispatch!=null&&this.fileCache.set(n.cacheKeyAtDispatch,{result:r,options:i}),this.resolveRenderTaskCallbacks(n),this.notifyFileInstances(n,r,i);break}case`diff`:{if(n.type!==`diff`)throw Error(`handleWorkerMessage: task/response dont match`);let{result:r,options:i}=t;if(!this.isCurrentRenderTask(n)||!ye(i,this.getDiffRenderOptions()))throw ft;let{request:a}=n;this.syncCustomExtensionVersion(e,a),n.cacheKeyAtDispatch!=null&&this.diffCache.set(n.cacheKeyAtDispatch,{result:r,options:i}),this.resolveRenderTaskCallbacks(n),this.notifyDiffInstances(n,r,i);break}}}catch(e){e!==ft&&console.error(e,n,t)}this.cleanWorkerAndTask(e,n,t.id),this.queueBroadcastStateChanges(),this.queuedTasks.length>0&&this.queueDrain()}_queuedDrain;queueDrain(){this._queuedDrain??(this._queuedDrain=Promise.resolve().then(this.drainQueue),this.queueBroadcastStateChanges())}assignWorkerToTask(e,t){t.requestId=e.id,X(e)&&(this.clearQueuedInstanceRequests(e),this.trackInstanceRequests(e)),this.activeTaskById.set(e.id,e)}cleanWorkerAndTask(e,t,n=t?.id){e.requestId===n&&(e.requestId=void 0),e.pendingSetupRequestId===n&&(e.pendingSetupRequestId=void 0),t!=null&&(X(t)&&(this.rejectRenderTaskCallbacks(t,new z),this.clearInstanceRequests(t),this.clearHighlightKey(t)),this.activeTaskById.delete(t.id))}executeTask(e,t){ht(t.request)&&this.maybeAttachCustomExtensions(e,t.request),this.activeTaskById.has(t.id)||this.assignWorkerToTask(t,e);try{t.type===`file`?t.cacheKeyAtDispatch=t.request.file.cacheKey:t.type===`diff`&&(t.cacheKeyAtDispatch=t.request.diff.cacheKey),e.worker.postMessage(t.request)}catch(n){console.error(`Failed to post message to worker:`,n),X(t)?(this.notifyHighlightError(t,n),this.rejectRenderTaskCallbacks(t,vt(n))):`reject`in t&&t.reject(n),this.cleanWorkerAndTask(e,t),this.queuedTasks.length>0&&this.queueDrain()}this.queueBroadcastStateChanges()}maybeAttachCustomExtensions(e,t){if(t.customExtensionsVersion!=null)return;let n=ce();e.customExtensionsVersion>=n||(t.customExtensionsVersion=n,t.customExtensionMap=E())}syncCustomExtensionVersion(e,t){t.customExtensionsVersion!=null&&(e.customExtensionsVersion=t.customExtensionsVersion)}getAvailableWorker(e){let t;for(let n of this.workers){if(n.requestId!=null||n.pendingSetupRequestId!=null||!n.initialized)continue;if(t=n,e.length===0)break;let r=!0;for(let t of e)if(!n.langs.has(t)){r=!1;break}if(r)break}return t}getFileHighlightKey(e){if(e.cacheKey!=null)return`file:${e.cacheKey}:${this.renderOptionsVersion}`}getDiffHighlightKey(e){if(e.cacheKey!=null)return`diff:${e.cacheKey}:${this.renderOptionsVersion}`}getHighlightKeyForRequest(e){switch(e.type){case`file`:return this.getFileHighlightKey(e.file);case`diff`:return this.getDiffHighlightKey(e.diff)}}hasActiveRequest(e){for(let t of _t(e))if(this.activeRequestByInstance.has(t))return!0;return!1}addInstanceToTask(e,t){e.type,e.instances.add(t),this.activeTaskById.has(e.id)?this.activeRequestByInstance.set(t,e.id):this.queuedTaskByInstance.set(t,e)}detachInstanceFromQueuedTasks(e,t){let n=this.queuedTaskByInstance.get(e);n!=null&&n!==t&&(this.queuedTaskByInstance.delete(e),this.detachInstanceFromRenderTask(n,e),!n.primeCache&&n.instances.size===0&&this.removeQueuedTask(n))}detachInstanceFromRenderTask(e,t){e.type,e.instances.delete(t)}removeQueuedTask(e){let t=this.queuedTasks.indexOf(e);t!==-1&&this.queuedTasks.splice(t,1),this.rejectRenderTaskCallbacks(e,new z),this.clearQueuedInstanceRequests(e),this.clearHighlightKey(e)}removeActiveTask(e){this.rejectRenderTaskCallbacks(e,new z),this.clearInstanceRequests(e),this.clearHighlightKey(e),this.activeTaskById.delete(e.id)}createRenderTaskCallbacks(e){return new Promise((t,n)=>{e.callbacks.add({resolve:t,reject:n})})}resolveRenderTaskCallbacks(e){for(let t of e.callbacks)t.resolve();e.callbacks.clear()}rejectRenderTaskCallbacks(e,t){for(let n of e.callbacks)n.reject(t);e.callbacks.clear()}invalidateRenderTasks(){for(let e=this.queuedTasks.length-1;e>=0;e--){let t=this.queuedTasks[e];t.renderOptionsVersion!==this.renderOptionsVersion&&this.removeQueuedTask(t)}for(let e of Array.from(this.activeTaskById.values()))X(e)&&e.renderOptionsVersion!==this.renderOptionsVersion&&this.removeActiveTask(e)}clearQueuedInstanceRequests(e){for(let t of _t(e))this.queuedTaskByInstance.get(t)===e&&this.queuedTaskByInstance.delete(t)}clearHighlightKey(e){e.highlightKey!=null&&this.taskByHighlightKey.get(e.highlightKey)===e&&this.taskByHighlightKey.delete(e.highlightKey)}trackInstanceRequests(e){for(let t of _t(e))this.activeRequestByInstance.set(t,e.id)}clearInstanceRequests(e){for(let t of _t(e))this.activeRequestByInstance.get(t)===e.id&&this.activeRequestByInstance.delete(t)}notifyFileInstances(e,t,n){for(let r of e.instances)this.activeRequestByInstance.get(r)===e.id&&r.onHighlightSuccess(e.request.file,t,n)}notifyDiffInstances(e,t,n){for(let r of e.instances)this.activeRequestByInstance.get(r)===e.id&&r.onHighlightSuccess(e.request.diff,t,n)}notifyHighlightError(e,t){for(let n of _t(e))this.activeRequestByInstance.get(n)===e.id&&n.onHighlightError(t)}hasMatchingFileInstanceTask(e,t){for(let n of this.iterateRenderTasks())if(n.type===`file`&&this.isCurrentRenderTask(n)&&n.instances.has(e)&&j(t,n.request.file))return!0;return!1}hasMatchingDiffInstanceTask(e,t){for(let n of this.iterateRenderTasks())if(n.type===`diff`&&this.isCurrentRenderTask(n)&&n.instances.has(e)&&F(n.request.diff,t))return!0;return!1}getTaskByHighlightKey(e){let t=this.taskByHighlightKey.get(e);return t!=null&&this.isCurrentRenderTask(t)?t:void 0}isCurrentRenderTask(e){return e.renderOptionsVersion===this.renderOptionsVersion}*iterateRenderTasks(){for(let e of this.queuedTasks)yield e;for(let e of this.activeTaskById.values())X(e)&&(yield e)}generateRequestId(){return`req_${++this.nextRequestId}`}};function ht(e){return e.type===`initialize`||e.type===`file`||e.type===`diff`}function gt(e){let t=new Set;if(e.type===`initialize`||e.type===`set-render-options`)return[];switch(e.type){case`file`:t.add(e.request.file.lang??T(e.request.file.name));break;case`diff`:t.add(e.request.diff.lang??T(e.request.diff.name)),t.add(e.request.diff.lang??T(e.request.diff.prevName??`-`))}return t.delete(`text`),Array.from(t)}function X(e){return e?.type===`file`||e?.type===`diff`}function _t(e){return e.instances}function vt(e){if(e instanceof Error)return e;if(typeof e==`object`&&e){if(`error`in e&&e.error instanceof Error)return e.error;if(`message`in e&&typeof e.message==`string`)return Error(e.message)}return Error(String(e))}function yt(e){let t=`error`in e?e.error:void 0,n=`message`in e&&typeof e.message==`string`&&e.message!==``?e.message:t instanceof Error?t.message:`the worker script failed to load (the error event carries no message)`;return new nt(`WorkerPoolManager: worker failed: ${n}`,t instanceof Error?{cause:t}:void 0)}async function bt(e={}){let{signal:t,renderOptions:n,...r}=e;t?.throwIfAborted();let a=e.workerFactory??(await i(async()=>{let{createCodeWorker:e}=await import(`./worker-factory-CAZ4aPuv.js`);return{createCodeWorker:e}},[])).createCodeWorker;t?.throwIfAborted();let o=new mt({poolSize:2,...r,workerFactory:a},n??{}),s=!1;function c(){s||(s=!0,t?.removeEventListener(`abort`,c),o.terminate())}return t?.addEventListener(`abort`,c,{once:!0}),{pool:o,ready:o.initialize().then(()=>{s&&o.terminate()}),dispose:c}}var xt=new Set([W.filesApi,W.fileSearchApi,W.fileReviewApi,W.fileMutationsApi,W.fileSavesApi,W.fileReviewActionsApi].flatMap(e=>Object.values(e).map(e=>e.href()))),Z=class extends Error{code;status;constructor(e,t=`request`,n=0){super(e),this.name=`FilesRequestError`,this.code=t,this.status=n}};async function Q(e,t,n,r,i=fetch,a){let o=new URL(e,`http://bud.invalid`),s=o.pathname===`/api/files/mutations/prepare`||o.pathname===`/api/files/mutations/apply`||o.pathname===`/api/files/review-actions/prepare`||o.pathname===`/api/files/review-actions/apply`||o.pathname===`/api/files/save`;if(!e.startsWith(`/api/files`)||e.startsWith(`//`)||o.origin!==`http://bud.invalid`||o.hash||!xt.has(o.pathname)||(o.pathname===`/api/files/refresh`||o.pathname===`/api/files/save`||o.pathname.startsWith(`/api/files/review-actions/`)||o.pathname.startsWith(`/api/files/mutations/`))&&o.search||s!==!!a)throw new Z(`Invalid file endpoint.`,`input`);n.throwIfAborted();let c=await i(e,{method:s||o.pathname===`/api/files/refresh`?`POST`:`GET`,headers:{"X-Bud-Token":t,...s?{"Content-Type":`application/json`}:{}},...a?{body:JSON.stringify(a.body)}:{},credentials:`same-origin`,redirect:`error`,cache:`no-store`,signal:n}),l=c.body?.getReader();if(!l)throw new Z(`The file service returned an empty response.`,`response`,c.status);let u=[],d=0,f=()=>{l.cancel(n.reason).catch(()=>{})};n.addEventListener(`abort`,f,{once:!0});try{for(;;){n.throwIfAborted();let e=await l.read();if(n.throwIfAborted(),e.done)break;if(d+=e.value.byteLength,d>16777216)throw new Z(`This file response exceeds the display limit. Narrow the file view and try again.`,`limit`,c.status);u.push(e.value)}}catch(e){throw await l.cancel().catch(()=>{}),e}finally{n.removeEventListener(`abort`,f),l.releaseLock()}let p=new Uint8Array(d),m=0;for(let e of u)p.set(e,m),m+=e.byteLength;let h;try{h=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(p))}catch{throw new Z(`The file service returned invalid data. Refresh and try again.`,`response`,c.status)}if(!c.ok)throw new Z(h&&typeof h==`object`&&`error`in h&&typeof h.error==`string`?h.error.slice(0,1e3):`Could not load files. Try again.`,h&&typeof h==`object`&&`code`in h&&typeof h.code==`string`?h.code.slice(0,100):`request`,c.status);try{return r(h)}catch{throw new Z(`The file service returned unexpected data. Refresh and try again.`,`response`,c.status)}}function St(){let e=new Set;return{register(t,n){n.aborted||(e.add(t),n.addEventListener(`abort`,()=>e.delete(t),{once:!0}))},async beforeApply(t,n,r){for(let i of e){r.throwIfAborted();let e=await i.beforeApply(t,n,r);if(r.throwIfAborted(),e)throw Error(e)}},async afterApply(t,n){for(let r of e)await r.afterApply(t,n)}}}function Ct(e){return e instanceof Error?e.message:`The file action could not be completed.`}function wt(e,t){if(e.kind!==t.kind)throw Error(`The service returned a different file action.`);if(e.kind===`restore`)return;let n=`entries`in e?e.entries.map(e=>[e.path,e.destination]):e.kind===`delete`?e.paths.map(e=>[e,null]):[[null,e.path]],r=t.items.map(e=>[e.source,e.destination]);if(JSON.stringify(n)!==JSON.stringify(r))throw Error(`The service returned different file paths. Refresh before continuing.`)}function Tt(e,t){if(t.id!==e.id||t.items.length!==e.items.length||t.items.some((t,n)=>t.source!==e.items[n].source||t.destination!==e.items[n].destination))throw Error(`The file result does not match its confirmed plan. Refresh and check Recovery before retrying.`)}function Et(e){let t=null,n=!1,r=null,i=!1,a=``,o,s,c=null,l=0;function u(){e.signal.aborted||e.onChange()}function d(){return t?.phase===`preparing`||t?.phase===`applying`}function f(){t?.phase!==`applying`&&(o?.abort(),l++,t=null,c=null,u())}async function p(n,r){if(!t||t.phase===`applying`)return;o?.abort();let i=new AbortController;o=i;let a=AbortSignal.any([e.signal,i.signal]),s=++l;c=n,t={...t,phase:`preparing`,plan:null,result:null,error:``},u();try{let i=await e.transport.prepare(n,a);if(a.throwIfAborted(),wt(n,i),s!==l||!t)return;t={...t,plan:i,phase:`confirming`},u(),r&&await m()}catch(e){!a.aborted&&s===l&&t&&(t={...t,phase:`editing`,error:Ct(e)},u())}}async function m(){if(!t?.plan||!c||d())return;let n=c,r=t.plan;if(Date.parse(r.expiresAt)<=Date.now()){t={...t,phase:`editing`,plan:null,error:`This confirmation expired. Review the current files again.`},u();return}o?.abort();let i=new AbortController;o=i;let a=AbortSignal.any([e.signal,i.signal]),s=++l,f=!1;t={...t,phase:`applying`,error:``},u();try{await e.guards.beforeApply(n,r,a),a.throwIfAborted(),f=!0;let i=await e.transport.apply(r,a);if(a.throwIfAborted(),Tt(r,i),s!==l||!t)return;t={...t,phase:`result`,result:i};let o=``;try{await e.guards.afterApply(n,i)}catch(e){o=`Files changed, but retained draft metadata could not be updated. ${Ct(e)}`}if(await e.onApplied(n,i),s!==l||!t)return;t={...t,error:o},i.status===`applied`&&!o&&![`delete`,`restore`].includes(n.kind)&&(t=null,c=null),u()}catch(n){if(a.aborted||s!==l||!t)return;t={...t,phase:`editing`,plan:null,error:Ct(n)},f&&(await e.onUncertain().catch(()=>{}),t&&s===l&&(t={...t,error:`${Ct(n)} Refresh and check Recovery before retrying.`})),u()}}function h(r,i=!1){if(d())return;o?.abort(),s?.abort(),l++,n=!1,c=null;let a=``,f=``;try{a=R(r,e.index())}catch(e){f=Ct(e)}t={request:r,destination:a,phase:`editing`,plan:null,result:null,error:f},u(),!f&&(r.action===`delete`||r.action===`restore`||i)&&g()}async function g(){if(t&&!d()){if(t.phase===`confirming`)await m();else try{let n=t.result&&c?ue(c,t.result):be(t.request,t.destination,e.index());if(!n)return;await p(n,![`delete`,`restore`].includes(n.kind))}catch(e){t&&={...t,error:Ct(e),phase:`editing`},u()}}}async function _(){s?.abort();let t=new AbortController;s=t;let n=AbortSignal.any([e.signal,t.signal]);i=!0,a=``,u();try{let t=await e.transport.recoveries(n);n.aborted||(r=t)}catch(e){n.aborted||(a=Ct(e))}finally{s===t&&(i=!1,u())}}return e.signal.addEventListener(`abort`,()=>{o?.abort(),s?.abort()},{once:!0}),{get state(){return t},get busy(){return d()},get recovery(){return{open:n,recoveries:r,loading:i,error:a}},open:h,close:f,submit:g,destination(e){t&&!d()&&(c=null,t={...t,destination:e,plan:null,result:null,phase:`editing`,error:``},u())},recoveries(){d()||(f(),n=!0,_(),u())},refreshRecoveries:_,closeRecoveries(){s?.abort(),n=!1,u()}}}function Dt(e){return new URLSearchParams(e.mode===`commits`?{mode:e.mode,base:e.base,target:e.target}:{mode:e.mode})}async function Ot(e,t,n,r,i=fetch){if(t.length>20||t.some(t=>!e.entries.some(e=>e.path===t)))throw new Z(`The selected files are outside this comparison page.`,`input`);let a=new Map,o={},s=0,c=0,l=new AbortController,u=AbortSignal.any([r,l.signal]),d;async function p(){try{for(;s<t.length;){u.throwIfAborted();let r=t[s++],l=Dt(e.comparison);l.set(`path`,r),l.set(`expectedRevision`,e.revision);try{let t=await Q(`${W.fileReviewApi.diff.href()}?${l}`,n,u,f,i);if(t.entry.path!==r||t.metadataRevision!==e.revision||JSON.stringify(t.comparison)!==JSON.stringify(e.comparison))throw new Z(`The comparison changed while reading. Refresh before continuing.`,`changed`,409);let s=[t.oldFile,t.newFile,t.conflict?.base,t.conflict?.ours,t.conflict?.theirs].reduce((e,t)=>e+(t?.contents?.length??0)*2,0);c+s>33554432?o[r]=`This page reached its memory limit. Open this file individually.`:(c+=s,a.set(r,t))}catch(e){if(u.aborted||e instanceof Z&&(e.status===409||e.status===401||e.status===403))throw e;o[r]=e instanceof Error?e.message:`Could not read this comparison.`}}}catch(e){d??=e,l.abort(e)}}if(await Promise.all(Array.from({length:Math.min(3,t.length)},p)),d)throw d;return r.throwIfAborted(),{diffs:t.flatMap(e=>a.get(e)??[]),failures:o}}var kt={getItem:e=>{let t=O(e);return typeof t==`string`?t:null},setItem:(e,t)=>Be(e,t)},At=16,jt=At*d*2,Mt=3145728,Nt=new TextEncoder;function $(e){return e.contents!==e.baseContents}function Pt(e){return Nt.encode(e.contents).length+Nt.encode(e.baseContents).length}function Ft(e,t){return e===t||e.startsWith(`${t}/`)}function It(e,t){if(!e)return[];if(e.length>Mt)throw Error(`The local draft record exceeds its limit.`);let n=JSON.parse(e);if(!n||typeof n!=`object`||Array.isArray(n))throw Error(`Invalid local draft record.`);let r=n;if(r.version!==1||r.projectId!==t||!Array.isArray(r.drafts)||r.drafts.length>At||Object.keys(r).some(e=>![`version`,`projectId`,`drafts`].includes(e)))throw Error(`Invalid local draft record.`);let i=new Set,a=0;return r.drafts.map(e=>{if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Invalid local draft.`);let t=e;if(Object.keys(t).some(e=>![`id`,`path`,`baseRevision`,`baseContents`,`contents`,`updatedAt`].includes(e))||typeof t.id!=`string`||!/^[a-zA-Z0-9-]{1,80}$/.test(t.id)||!Number.isSafeInteger(t.updatedAt)||Number(t.updatedAt)<0)throw Error(`Invalid local draft.`);c({path:t.path,expectedRevision:t.baseRevision,contents:t.baseContents}),c({path:t.path,expectedRevision:t.baseRevision,contents:t.contents});let n=t;if(i.has(n.path))throw Error(`Duplicate local draft path.`);if(i.add(n.path),a+=Pt(n),a>jt)throw Error(`The local drafts exceed their memory limit.`);return{...n}})}function Lt(e,t,n=Date.now){let r=new Map,i=``,a=`bud:drafts:${e}:v1`;try{for(let n of It(t?.getItem(a)??null,e))r.set(n.path,n)}catch{i=`Local drafts could not be read. The stored record has been left untouched.`}let o=!!i;function s(){if(o)return!1;let n=JSON.stringify({version:1,projectId:e,drafts:[...r.values()].filter($)});try{if(!t||n.length>Mt)throw Error(`Storage unavailable`);return t.setItem(a,n),i=``,!0}catch{return i=`This draft is kept in this tab only. Browser storage is unavailable or full; save or download it before closing the tab.`,!1}}function l(e){if(Nt.encode(e.contents).length>2097152||!e.contents.isWellFormed()||e.contents.includes(`\0`))throw Error(`This draft exceeds the text editor limit or contains unsupported text. Undo the last edit before saving.`);let t=[...r.values()].filter(t=>t.path!==e.path&&!$(t));for(let e of t)r.delete(e.path);let n=[...r.values()].filter(t=>t.path!==e.path);if(n.length>=At||n.reduce((e,t)=>e+Pt(t),Pt(e))>jt)throw Error(`Save or discard another draft before editing more files. Your existing drafts have been kept.`);return r.set(e.path,e),s(),e}return{get warning(){return i},get dirty(){return[...r.values()].filter($)},get(e){return r.get(e)},open(e,t,i){let a=r.get(e);return a&&$(a)?a:(c({path:e,expectedRevision:t,contents:i}),l({id:crypto.randomUUID(),path:e,baseRevision:t,baseContents:i,contents:i,updatedAt:n()}))},change(e,t){let i=r.get(e);if(!i)throw Error(`This draft is no longer open.`);return l({...i,contents:t,updatedAt:n()})},acknowledge(e,t,i){let a=r.get(e);if(a)return l({...a,baseRevision:i,baseContents:t,updatedAt:n()})},rebase(e,t,i){let a=r.get(e);if(!a)throw Error(`This draft is no longer open.`);return l({...a,id:crypto.randomUUID(),baseRevision:t,baseContents:i,updatedAt:n()})},discard(e){r.delete(e),s()},persist:s,beforeMutation(e,t){let n=[...r.values()].filter($);if(e.kind===`delete`&&n.some(t=>e.paths.some(e=>Ft(t.path,e))))return`Save or discard the unsaved drafts in this selection before deleting it.`;if(e.kind===`restore`&&n.some(e=>t.items.some(t=>t.destination&&Ft(e.path,t.destination))))return`Save or discard the unsaved drafts at these original paths before restoring them.`;if(e.kind===`move`){if(n.some(t=>e.entries.some(e=>Ft(t.path,e.destination)&&!Ft(t.path,e.path))))return`A destination has an unsaved draft. Save or discard it before moving files here.`;if(n.some(t=>e.entries.some(e=>Ft(t.path,e.path)))&&!s())return`Save or download your drafts before moving these files; local draft storage is unavailable.`}return null},afterMutation(e,t){if(e.kind!==`move`)return;let n=t.items.filter(e=>e.status===`applied`&&e.source&&e.destination),i=[],a=new Map(r);for(let e of r.values()){let t=n.find(t=>Ft(e.path,t.source));if(!t)continue;let r=b(t.destination+e.path.slice(t.source.length));i.push({draft:e,path:r}),a.delete(e.path)}for(let{draft:e,path:t}of i){let n=a.get(t);if(n&&$(n))throw Error(`The destination acquired an unsaved draft while the move was running. Both drafts remain available at their original paths; download or review them before continuing.`);a.set(t,{...e,id:crypto.randomUUID(),path:t})}r=a,s()}}}var Rt=new Map,zt=!1;function Bt(e,t){zt||(zt=!0,window.addEventListener(`beforeunload`,e=>{if([...Rt.values()].some(e=>e.dirty.length)){for(let e of Rt.values())e.persist();e.preventDefault(),e.returnValue=``}}));let n=Rt.get(e);if(n)return n;for(let[e,t]of Rt)t.dirty.length||Rt.delete(e);if(Rt.size>=4)throw Error(`Save or discard drafts in another project before opening more editors.`);let r=Lt(e,t);return Rt.set(e,r),r}function Vt(e){return e instanceof Error?e.message:`The file could not be saved. Your draft has been kept.`}function Ht(e,t){if(e.entry.path!==t)throw Error(`The source response belongs to another file.`);if(e.contents===null||!e.revision)throw Error(`Only regular UTF-8 text files within the editor size limit can be edited.`);return{revision:e.revision,contents:e.contents}}function Ut(e,t){return e===t||e.startsWith(`${t}/`)}function Wt(e){let t=null,n=!1,r=null,i=``,a,o=new Set,s=0;function c(){e.signal.aborted||e.onChange()}function l(){a?.abort(),s++,t=null,r=null,n=!1,i=``,e.drafts.persist(),c()}function u(e){r!==e&&l()}function d(e){!t||t.draft.path!==e.entry.path||t.saving||t.latest||e.revision!==t.draft.baseRevision&&(t={...t,conflict:!0,error:`This file changed outside the editor. Your draft has been kept. Compare with the latest file before saving.`},c())}async function f(l,u=`file`,d){a?.abort();let f=new AbortController;a=f;let p=AbortSignal.any([f.signal,e.signal]),m=++s;r=l,n=!0,i=``,c();try{let n=await e.read(l,p);p.throwIfAborted();let r=Ht(n,l),i=e.drafts.open(l,r.revision,r.contents),a=i.baseRevision!==r.revision,s=u===`diff`&&d?.workingRevision===r.revision;t={key:`${i.id}:${m}`,draft:i,file:{name:l,contents:i.contents},oldFile:s?d.file:{name:l,contents:i.baseContents},mode:u,baselineLabel:s?`Index`:`Opened version`,saving:o.has(l),conflict:a,latest:null,error:a?`This recovered draft belongs to an older file version. Compare it with the latest file before saving.`:``,status:$(i)?`Recovered unsaved draft.`:``}}catch(n){if(!p.aborted){let r=e.drafts.get(l);r&&$(r)?t={key:`${r.id}:recovery:${m}`,draft:r,file:{name:l,contents:r.contents},oldFile:{name:l,contents:r.baseContents},mode:`file`,baselineLabel:`Opened version`,saving:o.has(l),conflict:!0,latest:null,error:`The current project file could not be read. ${Vt(n)}`,status:`Your unsaved draft is available below. Download it, or restore the project file and compare with its latest contents before saving.`}:i=Vt(n)}}finally{m===s&&(n=!1,c())}}function p(n){if(t){try{let r=e.drafts.change(t.draft.path,n);t={...t,draft:r,status:``,error:t.conflict?t.error:``}}catch(e){t={...t,error:Vt(e)}}c()}}async function m(){if(!t||t.saving||t.conflict||t.latest||!$(t.draft))return;let n=t.draft;o.add(n.path),t={...t,saving:!0,error:``,status:``},c();try{let r=await e.save({path:n.path,expectedRevision:n.baseRevision,contents:n.contents},e.signal);if(r.path!==n.path||r.previousRevision!==n.baseRevision)throw Error(`The save response belongs to a different file revision. Check the latest file before retrying.`);let i=e.drafts.acknowledge(n.path,n.contents,r.revision);t?.draft.path===n.path&&i&&(t={...t,draft:i,status:``,error:``},r.refresh===`failed`?v.error(`Saved, but the file browser could not refresh`,{description:`Refresh it before continuing.`}):$(i)?v.success(`Saved to your project`,{description:`Newer edits are still unsaved.`}):v.success(`Saved to your project`)),e.onSaved()}catch(e){t?.draft.path===n.path&&(t={...t,error:Vt(e),conflict:!0})}finally{o.delete(n.path),t?.draft.path===n.path&&(t={...t,saving:!1}),c()}}async function h(){if(!t||t.saving)return;let n=t;a?.abort();let r=new AbortController;a=r;let i=AbortSignal.any([r.signal,e.signal]),o=++s;try{let r=await e.read(n.draft.path,i);i.throwIfAborted();let a=Ht(r,n.draft.path);if(!t||t.draft.path!==n.draft.path)return;let s=e.drafts.get(n.draft.path);t={...t,key:`${s.id}:merge:${o}`,file:{name:s.path,contents:s.contents},oldFile:{name:s.path,contents:a.contents},mode:`diff`,baselineLabel:`Latest file`,latest:r,conflict:!0,error:``,status:`Your draft is on the new side. No file is changed until you review it and save.`}}catch(e){!i.aborted&&t&&(t={...t,error:Vt(e)})}finally{c()}}function g(){if(!t?.latest)return;let n=Ht(t.latest,t.draft.path),r=e.drafts.rebase(t.draft.path,n.revision,n.contents);t={...t,draft:r,latest:null,conflict:!1,error:``,status:`Reviewed against the latest file. Save when your merged draft is ready.`},c()}async function _(){if(!t||t.saving)return;let n=t.draft.path;e.drafts.discard(n),l(),await f(n)}return{get state(){return t},get opening(){return n},get openError(){return i},begin:f,change:p,save:m,close:l,closeOtherPath:u,observe:d,checkLatest:h,acceptMerge:g,discard:_,guard:{async beforeApply(t,n,r){return r.throwIfAborted(),[...o].some(e=>n.items.some(t=>t.source&&Ut(e,t.source)||t.destination&&Ut(e,t.destination)))?`Wait for the file save to finish before changing these paths.`:e.drafts.beforeMutation(t,n)},afterApply(n,r){e.drafts.afterMutation(n,r),t&&n.kind===`move`&&r.items.some(e=>e.status===`applied`&&e.source&&Ut(t.draft.path,e.source))&&l(),c()}}}}function Gt(e){return e instanceof Error?e.message:`The review action could not be completed. Refresh and inspect retained undo before trying again.`}function Kt(e){let t=null,n,r=0;function i(){e.signal.aborted||e.onChange()}function a(a){return n?.abort(),n=new AbortController,r++,t={phase:a,plan:null,result:null,recoveries:null,error:``},i(),{signal:AbortSignal.any([e.signal,n.signal]),turn:r}}function o(){t?.phase!==`applying`&&(n?.abort(),r++,t=null,i())}async function s(n){if(t?.phase===`applying`)return;let{signal:o,turn:s}=a(`preparing`);try{n.kind!==`undo`&&e.guard([n.path],n.kind===`discard`?`worktree`:`index`);let i=await e.prepare(n,o);if(o.throwIfAborted(),i.kind!==n.kind||n.kind!==`undo`&&!i.paths.includes(n.path))throw Error(`The prepared review belongs to a different action or file.`);e.guard(i.paths,i.target),s===r&&(t={phase:`ready`,plan:i,result:null,recoveries:null,error:``})}catch(e){!o.aborted&&s===r&&(t={phase:`error`,plan:null,result:null,recoveries:null,error:Gt(e)})}finally{s===r&&i()}}async function c(){if(t?.phase!==`ready`||!t.plan)return;let a=t.plan,o=r,s=AbortSignal.any([e.signal,n.signal]);try{e.guard(a.paths,a.target),t={...t,phase:`applying`,error:``},i();let n=await e.apply({id:a.id,revision:a.revision},s);if(s.throwIfAborted(),n.id!==a.id||n.target!==a.target||n.changedPaths.some(e=>!a.paths.includes(e)))throw Error(`The write response could not be confirmed. Refresh and inspect retained undo.`);if(o===r){let i=``;try{await e.onApplied(n)}catch(e){i=Gt(e)}s.throwIfAborted(),o===r&&(t={...t,phase:`done`,result:n,error:i})}}catch(e){!s.aborted&&o===r&&t&&(t={...t,phase:`error`,error:Gt(e)})}finally{o===r&&i()}}async function l(){if(t?.phase===`applying`)return;let{signal:n,turn:o}=a(`preparing`);try{let i=await e.recoveries(n);!n.aborted&&o===r&&(t={phase:`recoveries`,plan:null,result:null,recoveries:i,error:``})}catch(e){!n.aborted&&o===r&&(t={phase:`error`,plan:null,result:null,recoveries:null,error:Gt(e)})}finally{o===r&&i()}}return e.signal.addEventListener(`abort`,()=>{n?.abort(),t=null},{once:!0}),{get state(){return t},prepare:s,apply:c,recoveries:l,close:o}}function qt(e){return e.resolution.state===`outdated`?null:{selection:{path:e.source.viewPath??e.source.path,start:e.resolution.startLine,end:e.resolution.endLine,...e.source.side?{side:e.source.side===`old`?`deletions`:`additions`}:{}},revision:e.resolution.revision}}function Jt(e,t,n){return n?[{path:n.path,revision:n.file?.revision??null,contents:n.file?.contents??null,commit:n.commit}]:e?[{path:e.entry.path,revision:e.revision,contents:e.contents,commit:null}]:t.flatMap(e=>[{path:e.oldFile?.name??e.entry.originalPath??e.entry.path,revision:e.oldFile?.revision??null,contents:e.oldFile?.contents??null,viewPath:e.entry.path,side:`old`,commit:e.base},{path:e.entry.path,previousPath:e.entry.originalPath,revision:e.newFile?.revision??null,contents:e.newFile?.contents??null,viewPath:e.entry.path,side:`new`,commit:e.target}])}function Yt(e,t,n){if(e.endSide&&e.endSide!==e.side)throw Error(`Select consecutive lines on one side before commenting.`);let r=e.side===`deletions`?`old`:`new`,i=t.find(t=>(t.viewPath??t.path)===e.path&&(!t.side||t.side===r));if(!i||i.contents===null||!i.revision)throw Error(`Comments require readable text with an exact source revision.`);if(n&&i.revision!==n)throw Error(`Those lines belong to an older source. Select them again before commenting.`);return ie({path:i.path,revision:i.revision,commit:i.commit??null,side:r,startLine:Math.min(e.start,e.end),endLine:Math.max(e.start,e.end)},i.contents)}function Xt(e){let t=new URLSearchParams({query:e.query,regex:String(e.regex),caseSensitive:String(e.caseSensitive),wholeWord:String(e.wholeWord),directory:e.directory,includeDotfiles:String(e.includeDotfiles),includeIgnored:String(e.includeIgnored),limit:String(e.limit)});for(let n of e.include)t.append(`include`,n);for(let n of e.exclude)t.append(`exclude`,n);return t}function Zt(e){let t,n={loading:!1,result:null,error:``,notice:``};function r(){e.signal.aborted||e.onChange()}function i(e=`Search cancelled.`){t?.abort(),t=void 0,n={...n,loading:!1,notice:e,error:``},r()}return e.signal.addEventListener(`abort`,()=>i(``),{once:!0}),{get state(){return n},cancel:i,async search(a){i(``);let o=new AbortController;t=o;let s=AbortSignal.any([o.signal,e.signal]);n={loading:!0,result:null,error:``,notice:``},r();try{let r=S(a),i=await e.request(r,s);if(Xt(i.query).toString()!==Xt(r).toString())throw new Z(`The service returned results for a different search.`,`response`);if(s.aborted||t!==o)return;n={loading:!1,result:i,error:``,notice:``}}catch(e){if(s.aborted||t!==o)return;n={loading:!1,result:null,error:e instanceof Error?e.message:`Could not search this project.`,notice:``}}finally{t===o&&(t=void 0,r()),o.abort()}}}}function Qt(e,t){if(e.entry.path!==t.path||e.revision!==t.revision||e.entry.content!==`text`||typeof e.contents!=`string`||t.start<0||t.end<t.start||t.end>e.contents.length)throw Error(`This search result is outdated. Search again to locate the current text; any unsaved draft is retained.`);let n=t=>{let n=1,r=0;for(let i of e.contents.matchAll(/\r\n|\r|\n/g)){let e=i.index+i[0].length;if(e>t)break;n++,r=e}return{line:n,column:t-r+1}},r=n(t.start),i=n(t.end);if(r.line!==t.startLine||r.column!==t.startColumn||i.line!==t.endLine||i.column!==t.endColumn)throw Error(`This search result has invalid coordinates. Search again.`);return{page:0,scroll:0,revision:t.revision,selection:{path:t.path,start:t.startLine,end:Math.max(t.startLine,t.endLine-Number(t.endColumn===1&&t.endLine>t.startLine))}}}function $t(e){return e instanceof Error?e.message:`Could not read the project.`}function en(e){let t=e.props.project,i={version:1,projectId:t.id,view:Ge(),positions:{}},o=null,c=null,u=[],d={},f=``,p=!1,h=null,v=!1,ee=!1,te=``,re=`light`,b,x=!1,ie,S,oe,se=!1,w=``,T,ce,E=``,D=``,ue=``,de=e.props.refresh,k=``,A,j,M=le(),N=e.props.path,P,F,I=null,L=null,R=!1,z,B,he=``,V=null,ge=null,ye=[],H=[],be=``,xe,Se=null,U,Ce,we=0,Te=``,Ee,De,Oe,ke=``,je=!1,Me=e.props.store;Me||Ke(t).then(e=>{Me=e});function Ne(){if(!R){let e=window.document.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;De=e instanceof HTMLElement?e:void 0}R=!0}function Pe(){R=!1,B=void 0,G(),e.queueTask(()=>{(De?.isConnected?De:Oe?.querySelector(`diffs-container`)?.shadowRoot?.querySelector(`[contenteditable=true]`)??Oe?.querySelector(`[data-bud-code-review]`))?.focus({preventScroll:!0}),De=void 0})}function G(){e.signal.aborted||e.update()}function K(){return I?JSON.stringify([Ze(i.view,e.props.path),I.commit]):Ze(i.view,e.props.path)}function q(){return i.positions[K()]??Ie()}function We(){clearTimeout(oe),oe=setTimeout(()=>Be(`bud:review:${t.id}:v1`,JSON.stringify(i)),200)}function J(e,t=!1){let n=q(),r={...n,...e};i=Le(i,K(),r),We(),(t||JSON.stringify(n.selection)!==JSON.stringify(r.selection)||n.revision!==r.revision)&&G()}function Je(){let t=et(e.props.path,i.view);window.location.pathname+window.location.search+window.location.hash!==t&&(ce=new URL(t,window.location.origin).href,window.history.pushState({...window.history.state},``,t))}function $e(e){I=null,L=null,i={...i,view:{...i.view,...e}},We(),Je(),G()}let Y;async function tt(){let n;Y=new Promise(e=>{n=e}),ie?.abort();let r=new AbortController;ie=r;let a=AbortSignal.any([e.signal,r.signal]),l=e.props.path,m=i.view,h=I&&I.path===l?I:null,_=K(),v=JSON.stringify([_,q().page,l]),y=Ae(m);p=!0,f=``,D!==v&&(o=null,c=null,u=[],L=null,d={}),G();try{if(h){let e=await Q(`${W.fileReviewApi.source.href()}?${new URLSearchParams(h)}`,t.token,a,s);if(e.path!==h.path||e.commit!==h.commit)throw new Z(`The source response belongs to another commit or file.`,`response`);a.aborted||(L=e,D=v)}else if(y)for(let e=0;e<2;e++){let n=await Q(`${W.fileReviewApi.compare.href()}?${Dt(y)}`,t.token,a,g);if(n.comparison.mode!==y.mode)throw new Z(`The service returned a different comparison.`,`response`);let r=Math.min(q().page,Math.max(0,Math.ceil(n.entries.length/20)-1)),i=q().selection?.path;i&&m.multiple&&n.entries.some(e=>e.path===i)&&(r=Math.floor(n.entries.findIndex(e=>e.path===i)/20)),r!==q().page&&J({...q(),page:r});let o=m.multiple?n.entries.slice(r*20,(r+1)*20).map(e=>e.path):n.entries.filter(e=>e.path===l).map(e=>e.path);try{let e=await Ot(n,o,t.token,a);!a.aborted&&K()===_&&(c=n,u=e.diffs,d=e.failures,D=JSON.stringify([_,r,l]));break}catch(t){if(e===0&&t instanceof Z&&t.status===409)continue;throw t}}else if(l){let e=D!==v&&Me?Fe(Me,l):null;e&&(o=e,D=v,p=!1,G());let n=await Q(`${W.filesApi.read.href()}?${new URLSearchParams({path:l})}`,t.token,a,ae);if(n.entry.path!==l)throw new Z(`The source response belongs to another file.`,`response`);if(Me&&Ye(Me,n).catch(()=>{}),!a.aborted&&(o=o?.revision===n.revision&&o.entry.path===n.entry.path?o:n,D=v,j?.observe(n),Ee?.path===l)){let e=Ee;Ee=void 0;try{J(Qt(n,e),!0),Te=`Search match at ${e.startLine}:${e.startColumn}. Any unsaved draft is retained.`}catch(e){Te=$t(e)}}}}catch(e){a.aborted||(f=$t(e))}finally{ie===r&&(p=!1,G()),n()}}async function nt(n=!1){S?.abort();let r=e.props.path;if(!r){h=null;return}let a=new AbortController;S=a;let o=AbortSignal.any([e.signal,a.signal]),s=new URLSearchParams({path:r,limit:`25`});n&&h?.nextCursor&&h.revision?(s.set(`revision`,h.revision),s.set(`cursor`,h.nextCursor)):i.view.mode===`commits`&&s.set(`revision`,i.view.target),ee=!0,te=``,G();try{let e=await Q(`${W.fileReviewApi.history.href()}?${s}`,t.token,o,ne);if(e.path!==r)throw new Z(`The history response belongs to another path.`,`response`);o.aborted||(h=e)}catch(e){o.aborted||(te=$t(e))}finally{S===a&&(ee=!1,G())}}function it(t){if(i.view.multiple&&c){let e=c.entries.findIndex(e=>e.path===t);J({...Ie(),page:Math.max(0,Math.floor(e/20))}),E=``}e.props.onSelect(t),G()}function ot(t,n){let r=n===`parent`&&t.parents[0]?{base:t.parents[0],target:t.commit}:n===`base`?{base:t.commit}:{target:t.commit};v=!1,$e({mode:`commits`,...r}),t.path!==e.props.path&&e.props.onSelect(t.path)}async function st(){let t=e.props.path,n=i.view.mode;if(!t||!j)return;if(n===`working`){for((!c||c.comparison.mode!==`working`)&&await tt();p&&Y;)if(await Y,e.signal.aborted||e.props.path!==t||i.view.mode!==n)return;if(e.signal.aborted||e.props.path!==t||i.view.mode!==n)return}let r=u.find(e=>e.entry.path===t),a=i.view.mode===`working`&&r?.newFile?.contents!==null&&r?.newFile?.revision;j.begin(t,a?`diff`:`file`,a?{workingRevision:r.newFile.revision,file:r.oldFile?.contents!==null&&r.oldFile?{name:r.oldFile.name,contents:r.oldFile.contents}:null}:void 0)}function ct(e){M=e,Be(`bud:editor-preferences:v1`,JSON.stringify(e)),G()}function lt(){let e=j?.state?.draft;if(!e)return;let t=URL.createObjectURL(new Blob([new TextEncoder().encode(e.contents)],{type:`application/octet-stream`})),n=window.document.createElement(`a`);n.href=t,n.download=e.path.split(`/`).at(-1)??`draft.txt`,n.click(),setTimeout(()=>URL.revokeObjectURL(t),0)}async function ut(t){let n=l(t.conflict);n&&j&&(t.entry.path!==e.props.path&&e.props.onSelect(t.entry.path),F={path:t.entry.path,conflict:n},await j.begin(t.entry.path),G())}function dt(t,n=!1){if(!He(t)){window.location.assign(qe(t.id));return}z=t.id,e.props.comments.loadThread(t.id),Ne(),B=void 0,he=``;let r=H.find(e=>e.thread.id===t.id);if(j?.state?.draft.path===t.anchor.path&&!n){G();return}let a=t.anchor.side===`old`&&r?.source.side===void 0&&r?.resolution.state===`outdated`,o=!n&&!a?r:void 0,s=o?.source.viewPath??o?.source.path??t.anchor.path;t.anchor.commit&&(n||!o)?(I={path:t.anchor.path,commit:t.anchor.commit},s=t.anchor.path,i={...i,view:{...i.view,mode:`source`,multiple:!1}},j?.close()):o||(I=null,i={...i,view:{...i.view,mode:t.anchor.side===`old`?`working`:`source`,multiple:!1}}),s!==e.props.path&&e.props.onSelect(s),Se=t.id,(!o||s!==e.props.path)&&(E=``),G()}function ft(t,n=!1){if(e.props.comments.ready&&e.props.comments.snapshot.capabilities.create){Ne(),ge=V,z=void 0,he=``;try{let e=j?.state;if(n&&e&&($(e.draft)||e.conflict||e.saving))throw Error(`Save this draft before creating a code comment. Existing discussions remain available, and your draft is kept.`);B=Yt(t,n&&e&&t.side!==`deletions`?[{path:e.draft.path,revision:e.draft.baseRevision,contents:e.draft.contents,commit:null}]:ye,n?void 0:q().revision)}catch(e){B=void 0,he=$t(e)}G()}}async function pt(t){if(!B)throw Error(`Select code lines again before commenting.`);if(j?.state&&$(j.state.draft))throw Error(`Save your draft before sending this code comment. The message is kept.`);z=(await e.props.comments.write({anchor:B,body:t})).thread.id,B=void 0,G()}let mt=r((n,r)=>{Oe=n,se=!0;try{A=Bt(t.id,kt);let e=O(`bud:editor-preferences:v1`);M=ze(JSON.parse(typeof e==`string`?e:`null`))}catch(e){f=$t(e)}A&&(j=Wt({signal:r,drafts:A,read:(e,n)=>Q(`${W.filesApi.read.href()}?${new URLSearchParams({path:e})}`,t.token,n,ae),save:(e,n)=>Q(W.fileSavesApi.save.href(),t.token,n,y,fetch,{body:e}),onChange:G,onSaved:()=>{E=``,G()}}),e.props.registerDraftGuard?.(j.guard,r)),P=Kt({signal:r,prepare:(e,n)=>Q(W.fileReviewActionsApi.prepare.href(),t.token,n,m,fetch,{body:e}),apply:(e,n)=>Q(W.fileReviewActionsApi.apply.href(),t.token,n,C,fetch,{body:e}),recoveries:e=>Q(W.fileReviewActionsApi.recoveries.href(),t.token,e,_),guard(e){if(j?.state?.saving)throw Error(`Wait for the current save to finish before reviewing changes.`);if(e.some(e=>{let t=A?.get(e);return t&&$(t)}))throw Error(`Save or explicitly discard the unsaved draft for this file before applying review actions. Your draft has been kept.`)},async onApplied(t){t.target===`worktree`&&j?.close(),F&&t.changedPaths.includes(F.path)&&t.target===`index`&&(F=void 0,j?.close()),E=JSON.stringify([K(),q().page,e.props.path]),de=e.props.refresh;let n=tt();for(;;){let t=Y;if(await n,e.signal.aborted||Y===t||!Y)break;n=Y}if(f)throw Error(`The write completed, but the review could not refresh: ${f}`)},onChange:G}),window.addEventListener(`beforeunload`,e=>{A?.persist(),A?.dirty.length&&(e.preventDefault(),e.returnValue=``)},{signal:r});try{i=Ue(O(`bud:review:${t.id}:v1`),t.id)}catch{}ht(e.props.href),w=e.props.href;let a=()=>{re=window.document.documentElement.dataset.theme===`dark`?`dark`:`light`,G()},o=new MutationObserver(a);o.observe(window.document.documentElement,{attributes:!0,attributeFilter:[`data-theme`]}),a(),bt({signal:r,renderOptions:{theme:pe,lineDiffType:i.view.highlights}}).then(async e=>{await e.ready,r.aborted||(b=e,x=!0,G())}).catch(()=>{x=!0,G()}),r.addEventListener(`abort`,()=>{ie?.abort(),S?.abort(),o.disconnect(),clearTimeout(oe),b?.dispose(),A?.persist(),Be(`bud:review:${t.id}:v1`,JSON.stringify(i))},{once:!0})});function ht(n){let r=new URL(n);V=e.props.conversation?.id??null,ge=null,V||(I=null,L=null);let a=Re(r,t.id);Qe(r,t.id).foreign&&(a={view:{mode:`source`,multiple:!1}}),a&&(i={...i,view:{...i.view,...a.view}},a.position&&(i=Le(i,Ze(i.view,a.position.selection?.path??e.props.path),a.position))),E=``}return()=>{if(se){(w!==e.props.href||T!==e.props.conversation?.id)&&(w=e.props.href,T=e.props.conversation?.id,ce!==w&&ht(w),ce=void 0);let t=e.props.searchSelection;t&&t.id!==we&&(we=t.id,Ee=t.match,Te=``,e.queueTask(()=>{j?.close(),F=void 0,$e({mode:`source`,multiple:!1}),E=``,G()})),N!==e.props.path&&(N=e.props.path,F=void 0,I?.path!==e.props.path&&(I=null,L=null),e.queueTask(()=>j?.closeOtherPath(e.props.path)));let n=JSON.stringify([K(),q().page,e.props.path]);(n!==E||de!==e.props.refresh)&&(E=n,de=e.props.refresh,e.queueTask(()=>{tt()}));let r=JSON.stringify([e.props.path,i.view.mode===`commits`?i.view.target:e.props.repository?.head]);if(v&&r!==ue&&(ue=r,e.queueTask(()=>{nt()})),b&&k!==i.view.highlights){k=i.view.highlights;let t=b;e.queueTask(()=>{t.pool.setRenderOptions({lineDiffType:i.view.highlights}).catch(t=>{e.signal.aborted||(f=`Could not update highlighting. ${$t(t)}`,G())})})}}let r=j?.state,s=e.props.comments;if(z&&s.ready&&!s.snapshot.threads.find(e=>e.id===z)?.messagesLoaded&&!s.loadingThread(z)){let t=z;e.queueTask(()=>{s.loadThread(t)})}let l=JSON.stringify([o?.entry.path,o?.revision,L?.path,L?.commit,L?.file?.revision,u.map(e=>e.revision),r?.key,r?.draft.baseRevision]);if((l!==be||xe!==s.version)&&(be=l,xe=s.version,ye=Jt(o,u,L),H=Xe(s.snapshot.threads,ye)),Ce!==r?.key&&(Ce=r?.key,U=void 0),r&&U&&(H=[...U]),V&&V!==ge&&s.loaded&&!p&&(o||L||c||f)){let t=s.snapshot.threads.find(e=>e.id===V);if(t)ge=V,e.queueTask(()=>dt(t,e.props.conversation?.original??!1));else{R=!0;let t=V;e.queueTask(()=>{s.loadThread(t)})}}if(Se&&!p){let t=H.find(e=>e.thread.id===Se);if(t){Se=null;let n=qt(t);n&&e.queueTask(()=>J(n,!0))}}let m=R&&s.ready;m!==je&&(je=m,e.queueTask(()=>e.props.onComments?.(m)));let g=A?.dirty.map(e=>e.path)??[];g.join(`\0`)!==ke&&(ke=g.join(`\0`),e.queueTask(()=>e.props.onDrafts?.(g)));let _={threads:s.snapshot.threads,locations:H,version:s.version,selected:z,onShow:()=>{Ne(),G()},onOpen:e=>{let t=s.snapshot.threads.find(t=>t.id===e);t&&dt(t)},onCreate:s.snapshot.capabilities.create?e=>ft(e):void 0,onLocations:e=>{j?.state?.key===r?.key&&(U=e,G())}};return n(`div`,{class:`flex h-full min-h-0 flex-col`,mix:mt,children:[(s.loaded?!s.ready:t.storage.threads?.state!==`ready`)?n(a,{as:`p`,variant:`ui-caption`,tone:`muted`,role:`status`,class:`shrink-0 border-b border-line px-3 py-1.5`,children:rt}):null,Te?n(a,{as:`p`,variant:`ui-caption`,role:`status`,class:`shrink-0 border-b border-line px-3 py-1.5`,children:Te}):null,j?.openError?n(a,{as:`p`,variant:`ui-caption`,role:`alert`,class:`shrink-0 border-b border-line px-3 py-1.5 text-red-600 dark:text-red-400`,children:j.openError}):null,j?.opening?n(a,{as:`p`,variant:`ui-caption`,role:`status`,class:`sr-only`,children:`Reading current file for editing…`}):null,r&&j&&F?.path===r.draft.path?n(fe,{chrome:e.props.chrome,file:{name:r.draft.path,contents:r.draft.contents,cacheKey:r.draft.baseRevision},dirty:$(r.draft),saving:r.saving,stale:r.conflict,error:r.error,status:r.status,theme:re,workerPool:b?.pool,onChange:j.change,onSave:()=>{j?.save()},onMarkResolved:()=>{F&&P?.prepare({kind:`mark-resolved`,path:F.path,expectedRevision:r.draft.baseRevision,conflict:F.conflict})},onEdit:()=>{F=void 0,j?.begin(r.draft.path),G()},onClose:()=>{F=void 0,j?.close(),E=``,G()}},`merge:${r.key}`):r&&j?n(Ve,{chrome:e.props.chrome,file:r.file,oldFile:r.oldFile,initialMode:r.mode,sessionKey:r.key,comments:s.ready?{..._,onCreate:s.snapshot.capabilities.create?e=>ft(e,!0):void 0}:void 0,commentRevision:r.draft.baseRevision,baselineLabel:r.baselineLabel,dirty:$(r.draft),saving:r.saving,conflict:r.conflict,reviewingConflict:!!r.latest,status:r.status,error:r.error,storageWarning:A?.warning??``,preferences:M,theme:re,workerPool:b?.pool,onChange:j.change,onSave:()=>{j?.save()},onClose:()=>{j?.close(),E=``,G()},onDiscard:()=>{j?.discard()},onDownload:lt,onCheckLatest:()=>{j?.checkLatest()},onAcceptMerge:j.acceptMerge,onPreferences:ct},r.key):n(ve,{chrome:e.props.chrome,path:e.props.path,repository:e.props.repository,contextKey:K(),view:i.view,position:q(),document:x?o:null,source:x?L:null,comments:s.ready?_:void 0,snapshot:c,diffs:x?u:[],failures:d,loading:p||!x,error:f,history:h,historyOpen:v,historyLoading:ee,historyError:te,theme:re,workerPool:b?.pool,onEdit:t.files.edit&&j&&e.props.path&&!I?st:void 0,onReviewAction:P?e=>{P?.prepare(e)}:void 0,onReviewUndo:P?()=>{P?.recoveries()}:void 0,onResolve:e=>{ut(e)},editLabel:e.props.path&&A?.get(e.props.path)&&$(A.get(e.props.path))?`Resume draft`:`Edit file`,onChange:$e,onPosition:J,onSelect:it,onPage:e=>{J({...Ie(),page:e},!0)},onRetry:()=>{tt()},onHistory:()=>{v=!v,v?ue=``:S?.abort(),G()},onHistoryPage:e=>{nt(e)},onHistoryRevision:ot,onCopyLink:async t=>{let n=t.selection?.path??e.props.path,r=c?.comparison.mode===`commits`?{...i.view,...c.comparison}:i.view,a=et(n,r,t);await navigator.clipboard.writeText(new URL(a,window.location.origin).href)}}),R&&s.ready?n(me,{threads:s.snapshot.threads.filter(He),renderThreadLinks:e=>n(at,{part:`links`,project:t,thread:e,canLink:s.snapshot.capabilities.link,busy:s.busy,onChange:async()=>{await s.load(),await s.loadThread(e.id,!0)}}),renderThreadActions:e=>n(at,{part:`action`,project:t,thread:e,canLink:s.snapshot.capabilities.link,busy:s.busy,onChange:async()=>{await s.load(),await s.loadThread(e.id,!0)}}),capabilities:s.snapshot.capabilities,selected:z,currentPath:e.props.path,locations:H,draft:B,loaded:s.loaded,busy:s.busy,now:s.now,error:he||s.error,onSelect:e=>dt(e),onCloseThread:()=>{z=void 0,G()},onClose:Pe,onWrite:s.write,onCreate:pt,onCancelDraft:()=>{B=void 0,G()},onReload:()=>{s.load()},onSync:s.snapshot.capabilities.sync?()=>{s.sync().catch(()=>{})}:void 0,onOriginal:e=>dt(e,!0),onCopyLink:e=>navigator.clipboard.writeText(new URL(qe(e.id),window.location.origin).href)}):null,P?.state?n(_e,{state:P.state,theme:re,onApply:()=>{P?.apply()},onClose:P.close,onUndo:e=>{P?.prepare({kind:`undo`,recoveryId:e})},onRecoveries:()=>{P?.recoveries()}}):null]})}}function tn(e){return e instanceof Error?e.message:`Could not load project files.`}function nn(e,t,n){let r=new URLSearchParams({includeIgnored:String(t.includeIgnored),includeDotfiles:`true`});return Promise.all([Q(`${W.filesApi.index.href()}?${r}`,e,n,se),Q(W.fileReviewApi.repository.href(),e,n,te)])}async function rn(e,t,n){let r;try{r=k(O(`bud:files:${e.id}:v1`),e.id)}catch{r=$e(e.id)}let i=Qe(n,e.id);i.explicit&&(r=A(r,i.path));let a=await Ke(e),o=q(a);if(o&&o.includeIgnored===r.includeIgnored){let{index:e,repository:t}=o;return r=U(r,null,e,t),{view:r,index:e,repository:t,error:``,store:a,stored:!0}}try{let[n,i]=await nn(e.token,r,t);return await Pe(a,n,i,r.includeIgnored),{view:U(r,null,n,i),index:n,repository:i,error:``,store:a,stored:!1}}catch(e){return t.throwIfAborted(),{view:r,index:null,repository:null,error:tn(e),store:a,stored:!1}}}function an(e){let t=e.props.project,{view:i,index:a,repository:o,error:s,store:c}=e.props.initial,l=()=>{let e=q(c);if(!e||e.includeIgnored!==i.includeIgnored)return;let t=i.selected,n=i.selected!==null&&d(i.selected);i=U(i,n?null:a,e.index,e.repository),a=e.index,o=e.repository,t!==i.selected&&F(!0),M()};function d(e){try{return Bt(t.id,kt).dirty.some(t=>t.path===e)}catch{return!1}}let f=[c.listings.subscribeChanges(l),c.files.subscribeChanges(l),c.repositories.subscribeChanges(l)],m=!1,g=e.props.href,_,y=!1,te=``,ne,b,x,ie=!1,ae=!1,S=!1,se=!1,C=!1,w=0,T=!1,ce=0,E,D=[],le=!1,O=Zt({signal:e.signal,onChange:M,request:(e,n)=>Q(`${W.fileSearchApi.search.href()}?${Xt(e)}`,t.token,n,oe)});function ue(){O.cancel(``),T=!1,M()}let de=St(),k=it({store:Ke(t),token:t.token,signal:e.signal,onChange:M}),fe,pe={},j=Et({signal:e.signal,index:()=>a,guards:de,onChange(){j.state?.phase===`applying`&&(ne?.abort(),se=!0),M()},transport:{prepare:(e,n)=>Q(W.fileMutationsApi.prepare.href(),t.token,n,ee,fetch,{body:e}),apply:(e,n)=>Q(W.fileMutationsApi.apply.href(),t.token,n,u,fetch,{body:{id:e.id,revision:e.revision}}),recoveries:e=>Q(W.fileMutationsApi.recoveries.href(),t.token,e,p)},async onApplied(e,t){i=tt(i,e.kind,t);let n=t.items.filter(e=>e.status===`applied`).length;n?v.success(`${n} file action${n===1?``:`s`} completed`,{description:t.recoveryId?`Original contents are available in Recovery.`:void 0}):v.error(`The file action could not be applied`,{description:`Your project was refreshed.`}),F(!0),N(),C=!0,await R(!0),se=!1},async onUncertain(){C=!0,await R(!0),se=!1}});function M(){e.signal.aborted||e.update()}function N(){clearTimeout(b),b=setTimeout(()=>Be(`bud:files:${t.id}:v1`,JSON.stringify(i)),200)}function F(n){let r=Se(null),a=G(window.location.href)===e.props.conversation?.id;if(!e.props.active||!a&&window.location.pathname!==r&&!window.location.pathname.startsWith(`${r}/`)){y=!0;return}if(y=!1,a&&n)return;let o=Re(a?e.props.href:window.location.href,t.id),s=o?.view.mode&&o.view.mode!==`source`?et(i.selected,{...Ge(),...o.view}):Se(i.selected);window.location.pathname+window.location.search+window.location.hash!==s&&(_=new URL(s,window.location.origin).href,window.history[n?`replaceState`:`pushState`]({...window.history.state,budFile:i.selected},``,s))}function I(e){let t={...i,...e},n=t.includeIgnored!==i.includeIgnored;i=t,N(),M(),n&&z()}function me(e,t){let n=i.selected;i=A(i,e,t),te=``,N(),n!==e&&F(!1),M()}function L(e){if(D.includes(e)){me(e,[e]),v(`Save or discard this draft to close its tab`),M();return}let t=i.selected;i=Ne(i,e),N(),t!==i.selected&&F(!1),M()}async function R(n=!1){if(!n&&j.state?.phase===`applying`||ae){S=!0;return}ae=!0,m=!0,s=``;let r=new AbortController;ne=r;let l=AbortSignal.any([e.signal,r.signal]);M();try{let[e,n]=await nn(t.token,i,l);if(l.aborted)return;let r=i.selected;i=U(i,a,e,n),a=e,o=n,await Pe(c,e,n,i.includeIgnored),N(),r!==i.selected&&F(!0),C&&w++,C=!1}catch(e){l.aborted||(s=tn(e))}finally{r.abort(),ae=!1,m=!1,M(),S&&!e.signal.aborted&&(S=!1,z())}}function z(){clearTimeout(x),x=setTimeout(()=>{R()},100)}async function he(){if(m)return;let n=new AbortController;try{await Q(W.filesApi.refresh.href(),t.token,AbortSignal.any([e.signal,n.signal]),re),C=!0,await R()}catch(t){e.signal.aborted||(s=tn(t),M())}finally{n.abort()}}let ge=r((n,r)=>{if(ie)return;ie=!0;let a=Qe(e.props.href,t.id);_e(a.foreign),!a.foreign&&(a.explicit?a.path!==i.selected:!i.selected)&&F(!0),N();let o=Y(t.token).subscribe(`files`,{onEvent(e){let t=h(e);if(C=!0,se)S=!0;else{if(t.change.reset||ae||i.includeIgnored)return z();je(c,t).then(()=>{w++,C=!1,M()})}},onResync(){C=!0,z()}});e.props.initial.stored&&z(),k.load(),r.addEventListener(`abort`,()=>{o();for(let e of f)e.unsubscribe();ne?.abort(),clearTimeout(b),clearTimeout(x),Be(`bud:files:${t.id}:v1`,JSON.stringify(i))},{once:!0})});function _e(e){te=e?`This file link belongs to another project. Choose a file from this project to continue.`:``}return()=>{if(g!==e.props.href){if(g=e.props.href,_!==g){y=!1;let e=Qe(g,t.id);e.explicit&&(i=A(i,e.path)),_e(e.foreign)}_=void 0}return y&&e.props.active&&e.queueTask(()=>F(!0)),fe!==k.version&&(fe=k.version,pe=Me(k.snapshot.threads)),n(`div`,{class:`relative h-full min-h-0 ${le?`md:pe-80`:``}`,mix:ge,children:[n(P,{projectName:t.name,view:i,index:a,repository:o,loading:m,error:s,notice:te,commentCounts:pe,dirty:D,onViewChange:I,onSelect:me,onCloseTab:L,onSearch:()=>{T=!0,M()},onRefresh:()=>{he()},mutations:t.files.edit?{busy:j.busy,open:e=>j.open(e),move:(e,t)=>j.open({action:t===`rename`?`rename`:`move`,paths:e.map(e=>e.path),entries:e},!0),recoveries:()=>j.recoveries()}:void 0,sidebar:T?n(Te,{...O.state,onSearch:e=>{O.search(e)},onCancel:()=>O.cancel(),onClose:ue,onSelect:e=>{E={id:++ce,match:e},me(e.path,[e.path]),window.matchMedia(`(min-width: 768px)`).matches||ue()}}):void 0,content:r=>n(en,{project:t,href:e.props.href,path:i.selected,repository:o,refresh:w,store:c,chrome:r,onSelect:e=>me(e,[e]),onComments:e=>{le=e,M()},onDrafts:e=>{e.join(`\0`)!==D.join(`\0`)&&(D=e,M())},registerDraftGuard:de.register,comments:k,conversation:e.props.conversation,searchSelection:E})}),j.state?n(V,{state:j.state,onDestination:j.destination,onSubmit:()=>{j.submit()},onClose:j.close,onRecovery:j.recoveries}):null,j.recovery.open?n(B,{recoveries:j.recovery.recoveries,loading:j.recovery.loading,error:j.recovery.error,onClose:j.closeRecoveries,onRefresh:()=>{j.refreshRecoveries()},onRestore:(e,t)=>j.open({action:`restore`,recoveryId:e,paths:t})}):null]})}}var on=o({routes:x,load:({project:e,signal:t,url:n})=>rn(e,t,n),render:(e,{project:t,url:r,active:i,conversation:a})=>n(an,{project:t,initial:e,href:r.href,active:i,conversation:a})});export{on as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/workspace-9KxFcfyV.js","assets/jsx-B4XNFIzB.js","assets/on-mixin-iWnqUzq5.js","assets/component-DWct-Tq6.js","assets/children-N0l0v7XI.js","assets/run-B2H4brp5.js","assets/frame-D6XmK4Df.js","assets/attrs-mixin-CmlG_FtV.js","assets/create-element--E6NJ0nh.js","assets/preload-helper-BLdHbfdN.js","assets/loader-Q6-HPKft.js","assets/task-design-bktfn_Ok.js","assets/lru-BkhKJhvt.js","assets/method-DybmO5PB.js","assets/project-threads-DezXiVK6.js","assets/cloneFileDiffMetadata-CWfw01dG.js","assets/project-work-CB1JHqGW.js","assets/tasks-request-mWMk9pBo.js","assets/workspace-tab-Bg2MFdMB.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./run-B2H4brp5.js";import{t}from"./preload-helper-BLdHbfdN.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)}})();function n(e=document,t){let n=!1,r=e.defaultView?.HTMLElement??HTMLElement,i={capture:!0,signal:t};e.addEventListener(`keydown`,e=>{!e.metaKey&&!e.ctrlKey&&!e.altKey&&(n=!0)},i),e.addEventListener(`pointerdown`,()=>{n=!1,e.activeElement?.removeAttribute(`data-focus-method`)},i),e.addEventListener(`focusin`,e=>{n&&e.target instanceof r&&(e.target.dataset.focusMethod=`keyboard`)},i),e.addEventListener(`focusout`,e=>{e.target instanceof r&&delete e.target.dataset.focusMethod},i)}n();var r=e({async loadModule(e,n){if(e===`bud:workspace`&&n===`Workspace`){let{Workspace:e}=await t(async()=>{let{Workspace:e}=await import(`./workspace-9KxFcfyV.js`);return{Workspace:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]));return e}throw Error(`Unknown client entry: ${e}#${n}`)}});r.addEventListener(`error`,e=>{console.error(`Remix component error:`,e.error)}),await r.ready();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./jsx-B4XNFIzB.js";import{t}from"./component-DWct-Tq6.js";import{n}from"./on-mixin-iWnqUzq5.js";import{n as r}from"./attrs-mixin-CmlG_FtV.js";import{l as i,n as a,t as o}from"./loader-Q6-HPKft.js";import{t as s}from"./screen-Dfvzj6n2.js";import{Gn as c,Hn as l,Kn as u,L as d,Mn as f,Un as p,Vn as m,fn as h,gt as g,u as ee}from"./task-design-bktfn_Ok.js";import{At as _,it as v,jt as y,s as b}from"./project-threads-DezXiVK6.js";import{t as x}from"./project-comments-D897aU5O.js";import{r as S,t as C}from"./workspace-tab-Bg2MFdMB.js";import{n as w,r as te,t as ne}from"./project-branches-DpxQx-T4.js";function T(t){let r=``,o=null,s=!1,c=()=>{for(let e of o?.urls??[])URL.revokeObjectURL(e)};t.signal.addEventListener(`abort`,c,{once:!0});async function l(e){let{previews:n,route:i,theme:a,size:l}=t.props;r=e,s=!1;let u=await n.picture(i.id,a,l).catch(()=>null);r!==e||t.signal.aborted||(c(),o=u?{key:e,capture:u.capture,urls:u.images.map(e=>URL.createObjectURL(e))}:null,s=!u,t.update())}return()=>{let{route:c,theme:u,size:d,picking:f,inline:p}=t.props,m=`${c.id}\0${u}\0${d.id}`;m!==r&&l(m);let h=o?.key===m?o:null;return e(`div`,{class:p?`relative w-full`:`absolute inset-0 overflow-auto bg-board`,role:`img`,"aria-label":`${c.title} picture at ${d.width} pixels`,children:h?e(`div`,{class:`relative mx-auto ${f?`cursor-crosshair`:``}`,style:{width:`min(100%, ${h.capture.width}px)`},mix:n(`click`,e=>{if(!f)return;let t=e.currentTarget.getBoundingClientRect(),n=h.capture.width/t.width;f.onPick({path:c.path,element:null,point:{x:(e.clientX-t.left)*n,y:(e.clientY-t.top)*n,width:h.capture.width},client:{x:e.clientX,y:e.clientY}})}),children:h.urls.map((t,n)=>e(`img`,{src:t,alt:``,draggable:!1,class:`block w-full select-none`,style:{aspectRatio:`${h.capture.width} / ${h.capture.tiles[n]?.height??1}`}},t))}):e(`div`,{class:`grid place-items-center p-6 ${p?`min-h-40`:`size-full`}`,children:s?e(i,{as:`p`,variant:`ui`,tone:`muted`,class:`max-w-md text-center`,children:`This page has no picture at this viewport yet. It appears once its branch is captured.`}):e(a,{size:18,class:`text-muted`})})})}}var re=l({tabs:f(l({id:u(),src:u(),path:u(),title:u(),load:m(),branch:p(u())})),active:u()}),E=`Working tree`,D=12;function O(e,t){let[n,...r]=e.previews.viewports;return t===void 0?n:r.reduce((e,n)=>Math.abs(n.width-t)<Math.abs(e.width-t)?n:e,n)}function k(e,t){let n=t.replace(/#.*$/,``),r=n.replace(/\?.*$/,``);return e.find(e=>e.path===t)??e.find(e=>e.path===n)??e.find(e=>e.path===r)}function A(e,t){let n=new URL(e,`http://bud.local`),r=t.replace(/\/$/,``);return n.pathname.startsWith(`${r}/`)?`${n.pathname.slice(r.length)}${n.search}${n.hash}`:null}function j(e,t){return`${e.replace(/\/$/,``)}${t}`}function M(a){let s=a.props.project,l=s.targetOrigin,u=s.workingTree===!1,f=u?s.main??`main`:E,p=ne({project:s,signal:a.signal,onChange:()=>{a.signal.aborted||a.update()}}),m=new Map;function g(e){let t=m.get(e);return t||(t=w({project:s,signal:a.signal,...e===E?{}:{branch:e}}),m.set(e,t)),t}function M(){let e=p.list.branches.flatMap(e=>e.active&&e.captured?[{name:e.name,caption:e.captured.slice(0,7)}]:[]);return u?e:[{name:E,caption:`live`},...e]}let N=null,P,F=s.previews.viewports[0],I=``,L,R=a.props.href,z=e=>`bud:pages:${s.id}:${e}:v1`,B=x({store:b(s),token:s.token,signal:a.signal,onChange:()=>{a.signal.aborted||a.update()}}),V;function H(e){return k(s.routes,e)?.title??e.replace(/[?#].*$/,``)}function U(e,t){return{id:crypto.randomUUID(),src:e,path:e,title:H(e),load:0,...t&&t!==f?{branch:t}:{}}}function W(e){let t=U(e);return{tabs:[t],active:t.id}}function G(e){let t=A(a.props.href,a.props.root),n=c(re,_(z(e))),r=(n.success&&n.value.tabs.length?n.value:null)??W(t??s.routes[0]?.path??`/`);r.tabs.some(e=>e.id===r.active)||(r.active=r.tabs[0].id),L=r,t&&K().path!==t&&X(K().id,t,!1)}function K(){return L.tabs.find(e=>e.id===L.active)??L.tabs[0]}function q(){I&&y(z(I),L),a.signal.aborted||a.update()}function J(e,t){L={...L,tabs:L.tabs.map(n=>n.id===e?{...n,...t}:n)}}function Y(e){let{pathname:t,search:n,hash:r}=window.location,i=a.props.root;if(!a.props.active||t!==i&&!t.startsWith(`${i}/`))return;let o=j(i,K().path);`${t}${n}${r}`!==o&&(R=new URL(o,window.location.origin).href,window.history[e?`pushState`:`replaceState`]({...window.history.state},``,o))}function X(e,t,n=!0,r){let i=L.tabs.find(t=>t.id===e);i&&(J(e,{src:t,path:t,title:H(t),load:i.load+1,branch:r===void 0?i.branch:r===f?void 0:r}),e===L.active&&Y(n),q())}function Z(e,t,n){if(!t||L.tabs.length>=D)return X(K().id,e,!0,n);let r=U(e,n??K().branch),i=L.tabs.findIndex(e=>e.id===L.active)+1;L={tabs:[...L.tabs.slice(0,i),r,...L.tabs.slice(i)],active:r.id},Y(!0),q()}function ie(e,t){let n=k(s.routes,e.path);if(!n)return;let r=e.element,i=t===void 0?K().branch:t===f?void 0:t,o=u||t!==void 0||i?F:O(s,e.point?.width);V={route:n,pick:e,viewport:o,...i?{branch:i}:{},located:r===null?Promise.resolve(e.point&&{x:e.point.x,y:e.point.y}):te(s.token,n.id,s.previews.themes[0],r,a.signal,o.id)},a.update()}function Q(){let e=s.previews.themes,t=typeof document>`u`?void 0:document.documentElement.dataset.theme;return e.find(e=>e===t)??e[0]}function ae(){let e=M().map(e=>e.name),t=K().branch??f,n=t===e[0]?e[1]:t;N=N?null:[e[0],...n?[n]:[]],V=void 0,a.update()}function oe(){let r=s.previews.viewports,o=M();if(!u&&o.length<2&&!s.routes.some(e=>e.flow))return;let c=N;return{source:c?`Comparing ${c.join(`, `)}`:`Pictures of ${K().branch??f}`,shows:e=>u||!!e.branch||!!c||!!k(s.routes,e.path)?.flow,actions:e(t,{children:[e(d,{tooltip:!0,icon:`compare`,label:c?`Stop comparing`:`Compare branches side by side`,active:!!c,disabled:!c&&o.length<2,mix:n(`click`,ae)}),c?e(`div`,{role:`group`,"aria-label":`Branches compared`,class:`flex min-w-0 items-center gap-1.5`,children:c.map((t,n)=>e(ee,{label:`Compared branch ${n+1}`,value:t,class:`max-w-52`,options:o.map(e=>({value:e.name,label:e.name,description:e.caption})),onChange:e=>{let t=[...c];t[n]=e,N=t,a.update()}},n))}):null]}),toolbar:e(`div`,{class:`flex min-w-0 items-center gap-0.5`,children:r.length>1?r.map(t=>e(d,{tooltip:!0,icon:t.mobile?`mobile`:`desktop`,label:`Show ${t.name} (${t.width})`,active:t.id===F.id,mix:n(`click`,()=>{F=t,V=void 0,a.update()})},t.id)):null}),render:(t,n)=>{let r=k(s.routes,t.path);return r?c?e(`div`,{class:`absolute inset-0 overflow-auto bg-board`,children:e(`div`,{class:`flex w-full items-start justify-center gap-4 p-4`,children:c.map(t=>e(`section`,{"aria-label":`${t} picture`,class:`flex min-w-0 flex-1 flex-col gap-2`,style:{maxWidth:`${F.width}px`},children:[e(i,{variant:`ui-caption`,tone:`muted`,class:`truncate`,children:t}),e(T,{previews:g(t),route:r,theme:Q(),size:F,picking:n&&{onPick:e=>{P=t,n.onPick(e)}},inline:!0})]},t))})}):e(T,{previews:g(t.branch??f),route:r,theme:Q(),size:F,picking:n}):e(`div`,{class:`grid h-full place-items-center p-6`,children:e(i,{as:`p`,variant:`ui`,tone:`muted`,class:`max-w-md text-center`,children:`Only the pages in your routes have pictures.`})})}}}async function se(e){let t=V;if(!t)return;let n=await Promise.race([t.located,new Promise(e=>setTimeout(()=>e(null),15e3))]),r=t.viewport.width,i=n??(t.pick.point?{x:t.pick.point.x/t.pick.point.width*r,y:t.pick.point.y}:{x:r/2,y:0});await B.write({anchor:{pageId:t.route.id,pagePath:t.route.path,viewport:r,offsetX:Math.min(1,Math.max(0,i.x/r)),offsetY:Math.min(h,Math.max(0,i.y)),element:t.pick.element,...t.branch?{branch:t.branch}:{}},itemIds:[],body:e}),V===t&&(V=void 0),a.update()}function ce(e){return B.loaded?B.snapshot.capabilities.create?k(s.routes,e)?null:`Only pages in your routes take comments. Add this page to bud.config.`:`Comments here are read-only`:`Loading comments…`}I=S(),G(I);let $=r((e,t)=>{B.loaded||B.load(),I||(I=S(),G(I)),Y(!1);let n=C(()=>{I=S(),G(I),q()});t.addEventListener(`abort`,n,{once:!0})});return()=>{if(R!==a.props.href){R=a.props.href;let e=A(R,a.props.root);e&&e!==K().path&&X(K().id,e,!1)}if(!p.loaded&&!p.error)return e(`div`,{class:`h-full min-h-0`,mix:$,children:e(o,{label:`Loading branches…`})});let t=K();return!u&&typeof window<`u`&&new URL(l).origin===window.location.origin?e(`div`,{class:`grid h-full place-items-center p-6`,mix:$,children:e(i,{as:`p`,variant:`ui`,tone:`muted`,class:`max-w-md text-center`,children:`Your site is served from Bud's own address, so Pages can't show it. Serve it on its own port to browse it here.`})}):e(`div`,{class:`h-full min-h-0 min-w-0`,mix:$,children:e(v,{pages:s.routes,onOpen:(e,t,n)=>Z(e,t,n),origin:l,tabs:L.tabs,active:L.active,onSelect:e=>{L={...L,active:e},Y(!1),q()},onClose:e=>{if(L.tabs.length===1)return;let t=L.tabs.findIndex(t=>t.id===e),n=L.tabs.filter(t=>t.id!==e);L={tabs:n,active:L.active===e?n[Math.min(t,n.length-1)].id:L.active},Y(!1),q()},onNew:()=>Z(s.routes[0]?.path??`/`,!0),onNavigate:(e,t)=>X(e,t),commenting:(B.loaded?B.ready:s.storage.threads?.state===`ready`)?{unavailable:ce(t.path),draft:V?{path:V.pick.path,label:V.pick.element?.label??`A spot on the page`,source:V.pick.element?.source??null}:null,busy:B.busy,onPicked:(e,t)=>{let n=N?P:void 0;P=void 0,ie(t,n)},onSubmit:se,onCancel:()=>{V=void 0,a.update()}}:void 0,pictures:oe(),design:s.designs.pages,sections:u||M().length>1?M().map(e=>({id:e.name,label:e.name,caption:e.caption})):void 0,section:t.branch??f,onLocation:(e,t)=>{J(e,{path:t.path,title:t.title||H(t.path)}),e===L.active&&Y(!1),q()}})})}}var N=s({routes:g,render:(t,{project:n,url:r,active:i,path:a})=>e(M,{project:n,href:r.href,root:a,active:i})});export{N as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Bn as e,Gn as t,Hn as n,In as r,Kn as i,Mn as a,Nn as o,Vn as s,mn as c}from"./task-design-bktfn_Ok.js";import{C as l,b as u,g as d,h as f,m as p,o as m,s as h,x as g,y as _}from"./project-threads-DezXiVK6.js";function v(e,t,n){return e?.captures.find(e=>e.theme===t&&(e.viewport?e.viewport===n.id:e.width===n.width))}function y(e,t){return`${e}\0${t.id}`}async function b(e,t,n,r,i,a){try{let o=await fetch(u.previewsApi.locate.href({id:t}),{method:`POST`,headers:{"X-Bud-Token":e,"Content-Type":`application/json`},credentials:`same-origin`,redirect:`error`,signal:i,body:JSON.stringify({theme:n,element:r,...a?{viewport:a}:{}})});if(!o.ok)return null;let{pin:s}=await o.json();if(s===null)return null;let[c]=d([s]);return c&&c.match!==`missing`&&c.x!==null&&c.y!==null?{x:c.x,y:c.y}:null}catch{return null}}var x=2,S=268435456;function C(e,t,n=S){let r=new Set(e.flatMap(e=>e.captures.map(({hash:e})=>e))),i=new Map;for(let e of t.filter(e=>!r.has(e.capture)).toSorted((e,t)=>t.storedAt-e.storedAt))i.set(e.capture,[...i.get(e.capture)??[],e]);let a=new Map,o=[],s=[];for(let e of i.values()){let t=`${e[0].theme}\0${e[0].route}`,n=(a.get(t)??0)+1;a.set(t,n),n>x?o.push(...e.map(e=>e.hash)):s.push(e)}let c=new Set(o),l=t.reduce((e,t)=>e+(c.has(t.hash)?0:t.image.size),0);for(let e of s.toReversed()){if(l<=n)break;for(let t of e)o.push(t.hash),l-=t.image.size}return o}async function w(e,t){let n=t=>{let n=C(e.previews.toArray.map(g),e.images.toArray.map(g),t);return n.length?l(e.images,{delete:n}):void 0};try{await l(e.images,{upsert:[t]})}catch{try{await n(0),await l(e.images,{upsert:[t]})}catch{return!1}}return await n()?.catch(()=>{}),!0}var T={active:0,waiting:[],limit:/^h[23]/.test(globalThis.performance?.getEntriesByType(`navigation`)[0]?.nextHopProtocol??``)?12:4};async function E(e,t,n){for(;T.active>=T.limit;)await new Promise(e=>T.waiting.push(e)),n.aborted&&(T.waiting.shift()?.(),n.throwIfAborted());T.active++;try{return await(await D(u.previewsApi.image.href({hash:e}),t,n)).blob()}finally{T.active--,T.waiting.shift()?.()}}async function D(e,t,n,r=`GET`){let i=await fetch(e,{method:r,headers:{"X-Bud-Token":t},credentials:`same-origin`,redirect:`error`,signal:n});if(!i.ok){let e=await i.json().catch(()=>null);throw Error(typeof e?.error==`string`?e.error:`Preview request failed (${i.status}).`)}return i}function O(e){return e instanceof Error?e.message:`Bud could not load this preview.`}function k(e){let{project:t,signal:n}=e,r=e.branch??null,i=e=>m(r,e),a=e=>r?e.startsWith(`${r}\0`)?e.slice(r.length+1):null:e.includes(`\0`)?null:e,o=r?`?branch=${encodeURIComponent(r)}`:``,s=t.token,d=null,f=new Map,x=new Map,S=new Map,C=new Map,T=new Map;function k(e){return f.get(e)??{images:{},refreshing:!1,error:``}}function A(e){for(let t of x.get(e)??[])t()}function j(e,t){f.set(e,{...k(e),...t}),A(e)}function M(e){let t=d?.previews.get(i(e));return t?g(t):null}async function N(e){!d||(T.get(e.id)??-1)>e.sequence||(T.set(e.id,e.sequence),await l(d.previews,{upsert:[e]}))}let P=new Map;function F(e){(e.branch??null)===r&&(P.set(e.id,e),P.size===1&&requestAnimationFrame(()=>void I()))}async function I(){if(!d||!P.size)return;let e=[...P.values()];P.clear();for(let t of e)T.set(t.id,t.sequence);await l(d.previews,{upsert:e})}function L(e){for(let t of[...e?.srcs??[],...e?.thumbnails??[]])URL.revokeObjectURL(t)}async function R(e,t,r,i){let a=d.images.get(i)?.image;return a||(a=await E(i,s,n),await w(d,{hash:i,capture:r,image:a,route:e,theme:t,storedAt:Date.now()}),a)}let z=new Set;async function B(e,t,r){let i=y(t,r),a=k(e).images[i],o=`${i}\0${e}\0${a?.capture.hash}`;if(!d||!a||a.srcs.length||z.has(o))return;z.add(o);let s=a.capture,c=[];try{c=(await Promise.all(s.tiles.map(n=>R(e,t,s.hash,n.hash)))).map(e=>URL.createObjectURL(e));let r=k(e).images[i];if(n.aborted||r?.capture.hash!==s.hash||r.srcs.length){for(let e of c)URL.revokeObjectURL(e);return}j(e,{images:{...k(e).images,[i]:{...r,srcs:c}}})}catch(t){for(let e of c)URL.revokeObjectURL(e);!n.aborted&&k(e).images[i]?.capture.hash===s.hash&&j(e,{error:O(t)})}finally{z.delete(o)}}async function V(e,t,r){let i=y(t,r),a=v(M(e),t,r),o=k(e).images[i],s=`${i}\0${e}`;if(!d||!a||C.get(s)===a.hash)return;if(o?.capture.hash===a.hash){o.capture.revision!==a.revision&&j(e,{images:{...k(e).images,[i]:{...o,capture:a}}});return}C.set(s,a.hash);let c=[];try{let o=a.thumbnails.length?a.thumbnails:a.tiles;c=(await Promise.all(o.map(n=>R(e,t,a.hash,n.hash)))).map(e=>URL.createObjectURL(e));let s=v(M(e),t,r);if(n.aborted||s?.hash!==a.hash){for(let e of c)URL.revokeObjectURL(e);return}L(k(e).images[i]);let l=a.thumbnails.length?{capture:s,srcs:[],thumbnails:c}:{capture:s,srcs:c,thumbnails:[]};j(e,{images:{...k(e).images,[i]:l},error:``})}catch(i){for(let e of c)URL.revokeObjectURL(e);let o=v(M(e),t,r);!n.aborted&&o?.hash===a.hash&&j(e,{error:O(i)})}finally{C.get(s)===a.hash&&C.delete(s)}}async function H(e){try{let t=await D(`${u.previewsApi.show.href({id:e})}${o}`,s,n);await N(p(await t.json()))}catch(t){n.aborted||j(e,{error:O(t)})}}function U(e){A(e);for(let{theme:t,size:n}of S.get(e)?.values()??[])V(e,t,n)}let W=_(s).subscribe(`previews`,{onEvent(e){F(p(e))},onResync(){T.clear();for(let e of x.keys())H(e)}}),G=()=>{},K=h(t);return K.then(async e=>{if(n.aborted)return;d=e;let r=new Set(t.routes.map(e=>e.id)),i=e.previews.toArray.filter(e=>!r.has(e.id));l(e.previews,{delete:i.map(e=>m(e.branch??null,e.id))});let o=e.previews.subscribeChanges(e=>{for(let t of e){let e=a(String(t.key));e!==null&&U(e)}});G=()=>o.unsubscribe(),I();for(let e of x.keys())U(e),H(e)}),n.addEventListener(`abort`,()=>{W(),G();for(let{images:e}of f.values())for(let t of Object.values(e))L(t)},{once:!0}),{get:e=>({preview:M(e),...k(e)}),watch(e,t){let n=x.get(e);return n||(n=new Set,x.set(e,n),d&&H(e)),n.add(t),()=>{n.delete(t)}},slices(e,t,n){B(e,t,n)},show(e,t,n){let r=S.get(e)??new Map,i=y(t,n);r.has(i)||(S.set(e,r.set(i,{theme:t,size:n})),V(e,t,n))},async describe(e,t,i,a){try{let o=await fetch(u.previewsApi.describe.href({id:e}),{method:`POST`,headers:{"X-Bud-Token":s,"Content-Type":`application/json`},credentials:`same-origin`,redirect:`error`,signal:n,body:JSON.stringify({theme:t.theme,hash:t.hash,x:i,y:a,...r?{branch:r}:{}})});if(!o.ok)return null;let{element:l}=await o.json();return l===null?null:c(l)}catch{return null}},locate:(e,t,r,i)=>b(s,e,t,r,n,i?.id),async picture(e,t,r){let i=await K;M(e)||await H(e);let a=v(M(e),t,r);return a?{capture:a,images:await Promise.all(a.tiles.map(async e=>i.images.get(e.hash)?.image??await E(e.hash,s,n)))}:null},async refresh(e){if(!r){j(e,{refreshing:!0,error:``});try{let t=await D(u.previewsApi.refresh.href({id:e}),s,n,`POST`);await N(p(await t.json())),j(e,{refreshing:!1})}catch(t){n.aborted||j(e,{refreshing:!1,error:O(t)})}}}}}var A=i().refine(e=>{try{return f(e)===e}catch{return!1}}),j=i().refine(e=>/^[a-f0-9]{40,64}$/.test(e)),M=n({working:e(A),main:e(A),branches:a(n({name:A,main:o(),active:o(),commit:j,subject:e(i().refine(e=>e.length<=1e3)),captured:e(j),state:r([`idle`,`queued`,`building`,`capturing`,`ready`,`failed`]),error:e(i().refine(e=>e.length<=8e3)),progress:e(n({captured:s(),total:s()}))})).refine(e=>e.length<=500)});function N(e){let n=t(M,e);if(!n.success)throw TypeError(`The companion returned an invalid branch list.`);return n.value}function P(e){let{project:t,signal:n}=e,r={working:null,main:null,branches:[]},i=!1,a=!1,o=``;function s(){n.aborted||e.onChange()}async function c(e,r=`GET`){let i=await fetch(e,{method:r,headers:{"X-Bud-Token":t.token},credentials:`same-origin`,redirect:`error`,signal:n}),a=await i.json().catch(()=>null);if(!i.ok)throw Error(typeof a?.error==`string`?a.error:`Bud could not load branches.`);return N(a)}async function l(){try{r=await c(u.branchesApi.list.href()),i=!0,o=``}catch(e){n.aborted||(o=e instanceof Error?e.message:String(e))}s()}let d=_(t.token).subscribe(`branches`,{onEvent(e){try{r=N(e),i=!0,s()}catch{l()}},onResync(){l()}});n.addEventListener(`abort`,d,{once:!0}),l();let f=async e=>{a=!0,s();try{r=await c(e,`POST`),o=``}catch(e){n.aborted||(o=e instanceof Error?e.message:String(e))}finally{a=!1,s()}};return{get list(){return r},get loaded(){return i},get busy(){return a},get error(){return o},activate(e,t){return f(t?u.branchesApi.activate.href({name:e}):u.branchesApi.deactivate.href({name:e}))},capture(e){return f(u.branchesApi.capture.href({name:e}))}}}export{y as i,k as n,b as r,P as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{At as e,Dt as t,Et as n,Ot as r,T as i}from"./task-design-bktfn_Ok.js";import{S as a,_ as o,b as s,i as c,n as l,r as u,s as d,v as f,x as p}from"./project-threads-DezXiVK6.js";function m(e,t,n,r=new Date){let i={...n.values};for(let t of e.fields)(t.role===`created`||t.role===`updated`)&&i[t.id]===void 0&&(i[t.id]=t.kind===`date`?r.toISOString().slice(0,10):r.toISOString());return{id:t,revision:null,values:i,relations:[],counts:{},contentLoaded:!1,extra:null}}function h(e,t){return{...e,values:{...e.values,...t.values}}}var g={close:[`done`,`cancelled`],reopen:[`unstarted`,`backlog`,`started`]};function _(e,t,n){let r=new Set(e.fields.map(e=>e.id)),i={...t.values};for(let[e,t]of Object.entries(n.input))r.has(e)&&(i[e]=t);let a=e.actions.find(e=>e.id===n.action)?.kind,o=a?g[a]:void 0,s=e.fields.find(e=>e.role===`status`),c=o?.map(t=>e.statuses.find(e=>e.category===t)).find(Boolean);return s&&c&&(i[s.id]=c.value),{...t,values:i}}var v={id:`pending`,name:`You`,email:``};function y(e,t,n,r){return{id:e,body:t.trim(),author:v,createdAt:r.toISOString(),parentId:n}}function b(e,t,n=new Date){let r=n.toISOString();return{id:e,status:`open`,anchor:t.anchor,itemIds:[...t.itemIds],messages:[y(e,t.body,null,n)],messageCount:1,messagesLoaded:!0,messagesTruncated:!1,createdAt:r,updatedAt:r,revision:null}}function x(e,t,n,r=new Date){return{...e,messages:e.messagesLoaded?[...e.messages,y(t,n.body,n.parentId,r)]:e.messages,messageCount:e.messageCount+1,updatedAt:r.toISOString()}}function S(e,t){return{...e,status:t.status}}var C=`Comments are stored by your storage adapter. Beads: run bd init in this project.`;function w(e=C){return{connection:{state:`unavailable`,adapter:null,message:e},capabilities:{create:!1,reply:!1,status:!1,link:!1,sync:!1,edit:!1,delete:!1},threads:[],truncated:!1}}async function T(t,r,i,a){try{let o=await f(E({itemId:r}),t,i,e),c=await Promise.all(o.threads.map(e=>e.messagesLoaded||e.anchor&&e.id!==a?e:f(s.comments.get.href({id:e.id}),t,i,n)));return{snapshot:{...o,threads:c},error:``}}catch(e){return i.throwIfAborted(),{snapshot:null,error:e instanceof Error?e.message:`Could not load the discussion.`}}}function E(e){let n=new URLSearchParams(t(e));return s.comments.list.href()+(n.size?`?${n}`:``)}function D(e){return e.truncated?new Set(e.threads.map(e=>e.id)):null}function O(e){return e.toSorted((e,t)=>e.createdAt.localeCompare(t.createdAt)||e.id.localeCompare(t.id))}function k(e,t={},n=null){let r=e.discussions.get(`threads`);if(!r)return null;let{connection:i,capabilities:a}=p(r);return{connection:i,capabilities:a,threads:O(e.threads.toArray.map(p).filter(e=>c(e,t)&&(!n||n.has(e.id)))),truncated:!!n}}async function A(t,n,r=fetch){let i=await d(t),a=k(i);if(a)return{snapshot:a,error:``,stored:!0};try{let a=await f(s.comments.list.href(),t.token,n,e,r);return await u(i,a),{snapshot:a,error:``}}catch(e){return n.throwIfAborted(),{snapshot:null,error:e instanceof Error?e.message:`Could not load comments.`}}}function j(d){let p=t(d.filter??{}),m=d.initial?.snapshot??w(),h={...m,threads:O(m.threads.filter(H))},g=D(m),_,v=!!d.initial?.snapshot,y=!1,C=!1,T=d.initial?.error??``,A=Date.now(),j=0,M=0,N,P=new Map,F=new Set,I=Promise.resolve(d.store).then(async e=>{_=e,d.initial?.snapshot&&!d.initial.stored&&await u(e,d.initial.snapshot,p);let t=[e.discussions.subscribeChanges(R),e.threads.subscribeChanges(R)];d.signal.addEventListener(`abort`,()=>{for(let e of t)e.unsubscribe()},{once:!0}),R()});function L(){d.signal.aborted||d.onChange()}function R(){let e=_&&k(_,p,g);e&&(h=e,v=!0,A=Date.now(),j++,L())}function z(e,t,n,r){return f(e,d.token,t,n,d.fetcher,r)}async function B(e){await I,g=D(e),await u(_,e,p),R()}async function V(e){await I,g?.add(e.id),await l(_,e),R()}function H(e){return c(e,p)}function U(){N?.abort(),M++,y=!1;for(let e of P.values())e.abort();P.clear(),F.clear()}async function W(){if(C)return;U();let t=new AbortController,n=M;N=t;let r=AbortSignal.any([d.signal,t.signal]);y=!0,L();try{let t=await z(E(p),r,e);!r.aborted&&n===M&&(await B(t),T=``)}catch(e){!r.aborted&&n===M&&(T=e instanceof Error?e.message:`Could not load comments.`)}finally{n===M&&(y=!1,L())}}async function G(e,t=!1){if(r(e),C||P.has(e)||!t&&F.has(e))return;F.delete(e);let i=h.threads.find(t=>t.id===e);if(!t&&i?.messagesLoaded)return;let a=new AbortController,c=M;P.set(e,a);let l=AbortSignal.any([d.signal,a.signal]);L();try{let t=await z(s.comments.get.href({id:e}),l,n);if(t.id!==e)throw new o(`The comments service returned another discussion.`);if(!l.aborted&&c===M){if(await V(t),!H(t))throw new o(`This discussion is no longer part of this view.`);F.size||(T=``)}}catch(t){!l.aborted&&c===M&&(F.add(e),T=t instanceof Error?t.message:`Could not load the discussion.`)}finally{P.get(e)===a&&(P.delete(e),L())}}function K(e){if(C)throw Error(`Wait for the current comment operation to finish.`);if(!v)throw Error(`Load comments before saving.`);if(h.connection.state!==`ready`)throw Error(h.connection.message??`The comment adapter is unavailable.`);if(!h.capabilities[e])throw Error(`The comment adapter does not support this operation.`)}async function q(t,r,c,l,u,f,m){U(),C=!0,T=``,L();try{let e=async()=>{let e=await z(t,d.signal,c,r);d.signal.throwIfAborted(),await l(e)},n=_;return m&&n?(await a(()=>m(n),e),R()):await e(),i.success(u),h}catch(t){if(!d.signal.aborted&&(T=t instanceof Error?t.message:`The comment write was not confirmed.`,m&&i.error(`Bud undid a comment change`,{description:T}),t instanceof o&&t.code===`conflict`))try{if(await B(await z(E(p),d.signal,e)),f){let e=await z(s.comments.get.href({id:f}),d.signal,n);if(e.id!==f)throw new o(`The comments service returned another discussion.`);await V(e)}}catch{}throw t}finally{C=!1,L()}}return{get snapshot(){return h},get version(){return j},get loaded(){return v},get loading(){return y},get busy(){return C},get error(){return T},get now(){return A},get ready(){return v&&h.connection.state===`ready`},loadingThread:e=>P.has(e),load:W,loadThread:G,async write(e){K(e.id?e.status===void 0?`reply`:`status`:`create`);let t,i,a,c=`pending-${crypto.randomUUID()}`;if(e.id){let n=r(e.id),o=h.threads.find(e=>e.id===n);if(!o?.revision)throw Error(`Reload this discussion before saving.`);let l;if(e.status!==void 0)t=s.comments.status.href({id:n}),i={status:e.status,expectedRevision:o.revision},l=S(o,{status:e.status});else{let r={body:e.body??``,parentId:e.parentId??null};t=s.comments.reply.href({id:n}),i={...r,expectedRevision:o.revision},l=x(o,c,r)}a=e=>{e.threads.has(n)&&e.threads.update(n,e=>{e.status=l.status,e.messages=l.messages,e.messageCount=l.messageCount,e.updatedAt=l.updatedAt})}}else{let n={anchor:e.anchor??null,itemIds:e.itemIds??[],body:e.body??``};t=s.comments.create.href(),i=n,a=e=>{g?.add(c),e.threads.insert(b(c,n))}}let l;return{...await q(t,i,n,t=>{if(e.id&&t.id!==e.id)throw new o(`The comment write could not be confirmed. Refresh before trying again.`,409,`uncertain`);return l=t,V(t)},`Comment saved`,e.id,a),thread:l}},async sync(){return K(`sync`),q(s.comments.sync.href(),{direction:`both`},e,B,`Comments synced`)}}}export{_ as a,C as i,A as n,m as o,T as r,h as s,j as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./jsx-B4XNFIzB.js";import{t}from"./component-DWct-Tq6.js";import{n}from"./on-mixin-iWnqUzq5.js";import{n as r}from"./attrs-mixin-CmlG_FtV.js";import{Et as i,L as a,bn as o,dt as s,hn as c,kt as l,wn as u}from"./task-design-bktfn_Ok.js";import{T as d,b as f,v as p,w as m}from"./project-threads-DezXiVK6.js";import{n as h}from"./tasks-request-mWMk9pBo.js";function g(t){let n=[],i=new Map,a=!0,o=``,s=!1,l=``,p,m;function g(){t.signal.aborted||t.update()}async function _(){p?.abort();let e=new AbortController;p=e;let r=AbortSignal.any([t.signal,e.signal]);a=!0,o=``,g();try{let e=t.props.project.token,a=new URLSearchParams({limit:`1000`,...l.trim()?{search:l.trim()}:{}}),{schema:o,snapshot:d}=await h(f.tasksApi.workspace.href()+`?`+a,e,r,c);if(r.throwIfAborted(),d.connection.state!==`ready`)throw Error(d.connection.message??`The task adapter is unavailable.`);n=d.items.map(e=>{let t=u(e,o,`title`);return{id:e.id,...typeof t==`string`?{title:t}:{}}});for(let e of n)i.set(e.id,e);for(let e of t.props.selected){let t=i.get(e);t&&!n.some(t=>t.id===e)&&n.push(t)}s=d.truncated}catch(e){r.aborted||(o=e instanceof Error?e.message:`Could not load tasks.`)}finally{p===e&&(a=!1,g())}}let v=r(()=>{_()});return t.signal.addEventListener(`abort`,()=>{clearTimeout(m),p?.abort()},{once:!0}),()=>e(`div`,{class:`contents`,mix:v,children:e(d,{items:n,selected:t.props.selected,required:t.props.required,current:t.props.current,loading:a,error:o,truncated:s,onSearch:e=>{l=e,p?.abort(),p=void 0,clearTimeout(m),a=!0,m=setTimeout(()=>{_()},200),g()},onRetry:()=>{_()},onReview:t.props.onReview,onSave:t.props.onSave,onClose:t.props.onClose})})}function _(e,t){if(t.length>100||new Set(t).size!==t.length)throw Error(`Select up to 100 different tasks.`);for(let e of t)o({id:e});if(!e.anchor&&!t.length)throw Error(`A task discussion needs at least one linked task.`);let n=new Set(e.itemIds),r=new Set(t),i=[];for(;n.size!==r.size||[...n].some(e=>!r.has(e));){let a=[...n].filter(e=>!r.has(e)).slice(0,n.size-+!e.anchor);if(a.length){i.push({action:`unlink`,itemIds:a});for(let e of a)n.delete(e)}let o=t.filter(e=>!n.has(e)).slice(0,100-n.size);if(o.length){i.push({action:`link`,itemIds:o});for(let e of o)n.add(e)}if(!a.length&&!o.length)throw Error(`Could not prepare task links.`)}return i}async function v(e,t,n,r){let a=_(e,t),o=e;for(let e of a){if(r.throwIfAborted(),!o.revision)throw Error(`Review the latest discussion before changing links.`);let t=l({itemIds:e.itemIds,expectedRevision:o.revision}),a=i(await n(e.action,t));r.throwIfAborted();let s=new Set(o.itemIds);for(let t of e.itemIds)e.action===`link`?s.add(t):s.delete(t);if(a.id!==o.id||!a.revision||a.itemIds.length!==s.size||a.itemIds.some(e=>!s.has(e))||JSON.stringify(a.anchor)!==JSON.stringify(o.anchor))throw Error(`The task link change was not confirmed. Review the latest links before saving again.`);o=a}return o}function y(r){let o=null,c=!1,l=!1,u=!1;function d(){r.signal.aborted||r.update()}async function h(){if(!o)return;let e=await p(f.comments.get.href({id:o.id}),r.props.project.token,r.signal,i);if(e.id!==o.id)throw Error(`The service returned another discussion.`);o=e,c=!1,l=!0,d()}function _(){o=null,d(),u&&(u=!1,r.props.onChange())}function y(){o=r.props.thread,c=!1,l=!1,u=!1,d()}return()=>e(t,{children:[r.props.part===`action`?r.props.canLink?e(a,{icon:`tasks`,label:`Link tasks`,size:`small`,tooltip:!0,disabled:r.props.busy,mix:n(`click`,y)}):null:e(m,{itemIds:r.props.thread.itemIds,items:r.props.items??[],href:s,busy:r.props.busy,onEdit:!r.props.part&&r.props.canLink?y:void 0}),o?e(g,{project:r.props.project,selected:o.itemIds,current:l?o.itemIds:void 0,onClose:_,onReview:c?h:void 0,onSave:async e=>{if(!o||c)throw Error(`Review the latest links before saving.`);try{let t=o;o=await v(t,e,(e,n)=>(u=!0,p(f.comments[e].href({id:t.id}),r.props.project.token,r.signal,i,fetch,n)),r.signal),await r.props.onChange(),u=!1}catch(e){throw u&&(c=!0),d(),e}}}):null]})}export{g as n,y as t};
|