@bud.sh/app 0.3.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 +48 -29
- package/dist/node/design.js +6235 -139
- package/dist/node/index.js +4 -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 +48 -29
- package/dist/server/assets/{branch-previews-BryeA_kA.js → branch-previews-ClkoJ0lM.js} +4 -2
- 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-oKd5ETMj.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-DN5uwE4k.js → server-CYvuOSBA.js} +1 -1
- package/dist/server/assets/{services-Ber8opFE.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-Cuauq8xY.d.ts → config-DIC2cf_S.d.ts} +3 -0
- package/dist/types/assets/{contract-BsCQbbxD.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 +2 -2
- 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-GPPa1XPO.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-CznMN7F6.js +0 -2
|
@@ -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{c as i,l as a}from"./loader-Q6-HPKft.js";import{t as o}from"./screen-Dfvzj6n2.js";import{Cn as s,H as c,J as l,T as u,U as d,_t as f,bt as p,dt as m,ot as h,vn as g,xn as _,yn as v}from"./task-design-bktfn_Ok.js";import{C as y,E as b,S as x,V as S,b as C,ct as w,dt as T,p as E,q as D,s as O,w as k,x as A}from"./project-threads-DezXiVK6.js";import{a as ee,i as j,o as te,r as M,s as ne,t as N}from"./project-comments-D897aU5O.js";import{n as P,t as F}from"./tasks-request-mWMk9pBo.js";import{t as I}from"./project-work-CB1JHqGW.js";import{n as L,t as R}from"./project-thread-links-Bp_TseD0.js";function re(o){let s=o.props.conversationId,u=s,f=!!s,p=!1,h=!1,g=[o.props.itemId],_=N({store:O(o.props.project),token:o.props.project.token,signal:o.signal,filter:{itemId:o.props.itemId},initial:o.props.initial,onChange(){o.signal.aborted||o.update()}});_.loaded&&(u??=_.snapshot.threads[0]?.id);let v=r(()=>{_.loaded||_.load().then(()=>{u??=_.snapshot.threads[0]?.id,o.signal.aborted||o.update()})});async function y(e){let t=await _.write(e);return await o.props.onChange?.(),t}function x(e){return{project:o.props.project,thread:e,items:o.props.items,canLink:_.snapshot.capabilities.link,busy:_.busy,onChange:async()=>{await _.load(),_.snapshot.threads.some(t=>t.id===e.id)&&await _.loadThread(e.id,!0),await o.props.onChange?.()}}}function S(t){return e(`div`,{class:`flex items-start justify-between gap-2`,children:[o.props.renderThreadLinks?o.props.renderThreadLinks(t):e(R,{part:t.anchor?`links`:void 0,...x(t)}),!t.anchor&&_.snapshot.capabilities.reply&&_.snapshot.threads.length>1?e(i,{variant:`ghost`,size:`small`,disabled:_.busy,"aria-pressed":!p&&u===t.id,mix:n(`click`,()=>{u=t.id,f=!0,p=!1,o.update()}),children:`Reply`}):null]})}function C(t){return e(D,{location:t.anchor?w(t):`Discussion`,actions:o.props.renderThreadLinks?void 0:e(R,{part:`action`,...x(t)}),status:t.status,busy:_.busy,onStatusChange:_.snapshot.capabilities.status?e=>{y({id:t.id,status:e}).catch(()=>{})}:void 0})}return()=>{s!==o.props.conversationId&&(s=o.props.conversationId,f=!!s,s&&(u=s,p=!1));let{threads:r,capabilities:x}=_.snapshot,w=p?void 0:r.find(e=>e.id===u&&!e.anchor)??(f?void 0:r.find(e=>!e.anchor&&e.status!==`resolved`)??(x.create?void 0:r.find(e=>!e.anchor))),T=!p&&(f&&(!w||!x.reply)||!(!w||w.messagesLoaded));_.ready&&!_.busy&&!_.loading&&o.queueTask(()=>{f&&u&&_.loadThread(u);for(let e of _.snapshot.threads)!e.messagesLoaded&&(!e.anchor||e.id===u)&&_.loadThread(e.id)});let E=r.reduce((e,t)=>e+t.messageCount,0);return e(`section`,{class:`flex min-w-0 flex-col gap-3`,"aria-label":`Task discussion`,mix:v,children:[e(`div`,{class:`flex items-center gap-2`,children:[e(a,{as:`h3`,variant:`ui`,weight:`medium`,children:`Discussion`}),E?e(a,{variant:`ui-caption`,tone:`muted`,children:E}):null,_.ready&&x.create&&r.length?e(i,{variant:`ghost`,size:`small`,class:`ms-auto`,disabled:_.busy||p,mix:n(`click`,()=>{p=!0,o.update()}),children:`New discussion`}):null]}),_.error?e(`div`,{class:`flex flex-col items-start gap-2`,children:[e(a,{variant:`ui-caption`,role:`alert`,children:_.error}),e(i,{variant:`secondary`,size:`small`,mix:n(`click`,()=>{_.load().then(()=>u?_.loadThread(u,!0):void 0)}),children:`Reload comments`})]}):null,_.loaded?_.ready?e(t,{children:[r.length?r.map(t=>t.anchor?e(d,{id:t.id,expanded:u===t.id,heading:C(t),messages:t.messages,messageCount:t.messageCount,now:_.now,onExpand:()=>{u=t.id,f=!1,_.loadThread(t.id),o.update()},renderDetail:()=>e(c,{heading:C(t),messages:t.messages,messageCount:t.messageCount,messagesLoaded:t.messagesLoaded,messagesTruncated:t.messagesTruncated,now:_.now,busy:_.busy,links:S(t),onReply:x.reply?(e,n)=>y({id:t.id,body:e,parentId:n}):void 0})},t.id):e(b,{thread:t,links:S(t)},t.id)):e(a,{variant:`ui-caption`,tone:`muted`,children:`No discussion yet.`}),x.create||x.reply&&(f||r.some(e=>!e.anchor))?e(`div`,{class:`flex min-w-0 flex-col gap-2`,children:[x.create&&(p||!f&&!r.length)?e(`div`,{class:`flex items-start justify-between gap-2`,"aria-label":`New discussion tasks`,children:[e(k,{itemIds:g,items:o.props.items??[],href:m,busy:_.busy,onEdit:x.link?()=>{h=!0,o.update()}:void 0}),p?e(i,{variant:`ghost`,size:`small`,disabled:_.busy,mix:n(`click`,()=>{p=!1,o.update()}),children:`Cancel`}):null]}):r.length>1?e(a,{variant:`ui-caption`,tone:`muted`,children:[`Replying to `,w?.messages[0]?.author.name??`the discussion`]}):null,e(l,{label:`Add task comment`,placeholder:`Add context for your team…`,busy:_.busy||T,class:`w-full`,onSubmit:async e=>{if(T)throw Error(`Load the selected discussion before replying.`);w&&x.reply?await y({id:w.id,body:e}):(u=(await y({anchor:null,itemIds:g,body:e})).thread.id,f=!!u,p=!1,g=[o.props.itemId],o.update())}},`task-composer`)]}):null]}):e(a,{variant:`ui-caption`,tone:`muted`,children:j}):e(a,{variant:`ui-caption`,tone:`muted`,role:`status`,children:`Loading discussion…`}),h?e(L,{project:o.props.project,selected:g,required:[o.props.itemId],onSave:async e=>{g=e,o.update()},onClose:()=>{h=!1,o.update()}}):null]})}}function ie(e,t){return e.revision===null?Object.entries(e.values).some(([e,n])=>JSON.stringify(n)!==JSON.stringify(t.values[e])):e.revision!==t.revision}async function z(e,t,n,r,i){let[a,o,s]=await Promise.all([P(C.tasksApi.show.href({id:t}),e,r,e=>e),M(e,t,r,i),n]),c=v(a,s);if(c.item.id!==t)throw Error(`The task service returned a different task. Refresh and try again.`);return{detail:c,discussion:o}}async function B(e,t,n,r){let i=await O(e),a=E(i),o=a?Promise.resolve(a):I(e).refresh(t),s=n?h(n):null,c=n=>z(e.token,s,n,t,r),l=``,u=s?c(o.then(e=>e.schema)).catch(n=>{if(!a||n instanceof F)throw n;return c(I(e).refresh(t).then(e=>e.schema))}).catch(e=>(l=e instanceof Error?e.message:`Could not load this task.`,null)):null;try{await o;let e=await u;return{store:i,stored:!!a,error:``,task:e,taskError:l}}catch(e){return t.throwIfAborted(),{store:i,stored:!1,error:e instanceof Error?e.message:`Could not load tasks.`}}}function V(t){let n=t.props.project,i=t.props.initial.store,a=I(n),o=E(i),c=()=>{let e=o?.snapshot.schemaVersion;o=E(i);let t=b?i.work.get(b.item.id):void 0;(t&&!t.$hasPendingWrites&&ie(A(t),b.item)||!b&&O&&o?.snapshot.schemaVersion!==e)&&Z(),Y()},l=[i.boards.subscribeChanges(c),i.work.subscribeChanges(c)],d=h(t.props.href),f=t.props.initial.task,b=f?.detail.item.id===d?f.detail:null,w=b?f.discussion:void 0,D=!1,O=t.props.initial.task?``:t.props.initial.taskError??``,k=d!==null&&!b&&!O,j=t.props.initial.error,M=null,N=null,F=new Set,L=t.props.href,R,B=!1,V=!1;function H(e){let t=e?i.work.get(e.item.id):void 0;if(!e||!t?.$hasPendingWrites)return e;let n={...e.item.values,...A(t).values};return{...e,item:{...e.item,values:n}}}function U(){if(!o)throw Error(`Refresh tasks before making changes.`);return o.schema}async function W(e,r,i){let a=new AbortController;F.add(a);try{return await P(e,n.token,AbortSignal.any([t.signal,a.signal]),i,fetch,{body:r})}finally{F.delete(a)}}async function ae(e){await y(i.work,{upsert:[e]}),b?.item.id===e.id&&(b={...b,item:e}),Y()}async function G(){await X(),d&&await Z()}let K=new Map;async function q(e,n,r,i){let a=i?K.get(i):void 0,o=Promise.withResolvers();i&&K.set(i,o.promise);try{let t=await x(r,async()=>{let t=await a,r=`expectedRevision`in n?n.expectedRevision:void 0,s=await W(e,t&&r===t.from&&t.to?{...n,expectedRevision:t.to}:n,e=>_(e,U()));if(i&&s.item.id!==i)throw Error(`The task service returned a different task. Refresh before retrying.`);return await ae(s.item),o.resolve(r?{from:r,to:s.item.revision}:null),s.item});return d&&await Z(),t}catch(e){throw o.resolve(null),t.signal.aborted||u.error(`Bud undid a task change`,{description:e instanceof Error?e.message:`The write was not confirmed.`}),G(),e}finally{i&&K.get(i)===o.promise&&K.delete(i)}}function J(e,t){return()=>{let n=i.work.get(e);if(!n)return;let{values:r}=t(A(n));i.work.update(e,e=>{e.values=r})}}let oe={create:e=>q(C.tasksApi.create.href(),e,()=>{i.work.insert(te(U(),`pending-${crypto.randomUUID()}`,e))}),update:(e,t)=>q(C.tasksApi.update.href({id:e}),t,J(e,e=>ne(e,t)),e),act:(e,t)=>q(C.tasksApi.mutate.href({id:e}),t,J(e,e=>ee(U(),e,t)),e),get:async e=>{let r=await P(C.tasksApi.show.href({id:e}),n.token,t.signal,e=>v(e,U()));if(r.item.id!==e)throw Error(`The task service returned a different task. Refresh and try again.`);return r.item},section:(e,r,i=t.signal)=>P(C.tasksApi.section.href({id:e,section:r}),n.token,AbortSignal.any([t.signal,i]),e=>g(e,U())),sync:async e=>{try{let t=await W(C.tasksApi.sync.href(),e,s);return await G(),t}catch(e){throw G(),e}}};function Y(){t.signal.aborted||t.update()}async function X(){M?.abort();let e=new AbortController;M=e,D=!0,j=``,Y();try{await a.refresh(AbortSignal.any([t.signal,e.signal]))}catch(n){!e.signal.aborted&&!t.signal.aborted&&(j=n instanceof Error?n.message:`Could not load tasks.`)}finally{M===e&&(D=!1,Y())}}async function Z(){if(N?.abort(),!d){b=null,k=!1,O=``,Y();return}let e=d,r=new AbortController;N=r;let i=b?.item.id!==e;i&&(b=null),k=!0,O=``,Y();try{let a=AbortSignal.any([t.signal,r.signal]);if(i){let i=await z(n.token,e,U(),a,t.props.conversationId);if(r.signal.aborted||e!==d)return;b=i.detail,w=i.discussion;return}let o=await P(C.tasksApi.show.href({id:e}),n.token,a,e=>v(e,U()));if(r.signal.aborted||e!==d)return;if(o.item.id!==e)throw Error(`The task service returned a different task. Refresh and try again.`);b=o}catch(n){!r.signal.aborted&&!t.signal.aborted&&e===d&&(O=n instanceof Error?n.message:`Could not load this task.`)}finally{N===r&&(k=!1,Y())}}function Q(e,t=!0){e!==d&&(d=e,t&&$(!1),Z(),Y())}function $(e){let n=m(null);if(!t.props.active||!T(window.location.href)&&window.location.pathname!==n&&!window.location.pathname.startsWith(`${n}/`)){B=!0;return}B=!1;let r=m(d);window.location.pathname+window.location.search+window.location.hash!==r&&(R=new URL(r,window.location.origin).href,window.history[e?`replaceState`:`pushState`]({...window.history.state,budTask:d},``,r))}let se=r((e,n)=>{V=!0;let r=d;d=h(t.props.href),b?.item.id!==d&&!(O&&r===d)&&Z(),t.props.initial.stored&&X(),n.addEventListener(`abort`,()=>{for(let e of l)e.unsubscribe();M?.abort(),N?.abort();for(let e of F)e.abort()},{once:!0})});return()=>{if(V&&L!==t.props.href){if(L=t.props.href,R!==L){B=!1;let e=h(L);e!==d&&t.queueTask(()=>Q(e,!1))}R=void 0}B&&t.props.active&&t.queueTask(()=>$(!0));let r=o,i=r?.snapshot.items.map(e=>({id:e.id,title:p(e,r.schema,`title`)||void 0}));return e(`div`,{class:`h-full min-h-0`,mix:se,children:e(S,{projectName:n.name,project:{id:n.id,name:n.name},design:t.props.design,storageKey:`bud:tasks:${n.id}:v1`,snapshot:r?.snapshot??null,schema:r?.schema??null,loading:D,error:j,selectedId:d,detail:H(b),discussion:b?e(re,{project:n,itemId:b.item.id,initial:w,items:i,conversationId:t.props.conversationId,onChange:G},b.item.id):void 0,detailLoading:k,detailError:O,operations:oe,onSelect:Q,onReload:()=>{X()},onReloadDetail:()=>{Z()}})})}}var H=o({routes:f,load:({project:e,signal:t,url:n,conversation:r})=>B(e,t,n.href,r?.id),render:(t,{project:n,url:r,active:i,taskDesign:a,conversation:o})=>e(V,{project:n,initial:t,design:a,href:r.href,active:i,conversationId:o?.id})});export{H as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Sn as e,bn as t,yt as n}from"./task-design-bktfn_Ok.js";import{b as r}from"./project-threads-DezXiVK6.js";var i=n(),a=n();for(let[e,t]of Object.entries(r.tasksApi))(t.method===`GET`?i:a).add(t.pattern,e);function o(n,r){if(!n.startsWith(`/`)||n.startsWith(`//`)||n.length>7e3||/[\\#\u0000-\u0020]/.test(n))return!1;try{let o=(r?a:i).match(n,{baseURL:`http://bud.invalid`});if(!o||o.url.pathname!==n.split(`?`)[0])return!1;for(let[e,n]of Object.entries(o.params))(e===`id`||e===`section`)&&t({id:n});if(o.data!==`index`&&o.data!==`workspace`)return!o.url.search;let s={};for(let[e,t]of o.url.searchParams){if(![`search`,`status`,`limit`].includes(e)||Object.hasOwn(s,e))return!1;s[e]=e===`limit`?Number(t):t}return e(s),!0}catch{return!1}}async function s(e,t,n,r,i=fetch,a){if(!o(e,!!a))throw Error(`Invalid task endpoint.`);n.throwIfAborted();let s=await i(e,{method:a?`POST`:`GET`,headers:{"X-Bud-Token":t,...a?{"Content-Type":`application/json`}:{}},...a?{body:JSON.stringify(a.body)}:{},credentials:`same-origin`,redirect:`error`,cache:`no-store`,signal:n}),l=s.body?.getReader();if(!l)throw Error(`The task service returned an empty response.`);let u=[],d=0;try{for(;;){n.throwIfAborted();let e=await l.read();if(e.done)break;if(d+=e.value.byteLength,d>4194304)throw Error(`The task response is too large to display. Narrow the results and try again.`);u.push(e.value)}}catch(e){throw await l.cancel().catch(()=>{}),e}finally{l.releaseLock()}let f=new Uint8Array(d),p=0;for(let e of u)f.set(e,p),p+=e.byteLength;let m;try{m=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(f))}catch{throw Error(`The task service returned an invalid response. Refresh and try again.`)}if(!s.ok){let e=m&&typeof m==`object`&&`error`in m&&typeof m.error==`string`?m.error.slice(0,1e3):`Could not load tasks. Try again.`,t=m&&typeof m==`object`&&`code`in m&&typeof m.code==`string`&&/^[a-z][a-z-]{0,63}$/.test(m.code)?m.code:`request`,n;if(m&&typeof m==`object`&&`currentRevision`in m){let e=m.currentRevision;if(e!==null&&(typeof e!=`string`||!e.trim()||e.length>256||e.includes(`\0`)))throw Error(`The task service returned an invalid conflict response.`);n=e}throw new c(e,t,n)}return r(m)}var c=class extends Error{code;currentRevision;constructor(e,t,n){super(e),this.name=`TaskRequestError`,this.code=t,this.currentRevision=n}};export{s as n,c as t};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pages-BVrTX_Eq.js","assets/jsx-B4XNFIzB.js","assets/component-DWct-Tq6.js","assets/on-mixin-iWnqUzq5.js","assets/children-N0l0v7XI.js","assets/attrs-mixin-CmlG_FtV.js","assets/create-element--E6NJ0nh.js","assets/loader-Q6-HPKft.js","assets/screen-Dfvzj6n2.js","assets/task-design-bktfn_Ok.js","assets/lru-BkhKJhvt.js","assets/method-DybmO5PB.js","assets/project-threads-DezXiVK6.js","assets/frame-D6XmK4Df.js","assets/preload-helper-BLdHbfdN.js","assets/cloneFileDiffMetadata-CWfw01dG.js","assets/project-comments-D897aU5O.js","assets/workspace-tab-Bg2MFdMB.js","assets/project-branches-DpxQx-T4.js","assets/canvas-DxaIItAs.js","assets/project-thread-links-Bp_TseD0.js","assets/tasks-request-mWMk9pBo.js","assets/tasks-Cqfj4fQN.js","assets/project-work-CB1JHqGW.js","assets/files-C-7xoSt4.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./jsx-B4XNFIzB.js";import{n as t}from"./on-mixin-iWnqUzq5.js";import{n}from"./run-B2H4brp5.js";import{n as r}from"./attrs-mixin-CmlG_FtV.js";import{t as i}from"./preload-helper-BLdHbfdN.js";import{c as a,i as o,l as s,o as c,r as l,t as ee}from"./loader-Q6-HPKft.js";import{Et as u,Fn as d,Gn as f,Hn as p,In as m,Kn as h,Ln as g,Mn as _,Nn as v,Ot as y,Pn as b,Q as x,Un as S,Vn as C,jn as w,yt as T}from"./task-design-bktfn_Ok.js";import{$ as te,At as ne,Dt as re,J as E,Ot as D,Q as O,X as ie,Y as ae,Z as oe,b as k,dt as A,et as j,jt as se,kt as ce,nt as le,ot as M,rt as ue,t as N,tt as de,v as P,y as fe}from"./project-threads-DezXiVK6.js";import{d as pe}from"./method-DybmO5PB.js";import{t as me}from"./project-work-CB1JHqGW.js";import{n as he}from"./workspace-tab-Bg2MFdMB.js";function ge(t){let n=`connecting`,i=r((e,r)=>{let{project:i}=t.props;me(i),N(i);let a=fe(i.token);n=a.status;let o=a.watchStatus(e=>{n=e,t.update()});r.addEventListener(`abort`,o,{once:!0}),t.update()});return()=>e(`span`,{class:`contents`,mix:i,children:e(D,{status:n})})}var _e=new WeakMap;function F(e,t){let n=f(e,t,{abortEarly:!0});if(n.success)return n.value;let r=n.issues[0];throw _e.get(r)??Error(r.message)}function I(e,t){return b((n,r)=>{let i=e[`~run`](n,r);return i.issues?g(t,r.path):i})}function L(e,t){return b((n,r)=>{let i=e[`~run`](n,r);if(i.issues)return i;let a=t(i.value);return a===void 0?i:g(a,r.path)})}function R(e,t){return b((n,r)=>{let i=e[`~run`](n,r);if(i.issues)return i;try{return{value:t(i.value)}}catch(e){if(!(e instanceof Error))throw e;let t=g(e.message,r.path);return _e.set(t.issues[0],e),t}})}function ve(e){return b((t,n)=>e(t)[`~run`](t,n))}function z(e,t){return b((n,r)=>n==null?{value:t()}:e[`~run`](n,r))}function B(e,t){let n=p(t);return b((r,i)=>{if(!r||typeof r!=`object`||Array.isArray(r))return g(`${e} must be an object.`,i.path);for(let n of Object.keys(r))if(!Object.hasOwn(t,n))return g(`${e}.${n} is not a supported setting.`,[...i.path,n]);return n[`~run`](r,i)})}function ye(e,t,n=0){let r=_(e);return b((e,i)=>!Array.isArray(e)||e.length<n?g(t,i.path):r[`~run`](e,i))}var be=d(B(`files`,{edit:z(I(v(),`files.edit must be true or false.`),()=>!0)}),()=>({edit:!0})),V=`flows must be [{ id, title, start, script, steps: [{ id, title }], block? }] with short ids, local paths and unique steps.`,xe=e=>typeof e==`string`&&/^[a-z0-9][a-z0-9-]{0,62}$/.test(e),H=e=>typeof e==`string`&&e.trim()!==``&&e.length<=200;function Se(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let{id:t,title:n,start:r,script:i,steps:a,block:o=[]}=e;if(!xe(t)||!H(n)||!H(i)||i.includes(`\0`)||typeof r!=`string`||!r.startsWith(`/`)||r.startsWith(`//`)||new URL(r,`http://bud.invalid`).origin!==`http://bud.invalid`||!Array.isArray(a)||!a.length||a.length>50)return null;let s=a.map(e=>{let{id:t,title:n}=e??{};return xe(t)&&H(n)?{id:t,title:n.trim()}:null});if(s.some(e=>!e))return null;let c=s.map(e=>e.id);return new Set(c).size!==c.length||!Array.isArray(o)||o.some(e=>!H(e))?null:{id:t,title:n.trim(),start:r,script:i.trim(),steps:s,block:o}}var Ce=b((e,t)=>{if(e===void 0)return{value:[]};if(!Array.isArray(e))return g(V,t.path);let n=e.map(Se);if(n.some(e=>!e))return g(V,t.path);let r=n.map(e=>e.id);return new Set(r).size===r.length?{value:n}:g(V,t.path)});function we(e,t){return{id:`${e.id}/${t.id}`,path:`${e.start.replace(/#.*$/,``)}#${e.id}-${t.id}`,title:t.title,group:e.title,flow:{id:e.id,step:t.id}}}var Te=Object.freeze({".svg":`image/svg+xml`,".png":`image/png`,".webp":`image/webp`,".jpg":`image/jpeg`,".jpeg":`image/jpeg`,".gif":`image/gif`,".ico":`image/x-icon`}),Ee=`logo must be an image path inside the project (.svg, .png, .webp, .jpg, .gif or .ico), or { light, dark }.`;function De(e){if(typeof e!=`string`||e.length>1024||e.includes(`\0`))return null;let t=e.trim().replaceAll(`\\`,`/`);if(!t||t.startsWith(`/`)||/^[a-z]:/i.test(t)||t.split(`/`).includes(`..`))return null;let n=t.slice(t.lastIndexOf(`.`)).toLowerCase();return Object.hasOwn(Te,n)?t:null}var Oe=b((e,t)=>{if(e===void 0)return{value:null};let n=De(typeof e==`object`&&e?e.light:e),r=typeof e==`object`&&e?e.dark:void 0,i=r===void 0?null:De(r),a=typeof e==`object`&&e?Object.keys(e):[];return n&&(r===void 0||i)&&a.every(e=>e===`light`||e===`dark`)?{value:{light:n,dark:i}}:g(Ee,t.path)}),ke=Object.freeze(`background.shell.main.canvas.panel.board.editor.editor-tabs.foreground.muted.primary.primary-hover.primary-foreground.border.tab-divider.hover.selected.control.control-active.control-selected.card.menu.menu-hover.card-frame.card-surface.card-border.card-frame-border.card-badge.overlay-shadow.tooltip.board-control.board-control-hover.board-card.control-elevation.board-elevation.board-card-elevation.card-elevation.board-card-lift.frame-control.modal-elevation.segment-elevation.control-open-elevation.board-segment.scrollbar.focus.scrollbar-hover.tooltip-border.tooltip-shadow`.split(`.`)),U=`theme must be { light, dark }, each mapping Bud's tokens (${ke.slice(0,3).join(`, `)}, …) to CSS colors or shadows.`;function Ae(e){if(typeof e!=`string`)return null;let t=e.trim();return!t||t.length>300||!/^[#a-zA-Z0-9(),.%\s/+-]+$/.test(t)||/url\s*\(/i.test(t)?null:t}function W(e){if(e===void 0)return{};if(!e||typeof e!=`object`||Array.isArray(e))return null;let t={};for(let[n,r]of Object.entries(e)){let e=Ae(r);if(!ke.includes(n)||e===null)return null;t[n]=e}return Object.freeze(t)}var je=b((e,t)=>{if(e===void 0)return{value:{light:{},dark:{}}};if(!e||typeof e!=`object`||Array.isArray(e))return g(U,t.path);let{light:n,dark:r,...i}=e,a={light:W(n),dark:W(r)};return Object.keys(i).length||!a.light||!a.dark?g(U,t.path):{value:{light:a.light,dark:a.dark}}}),G=`branches must be { main?, build?: { install?, build?, serve? } } with a branch name and nonempty shell commands.`;function Me(e){return typeof e==`string`&&e.length<=255&&/^[A-Za-z0-9._/-]+$/.test(e)&&!e.startsWith(`-`)&&!e.startsWith(`/`)&&!e.endsWith(`/`)&&!e.endsWith(`.lock`)&&!e.includes(`..`)&&!e.includes(`//`)?e:null}function K(e){return typeof e==`string`&&e.trim()&&e.length<=4096&&!e.includes(`\0`)?e.trim():null}var Ne=b((e,t)=>{let n={main:null,install:null,build:null,serve:null};if(e===void 0)return{value:n};if(!e||typeof e!=`object`||Array.isArray(e))return g(G,t.path);let r=e,i=r.build??{};if(!i||typeof i!=`object`||Array.isArray(i)||Object.keys(r).some(e=>e!==`main`&&e!==`build`))return g(G,t.path);let a=i;if(Object.keys(a).some(e=>![`install`,`build`,`serve`].includes(e)))return g(G,t.path);let o={main:r.main===void 0?null:Me(r.main),install:a.install===void 0?null:K(a.install),build:a.build===void 0?null:K(a.build),serve:a.serve===void 0?null:K(a.serve)};return r.main!==void 0&&!o.main||[`install`,`build`,`serve`].some(e=>a[e]!==void 0&&!o[e])?g(G,t.path):{value:o}});function q(e,t,n){let r=t?/\.server\.ts$/:/\.(?:ts|tsx|js|jsx)$/;return I(h().refine(e=>e.length<=1024&&e.startsWith(`./`)&&!/[\u0000-\u001f\u007f\\?#%]/.test(e)&&r.test(e)&&(t||!/\.server\.[cm]?[jt]sx?$/.test(e))&&!e.slice(2).split(`/`).some(e=>!e||e===`.`||e===`..`||e===`node_modules`)),n??(t?`${e} must be a built-in adapter or a ./ module ending in .server.ts inside the project.`:`${e} must be bud:beads or a ./ browser module ending in .ts, .tsx, .js or .jsx inside the project.`))}var Pe=m([!1,`bud:beads`,`bud:memory`,`bud:git-comments`]);function Fe(e){let t=q(`storage.${e}`,!0);return d(L(ve(e=>e===!1||e===`bud:beads`||e===`bud:memory`||e===`bud:git-comments`?Pe:t),t=>e===`work`&&t===`bud:git-comments`?`storage.work cannot use bud:git-comments; it only stores threads.`:void 0),`bud:beads`)}var Ie=d(B(`storage`,{work:Fe(`work`),threads:Fe(`threads`)}),()=>({work:`bud:beads`,threads:`bud:beads`})),Le=d(B(`designs`,{tasks:d(ve(e=>e===`bud:beads`?m([`bud:beads`]):q(`designs.tasks`,!1)),`bud:beads`),pages:d(m([`path`,`title`]),`path`)}),()=>({tasks:`bud:beads`,pages:`path`})),Re=new Set([`bud:dom`,`bud:react`,`bud:react-grab`]),ze=q(`picker`,!1,`picker must be bud:dom, bud:react, bud:react-grab or a ./ browser module ending in .ts, .tsx, .js or .jsx inside the project.`),Be=b((e,t)=>{if(e===void 0)return{value:{name:`bud:dom`,module:null}};if(typeof e==`string`&&Re.has(e))return{value:{name:e,module:null}};let n=ze[`~run`](e,t);return n.issues?n:{value:{name:n.value,module:n.value}}}),Ve=`ready must be a CSS selector, { selector } or { expression }.`,J=b((e,t)=>{let n=typeof e==`string`?{selector:e}:e;if(n&&typeof n==`object`&&!Array.isArray(n)){let e=Object.entries(n),[t,r]=e[0]??[];if(e.length===1&&(t===`selector`||t===`expression`)&&typeof r==`string`&&r.trim()&&r.length<=4096)return{value:t===`selector`?{selector:r.trim()}:{expression:r.trim()}}}return g(Ve,t.path)}),He=()=>[`light`,`dark`],Ue=()=>[{id:`desktop`,name:`Desktop`,width:1440,height:900,mobile:!1}],Y=`previews.viewports must list up to 4 { name, width, height?, mobile? } with distinct names, widths from 240 to 3840 and heights from 240 to 4000.`;function We(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,32)}var Ge=b((e,t)=>{if(!Array.isArray(e)||e.length===0||e.length>4)return g(Y,t.path);let n=[];for(let r of e){if(!r||typeof r!=`object`||Array.isArray(r))return g(Y,t.path);let{name:e,width:i,height:a,mobile:o,...s}=r,c=(e,t,n)=>typeof e==`number`&&Number.isInteger(e)&&e>=t&&e<=n;if(Object.keys(s).length||typeof e!=`string`||!e.trim()||e.length>40||!We(e)||!c(i,240,3840)||a!==void 0&&!c(a,240,4e3)||o!==void 0&&typeof o!=`boolean`)return g(Y,t.path);let l=o??i<800;n.push({id:We(e),name:e.trim(),width:i,height:a??(l?Math.round(i*844/390):900),mobile:l})}return new Set(n.map(e=>e.id)).size===n.length?{value:n}:g(Y,t.path)}),Ke=d(B(`previews`,{scale:z(I(C().refine(e=>Number.isInteger(e)&&e>=1&&e<=3),`previews.scale must be 1, 2 or 3.`),()=>2),themes:z(I(_(m([`light`,`dark`])).refine(e=>e.length>0&&new Set(e).size===e.length),`previews.themes must list light, dark or both, once each.`),He),viewports:z(Ge,Ue),ready:z(J,()=>null),readyTimeout:z(I(C().refine(e=>Number.isInteger(e)&&e>=1e3&&e<=6e5),`previews.readyTimeout must be whole milliseconds from 1000 to 600000.`),()=>6e4),css:z(I(h().refine(e=>e.length<=2e4&&!e.includes(`<`)),`previews.css must be CSS text without <, up to 20000 characters.`),()=>``)}),()=>({scale:2,themes:He(),viewports:Ue(),ready:null,readyTimeout:6e4,css:``}));function qe(e,t){let n=[],r=new Set;function i(e,a){if(!e||typeof e!=`object`||Array.isArray(e)||r.has(e))throw Error(`Screen routes must be a Remix route map.`);r.add(e);for(let[r,o]of Object.entries(e)){let e=a?`${a}.${r}`:r;if(!o||typeof o!=`object`)throw Error(`Screen route ${e} must be a Remix route.`);if(!(`pattern`in o)){i(o,e);continue}if(![`GET`,`ANY`].includes(o.method)||typeof o.href!=`function`||typeof o.pattern?.source!=`string`)throw Error(`Screen route ${e} must be a GET route.`);let s=pe.parse(o.pattern.source),c=s.toJSON(),l=`/${c.pathname}`;if(c.protocol||c.hostname||c.port||c.pathname.split(`/`).some(e=>/^\.{1,2}$/.test(decodeURIComponent(e)))||l!==t&&!l.startsWith(`${t}/`)&&!l.startsWith(`${t}(/`))throw Error(`Screen route ${e} must stay under ${t}.`);n.push({name:e,pattern:s.source})}r.delete(e)}if(i(e,``),!n.length)throw Error(`Screen routes must contain at least one route.`);return n}function Je(){return{id:`pages`,label:`Pages`,icon:`browser`,path:`/pages`,module:`bud:pages`}}function Ye(){return{id:`canvas`,label:`Canvas`,icon:`grid`,path:`/canvas`,module:`bud:canvas`}}function Xe(){return{id:`tasks`,label:`Tasks`,icon:`tasks`,path:`/tasks`,module:`bud:tasks`}}function Ze(){return{id:`files`,label:`Files`,icon:`files`,path:`/files`,module:`bud:files`}}var X=[Je(),Ye(),Xe(),Ze()],Z=new Map(X.map(e=>[e.module,e])),Qe=[`/comments`,...X.map(e=>e.path),`/api`,`/health`,`/__bud`,`/assets`,`/app`,`/src`,`/node_modules`,`/agents`,`/brand`,`/fonts`,`/frameworks`,`/licenses`],$e=L(I(w().refine(e=>!!e&&typeof e==`object`),`Each screen must be an object.`),({id:e,label:t,icon:n=`layers`,module:r,path:i})=>{if(typeof e!=`string`||!/^[a-z][a-z0-9-]{0,31}$/.test(e))return`Screen ids are 1-32 lowercase letters, digits and hyphens.`;if(typeof t!=`string`||!t.trim())return`Screen ${e} needs a label.`;if(typeof n!=`string`||!n)return`Screen ${e} needs an icon name.`;if(typeof r!=`string`)return`Screen ${e} needs a module.`;let a=Z.get(r);if(i??=a?.path??`/${e}`,a)return e!==a.id||i!==a.path?`${r} keeps id "${a.id}" and path "${a.path}".`:void 0;if(!/^\.\/[^\0\\]+\.(?:ts|tsx|js|jsx)$/.test(r))return`Screen ${e} must be a ./ module ending in .ts, .tsx, .js or .jsx.`;if(typeof i!=`string`||!/^\/[a-z0-9][a-z0-9-]*$/.test(i))return`Screen ${e} needs one static path segment, such as /${e}.`;if(X.some(t=>t.id===e))return`Screen id "${e}" is reserved for a built-in screen.`;if(Qe.includes(i))return`Bud reserves the path ${i}.`}),et=d(R(I(_(w()).refine(e=>e.length>0),`screens must list at least one screen.`),e=>{let t=new Set,n=new Set;return e.map(e=>{let r=F($e,e),{id:i,label:a,icon:o=`layers`,module:s}=r,c=r.path??Z.get(s)?.path??`/${i}`;if(t.has(i)||n.has(c))throw Error(`Screen ids and paths must be unique.`);return t.add(i),n.add(c),r.routes!==void 0&&qe(r.routes,c),{id:i,label:a,icon:o,path:c,module:s,...r.routes===void 0?{}:{routes:r.routes}}})}),()=>X.map(e=>({...e}))),tt=e=>!!e&&typeof e==`object`;function Q(e,t){let n=p(t);return b((t,r)=>tt(t)?n[`~run`](Array.isArray(t)?{...t}:t,r):g(e,r.path))}var nt=L(Q(`Bud config must export an object.`,{routes:I(_(w()).refine(e=>e.length>0),`bud.config must define at least one route.`),name:S(I(h().refine(e=>!!e.trim()),`name must be a nonempty string.`)),target:S(Q(`target must be an object.`,{origin:w(),port:w()})),comments:S(Q(`comments must be an object.`,{remote:w()})),port:w(),screens:w(),storage:w(),designs:w(),previews:w(),files:w(),logo:w(),theme:w(),picker:w(),branches:w(),flows:w()}),({target:e})=>{if(e?.port===0)return`target.port must be a listening port, not zero.`;if(e?.origin!==void 0&&(typeof e.origin!=`string`||!e.origin.trim()))return`target.origin must be an HTTP(S) origin.`}),rt=L(w().transform(e=>typeof e==`string`?{path:e,title:e===`/`?`Home`:e}:e),e=>{if(!e||typeof e.path!=`string`||!e.path.startsWith(`/`)||e.path.startsWith(`//`))return`Canvas routes must be local paths beginning with a single /.`;if(new URL(e.path,`http://bud.invalid`).origin!==`http://bud.invalid`||e.path.includes(`\\`))return`Canvas routes must stay on the target origin.`;let t=e.id??it(e.path);if(typeof t!=`string`||!t.trim())return`Canvas route IDs and paths must be unique.`;if(typeof e.title!=`string`||!e.title.trim())return`Each route needs a title.`;if(e.pattern!==void 0&&(typeof e.pattern!=`string`||!e.pattern.startsWith(`/`)))return`A route pattern must be a path beginning with /.`;if(e.group!==void 0&&(typeof e.group!=`string`||!e.group.trim()||e.group.length>120))return`A route group must be a short name.`;if(e.ready!==void 0&&e.ready!==!1&&!f(J,e.ready).success)return`A route ready must be false, a CSS selector, { selector } or { expression }.`}).transform(e=>{let t=it(e.path);return{id:e.id??t,path:t,title:e.title,...e.pattern===void 0?{}:{pattern:e.pattern},...e.group===void 0?{}:{group:e.group.trim()},...e.ready===void 0?{}:{ready:e.ready===!1?null:F(J,e.ready)}}});function it(e){let t=new URL(e,`http://bud.invalid`),n=t.searchParams.toString();return`${t.pathname}${n?`?${n}`:``}${t.hash}`}var at=L(ye(rt,`bud.config must define at least one route.`,1),e=>new Set(e.map(e=>e.id)).size!==e.length||new Set(e.map(e=>e.path)).size!==e.length?`Canvas route IDs and paths must be unique.`:void 0),ot=e=>e===void 0||Number.isInteger(e)&&e>=0&&e<=65535,st=e=>typeof e==`string`&&/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(e);R(L(R(L(R(L(R(nt,e=>({...e,routes:F(at,e.routes)})),({port:e,target:t})=>ot(e??0)&&ot(t?.port)?void 0:`Ports must be integers between 0 and 65535.`),({target:e,...t})=>{let n=e?.origin??(e?.port?`http://127.0.0.1:${e.port}`:void 0);return{...t,targetOrigin:n&&ct(n,`target.origin must be an HTTP(S) origin without a path or credentials.`)}}),({comments:e})=>st(e?.remote??`origin`)?void 0:`comments.remote must be a Git remote name.`),e=>{let t=F(Ce,e.flows),n=t.flatMap(e=>e.steps.map(t=>we(e,t))),r=e.routes.findIndex(e=>e.path===`/`)+1;return{...e,flows:t,routes:[...e.routes.slice(0,r),...n,...e.routes.slice(r)]}}),({routes:e})=>new Set(e.map(e=>e.id)).size!==e.length||new Set(e.map(e=>e.path)).size!==e.length?`A flow step must not reuse a route’s id or path.`:void 0),e=>({name:e.name??`Your project`,routes:e.routes,flows:e.flows,port:e.port??0,targetOrigin:e.targetOrigin,remote:e.comments?.remote??`origin`,screens:F(et,e.screens),storage:F(Ie,e.storage),designs:F(Le,e.designs),previews:F(Ke,e.previews),files:F(be,e.files),logo:F(Oe,e.logo),theme:F(je,e.theme),picker:F(Be,e.picker),branches:F(Ne,e.branches)}));function ct(e,t){let n=new URL(e);if(![`http:`,`https:`].includes(n.protocol)||n.username||n.password||n.pathname!==`/`||n.search||n.hash)throw Error(t);return n.origin}function $(e,t){let n=T();for(let t of e)n.add(t.pattern,t.name);let r=n.match(t,{baseURL:`http://bud.invalid`});return r?{route:r.data,params:r.params}:null}function lt(e,t){let n=e?$(qe(e,t.path),t.url):{route:null,params:{}};if(!n)throw Error(`No screen route matches ${t.url.pathname}.`);return{...t,...n}}var ut={"bud:pages":()=>i(()=>import(`./pages-BVrTX_Eq.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18])),"bud:canvas":()=>i(()=>import(`./canvas-DxaIItAs.js`),__vite__mapDeps([19,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20,21])),"bud:tasks":()=>i(()=>import(`./tasks-Cqfj4fQN.js`),__vite__mapDeps([22,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,21,23,20])),"bud:files":()=>i(()=>import(`./files-C-7xoSt4.js`),__vite__mapDeps([24,10,1,5,3,2,4,6,14,7,8,9,11,15,12,13,16,20,21]))};function dt(e){return Object.hasOwn(ut,e)?ut[e]():i(()=>import(e),[])}async function ft(e,t,n=dt){let r=(await n(e)).default;if(typeof r?.render!=`function`)throw Error(`A screen module must export defineScreen({ render }) as its default.`);let i=await r.load?.(lt(r.routes,t));return t.signal.throwIfAborted(),{screen:r,data:i}}async function pt(e,t,n=e=>i(()=>import(e),[])){if(t.throwIfAborted(),!e)return;if(`error`in e)throw Error(e.error);let r=await n(e.url);return t.throwIfAborted(),x(r.default)}function mt(n){let i,u=``;async function d(){let{module:e,project:t,label:r}=n.props;i=void 0,u=``,n.update();let{location:a}=n.props,o={project:t,signal:n.signal,path:a.path,url:new URL(a.href,window.location.origin),active:n.props.active,conversation:a.conversation,route:null,params:{}};try{if(`error`in e)throw Error(e.error);o.taskDesign=await pt(n.props.taskDesign,n.signal),i={...await ft(e.url,o),context:o}}catch(e){if(n.signal.aborted)return;console.error(e),u=e instanceof Error&&e.message?e.message:`Could not open ${r}.`}n.update()}let f=r(()=>{d()});return()=>{let{label:r,module:p,location:m}=n.props,h=i?.context,g=``;if(i&&h)try{if(m.routes&&!$(m.routes,m.href))throw Error(`No screen route matches ${m.href}.`);h=lt(i.screen.routes,{...h,active:n.props.active,conversation:m.conversation,url:new URL(m.href,h.url.origin)})}catch(e){g=e instanceof Error?e.message:`This screen route is invalid.`}return e(`div`,{class:`h-full min-h-0`,mix:f,children:g?e(`div`,{class:`p-3 md:p-4`,children:e(s,{role:`alert`,children:g})}):i&&h?i.screen.render(i.data,h):u?e(`div`,{class:`h-full overflow-y-auto p-3 md:p-4`,children:e(l,{class:`max-w-2xl`,role:`alert`,children:[e(c,{title:`${r} didn't open`,subtitle:u}),e(o,{class:`flex-col items-start gap-3`,children:[e(s,{as:`p`,variant:`ui`,tone:`muted`,children:`Fix the screen and retry. Details are in the browser console.`}),e(a,{mix:t(`click`,()=>{`error`in p||n.props.taskDesign&&`error`in n.props.taskDesign?window.location.reload():d()}),children:`Retry`})]})]})}):e(ee,{label:`Loading ${r}…`})})}}async function ht(e,t,n,r,i=fetch){e=y(e);let a=await P(k.comments.get.href({id:e}),n,r,u,i);if(r.throwIfAborted(),a.id!==e)throw Error(`The comments service returned another discussion.`);let o=M(a),s=t.find(e=>e.module===o.module);if(!s)throw Error(`Enable the screen that owns this discussion to open it.`);if(s.routes&&!$(s.routes,o.href))throw Error(`The discussion location is not available in this screen.`);return{active:s.id,module:{url:s.module},location:{path:s.path,href:o.href,...s.routes?{routes:s.routes}:{},conversation:{id:e,original:o.original}}}}function gt(i){let u=new Map,d=i.props,f=``,p=i.props.conversation,m,h=!!p,g=``,_=!1;function v(){i.signal.aborted||i.update()}async function y(e){if(p!==e)return;m?.abort();let t=new AbortController;m=t;let n=AbortSignal.any([i.signal,t.signal]);h=!0,g=``,v();try{let t=i.props.project;if(!t)throw Error(`Connect a project to open this discussion.`);let r=await ht(e,i.props.conversationTargets??[],t.token,n);!n.aborted&&p===e&&(d=r,b.set(r.active,window.location.pathname))}catch(e){n.aborted||(g=e instanceof Error?e.message:`Could not open this discussion.`)}finally{m===t&&!n.aborted&&(h=!1,v())}}let b=new Map,x,S,C=()=>`bud:tabs:${i.props.project?.id}:v1`,w=()=>`${window.location.pathname}${window.location.search}${window.location.hash}`;function T(e){x=e,se(C(),e);let t=i.props.project;t&&(document.cookie=`${de(t.id)}=${le(e)}; Path=/; Max-Age=31536000; SameSite=Strict`),v()}function D(){if(!x)return;let e=w();S===e?S=void 0:j(E(x))!==e&&T(ue(x,e))}function M(e){let t=j(E(e));T(e),t!==w()&&(S=t,n(t,{history:`replace`,resetScroll:!1}))}function N(e){let{pathname:t}=new URL(e,`http://bud.local`);if(A(e))return{href:e,title:`Discussion`,icon:`message`};let n=i.props.screens.map(e=>({item:e,root:new URL(e.href,`http://bud.local`).pathname})).filter(({root:e})=>e===`/`||t===e||t.startsWith(`${e}/`)).sort((e,t)=>t.root.length-e.root.length)[0],r=n?.item??i.props.screens[0];if(r.id===`pages`&&n&&t.startsWith(`${n.root}/`)){let a=t.slice(n.root.length);return{href:e,title:i.props.project?.routes.find(e=>e.path===a)?.title??a,icon:r.icon}}let a=(n&&n.root!==`/`?t.slice(n.root.length):t).split(`/`).filter(Boolean).at(-1);return{href:e,title:(a&&n?.root!==`/`?decodeURIComponent(a):void 0)??r.label,icon:r.icon}}let P=r((e,t)=>{_=!0,p&&y(p);function r(){let{pathname:e,search:t,hash:n}=window.location,r=`${e}${t}${n}`,i=A(r);if(i)return i!==p&&(p=i,y(i)),d.location.conversation?.id===i&&b.set(d.active,r),!0;let a=u.get(d.active);if(!a)return!1;let o=a.location.path;return e!==o&&(o===`/`||!e.startsWith(`${o}/`))?!1:(m?.abort(),p=void 0,h=!1,g=``,b.set(d.active,r),a.location={...a.location,href:r,conversation:void 0},d={...d,location:a.location},!0)}r(),i.props.project&&T(O(ne(C()),w(),crypto.randomUUID())),i.update(),window.addEventListener(`click`,e=>{if(!x||!(e.metaKey||e.ctrlKey)||e.shiftKey||e.button!==0)return;let t=e.target?.closest?.(`a[href]`);if(!(t instanceof HTMLAnchorElement)||t.target||t.hasAttribute(`download`))return;let n=new URL(t.href);n.origin!==window.location.origin||n.pathname.startsWith(`/api/`)||(e.preventDefault(),e.stopPropagation(),T(oe(x,`${n.pathname}${n.search}${n.hash}`,crypto.randomUUID(),!1)))},{capture:!0,signal:t}),window.addEventListener(`popstate`,()=>{!r()&&!window.navigation?.currentEntry?.getState()&&n(window.location.href,{history:`replace`,resetScroll:!1}),window.navigation||D(),i.update()},{signal:t}),window.navigation?.addEventListener(`navigate`,r,{signal:t}),window.navigation?.addEventListener(`currententrychange`,()=>{r(),D(),i.update()},{signal:t}),window.navigation?.addEventListener(`navigatesuccess`,()=>{r(),i.update()},{signal:t})});return()=>{let{screens:r,project:v,taskDesign:C}=i.props,w=JSON.stringify([i.props.active,i.props.location.href,i.props.conversation]);if(f!==w){if(f=w,p=i.props.conversation,m?.abort(),g=``,h=!!p,p){let e=p;_&&i.queueTask(()=>{y(e)})}else d=i.props}let{active:T,module:ne,location:D}=d,O=r.find(e=>e.id===T)??r[0];v&&!h&&!g&&u.set(O.id,{module:ne,location:D,taskDesign:O.id===`tasks`?C:void 0});let A=x??i.props.initialTabs??(v?ie(D.href,`current`):void 0);A&&i.queueTask(()=>he(A.active));let se=r.map(e=>e.id===O.id?e:{...e,href:b.get(e.id)??e.href});return e(ce,{items:se,activeId:O.id,title:O.label,canvas:!!v,logo:v?.logo?{light:k.logo.href({theme:`light`}),dark:v.logo.dark?k.logo.href({theme:`dark`}):void 0,label:v.name}:void 0,status:v?e(ge,{project:v}):void 0,tabs:v&&A?e(re,{tabs:A.tabs.map(e=>({id:e.id,...N(j(e))})),active:A.active,recent:E(A).recent.filter(e=>e!==j(E(A))).map(N),canBack:E(A).index>0,canForward:E(A).index<E(A).entries.length-1,onSelect:e=>M({...A,active:e}),onClose:e=>M(ae(A,e)),onBack:()=>M(te(A,-1)),onForward:()=>M(te(A,1)),onNew:()=>M(oe(A,r[0]?.href??`/`,crypto.randomUUID(),!0)),onOpen:e=>{S=void 0,n(e)}}):void 0,children:v?e(`div`,{class:`h-full min-h-0`,mix:P,children:[h?e(ee,{label:`Opening discussion…`}):g?e(`div`,{class:`p-3 md:p-4`,children:e(l,{class:`max-w-2xl`,role:`alert`,children:[e(c,{title:`Discussion didn't open`,subtitle:g}),e(o,{children:e(a,{mix:t(`click`,()=>{p&&y(p)}),children:`Retry`})})]})}):null,[...u].map(([t,{module:n,taskDesign:i,location:a}])=>e(`div`,{class:`h-full min-h-0`,hidden:h||!!g||t!==O.id,children:e(mt,{label:r.find(e=>e.id===t)?.label??t,module:n,taskDesign:i,project:v,location:a,active:!h&&!g&&t===O.id})},`${t}:${v.token}`))]}):e(l,{class:`max-w-2xl`,children:[e(c,{title:`Your project, side by side.`,subtitle:`Open Bud beside a local project to review its pages, files and tasks.`}),e(o,{children:e(s,{as:`p`,variant:`ui`,children:`Start your project with the Bud Vite plugin, or run Bud from its directory. Its screens appear here when the companion connects.`})})]})})}}export{gt as Workspace};
|