@bud.sh/app 0.4.0 → 0.4.1

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.
Files changed (56) hide show
  1. package/dist/client/assets/bud/design.js +1 -1
  2. package/dist/client/assets/{canvas-C8hyPWoT.js → canvas-DIKX_HCJ.js} +1 -1
  3. package/dist/client/assets/difference-worker-CwQNxTJL.js +8 -0
  4. package/dist/client/assets/files-BQ9O3Z8-.js +1 -0
  5. package/dist/client/assets/i18n-CL0jBP7Y.js +1 -0
  6. package/dist/client/assets/{index-Dpxjiok1.js → index-COvyj5zV.js} +2 -2
  7. package/dist/client/assets/{pages-B-_CKvDS.js → pages-BGl2Yuza.js} +1 -1
  8. package/dist/client/assets/{project-branches-DzXdaT9L.js → project-branches-DwKjCwZv.js} +1 -1
  9. package/dist/client/assets/{project-comments-CQkB2jbE.js → project-comments-Cdip2Y10.js} +1 -1
  10. package/dist/client/assets/{project-thread-links-BN7zL0AX.js → project-thread-links-BGIkGQeU.js} +1 -1
  11. package/dist/client/assets/{project-threads-CHGG-6fo.js → project-threads-DeKXNqeP.js} +5 -5
  12. package/dist/client/assets/{project-work-L5fYMSOu.js → project-work-B7PGQtV9.js} +1 -1
  13. package/dist/client/assets/task-design-DJp5yho1.js +23 -0
  14. package/dist/client/assets/{tasks-A2FKo3_h.js → tasks-BHXj727C.js} +1 -1
  15. package/dist/client/assets/{tasks-request-DGigNdyK.js → tasks-request-CsUB5__X.js} +1 -1
  16. package/dist/client/assets/{workspace-CvWmU2RK.js → workspace-CbO7RsI2.js} +2 -2
  17. package/dist/client/index.html +2 -2
  18. package/dist/hosted/assets/{canvas-MWtOwaWm.js → canvas-gWj_ocKK.js} +4 -4
  19. package/dist/hosted/assets/{comment-data-DsgJWq4n.js → comment-data-C-rNCB1n.js} +138 -11
  20. package/dist/hosted/assets/{files-Wvo11G2A.js → files-CAPvbavY.js} +3 -3
  21. package/dist/hosted/assets/{pages-BAmRFVtU.js → pages-DJiOvT-l.js} +3 -3
  22. package/dist/hosted/assets/{project-branches-BNloVosX.js → project-branches-BgrfdvtL.js} +1 -1
  23. package/dist/hosted/assets/{project-thread-links-BmY8HQXt.js → project-thread-links-B7uzThL9.js} +2 -2
  24. package/dist/hosted/assets/{screen-QmqmI2Aq.js → screen-D4D9nh4V.js} +1 -1
  25. package/dist/hosted/assets/{tasks-C8iWPrWg.js → tasks-C7aGLzBw.js} +4 -4
  26. package/dist/hosted/assets/{tasks-request-C89fN1dK.js → tasks-request-CikFdCgP.js} +1 -1
  27. package/dist/hosted/hosted.js +16 -8
  28. package/dist/node/design.js +126 -6
  29. package/dist/node-host/assets/{canvas-D_F8SIlm.js → canvas-kXzp80a5.js} +4 -4
  30. package/dist/node-host/assets/{comment-data-q_8INiZz.js → comment-data-CeuJbJKJ.js} +138 -11
  31. package/dist/node-host/assets/{files-xazOrNCX.js → files-0YIuvKzb.js} +3 -3
  32. package/dist/node-host/assets/{pages-D6VkmdfQ.js → pages-DOF22SyG.js} +3 -3
  33. package/dist/node-host/assets/{project-branches-C26hwmo3.js → project-branches-BeEwMBIw.js} +1 -1
  34. package/dist/node-host/assets/{project-thread-links-BOzjws5W.js → project-thread-links-Bs_MtfBC.js} +2 -2
  35. package/dist/node-host/assets/{screen-Dog-YByu.js → screen-DRTAKkn3.js} +1 -1
  36. package/dist/node-host/assets/{tasks-A1_bpb3_.js → tasks-BA_hcbj5.js} +4 -4
  37. package/dist/node-host/assets/{tasks-request-Bie1PpQP.js → tasks-request-Doc9y_20.js} +1 -1
  38. package/dist/node-host/node-host.js +16 -8
  39. package/dist/server/assets/{canvas-Dn4RYoU2.js → canvas-CiN6jNIZ.js} +4 -4
  40. package/dist/server/assets/{comment-data-B0OLHBGp.js → comment-data-9SqALQjT.js} +138 -11
  41. package/dist/server/assets/{files-C5Vilfe4.js → files-DBVqeLdL.js} +3 -3
  42. package/dist/server/assets/{listener-o1STuLju.js → listener-DGWKUc2o.js} +16 -8
  43. package/dist/server/assets/{pages-BNa0MHEc.js → pages-DJMLr6j9.js} +3 -3
  44. package/dist/server/assets/{project-branches-GtQYyOH5.js → project-branches-DbKEmiQT.js} +1 -1
  45. package/dist/server/assets/{project-thread-links-Nfz9NIny.js → project-thread-links-C0kV_Pcl.js} +2 -2
  46. package/dist/server/assets/{project-work-Cy_BpHwR.js → project-work-C0FN3w5Y.js} +2 -2
  47. package/dist/server/assets/{screen-BtcJmZwj.js → screen-BtvzEiIa.js} +1 -1
  48. package/dist/server/assets/{tasks-B82tHwyQ.js → tasks-DX71x8f9.js} +5 -5
  49. package/dist/server/assets/{tasks-request-BtJBlkxV.js → tasks-request-C3jk9Jyu.js} +1 -1
  50. package/dist/server/runtime.js +1 -1
  51. package/dist/server/server.js +1 -1
  52. package/package.json +1 -1
  53. package/dist/client/assets/difference-worker-BfF4_N3e.js +0 -8
  54. package/dist/client/assets/files-D_Tm7gCK.js +0 -1
  55. package/dist/client/assets/i18n-BtfXum8P.js +0 -1
  56. package/dist/client/assets/task-design-DYqcqq1b.js +0 -23
@@ -1 +1 @@
1
- import{n as e}from"./i18n-BtfXum8P.js";import{Bn as t,Gn as n,Hn as r,In as i,Kn as a,Mn as o,Nn as s,Vn as c,mn as l}from"./task-design-DYqcqq1b.js";import{C as u,b as d,g as f,h as p,m,o as h,s as g,x as _,y as v}from"./project-threads-CHGG-6fo.js";function y(e,t,n){return e?.captures.find(e=>e.theme===t&&(e.viewport?e.viewport===n.id:e.width===n.width))}function b(e,t){return`${e}\0${t.id}`}async function x(e,t,n,r,i,a){try{let o=await fetch(d.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]=f([s]);return c&&c.match!==`missing`&&c.x!==null&&c.y!==null?{x:c.x,y:c.y}:null}catch{return null}}var S=2,C=268435456;function w(e,t,n=C){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>S?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 T(e,t){let n=t=>{let n=w(e.previews.toArray.map(_),e.images.toArray.map(_),t);return n.length?u(e.images,{delete:n}):void 0};try{await u(e.images,{upsert:[t]})}catch{try{await n(0),await u(e.images,{upsert:[t]})}catch{return!1}}return await n()?.catch(()=>{}),!0}var E={active:0,waiting:[],limit:/^h[23]/.test(globalThis.performance?.getEntriesByType(`navigation`)[0]?.nextHopProtocol??``)?12:4};async function D(e,t,n){for(;E.active>=E.limit;)await new Promise(e=>E.waiting.push(e)),n.aborted&&(E.waiting.shift()?.(),n.throwIfAborted());E.active++;try{return await(await O(d.previewsApi.image.href({hash:e}),t,n)).blob()}finally{E.active--,E.waiting.shift()?.()}}async function O(t,n,r,i=`GET`){let a=await fetch(t,{method:i,headers:{"X-Bud-Token":n},credentials:`same-origin`,redirect:`error`,signal:r});if(!a.ok){let t=await a.json().catch(()=>null);throw Error(typeof t?.error==`string`?t.error:e(`app.client.projectPreviews.requestFailed`,{status:a.status}))}return a}function k(t){return t instanceof Error?t.message:e(`app.client.projectPreviews.loadFailed`)}function A(e){let{project:t,signal:n}=e,r=e.branch??null,i=e=>h(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,c=null,f=new Map,p=new Map,S=new Map,C=new Map,w=new Map;function E(e){return f.get(e)??{images:{},refreshing:!1,error:``}}function A(e){for(let t of p.get(e)??[])t()}function j(e,t){f.set(e,{...E(e),...t}),A(e)}function M(e){let t=c?.previews.get(i(e));return t?_(t):null}async function N(e){!c||(w.get(e.id)??-1)>e.sequence||(w.set(e.id,e.sequence),await u(c.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(!c||!P.size)return;let e=[...P.values()];P.clear();for(let t of e)w.set(t.id,t.sequence);await u(c.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=c.images.get(i)?.image;return a||(a=await D(i,s,n),await T(c,{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=b(t,r),a=E(e).images[i],o=`${i}\0${e}\0${a?.capture.hash}`;if(!c||!a||a.srcs.length||z.has(o))return;z.add(o);let s=a.capture,l=[];try{l=(await Promise.all(s.tiles.map(n=>R(e,t,s.hash,n.hash)))).map(e=>URL.createObjectURL(e));let r=E(e).images[i];if(n.aborted||r?.capture.hash!==s.hash||r.srcs.length){for(let e of l)URL.revokeObjectURL(e);return}j(e,{images:{...E(e).images,[i]:{...r,srcs:l}}})}catch(t){for(let e of l)URL.revokeObjectURL(e);!n.aborted&&E(e).images[i]?.capture.hash===s.hash&&j(e,{error:k(t)})}finally{z.delete(o)}}async function V(e,t,r){let i=b(t,r),a=y(M(e),t,r),o=E(e).images[i],s=`${i}\0${e}`;if(!c||!a||C.get(s)===a.hash)return;if(o?.capture.hash===a.hash){o.capture.revision!==a.revision&&j(e,{images:{...E(e).images,[i]:{...o,capture:a}}});return}C.set(s,a.hash);let l=[];try{let o=a.thumbnails.length?a.thumbnails:a.tiles;l=(await Promise.all(o.map(n=>R(e,t,a.hash,n.hash)))).map(e=>URL.createObjectURL(e));let s=y(M(e),t,r);if(n.aborted||s?.hash!==a.hash){for(let e of l)URL.revokeObjectURL(e);return}L(E(e).images[i]);let c=a.thumbnails.length?{capture:s,srcs:[],thumbnails:l}:{capture:s,srcs:l,thumbnails:[]};j(e,{images:{...E(e).images,[i]:c},error:``})}catch(i){for(let e of l)URL.revokeObjectURL(e);let o=y(M(e),t,r);!n.aborted&&o?.hash===a.hash&&j(e,{error:k(i)})}finally{C.get(s)===a.hash&&C.delete(s)}}async function H(e){try{let t=await O(`${d.previewsApi.show.href({id:e})}${o}`,s,n);await N(m(await t.json()))}catch(t){n.aborted||j(e,{error:k(t)})}}function U(e){A(e);for(let{theme:t,size:n}of S.get(e)?.values()??[])V(e,t,n)}let W=v(s).subscribe(`previews`,{onEvent(e){F(m(e))},onResync(){w.clear();for(let e of p.keys())H(e)}}),G=()=>{},K=g(t);return K.then(async e=>{if(n.aborted)return;c=e;let r=new Set(t.routes.map(e=>e.id)),i=e.previews.toArray.filter(e=>!r.has(e.id));u(e.previews,{delete:i.map(e=>h(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 p.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),...E(e)}),watch(e,t){let n=p.get(e);return n||(n=new Set,p.set(e,n),c&&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=b(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(d.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:c}=await o.json();return c===null?null:l(c)}catch{return null}},locate:(e,t,r,i)=>x(s,e,t,r,n,i?.id),async picture(e,t,r){let i=await K;M(e)||await H(e);let a=y(M(e),t,r);return a?{capture:a,images:await Promise.all(a.tiles.map(async e=>i.images.get(e.hash)?.image??await D(e.hash,s,n)))}:null},async refresh(e){if(!r){j(e,{refreshing:!0,error:``});try{let t=await O(d.previewsApi.refresh.href({id:e}),s,n,`POST`);await N(m(await t.json())),j(e,{refreshing:!1})}catch(t){n.aborted||j(e,{refreshing:!1,error:k(t)})}}}}}var j=a().refine(e=>{try{return p(e)===e}catch{return!1}}),M=a().refine(e=>/^[a-f0-9]{40,64}$/.test(e)),N=r({working:t(j),main:t(j),branches:o(r({name:j,main:s(),active:s(),commit:M,subject:t(a().refine(e=>e.length<=1e3)),captured:t(M),state:i([`idle`,`queued`,`building`,`capturing`,`ready`,`failed`]),error:t(a().refine(e=>e.length<=8e3)),progress:t(r({captured:c(),total:c()}))})).refine(e=>e.length<=500)});function P(t){let r=n(N,t);if(!r.success)throw TypeError(e(`app.client.projectBranches.invalidBranchList`));return r.value}function F(t){let{project:n,signal:r}=t,i={working:null,main:null,branches:[]},a=!1,o=!1,s=``;function c(){r.aborted||t.onChange()}async function l(t,i=`GET`){let a=await fetch(t,{method:i,headers:{"X-Bud-Token":n.token},credentials:`same-origin`,redirect:`error`,signal:r}),o=await a.json().catch(()=>null);if(!a.ok)throw Error(typeof o?.error==`string`?o.error:e(`app.client.projectBranches.loadError`));return P(o)}async function u(){try{i=await l(d.branchesApi.list.href()),a=!0,s=``}catch(e){r.aborted||(s=e instanceof Error?e.message:String(e))}c()}let f=v(n.token).subscribe(`branches`,{onEvent(e){try{i=P(e),a=!0,c()}catch{u()}},onResync(){u()}});r.addEventListener(`abort`,f,{once:!0}),u();let p=async e=>{o=!0,c();try{i=await l(e,`POST`),s=``}catch(e){r.aborted||(s=e instanceof Error?e.message:String(e))}finally{o=!1,c()}};return{get list(){return i},get loaded(){return a},get busy(){return o},get error(){return s},activate(e,t){return p(t?d.branchesApi.activate.href({name:e}):d.branchesApi.deactivate.href({name:e}))},capture(e){return p(d.branchesApi.capture.href({name:e}))}}}export{b as i,A as n,x as r,F as t};
1
+ import{r as e}from"./i18n-CL0jBP7Y.js";import{Bn as t,Gn as n,Hn as r,In as i,Kn as a,Mn as o,Nn as s,Vn as c,mn as l}from"./task-design-DJp5yho1.js";import{C as u,b as d,g as f,h as p,m,o as h,s as g,x as _,y as v}from"./project-threads-DeKXNqeP.js";function y(e,t,n){return e?.captures.find(e=>e.theme===t&&(e.viewport?e.viewport===n.id:e.width===n.width))}function b(e,t){return`${e}\0${t.id}`}async function x(e,t,n,r,i,a){try{let o=await fetch(d.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]=f([s]);return c&&c.match!==`missing`&&c.x!==null&&c.y!==null?{x:c.x,y:c.y}:null}catch{return null}}var S=2,C=268435456;function w(e,t,n=C){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>S?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 T(e,t){let n=t=>{let n=w(e.previews.toArray.map(_),e.images.toArray.map(_),t);return n.length?u(e.images,{delete:n}):void 0};try{await u(e.images,{upsert:[t]})}catch{try{await n(0),await u(e.images,{upsert:[t]})}catch{return!1}}return await n()?.catch(()=>{}),!0}var E={active:0,waiting:[],limit:/^h[23]/.test(globalThis.performance?.getEntriesByType(`navigation`)[0]?.nextHopProtocol??``)?12:4};async function D(e,t,n){for(;E.active>=E.limit;)await new Promise(e=>E.waiting.push(e)),n.aborted&&(E.waiting.shift()?.(),n.throwIfAborted());E.active++;try{return await(await O(d.previewsApi.image.href({hash:e}),t,n)).blob()}finally{E.active--,E.waiting.shift()?.()}}async function O(t,n,r,i=`GET`){let a=await fetch(t,{method:i,headers:{"X-Bud-Token":n},credentials:`same-origin`,redirect:`error`,signal:r});if(!a.ok){let t=await a.json().catch(()=>null);throw Error(typeof t?.error==`string`?t.error:e(`app.client.projectPreviews.requestFailed`,{status:a.status}))}return a}function k(t){return t instanceof Error?t.message:e(`app.client.projectPreviews.loadFailed`)}function A(e){let{project:t,signal:n}=e,r=e.branch??null,i=e=>h(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,c=null,f=new Map,p=new Map,S=new Map,C=new Map,w=new Map;function E(e){return f.get(e)??{images:{},refreshing:!1,error:``}}function A(e){for(let t of p.get(e)??[])t()}function j(e,t){f.set(e,{...E(e),...t}),A(e)}function M(e){let t=c?.previews.get(i(e));return t?_(t):null}async function N(e){!c||(w.get(e.id)??-1)>e.sequence||(w.set(e.id,e.sequence),await u(c.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(!c||!P.size)return;let e=[...P.values()];P.clear();for(let t of e)w.set(t.id,t.sequence);await u(c.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=c.images.get(i)?.image;return a||(a=await D(i,s,n),await T(c,{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=b(t,r),a=E(e).images[i],o=`${i}\0${e}\0${a?.capture.hash}`;if(!c||!a||a.srcs.length||z.has(o))return;z.add(o);let s=a.capture,l=[];try{l=(await Promise.all(s.tiles.map(n=>R(e,t,s.hash,n.hash)))).map(e=>URL.createObjectURL(e));let r=E(e).images[i];if(n.aborted||r?.capture.hash!==s.hash||r.srcs.length){for(let e of l)URL.revokeObjectURL(e);return}j(e,{images:{...E(e).images,[i]:{...r,srcs:l}}})}catch(t){for(let e of l)URL.revokeObjectURL(e);!n.aborted&&E(e).images[i]?.capture.hash===s.hash&&j(e,{error:k(t)})}finally{z.delete(o)}}async function V(e,t,r){let i=b(t,r),a=y(M(e),t,r),o=E(e).images[i],s=`${i}\0${e}`;if(!c||!a||C.get(s)===a.hash)return;if(o?.capture.hash===a.hash){o.capture.revision!==a.revision&&j(e,{images:{...E(e).images,[i]:{...o,capture:a}}});return}C.set(s,a.hash);let l=[];try{let o=a.thumbnails.length?a.thumbnails:a.tiles;l=(await Promise.all(o.map(n=>R(e,t,a.hash,n.hash)))).map(e=>URL.createObjectURL(e));let s=y(M(e),t,r);if(n.aborted||s?.hash!==a.hash){for(let e of l)URL.revokeObjectURL(e);return}L(E(e).images[i]);let c=a.thumbnails.length?{capture:s,srcs:[],thumbnails:l}:{capture:s,srcs:l,thumbnails:[]};j(e,{images:{...E(e).images,[i]:c},error:``})}catch(i){for(let e of l)URL.revokeObjectURL(e);let o=y(M(e),t,r);!n.aborted&&o?.hash===a.hash&&j(e,{error:k(i)})}finally{C.get(s)===a.hash&&C.delete(s)}}async function H(e){try{let t=await O(`${d.previewsApi.show.href({id:e})}${o}`,s,n);await N(m(await t.json()))}catch(t){n.aborted||j(e,{error:k(t)})}}function U(e){A(e);for(let{theme:t,size:n}of S.get(e)?.values()??[])V(e,t,n)}let W=v(s).subscribe(`previews`,{onEvent(e){F(m(e))},onResync(){w.clear();for(let e of p.keys())H(e)}}),G=()=>{},K=g(t);return K.then(async e=>{if(n.aborted)return;c=e;let r=new Set(t.routes.map(e=>e.id)),i=e.previews.toArray.filter(e=>!r.has(e.id));u(e.previews,{delete:i.map(e=>h(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 p.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),...E(e)}),watch(e,t){let n=p.get(e);return n||(n=new Set,p.set(e,n),c&&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=b(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(d.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:c}=await o.json();return c===null?null:l(c)}catch{return null}},locate:(e,t,r,i)=>x(s,e,t,r,n,i?.id),async picture(e,t,r){let i=await K;M(e)||await H(e);let a=y(M(e),t,r);return a?{capture:a,images:await Promise.all(a.tiles.map(async e=>i.images.get(e.hash)?.image??await D(e.hash,s,n)))}:null},async refresh(e){if(!r){j(e,{refreshing:!0,error:``});try{let t=await O(d.previewsApi.refresh.href({id:e}),s,n,`POST`);await N(m(await t.json())),j(e,{refreshing:!1})}catch(t){n.aborted||j(e,{refreshing:!1,error:k(t)})}}}}}var j=a().refine(e=>{try{return p(e)===e}catch{return!1}}),M=a().refine(e=>/^[a-f0-9]{40,64}$/.test(e)),N=r({working:t(j),main:t(j),branches:o(r({name:j,main:s(),active:s(),commit:M,subject:t(a().refine(e=>e.length<=1e3)),captured:t(M),state:i([`idle`,`queued`,`building`,`capturing`,`ready`,`failed`]),error:t(a().refine(e=>e.length<=8e3)),progress:t(r({captured:c(),total:c()}))})).refine(e=>e.length<=500)});function P(t){let r=n(N,t);if(!r.success)throw TypeError(e(`app.client.projectBranches.invalidBranchList`));return r.value}function F(t){let{project:n,signal:r}=t,i={working:null,main:null,branches:[]},a=!1,o=!1,s=``;function c(){r.aborted||t.onChange()}async function l(t,i=`GET`){let a=await fetch(t,{method:i,headers:{"X-Bud-Token":n.token},credentials:`same-origin`,redirect:`error`,signal:r}),o=await a.json().catch(()=>null);if(!a.ok)throw Error(typeof o?.error==`string`?o.error:e(`app.client.projectBranches.loadError`));return P(o)}async function u(){try{i=await l(d.branchesApi.list.href()),a=!0,s=``}catch(e){r.aborted||(s=e instanceof Error?e.message:String(e))}c()}let f=v(n.token).subscribe(`branches`,{onEvent(e){try{i=P(e),a=!0,c()}catch{u()}},onResync(){u()}});r.addEventListener(`abort`,f,{once:!0}),u();let p=async e=>{o=!0,c();try{i=await l(e,`POST`),s=``}catch(e){r.aborted||(s=e instanceof Error?e.message:String(e))}finally{o=!1,c()}};return{get list(){return i},get loaded(){return a},get busy(){return o},get error(){return s},activate(e,t){return p(t?d.branchesApi.activate.href({name:e}):d.branchesApi.deactivate.href({name:e}))},capture(e){return p(d.branchesApi.capture.href({name:e}))}}}export{b as i,A as n,x as r,F as t};
@@ -1 +1 @@
1
- import{n as e}from"./i18n-BtfXum8P.js";import{At as t,Dt as n,Et as r,Ot as i,T as a}from"./task-design-DYqcqq1b.js";import{S as o,_ as s,b as c,i as l,n as u,r as d,s as f,v as p,x as m}from"./project-threads-CHGG-6fo.js";function h(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 g(e,t){return{...e,values:{...e.values,...t.values}}}var _={close:[`done`,`cancelled`],reopen:[`unstarted`,`backlog`,`started`]};function v(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?_[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 y={id:`pending`,name:`You`,email:``};function b(e,t,n,r){return{id:e,body:t.trim(),author:y,createdAt:r.toISOString(),parentId:n}}function x(e,t,n=new Date){let r=n.toISOString();return{id:e,status:`open`,anchor:t.anchor,itemIds:[...t.itemIds],messages:[b(e,t.body,null,n)],messageCount:1,messagesLoaded:!0,messagesTruncated:!1,createdAt:r,updatedAt:r,revision:null}}function S(e,t,n,r=new Date){return{...e,messages:e.messagesLoaded?[...e.messages,b(t,n.body,n.parentId,r)]:e.messages,messageCount:e.messageCount+1,updatedAt:r.toISOString()}}function C(e,t){return{...e,status:t.status}}var w=`Comments are stored by your storage adapter. Beads: run bd init in this project.`;function T(e=w){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 E(n,i,a,o){try{let e=await p(D({itemId:i}),n,a,t),s=await Promise.all(e.threads.map(e=>e.messagesLoaded||e.anchor&&e.id!==o?e:p(c.comments.get.href({id:e.id}),n,a,r)));return{snapshot:{...e,threads:s},error:``}}catch(t){return a.throwIfAborted(),{snapshot:null,error:t instanceof Error?t.message:e(`app.client.projectComments.couldNotLoadDiscussion`)}}}function D(e){let t=new URLSearchParams(n(e));return c.comments.list.href()+(t.size?`?${t}`:``)}function O(e){return e.truncated?new Set(e.threads.map(e=>e.id)):null}function k(e){return e.toSorted((e,t)=>e.createdAt.localeCompare(t.createdAt)||e.id.localeCompare(t.id))}function A(e,t={},n=null){let r=e.discussions.get(`threads`);if(!r)return null;let{connection:i,capabilities:a}=m(r);return{connection:i,capabilities:a,threads:k(e.threads.toArray.map(m).filter(e=>l(e,t)&&(!n||n.has(e.id)))),truncated:!!n}}async function j(n,r,i=fetch){let a=await f(n),o=A(a);if(o)return{snapshot:o,error:``,stored:!0};try{let e=await p(c.comments.list.href(),n.token,r,t,i);return await d(a,e),{snapshot:e,error:``}}catch(t){return r.throwIfAborted(),{snapshot:null,error:t instanceof Error?t.message:e(`app.client.projectComments.couldNotLoadComments`)}}}function M(f){let m=n(f.filter??{}),h=f.initial?.snapshot??T(),g={...h,threads:k(h.threads.filter(U))},_=O(h),v,y=!!f.initial?.snapshot,b=!1,w=!1,E=f.initial?.error??``,j=Date.now(),M=0,N=0,P,F=new Map,I=new Set,L=Promise.resolve(f.store).then(async e=>{v=e,f.initial?.snapshot&&!f.initial.stored&&await d(e,f.initial.snapshot,m);let t=[e.discussions.subscribeChanges(z),e.threads.subscribeChanges(z)];f.signal.addEventListener(`abort`,()=>{for(let e of t)e.unsubscribe()},{once:!0}),z()});function R(){f.signal.aborted||f.onChange()}function z(){let e=v&&A(v,m,_);e&&(g=e,y=!0,j=Date.now(),M++,R())}function B(e,t,n,r){return p(e,f.token,t,n,f.fetcher,r)}async function V(e){await L,_=O(e),await d(v,e,m),z()}async function H(e){await L,_?.add(e.id),await u(v,e),z()}function U(e){return l(e,m)}function W(){P?.abort(),N++,b=!1;for(let e of F.values())e.abort();F.clear(),I.clear()}async function G(){if(w)return;W();let n=new AbortController,r=N;P=n;let i=AbortSignal.any([f.signal,n.signal]);b=!0,R();try{let e=await B(D(m),i,t);!i.aborted&&r===N&&(await V(e),E=``)}catch(t){!i.aborted&&r===N&&(E=t instanceof Error?t.message:e(`app.client.projectComments.couldNotLoadComments`))}finally{r===N&&(b=!1,R())}}async function K(t,n=!1){if(i(t),w||F.has(t)||!n&&I.has(t))return;I.delete(t);let a=g.threads.find(e=>e.id===t);if(!n&&a?.messagesLoaded)return;let o=new AbortController,l=N;F.set(t,o);let u=AbortSignal.any([f.signal,o.signal]);R();try{let n=await B(c.comments.get.href({id:t}),u,r);if(n.id!==t)throw new s(e(`app.client.projectComments.serviceReturnedAnotherDiscussion`));if(!u.aborted&&l===N){if(await H(n),!U(n))throw new s(e(`app.client.projectComments.discussionNoLongerInView`));I.size||(E=``)}}catch(n){!u.aborted&&l===N&&(I.add(t),E=n instanceof Error?n.message:e(`app.client.projectComments.couldNotLoadDiscussion`))}finally{F.get(t)===o&&(F.delete(t),R())}}function q(t){if(w)throw Error(e(`app.client.projectComments.waitForCurrentOperation`));if(!y)throw Error(e(`app.client.projectComments.loadCommentsBeforeSaving`));if(g.connection.state!==`ready`)throw Error(g.connection.message??e(`app.client.projectComments.adapterUnavailable`));if(!g.capabilities[t])throw Error(e(`app.client.projectComments.adapterDoesNotSupportOperation`))}async function J(n,i,l,u,d,p,h){W(),w=!0,E=``,R();try{let e=async()=>{let e=await B(n,f.signal,l,i);f.signal.throwIfAborted(),await u(e)},t=v;return h&&t?(await o(()=>h(t),e),z()):await e(),a.success(d),g}catch(n){if(!f.signal.aborted&&(E=n instanceof Error?n.message:e(`app.client.projectComments.commentWriteNotConfirmed`),h&&a.error(e(`app.client.projectComments.budUndidCommentChange`),{description:E}),n instanceof s&&n.code===`conflict`))try{if(await V(await B(D(m),f.signal,t)),p){let t=await B(c.comments.get.href({id:p}),f.signal,r);if(t.id!==p)throw new s(e(`app.client.projectComments.serviceReturnedAnotherDiscussion`));await H(t)}}catch{}throw n}finally{w=!1,R()}}return{get snapshot(){return g},get version(){return M},get loaded(){return y},get loading(){return b},get busy(){return w},get error(){return E},get now(){return j},get ready(){return y&&g.connection.state===`ready`},loadingThread:e=>F.has(e),load:G,loadThread:K,async write(t){q(t.id?t.status===void 0?`reply`:`status`:`create`);let n,a,o,l=`pending-${crypto.randomUUID()}`;if(t.id){let r=i(t.id),s=g.threads.find(e=>e.id===r);if(!s?.revision)throw Error(e(`app.client.projectComments.reloadDiscussionBeforeSaving`));let u;if(t.status!==void 0)n=c.comments.status.href({id:r}),a={status:t.status,expectedRevision:s.revision},u=C(s,{status:t.status});else{let e={body:t.body??``,parentId:t.parentId??null};n=c.comments.reply.href({id:r}),a={...e,expectedRevision:s.revision},u=S(s,l,e)}o=e=>{e.threads.has(r)&&e.threads.update(r,e=>{e.status=u.status,e.messages=u.messages,e.messageCount=u.messageCount,e.updatedAt=u.updatedAt})}}else{let e={anchor:t.anchor??null,itemIds:t.itemIds??[],body:t.body??``};n=c.comments.create.href(),a=e,o=t=>{_?.add(l),t.threads.insert(x(l,e))}}let u;return{...await J(n,a,r,n=>{if(t.id&&n.id!==t.id)throw new s(e(`app.client.projectComments.refreshBeforeTryingAgain`),409,`uncertain`);return u=n,H(n)},e(`app.client.projectComments.commentSaved`),t.id,o),thread:u}},async sync(){return q(`sync`),J(c.comments.sync.href(),{direction:`both`},t,V,e(`app.client.projectComments.commentsSynced`))}}}export{v as a,w as i,j as n,h as o,E as r,g as s,M as t};
1
+ import{r as e}from"./i18n-CL0jBP7Y.js";import{At as t,Dt as n,Et as r,Ot as i,T as a}from"./task-design-DJp5yho1.js";import{S as o,_ as s,b as c,i as l,n as u,r as d,s as f,v as p,x as m}from"./project-threads-DeKXNqeP.js";function h(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 g(e,t){return{...e,values:{...e.values,...t.values}}}var _={close:[`done`,`cancelled`],reopen:[`unstarted`,`backlog`,`started`]};function v(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?_[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 y={id:`pending`,name:`You`,email:``};function b(e,t,n,r){return{id:e,body:t.trim(),author:y,createdAt:r.toISOString(),parentId:n}}function x(e,t,n=new Date){let r=n.toISOString();return{id:e,status:`open`,anchor:t.anchor,itemIds:[...t.itemIds],messages:[b(e,t.body,null,n)],messageCount:1,messagesLoaded:!0,messagesTruncated:!1,createdAt:r,updatedAt:r,revision:null}}function S(e,t,n,r=new Date){return{...e,messages:e.messagesLoaded?[...e.messages,b(t,n.body,n.parentId,r)]:e.messages,messageCount:e.messageCount+1,updatedAt:r.toISOString()}}function C(e,t){return{...e,status:t.status}}var w=`Comments are stored by your storage adapter. Beads: run bd init in this project.`;function T(e=w){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 E(n,i,a,o){try{let e=await p(D({itemId:i}),n,a,t),s=await Promise.all(e.threads.map(e=>e.messagesLoaded||e.anchor&&e.id!==o?e:p(c.comments.get.href({id:e.id}),n,a,r)));return{snapshot:{...e,threads:s},error:``}}catch(t){return a.throwIfAborted(),{snapshot:null,error:t instanceof Error?t.message:e(`app.client.projectComments.couldNotLoadDiscussion`)}}}function D(e){let t=new URLSearchParams(n(e));return c.comments.list.href()+(t.size?`?${t}`:``)}function O(e){return e.truncated?new Set(e.threads.map(e=>e.id)):null}function k(e){return e.toSorted((e,t)=>e.createdAt.localeCompare(t.createdAt)||e.id.localeCompare(t.id))}function A(e,t={},n=null){let r=e.discussions.get(`threads`);if(!r)return null;let{connection:i,capabilities:a}=m(r);return{connection:i,capabilities:a,threads:k(e.threads.toArray.map(m).filter(e=>l(e,t)&&(!n||n.has(e.id)))),truncated:!!n}}async function j(n,r,i=fetch){let a=await f(n),o=A(a);if(o)return{snapshot:o,error:``,stored:!0};try{let e=await p(c.comments.list.href(),n.token,r,t,i);return await d(a,e),{snapshot:e,error:``}}catch(t){return r.throwIfAborted(),{snapshot:null,error:t instanceof Error?t.message:e(`app.client.projectComments.couldNotLoadComments`)}}}function M(f){let m=n(f.filter??{}),h=f.initial?.snapshot??T(),g={...h,threads:k(h.threads.filter(U))},_=O(h),v,y=!!f.initial?.snapshot,b=!1,w=!1,E=f.initial?.error??``,j=Date.now(),M=0,N=0,P,F=new Map,I=new Set,L=Promise.resolve(f.store).then(async e=>{v=e,f.initial?.snapshot&&!f.initial.stored&&await d(e,f.initial.snapshot,m);let t=[e.discussions.subscribeChanges(z),e.threads.subscribeChanges(z)];f.signal.addEventListener(`abort`,()=>{for(let e of t)e.unsubscribe()},{once:!0}),z()});function R(){f.signal.aborted||f.onChange()}function z(){let e=v&&A(v,m,_);e&&(g=e,y=!0,j=Date.now(),M++,R())}function B(e,t,n,r){return p(e,f.token,t,n,f.fetcher,r)}async function V(e){await L,_=O(e),await d(v,e,m),z()}async function H(e){await L,_?.add(e.id),await u(v,e),z()}function U(e){return l(e,m)}function W(){P?.abort(),N++,b=!1;for(let e of F.values())e.abort();F.clear(),I.clear()}async function G(){if(w)return;W();let n=new AbortController,r=N;P=n;let i=AbortSignal.any([f.signal,n.signal]);b=!0,R();try{let e=await B(D(m),i,t);!i.aborted&&r===N&&(await V(e),E=``)}catch(t){!i.aborted&&r===N&&(E=t instanceof Error?t.message:e(`app.client.projectComments.couldNotLoadComments`))}finally{r===N&&(b=!1,R())}}async function K(t,n=!1){if(i(t),w||F.has(t)||!n&&I.has(t))return;I.delete(t);let a=g.threads.find(e=>e.id===t);if(!n&&a?.messagesLoaded)return;let o=new AbortController,l=N;F.set(t,o);let u=AbortSignal.any([f.signal,o.signal]);R();try{let n=await B(c.comments.get.href({id:t}),u,r);if(n.id!==t)throw new s(e(`app.client.projectComments.serviceReturnedAnotherDiscussion`));if(!u.aborted&&l===N){if(await H(n),!U(n))throw new s(e(`app.client.projectComments.discussionNoLongerInView`));I.size||(E=``)}}catch(n){!u.aborted&&l===N&&(I.add(t),E=n instanceof Error?n.message:e(`app.client.projectComments.couldNotLoadDiscussion`))}finally{F.get(t)===o&&(F.delete(t),R())}}function q(t){if(w)throw Error(e(`app.client.projectComments.waitForCurrentOperation`));if(!y)throw Error(e(`app.client.projectComments.loadCommentsBeforeSaving`));if(g.connection.state!==`ready`)throw Error(g.connection.message??e(`app.client.projectComments.adapterUnavailable`));if(!g.capabilities[t])throw Error(e(`app.client.projectComments.adapterDoesNotSupportOperation`))}async function J(n,i,l,u,d,p,h){W(),w=!0,E=``,R();try{let e=async()=>{let e=await B(n,f.signal,l,i);f.signal.throwIfAborted(),await u(e)},t=v;return h&&t?(await o(()=>h(t),e),z()):await e(),a.success(d),g}catch(n){if(!f.signal.aborted&&(E=n instanceof Error?n.message:e(`app.client.projectComments.commentWriteNotConfirmed`),h&&a.error(e(`app.client.projectComments.budUndidCommentChange`),{description:E}),n instanceof s&&n.code===`conflict`))try{if(await V(await B(D(m),f.signal,t)),p){let t=await B(c.comments.get.href({id:p}),f.signal,r);if(t.id!==p)throw new s(e(`app.client.projectComments.serviceReturnedAnotherDiscussion`));await H(t)}}catch{}throw n}finally{w=!1,R()}}return{get snapshot(){return g},get version(){return M},get loaded(){return y},get loading(){return b},get busy(){return w},get error(){return E},get now(){return j},get ready(){return y&&g.connection.state===`ready`},loadingThread:e=>F.has(e),load:G,loadThread:K,async write(t){q(t.id?t.status===void 0?`reply`:`status`:`create`);let n,a,o,l=`pending-${crypto.randomUUID()}`;if(t.id){let r=i(t.id),s=g.threads.find(e=>e.id===r);if(!s?.revision)throw Error(e(`app.client.projectComments.reloadDiscussionBeforeSaving`));let u;if(t.status!==void 0)n=c.comments.status.href({id:r}),a={status:t.status,expectedRevision:s.revision},u=C(s,{status:t.status});else{let e={body:t.body??``,parentId:t.parentId??null};n=c.comments.reply.href({id:r}),a={...e,expectedRevision:s.revision},u=S(s,l,e)}o=e=>{e.threads.has(r)&&e.threads.update(r,e=>{e.status=u.status,e.messages=u.messages,e.messageCount=u.messageCount,e.updatedAt=u.updatedAt})}}else{let e={anchor:t.anchor??null,itemIds:t.itemIds??[],body:t.body??``};n=c.comments.create.href(),a=e,o=t=>{_?.add(l),t.threads.insert(x(l,e))}}let u;return{...await J(n,a,r,n=>{if(t.id&&n.id!==t.id)throw new s(e(`app.client.projectComments.refreshBeforeTryingAgain`),409,`uncertain`);return u=n,H(n)},e(`app.client.projectComments.commentSaved`),t.id,o),thread:u}},async sync(){return q(`sync`),J(c.comments.sync.href(),{direction:`both`},t,V,e(`app.client.projectComments.commentsSynced`))}}}export{v as a,w as i,j as n,h as o,E as r,g as s,M as t};
@@ -1 +1 @@
1
- import{n as e}from"./i18n-BtfXum8P.js";import{t}from"./jsx-B4XNFIzB.js";import{t as n}from"./component-DWct-Tq6.js";import{n as r}from"./on-mixin-iWnqUzq5.js";import{n as i}from"./attrs-mixin-CmlG_FtV.js";import{Et as a,L as o,bn as s,dt as c,hn as l,kt as u,wn as d}from"./task-design-DYqcqq1b.js";import{T as f,b as p,v as m,w as h}from"./project-threads-CHGG-6fo.js";import{n as g}from"./tasks-request-DGigNdyK.js";function _(n){let r=[],a=new Map,o=!0,s=``,c=!1,u=``,m,h;function _(){n.signal.aborted||n.update()}async function v(){m?.abort();let t=new AbortController;m=t;let i=AbortSignal.any([n.signal,t.signal]);o=!0,s=``,_();try{let t=n.props.project.token,o=new URLSearchParams({limit:`1000`,...u.trim()?{search:u.trim()}:{}}),{schema:s,snapshot:f}=await g(p.tasksApi.workspace.href()+`?`+o,t,i,l);if(i.throwIfAborted(),f.connection.state!==`ready`)throw Error(f.connection.message??e(`app.client.projectTaskPicker.adapterUnavailable`));r=f.items.map(e=>{let t=d(e,s,`title`);return{id:e.id,...typeof t==`string`?{title:t}:{}}});for(let e of r)a.set(e.id,e);for(let e of n.props.selected){let t=a.get(e);t&&!r.some(t=>t.id===e)&&r.push(t)}c=f.truncated}catch(t){i.aborted||(s=t instanceof Error?t.message:e(`app.client.projectTaskPicker.loadFailed`))}finally{m===t&&(o=!1,_())}}let y=i(()=>{v()});return n.signal.addEventListener(`abort`,()=>{clearTimeout(h),m?.abort()},{once:!0}),()=>t(`div`,{class:`contents`,mix:y,children:t(f,{items:r,selected:n.props.selected,required:n.props.required,current:n.props.current,loading:o,error:s,truncated:c,onSearch:e=>{u=e,m?.abort(),m=void 0,clearTimeout(h),o=!0,h=setTimeout(()=>{v()},200),_()},onRetry:()=>{v()},onReview:n.props.onReview,onSave:n.props.onSave,onClose:n.props.onClose})})}function v(t,n){if(n.length>100||new Set(n).size!==n.length)throw Error(e(`app.client.threadLinks.selectUpToTasks`,{count:100}));for(let e of n)s({id:e});if(!t.anchor&&!n.length)throw Error(e(`app.client.threadLinks.taskDiscussionNeedsLinkedTask`));let r=new Set(t.itemIds),i=new Set(n),a=[];for(;r.size!==i.size||[...r].some(e=>!i.has(e));){let o=[...r].filter(e=>!i.has(e)).slice(0,r.size-+!t.anchor);if(o.length){a.push({action:`unlink`,itemIds:o});for(let e of o)r.delete(e)}let s=n.filter(e=>!r.has(e)).slice(0,100-r.size);if(s.length){a.push({action:`link`,itemIds:s});for(let e of s)r.add(e)}if(!o.length&&!s.length)throw Error(e(`app.client.threadLinks.couldNotPrepareTaskLinks`))}return a}async function y(t,n,r,i){let o=v(t,n),s=t;for(let t of o){if(i.throwIfAborted(),!s.revision)throw Error(e(`app.client.threadLinks.reviewLatestDiscussionBeforeChangingLinks`));let n=u({itemIds:t.itemIds,expectedRevision:s.revision}),o=a(await r(t.action,n));i.throwIfAborted();let c=new Set(s.itemIds);for(let e of t.itemIds)t.action===`link`?c.add(e):c.delete(e);if(o.id!==s.id||!o.revision||o.itemIds.length!==c.size||o.itemIds.some(e=>!c.has(e))||JSON.stringify(o.anchor)!==JSON.stringify(s.anchor))throw Error(e(`app.client.threadLinks.taskLinkChangeNotConfirmed`));s=o}return s}function b(i){let s=null,l=!1,u=!1,d=!1;function f(){i.signal.aborted||i.update()}async function g(){if(!s)return;let t=await m(p.comments.get.href({id:s.id}),i.props.project.token,i.signal,a);if(t.id!==s.id)throw Error(e(`app.client.projectThreadLinks.anotherDiscussion`));s=t,l=!1,u=!0,f()}function v(){s=null,f(),d&&(d=!1,i.props.onChange())}function b(){s=i.props.thread,l=!1,u=!1,d=!1,f()}return()=>t(n,{children:[i.props.part===`action`?i.props.canLink?t(o,{icon:`tasks`,label:e(`app.client.projectThreadLinks.linkTasks`),size:`small`,tooltip:!0,disabled:i.props.busy,mix:r(`click`,b)}):null:t(h,{itemIds:i.props.thread.itemIds,items:i.props.items??[],href:c,busy:i.props.busy,onEdit:!i.props.part&&i.props.canLink?b:void 0}),s?t(_,{project:i.props.project,selected:s.itemIds,current:u?s.itemIds:void 0,onClose:v,onReview:l?g:void 0,onSave:async t=>{if(!s||l)throw Error(e(`app.client.projectThreadLinks.reviewLinksBeforeSaving`));try{let e=s;s=await y(e,t,(t,n)=>(d=!0,m(p.comments[t].href({id:e.id}),i.props.project.token,i.signal,a,fetch,n)),i.signal),await i.props.onChange(),d=!1}catch(e){throw d&&(l=!0),f(),e}}}):null]})}export{_ as n,b as t};
1
+ import{r as e}from"./i18n-CL0jBP7Y.js";import{t}from"./jsx-B4XNFIzB.js";import{t as n}from"./component-DWct-Tq6.js";import{n as r}from"./on-mixin-iWnqUzq5.js";import{n as i}from"./attrs-mixin-CmlG_FtV.js";import{Et as a,L as o,bn as s,dt as c,hn as l,kt as u,wn as d}from"./task-design-DJp5yho1.js";import{T as f,b as p,v as m,w as h}from"./project-threads-DeKXNqeP.js";import{n as g}from"./tasks-request-CsUB5__X.js";function _(n){let r=[],a=new Map,o=!0,s=``,c=!1,u=``,m,h;function _(){n.signal.aborted||n.update()}async function v(){m?.abort();let t=new AbortController;m=t;let i=AbortSignal.any([n.signal,t.signal]);o=!0,s=``,_();try{let t=n.props.project.token,o=new URLSearchParams({limit:`1000`,...u.trim()?{search:u.trim()}:{}}),{schema:s,snapshot:f}=await g(p.tasksApi.workspace.href()+`?`+o,t,i,l);if(i.throwIfAborted(),f.connection.state!==`ready`)throw Error(f.connection.message??e(`app.client.projectTaskPicker.adapterUnavailable`));r=f.items.map(e=>{let t=d(e,s,`title`);return{id:e.id,...typeof t==`string`?{title:t}:{}}});for(let e of r)a.set(e.id,e);for(let e of n.props.selected){let t=a.get(e);t&&!r.some(t=>t.id===e)&&r.push(t)}c=f.truncated}catch(t){i.aborted||(s=t instanceof Error?t.message:e(`app.client.projectTaskPicker.loadFailed`))}finally{m===t&&(o=!1,_())}}let y=i(()=>{v()});return n.signal.addEventListener(`abort`,()=>{clearTimeout(h),m?.abort()},{once:!0}),()=>t(`div`,{class:`contents`,mix:y,children:t(f,{items:r,selected:n.props.selected,required:n.props.required,current:n.props.current,loading:o,error:s,truncated:c,onSearch:e=>{u=e,m?.abort(),m=void 0,clearTimeout(h),o=!0,h=setTimeout(()=>{v()},200),_()},onRetry:()=>{v()},onReview:n.props.onReview,onSave:n.props.onSave,onClose:n.props.onClose})})}function v(t,n){if(n.length>100||new Set(n).size!==n.length)throw Error(e(`app.client.threadLinks.selectUpToTasks`,{count:100}));for(let e of n)s({id:e});if(!t.anchor&&!n.length)throw Error(e(`app.client.threadLinks.taskDiscussionNeedsLinkedTask`));let r=new Set(t.itemIds),i=new Set(n),a=[];for(;r.size!==i.size||[...r].some(e=>!i.has(e));){let o=[...r].filter(e=>!i.has(e)).slice(0,r.size-+!t.anchor);if(o.length){a.push({action:`unlink`,itemIds:o});for(let e of o)r.delete(e)}let s=n.filter(e=>!r.has(e)).slice(0,100-r.size);if(s.length){a.push({action:`link`,itemIds:s});for(let e of s)r.add(e)}if(!o.length&&!s.length)throw Error(e(`app.client.threadLinks.couldNotPrepareTaskLinks`))}return a}async function y(t,n,r,i){let o=v(t,n),s=t;for(let t of o){if(i.throwIfAborted(),!s.revision)throw Error(e(`app.client.threadLinks.reviewLatestDiscussionBeforeChangingLinks`));let n=u({itemIds:t.itemIds,expectedRevision:s.revision}),o=a(await r(t.action,n));i.throwIfAborted();let c=new Set(s.itemIds);for(let e of t.itemIds)t.action===`link`?c.add(e):c.delete(e);if(o.id!==s.id||!o.revision||o.itemIds.length!==c.size||o.itemIds.some(e=>!c.has(e))||JSON.stringify(o.anchor)!==JSON.stringify(s.anchor))throw Error(e(`app.client.threadLinks.taskLinkChangeNotConfirmed`));s=o}return s}function b(i){let s=null,l=!1,u=!1,d=!1;function f(){i.signal.aborted||i.update()}async function g(){if(!s)return;let t=await m(p.comments.get.href({id:s.id}),i.props.project.token,i.signal,a);if(t.id!==s.id)throw Error(e(`app.client.projectThreadLinks.anotherDiscussion`));s=t,l=!1,u=!0,f()}function v(){s=null,f(),d&&(d=!1,i.props.onChange())}function b(){s=i.props.thread,l=!1,u=!1,d=!1,f()}return()=>t(n,{children:[i.props.part===`action`?i.props.canLink?t(o,{icon:`tasks`,label:e(`app.client.projectThreadLinks.linkTasks`),size:`small`,tooltip:!0,disabled:i.props.busy,mix:r(`click`,b)}):null:t(h,{itemIds:i.props.thread.itemIds,items:i.props.items??[],href:c,busy:i.props.busy,onEdit:!i.props.part&&i.props.canLink?b:void 0}),s?t(_,{project:i.props.project,selected:s.itemIds,current:u?s.itemIds:void 0,onClose:v,onReview:l?g:void 0,onSave:async t=>{if(!s||l)throw Error(e(`app.client.projectThreadLinks.reviewLinksBeforeSaving`));try{let e=s;s=await y(e,t,(t,n)=>(d=!0,m(p.comments[t].href({id:e.id}),i.props.project.token,i.signal,a,fetch,n)),i.signal),await i.props.onChange(),d=!1}catch(e){throw d&&(l=!0),f(),e}}}):null]})}export{_ as n,b as t};