@bud.sh/app 0.5.0 → 0.5.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.
- package/dist/client/assets/bud/design.js +1 -1
- package/dist/client/assets/{canvas-Cu6R6xxT.js → canvas-8GXJIuDK.js} +1 -1
- package/dist/client/assets/difference-worker-C99ychYw.js +8 -0
- package/dist/client/assets/{files-js6ElfkU.js → files-DkWt1l9H.js} +1 -1
- package/dist/client/assets/i18n-hH_Ba5QO.js +1 -0
- package/dist/client/assets/{index-ChANGtl-.js → index-Dn2pfmXf.js} +2 -2
- package/dist/client/assets/index-tpHYVXma.css +2 -0
- package/dist/client/assets/{pages-6_lhiQmz.js → pages-BVd6MQmu.js} +1 -1
- package/dist/client/assets/{project-branches-DO897zM6.js → project-branches-CMGRmrqr.js} +1 -1
- package/dist/client/assets/project-comments-D1IIQwsW.js +1 -0
- package/dist/client/assets/{project-thread-links-NLFWQRD2.js → project-thread-links-DKwe_SYb.js} +1 -1
- package/dist/client/assets/{project-threads-Lay351p4.js → project-threads-ZbKDh78d.js} +2 -2
- package/dist/client/assets/{project-work-du0Y-L5Y.js → project-work-D4DZqBCZ.js} +1 -1
- package/dist/client/assets/{task-design-Avb2RO4w.js → task-design-BPpc4Gd7.js} +1 -1
- package/dist/client/assets/{tasks-CA-E8bbK.js → tasks-Cn0VOZ9Z.js} +1 -1
- package/dist/client/assets/{tasks-request-C55IeuiP.js → tasks-request-BLyOzokZ.js} +1 -1
- package/dist/client/assets/{workspace-Cw5HvX5d.js → workspace-DGErsSg6.js} +2 -2
- package/dist/client/index.html +3 -3
- package/dist/hosted/assets/{canvas-V36732ER.js → canvas-BYTOp1p7.js} +4 -4
- package/dist/hosted/assets/{comment-data-CF2ZV_3k.js → comment-data-Cn5y2VxV.js} +6 -21
- package/dist/hosted/assets/{files-DjSCjfU7.js → files-B1P2_24q.js} +3 -3
- package/dist/hosted/assets/{pages-BzjzeuPu.js → pages-B0ZlVdci.js} +3 -3
- package/dist/hosted/assets/{project-branches-BT97J9i7.js → project-branches-DlCWmfRo.js} +1 -1
- package/dist/hosted/assets/{project-thread-links-BRLgByEe.js → project-thread-links-BZXQ200n.js} +2 -2
- package/dist/hosted/assets/{screen-CKp2C7kx.js → screen-CfdC3NbR.js} +5 -1
- package/dist/hosted/assets/{tasks-Dj7AyBJB.js → tasks-_yKh2Z6q.js} +4 -4
- package/dist/hosted/assets/{tasks-request-DZob623r.js → tasks-request-CFPLvLc7.js} +1 -1
- package/dist/hosted/hosted.js +6 -6
- package/dist/node/design.js +0 -5
- package/dist/node-host/assets/{canvas-TRUfxfL5.js → canvas-DxmcFZCh.js} +4 -4
- package/dist/node-host/assets/{comment-data-DyIZNpfG.js → comment-data-yfWEdDQL.js} +6 -21
- package/dist/node-host/assets/{files-Dh2TiQZq.js → files-anHi-apm.js} +3 -3
- package/dist/node-host/assets/{pages-BxpjbYhs.js → pages-CW4aF6dK.js} +3 -3
- package/dist/node-host/assets/{project-branches-B7HUGiVK.js → project-branches-D7rVCxQX.js} +1 -1
- package/dist/node-host/assets/{project-thread-links-CauJF0Cz.js → project-thread-links-m-OLpsD9.js} +2 -2
- package/dist/node-host/assets/{screen-CZXWJEds.js → screen-DapOVrga.js} +5 -1
- package/dist/node-host/assets/{tasks-Bs1IOpeU.js → tasks-BBK_CybR.js} +4 -4
- package/dist/node-host/assets/{tasks-request-ZWmbc8fE.js → tasks-request-B0aeNocI.js} +1 -1
- package/dist/node-host/node-host.js +6 -6
- package/dist/server/assets/{canvas-Dc1mYCwQ.js → canvas-CkMK4hoN.js} +4 -4
- package/dist/server/assets/{comment-data-CsjukwAW.js → comment-data-NLeHG89b.js} +6 -21
- package/dist/server/assets/{files-E9mSFeoc.js → files-CRdl489E.js} +3 -3
- package/dist/server/assets/{listener-DN5TyOjJ.js → listener-BAYn9Q-u.js} +6 -6
- package/dist/server/assets/{pages-BBBXyJWV.js → pages-DXVlJlBC.js} +3 -3
- package/dist/server/assets/{project-branches-B0YIK6Ur.js → project-branches-CwTsf6WQ.js} +1 -1
- package/dist/server/assets/{project-thread-links-CBOpf6zk.js → project-thread-links-lLS_rq7c.js} +2 -2
- package/dist/server/assets/{project-work-qSKFO5yj.js → project-work-CSZlCwH-.js} +2 -2
- package/dist/server/assets/{screen-BIQA2mr4.js → screen-B1zH_1O3.js} +5 -1
- package/dist/server/assets/{tasks-CiXodsLN.js → tasks-CGdz-uox.js} +5 -5
- package/dist/server/assets/{tasks-request-DhwCzpRi.js → tasks-request-D2NBjCTl.js} +1 -1
- package/dist/server/runtime.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/difference-worker-jfTSn-Tw.js +0 -8
- package/dist/client/assets/i18n-DxqFr2mi.js +0 -1
- package/dist/client/assets/index-CFFxP0gS.css +0 -2
- package/dist/client/assets/project-comments-DFFKVpia.js +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pages-
|
|
2
|
-
import{r as e}from"./i18n-DxqFr2mi.js";import{t}from"./jsx-B4XNFIzB.js";import{n}from"./on-mixin-iWnqUzq5.js";import{n as r}from"./run-B2H4brp5.js";import{n as i}from"./attrs-mixin-CmlG_FtV.js";import{t as a}from"./preload-helper-BLdHbfdN.js";import{c as o,i as s,l as c,o as l,r as u,t as ee}from"./loader-Q6-HPKft.js";import{$n as d,Ct as f,Gn as p,Hn as m,Jn as h,Kn as g,Lt as _,Qn as v,Un as y,Wn as b,er as x,nr as S,nt as C,qn as w,rr as T,zt as E}from"./task-design-Avb2RO4w.js";import{$ as te,At as ne,Dt as re,J as D,Ot as O,Q as k,X as ie,Y as ae,Z as A,b as j,dt as M,et as N,jt as oe,kt as se,nt as ce,ot as P,rt as le,t as F,tt as ue,v as de,y as fe}from"./project-threads-Lay351p4.js";import{d as pe}from"./method-DybmO5PB.js";import{t as me}from"./project-work-du0Y-L5Y.js";import{n as he}from"./workspace-tab-Bg2MFdMB.js";function ge(e){let n=`connecting`,r=i((t,r)=>{let{project:i}=e.props;me(i),F(i);let a=fe(i.token);n=a.status;let o=a.watchStatus(t=>{n=t,e.update()});r.addEventListener(`abort`,o,{once:!0}),e.update()});return()=>t(`span`,{class:`contents`,mix:r,children:t(O,{status:n})})}var I=new WeakMap;function L(e,t){let n=S(e,t,{abortEarly:!0});if(n.success)return n.value;let r=n.issues[0];throw I.get(r)??Error(r.message)}function R(e,t){return p((n,r)=>{let i=e[`~run`](n,r);return i.issues?h(t,r.path):i})}function z(e,t){return p((n,r)=>{let i=e[`~run`](n,r);if(i.issues)return i;let a=t(i.value);return a===void 0?i:h(a,r.path)})}function B(e,t){return p((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=h(e.message,r.path);return I.set(t.issues[0],e),t}})}function _e(e){return p((t,n)=>e(t)[`~run`](t,n))}function V(e,t){return p((n,r)=>n==null?{value:t()}:e[`~run`](n,r))}function H(e,t){let n=d(t);return p((r,i)=>{if(!r||typeof r!=`object`||Array.isArray(r))return h(`${e} must be an object.`,i.path);for(let n of Object.keys(r))if(!Object.hasOwn(t,n))return h(`${e}.${n} is not a supported setting.`,[...i.path,n]);return n[`~run`](r,i)})}function ve(e,t,n=0){let r=y(e);return p((e,i)=>!Array.isArray(e)||e.length<n?h(t,i.path):r[`~run`](e,i))}var ye=g(H(`files`,{edit:V(R(b(),`files.edit must be true or false.`),()=>!0)}),()=>({edit:!0})),U=`flows must be [{ id, title, start, script, steps: [{ id, title }], block? }] with short ids, local paths and unique steps.`,be=e=>typeof e==`string`&&/^[a-z0-9][a-z0-9-]{0,62}$/.test(e),W=e=>typeof e==`string`&&e.trim()!==``&&e.length<=200;function xe(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(!be(t)||!W(n)||!W(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 be(t)&&W(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=>!W(e))?null:{id:t,title:n.trim(),start:r,script:i.trim(),steps:s,block:o}}var Se=p((e,t)=>{if(e===void 0)return{value:[]};if(!Array.isArray(e))return h(U,t.path);let n=e.map(xe);if(n.some(e=>!e))return h(U,t.path);let r=n.map(e=>e.id);return new Set(r).size===r.length?{value:n}:h(U,t.path)});function Ce(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 we=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`}),Te=`logo must be an image path inside the project (.svg, .png, .webp, .jpg, .gif or .ico), or { light, dark }.`;function Ee(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(we,n)?t:null}var De=p((e,t)=>{if(e===void 0)return{value:null};let n=Ee(typeof e==`object`&&e?e.light:e),r=typeof e==`object`&&e?e.dark:void 0,i=r===void 0?null:Ee(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}}:h(Te,t.path)}),Oe=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(`.`)),ke=`theme must be { light, dark }, each mapping Bud's tokens (${Oe.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 je(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(!Oe.includes(n)||e===null)return null;t[n]=e}return Object.freeze(t)}var Me=p((e,t)=>{if(e===void 0)return{value:{light:{},dark:{}}};if(!e||typeof e!=`object`||Array.isArray(e))return h(ke,t.path);let{light:n,dark:r,...i}=e,a={light:je(n),dark:je(r)};return Object.keys(i).length||!a.light||!a.dark?h(ke,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 Ne(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 Pe=p((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 h(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 h(G,t.path);let a=i;if(Object.keys(a).some(e=>![`install`,`build`,`serve`].includes(e)))return h(G,t.path);let o={main:r.main===void 0?null:Ne(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])?h(G,t.path):{value:o}});function q(e,t,n){let r=t?/\.server\.ts$/:/\.(?:ts|tsx|js|jsx)$/;return R(T().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 Fe=w([!1,`bud:beads`,`bud:memory`,`bud:git-comments`]);function Ie(e){let t=q(`storage.${e}`,!0);return g(z(_e(e=>e===!1||e===`bud:beads`||e===`bud:memory`||e===`bud:git-comments`?Fe:t),t=>e===`work`&&t===`bud:git-comments`?`storage.work cannot use bud:git-comments; it only stores threads.`:void 0),`bud:beads`)}var Le=g(H(`storage`,{work:Ie(`work`),threads:Ie(`threads`)}),()=>({work:`bud:beads`,threads:`bud:beads`})),Re=g(H(`designs`,{tasks:g(_e(e=>e===`bud:beads`?w([`bud:beads`]):q(`designs.tasks`,!1)),`bud:beads`),pages:g(w([`path`,`title`]),`path`)}),()=>({tasks:`bud:beads`,pages:`path`})),ze=new Set([`bud:dom`,`bud:react`,`bud:react-grab`]),Be=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.`),Ve=p((e,t)=>{if(e===void 0)return{value:{name:`bud:dom`,module:null}};if(typeof e==`string`&&ze.has(e))return{value:{name:e,module:null}};let n=Be[`~run`](e,t);return n.issues?n:{value:{name:n.value,module:n.value}}}),He=`ready must be a CSS selector, { selector } or { expression }.`,J=p((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 h(He,t.path)}),Ue=()=>[`light`,`dark`],We=()=>[{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 Ge(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,32)}var Ke=p((e,t)=>{if(!Array.isArray(e)||e.length===0||e.length>4)return h(Y,t.path);let n=[];for(let r of e){if(!r||typeof r!=`object`||Array.isArray(r))return h(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||!Ge(e)||!c(i,240,3840)||a!==void 0&&!c(a,240,4e3)||o!==void 0&&typeof o!=`boolean`)return h(Y,t.path);let l=o??i<800;n.push({id:Ge(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}:h(Y,t.path)}),qe=g(H(`previews`,{scale:V(R(v().refine(e=>Number.isInteger(e)&&e>=1&&e<=3),`previews.scale must be 1, 2 or 3.`),()=>2),themes:V(R(y(w([`light`,`dark`])).refine(e=>e.length>0&&new Set(e).size===e.length),`previews.themes must list light, dark or both, once each.`),Ue),viewports:V(Ke,We),ready:V(J,()=>null),readyTimeout:V(R(v().refine(e=>Number.isInteger(e)&&e>=1e3&&e<=6e5),`previews.readyTimeout must be whole milliseconds from 1000 to 600000.`),()=>6e4),css:V(R(T().refine(e=>e.length<=2e4&&!e.includes(`<`)),`previews.css must be CSS text without <, up to 20000 characters.`),()=>``)}),()=>({scale:2,themes:Ue(),viewports:We(),ready:null,readyTimeout:6e4,css:``}));function Je(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 Ye(){return{id:`pages`,label:`Pages`,icon:`browser`,path:`/pages`,module:`bud:pages`}}function Xe(){return{id:`canvas`,label:`Canvas`,icon:`grid`,path:`/canvas`,module:`bud:canvas`}}function Ze(){return{id:`tasks`,label:`Tasks`,icon:`tasks`,path:`/tasks`,module:`bud:tasks`}}function Qe(){return{id:`files`,label:`Files`,icon:`files`,path:`/files`,module:`bud:files`}}var X=[Ye(),Xe(),Ze(),Qe()],$e=new Map(X.map(e=>[e.module,e])),et=[`/comments`,...X.map(e=>e.path),`/api`,`/health`,`/__bud`,`/assets`,`/app`,`/src`,`/node_modules`,`/agents`,`/brand`,`/fonts`,`/frameworks`,`/licenses`],tt=z(R(m().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=$e.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(et.includes(i))return`Bud reserves the path ${i}.`}),nt=g(B(R(y(m()).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=L(tt,e),{id:i,label:a,icon:o=`layers`,module:s}=r,c=r.path??$e.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&&Je(r.routes,c),{id:i,label:a,icon:o,path:c,module:s,...r.routes===void 0?{}:{routes:r.routes}}})}),()=>X.map(e=>({...e}))),rt=e=>!!e&&typeof e==`object`;function Z(e,t){let n=d(t);return p((t,r)=>rt(t)?n[`~run`](Array.isArray(t)?{...t}:t,r):h(e,r.path))}var it=z(Z(`Bud config must export an object.`,{routes:R(y(m()).refine(e=>e.length>0),`bud.config must define at least one route.`),name:x(R(T().refine(e=>!!e.trim()),`name must be a nonempty string.`)),target:x(Z(`target must be an object.`,{origin:m(),port:m()})),comments:x(Z(`comments must be an object.`,{remote:m()})),port:m(),screens:m(),storage:m(),designs:m(),previews:m(),files:m(),logo:m(),theme:m(),locale:m(),picker:m(),branches:m(),flows:m()}),({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.`}),at=z(m().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??Q(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&&!S(J,e.ready).success)return`A route ready must be false, a CSS selector, { selector } or { expression }.`}).transform(e=>{let t=Q(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:L(J,e.ready)}}});function Q(e){let t=new URL(e,`http://bud.invalid`),n=t.searchParams.toString();return`${t.pathname}${n?`?${n}`:``}${t.hash}`}var ot=z(ve(at,`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),st=e=>e===void 0||Number.isInteger(e)&&e>=0&&e<=65535,ct=e=>typeof e==`string`&&/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(e);B(z(B(z(z(B(z(B(it,e=>({...e,routes:L(ot,e.routes)})),({port:e,target:t})=>st(e??0)&&st(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&<(n,`target.origin must be an HTTP(S) origin without a path or credentials.`)}}),({locale:e})=>e===void 0||e===`en`||e===`de`?void 0:`locale must be "en" or "de".`),({comments:e})=>ct(e?.remote??`origin`)?void 0:`comments.remote must be a Git remote name.`),e=>{let t=L(Se,e.flows),n=t.flatMap(e=>e.steps.map(t=>Ce(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:L(nt,e.screens),storage:L(Le,e.storage),designs:L(Re,e.designs),previews:L(qe,e.previews),files:L(ye,e.files),logo:L(De,e.logo),theme:L(Me,e.theme),locale:e.locale===void 0?`en`:e.locale,picker:L(Ve,e.picker),branches:L(Pe,e.branches)}));function lt(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=f();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 ut(e,t){let n=e?$(Je(e,t.path),t.url):{route:null,params:{}};if(!n)throw Error(`No screen route matches ${t.url.pathname}.`);return{...t,...n}}var dt={"bud:pages":()=>a(()=>import(`./pages-6_lhiQmz.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),"bud:canvas":()=>a(()=>import(`./canvas-Cu6R6xxT.js`),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,21,22])),"bud:tasks":()=>a(()=>import(`./tasks-CA-E8bbK.js`),__vite__mapDeps([23,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,22,24,18,21])),"bud:files":()=>a(()=>import(`./files-js6ElfkU.js`),__vite__mapDeps([25,11,1,2,6,4,3,5,7,15,8,9,10,12,16,13,14,26,18,21,22]))};function ft(e){return Object.hasOwn(dt,e)?dt[e]():a(()=>import(e),[])}async function pt(e,t,n=ft){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?.(ut(r.routes,t));return t.signal.throwIfAborted(),{screen:r,data:i}}async function mt(e,t,n=e=>a(()=>import(e),[])){if(t.throwIfAborted(),!e)return;if(`error`in e)throw Error(e.error);let r=await n(e.url);return t.throwIfAborted(),C(r.default)}function ht(r){let a,d=``;async function f(){let{module:t,project:n,label:i}=r.props;a=void 0,d=``,r.update();let{location:o}=r.props,s={project:n,signal:r.signal,path:o.path,url:new URL(o.href,window.location.origin),active:r.props.active,conversation:o.conversation,route:null,params:{}};try{if(`error`in t)throw Error(t.error);s.taskDesign=await mt(r.props.taskDesign,r.signal),a={...await pt(t.url,s),context:s}}catch(t){if(r.signal.aborted)return;console.error(t),d=t instanceof Error&&t.message?t.message:e(`app.client.screenHost.couldNotOpen`,{label:i})}r.update()}let p=i(()=>{f()});return()=>{let{label:i,module:m,location:h}=r.props,g=a?.context,_=``;if(a&&g)try{if(h.routes&&!$(h.routes,h.href))throw Error(e(`app.client.screenHost.noRouteMatches`,{href:h.href}));g=ut(a.screen.routes,{...g,active:r.props.active,conversation:h.conversation,url:new URL(h.href,g.url.origin)})}catch(t){_=t instanceof Error?t.message:e(`app.client.screenHost.invalidRoute`)}return t(`div`,{class:`h-full min-h-0`,mix:p,children:_?t(`div`,{class:`p-3 md:p-4`,children:t(c,{role:`alert`,children:_})}):a&&g?a.screen.render(a.data,g):d?t(`div`,{class:`h-full overflow-y-auto p-3 md:p-4`,children:t(u,{class:`max-w-2xl`,role:`alert`,children:[t(l,{title:e(`app.client.screenHost.didntOpen`,{label:i}),subtitle:d}),t(s,{class:`flex-col items-start gap-3`,children:[t(c,{as:`p`,variant:`ui`,tone:`muted`,children:e(`app.client.screenHost.fixAndRetry`)}),t(o,{mix:n(`click`,()=>{`error`in m||r.props.taskDesign&&`error`in r.props.taskDesign?window.location.reload():f()}),children:e(`app.client.screenHost.retry`)})]})]})}):t(ee,{label:e(`app.client.screenHost.loading`,{label:i})})})}}async function gt(t,n,r,i,a=fetch){t=E(t);let o=await de(j.comments.get.href({id:t}),r,i,_,a);if(i.throwIfAborted(),o.id!==t)throw Error(e(`app.client.conversationRoute.anotherDiscussion`));let s=P(o),c=n.find(e=>e.module===s.module);if(!c)throw Error(e(`app.client.conversationRoute.enableOwningScreen`));if(c.routes&&!$(c.routes,s.href))throw Error(e(`app.client.conversationRoute.locationUnavailable`));return{active:c.id,module:{url:c.module},location:{path:c.path,href:s.href,...c.routes?{routes:c.routes}:{},conversation:{id:t,original:s.original}}}}function _t(a){let d=new Map,f=a.props,p=``,m=a.props.conversation,h,g=!!m,_=``,v=!1;function y(){a.signal.aborted||a.update()}async function b(t){if(m!==t)return;h?.abort();let n=new AbortController;h=n;let r=AbortSignal.any([a.signal,n.signal]);g=!0,_=``,y();try{let n=a.props.project;if(!n)throw Error(e(`app.client.workspace.connectProjectToOpenDiscussion`));let i=await gt(t,a.props.conversationTargets??[],n.token,r);!r.aborted&&m===t&&(f=i,x.set(i.active,window.location.pathname))}catch(t){r.aborted||(_=t instanceof Error?t.message:e(`app.client.workspace.couldNotOpenDiscussion`))}finally{h===n&&!r.aborted&&(g=!1,y())}}let x=new Map,S,C,w=()=>`bud:tabs:${a.props.project?.id}:v1`,T=()=>`${window.location.pathname}${window.location.search}${window.location.hash}`;function E(e){S=e,oe(w(),e);let t=a.props.project;t&&(document.cookie=`${ue(t.id)}=${ce(e)}; Path=/; Max-Age=31536000; SameSite=Strict`),y()}function O(){if(!S)return;let e=T();C===e?C=void 0:N(D(S))!==e&&E(le(S,e))}function P(e){let t=N(D(e));E(e),t!==T()&&(C=t,r(t,{history:`replace`,resetScroll:!1}))}function F(t){let{pathname:n}=new URL(t,`http://bud.local`);if(M(t))return{href:t,title:e(`app.client.workspace.discussion`),icon:`message`};let r=a.props.screens.map(e=>({item:e,root:new URL(e.href,`http://bud.local`).pathname})).filter(({root:e})=>e===`/`||n===e||n.startsWith(`${e}/`)).sort((e,t)=>t.root.length-e.root.length)[0],i=r?.item??a.props.screens[0];if(i.id===`pages`&&r&&n.startsWith(`${r.root}/`)){let e=n.slice(r.root.length);return{href:t,title:a.props.project?.routes.find(t=>t.path===e)?.title??e,icon:i.icon}}let o=(r&&r.root!==`/`?n.slice(r.root.length):n).split(`/`).filter(Boolean).at(-1);return{href:t,title:(o&&r?.root!==`/`?decodeURIComponent(o):void 0)??i.label,icon:i.icon}}let de=i((e,t)=>{v=!0,m&&b(m);function n(){let{pathname:e,search:t,hash:n}=window.location,r=`${e}${t}${n}`,i=M(r);if(i)return i!==m&&(m=i,b(i)),f.location.conversation?.id===i&&x.set(f.active,r),!0;let a=d.get(f.active);if(!a)return!1;let o=a.location.path;return e!==o&&(o===`/`||!e.startsWith(`${o}/`))?!1:(h?.abort(),m=void 0,g=!1,_=``,x.set(f.active,r),a.location={...a.location,href:r,conversation:void 0},f={...f,location:a.location},!0)}n(),a.props.project&&E(k(ne(w()),T(),crypto.randomUUID())),a.update(),window.addEventListener(`click`,e=>{if(!S||!(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(),E(A(S,`${n.pathname}${n.search}${n.hash}`,crypto.randomUUID(),!1)))},{capture:!0,signal:t}),window.addEventListener(`popstate`,()=>{!n()&&!window.navigation?.currentEntry?.getState()&&r(window.location.href,{history:`replace`,resetScroll:!1}),window.navigation||O(),a.update()},{signal:t}),window.navigation?.addEventListener(`navigate`,n,{signal:t}),window.navigation?.addEventListener(`currententrychange`,()=>{n(),O(),a.update()},{signal:t}),window.navigation?.addEventListener(`navigatesuccess`,()=>{n(),a.update()},{signal:t})});return()=>{let{screens:i,project:y,taskDesign:w}=a.props,T=JSON.stringify([a.props.active,a.props.location.href,a.props.conversation]);if(p!==T){if(p=T,m=a.props.conversation,h?.abort(),_=``,g=!!m,m){let e=m;v&&a.queueTask(()=>{b(e)})}else f=a.props}let{active:E,module:ne,location:O}=f,k=i.find(e=>e.id===E)??i[0];y&&!g&&!_&&d.set(k.id,{module:ne,location:O,taskDesign:k.id===`tasks`?w:void 0});let M=S??a.props.initialTabs??(y?ie(O.href,`current`):void 0);M&&a.queueTask(()=>he(M.active));let oe=i.map(e=>e.id===k.id?e:{...e,href:x.get(e.id)??e.href});return t(se,{items:oe,activeId:k.id,title:k.label,canvas:!!y,logo:y?.logo?{light:j.logo.href({theme:`light`}),dark:y.logo.dark?j.logo.href({theme:`dark`}):void 0,label:y.name}:void 0,status:y?t(ge,{project:y}):void 0,tabs:y&&M?t(re,{tabs:M.tabs.map(e=>({id:e.id,...F(N(e))})),active:M.active,recent:D(M).recent.filter(e=>e!==N(D(M))).map(F),canBack:D(M).index>0,canForward:D(M).index<D(M).entries.length-1,onSelect:e=>P({...M,active:e}),onClose:e=>P(ae(M,e)),onBack:()=>P(te(M,-1)),onForward:()=>P(te(M,1)),onNew:()=>P(A(M,i[0]?.href??`/`,crypto.randomUUID(),!0)),onOpen:e=>{C=void 0,r(e)}}):void 0,children:y?t(`div`,{class:`h-full min-h-0`,mix:de,children:[g?t(ee,{label:e(`app.client.workspace.openingDiscussion`)}):_?t(`div`,{class:`p-3 md:p-4`,children:t(u,{class:`max-w-2xl`,role:`alert`,children:[t(l,{title:e(`app.client.workspace.discussionDidntOpen`),subtitle:_}),t(s,{children:t(o,{mix:n(`click`,()=>{m&&b(m)}),children:e(`app.client.workspace.retry`)})})]})}):null,[...d].map(([e,{module:n,taskDesign:r,location:a}])=>t(`div`,{class:`h-full min-h-0`,hidden:g||!!_||e!==k.id,children:t(ht,{label:i.find(t=>t.id===e)?.label??e,module:n,taskDesign:r,project:y,location:a,active:!g&&!_&&e===k.id})},`${e}:${y.token}`))]}):t(u,{class:`max-w-2xl`,children:[t(l,{title:e(`app.client.workspace.yourProjectSideBySide`),subtitle:e(`app.client.workspace.openBudBesideLocalProject`)}),t(s,{children:t(c,{as:`p`,variant:`ui`,children:e(`app.client.workspace.startProjectWithBudVitePlugin`)})})]})})}}export{_t as Workspace};
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pages-BVd6MQmu.js","assets/i18n-hH_Ba5QO.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-BPpc4Gd7.js","assets/rolldown-runtime-XKyaHtl9.js","assets/method-DybmO5PB.js","assets/project-threads-ZbKDh78d.js","assets/frame-D6XmK4Df.js","assets/preload-helper-BLdHbfdN.js","assets/cloneFileDiffMetadata-CWfw01dG.js","assets/workspace-tab-Bg2MFdMB.js","assets/project-comments-D1IIQwsW.js","assets/project-branches-CMGRmrqr.js","assets/canvas-8GXJIuDK.js","assets/project-thread-links-DKwe_SYb.js","assets/tasks-request-BLyOzokZ.js","assets/tasks-Cn0VOZ9Z.js","assets/project-work-D4DZqBCZ.js","assets/files-DkWt1l9H.js","assets/lru-DzKYIXMA.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e}from"./i18n-hH_Ba5QO.js";import{t}from"./jsx-B4XNFIzB.js";import{n}from"./on-mixin-iWnqUzq5.js";import{n as r}from"./run-B2H4brp5.js";import{n as i}from"./attrs-mixin-CmlG_FtV.js";import{t as a}from"./preload-helper-BLdHbfdN.js";import{c as o,i as s,l as c,o as l,r as u,t as ee}from"./loader-Q6-HPKft.js";import{$n as d,Ct as f,Gn as p,Hn as m,Jn as h,Kn as g,Lt as _,Qn as v,Un as y,Wn as b,er as x,nr as S,nt as C,qn as w,rr as T,zt as E}from"./task-design-BPpc4Gd7.js";import{$ as te,At as ne,Dt as re,J as D,Ot as O,Q as k,X as ie,Y as ae,Z as A,b as j,dt as M,et as N,jt as oe,kt as se,nt as ce,ot as P,rt as le,t as F,tt as ue,v as de,y as fe}from"./project-threads-ZbKDh78d.js";import{d as pe}from"./method-DybmO5PB.js";import{t as me}from"./project-work-D4DZqBCZ.js";import{n as he}from"./workspace-tab-Bg2MFdMB.js";function ge(e){let n=`connecting`,r=i((t,r)=>{let{project:i}=e.props;me(i),F(i);let a=fe(i.token);n=a.status;let o=a.watchStatus(t=>{n=t,e.update()});r.addEventListener(`abort`,o,{once:!0}),e.update()});return()=>t(`span`,{class:`contents`,mix:r,children:t(O,{status:n})})}var I=new WeakMap;function L(e,t){let n=S(e,t,{abortEarly:!0});if(n.success)return n.value;let r=n.issues[0];throw I.get(r)??Error(r.message)}function R(e,t){return p((n,r)=>{let i=e[`~run`](n,r);return i.issues?h(t,r.path):i})}function z(e,t){return p((n,r)=>{let i=e[`~run`](n,r);if(i.issues)return i;let a=t(i.value);return a===void 0?i:h(a,r.path)})}function B(e,t){return p((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=h(e.message,r.path);return I.set(t.issues[0],e),t}})}function _e(e){return p((t,n)=>e(t)[`~run`](t,n))}function V(e,t){return p((n,r)=>n==null?{value:t()}:e[`~run`](n,r))}function H(e,t){let n=d(t);return p((r,i)=>{if(!r||typeof r!=`object`||Array.isArray(r))return h(`${e} must be an object.`,i.path);for(let n of Object.keys(r))if(!Object.hasOwn(t,n))return h(`${e}.${n} is not a supported setting.`,[...i.path,n]);return n[`~run`](r,i)})}function ve(e,t,n=0){let r=y(e);return p((e,i)=>!Array.isArray(e)||e.length<n?h(t,i.path):r[`~run`](e,i))}var ye=g(H(`files`,{edit:V(R(b(),`files.edit must be true or false.`),()=>!0)}),()=>({edit:!0})),U=`flows must be [{ id, title, start, script, steps: [{ id, title }], block? }] with short ids, local paths and unique steps.`,be=e=>typeof e==`string`&&/^[a-z0-9][a-z0-9-]{0,62}$/.test(e),W=e=>typeof e==`string`&&e.trim()!==``&&e.length<=200;function xe(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(!be(t)||!W(n)||!W(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 be(t)&&W(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=>!W(e))?null:{id:t,title:n.trim(),start:r,script:i.trim(),steps:s,block:o}}var Se=p((e,t)=>{if(e===void 0)return{value:[]};if(!Array.isArray(e))return h(U,t.path);let n=e.map(xe);if(n.some(e=>!e))return h(U,t.path);let r=n.map(e=>e.id);return new Set(r).size===r.length?{value:n}:h(U,t.path)});function Ce(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 we=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`}),Te=`logo must be an image path inside the project (.svg, .png, .webp, .jpg, .gif or .ico), or { light, dark }.`;function Ee(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(we,n)?t:null}var De=p((e,t)=>{if(e===void 0)return{value:null};let n=Ee(typeof e==`object`&&e?e.light:e),r=typeof e==`object`&&e?e.dark:void 0,i=r===void 0?null:Ee(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}}:h(Te,t.path)}),Oe=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(`.`)),ke=`theme must be { light, dark }, each mapping Bud's tokens (${Oe.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 je(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(!Oe.includes(n)||e===null)return null;t[n]=e}return Object.freeze(t)}var Me=p((e,t)=>{if(e===void 0)return{value:{light:{},dark:{}}};if(!e||typeof e!=`object`||Array.isArray(e))return h(ke,t.path);let{light:n,dark:r,...i}=e,a={light:je(n),dark:je(r)};return Object.keys(i).length||!a.light||!a.dark?h(ke,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 Ne(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 Pe=p((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 h(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 h(G,t.path);let a=i;if(Object.keys(a).some(e=>![`install`,`build`,`serve`].includes(e)))return h(G,t.path);let o={main:r.main===void 0?null:Ne(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])?h(G,t.path):{value:o}});function q(e,t,n){let r=t?/\.server\.ts$/:/\.(?:ts|tsx|js|jsx)$/;return R(T().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 Fe=w([!1,`bud:beads`,`bud:memory`,`bud:git-comments`]);function Ie(e){let t=q(`storage.${e}`,!0);return g(z(_e(e=>e===!1||e===`bud:beads`||e===`bud:memory`||e===`bud:git-comments`?Fe:t),t=>e===`work`&&t===`bud:git-comments`?`storage.work cannot use bud:git-comments; it only stores threads.`:void 0),`bud:beads`)}var Le=g(H(`storage`,{work:Ie(`work`),threads:Ie(`threads`)}),()=>({work:`bud:beads`,threads:`bud:beads`})),Re=g(H(`designs`,{tasks:g(_e(e=>e===`bud:beads`?w([`bud:beads`]):q(`designs.tasks`,!1)),`bud:beads`),pages:g(w([`path`,`title`]),`path`)}),()=>({tasks:`bud:beads`,pages:`path`})),ze=new Set([`bud:dom`,`bud:react`,`bud:react-grab`]),Be=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.`),Ve=p((e,t)=>{if(e===void 0)return{value:{name:`bud:dom`,module:null}};if(typeof e==`string`&&ze.has(e))return{value:{name:e,module:null}};let n=Be[`~run`](e,t);return n.issues?n:{value:{name:n.value,module:n.value}}}),He=`ready must be a CSS selector, { selector } or { expression }.`,J=p((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 h(He,t.path)}),Ue=()=>[`light`,`dark`],We=()=>[{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 Ge(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,32)}var Ke=p((e,t)=>{if(!Array.isArray(e)||e.length===0||e.length>4)return h(Y,t.path);let n=[];for(let r of e){if(!r||typeof r!=`object`||Array.isArray(r))return h(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||!Ge(e)||!c(i,240,3840)||a!==void 0&&!c(a,240,4e3)||o!==void 0&&typeof o!=`boolean`)return h(Y,t.path);let l=o??i<800;n.push({id:Ge(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}:h(Y,t.path)}),qe=g(H(`previews`,{scale:V(R(v().refine(e=>Number.isInteger(e)&&e>=1&&e<=3),`previews.scale must be 1, 2 or 3.`),()=>2),themes:V(R(y(w([`light`,`dark`])).refine(e=>e.length>0&&new Set(e).size===e.length),`previews.themes must list light, dark or both, once each.`),Ue),viewports:V(Ke,We),ready:V(J,()=>null),readyTimeout:V(R(v().refine(e=>Number.isInteger(e)&&e>=1e3&&e<=6e5),`previews.readyTimeout must be whole milliseconds from 1000 to 600000.`),()=>6e4),css:V(R(T().refine(e=>e.length<=2e4&&!e.includes(`<`)),`previews.css must be CSS text without <, up to 20000 characters.`),()=>``)}),()=>({scale:2,themes:Ue(),viewports:We(),ready:null,readyTimeout:6e4,css:``}));function Je(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 Ye(){return{id:`pages`,label:`Pages`,icon:`browser`,path:`/pages`,module:`bud:pages`}}function Xe(){return{id:`canvas`,label:`Canvas`,icon:`grid`,path:`/canvas`,module:`bud:canvas`}}function Ze(){return{id:`tasks`,label:`Tasks`,icon:`tasks`,path:`/tasks`,module:`bud:tasks`}}function Qe(){return{id:`files`,label:`Files`,icon:`files`,path:`/files`,module:`bud:files`}}var X=[Ye(),Xe(),Ze(),Qe()],$e=new Map(X.map(e=>[e.module,e])),et=[`/comments`,...X.map(e=>e.path),`/api`,`/health`,`/__bud`,`/assets`,`/app`,`/src`,`/node_modules`,`/agents`,`/brand`,`/fonts`,`/frameworks`,`/licenses`],tt=z(R(m().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=$e.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(et.includes(i))return`Bud reserves the path ${i}.`}),nt=g(B(R(y(m()).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=L(tt,e),{id:i,label:a,icon:o=`layers`,module:s}=r,c=r.path??$e.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&&Je(r.routes,c),{id:i,label:a,icon:o,path:c,module:s,...r.routes===void 0?{}:{routes:r.routes}}})}),()=>X.map(e=>({...e}))),rt=e=>!!e&&typeof e==`object`;function Z(e,t){let n=d(t);return p((t,r)=>rt(t)?n[`~run`](Array.isArray(t)?{...t}:t,r):h(e,r.path))}var it=z(Z(`Bud config must export an object.`,{routes:R(y(m()).refine(e=>e.length>0),`bud.config must define at least one route.`),name:x(R(T().refine(e=>!!e.trim()),`name must be a nonempty string.`)),target:x(Z(`target must be an object.`,{origin:m(),port:m()})),comments:x(Z(`comments must be an object.`,{remote:m()})),port:m(),screens:m(),storage:m(),designs:m(),previews:m(),files:m(),logo:m(),theme:m(),locale:m(),picker:m(),branches:m(),flows:m()}),({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.`}),at=z(m().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??Q(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&&!S(J,e.ready).success)return`A route ready must be false, a CSS selector, { selector } or { expression }.`}).transform(e=>{let t=Q(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:L(J,e.ready)}}});function Q(e){let t=new URL(e,`http://bud.invalid`),n=t.searchParams.toString();return`${t.pathname}${n?`?${n}`:``}${t.hash}`}var ot=z(ve(at,`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),st=e=>e===void 0||Number.isInteger(e)&&e>=0&&e<=65535,ct=e=>typeof e==`string`&&/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(e);B(z(B(z(z(B(z(B(it,e=>({...e,routes:L(ot,e.routes)})),({port:e,target:t})=>st(e??0)&&st(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&<(n,`target.origin must be an HTTP(S) origin without a path or credentials.`)}}),({locale:e})=>e===void 0||e===`en`||e===`de`?void 0:`locale must be "en" or "de".`),({comments:e})=>ct(e?.remote??`origin`)?void 0:`comments.remote must be a Git remote name.`),e=>{let t=L(Se,e.flows),n=t.flatMap(e=>e.steps.map(t=>Ce(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:L(nt,e.screens),storage:L(Le,e.storage),designs:L(Re,e.designs),previews:L(qe,e.previews),files:L(ye,e.files),logo:L(De,e.logo),theme:L(Me,e.theme),locale:e.locale===void 0?`en`:e.locale,picker:L(Ve,e.picker),branches:L(Pe,e.branches)}));function lt(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=f();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 ut(e,t){let n=e?$(Je(e,t.path),t.url):{route:null,params:{}};if(!n)throw Error(`No screen route matches ${t.url.pathname}.`);return{...t,...n}}var dt={"bud:pages":()=>a(()=>import(`./pages-BVd6MQmu.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),"bud:canvas":()=>a(()=>import(`./canvas-8GXJIuDK.js`),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,21,22])),"bud:tasks":()=>a(()=>import(`./tasks-Cn0VOZ9Z.js`),__vite__mapDeps([23,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,22,24,18,21])),"bud:files":()=>a(()=>import(`./files-DkWt1l9H.js`),__vite__mapDeps([25,11,1,2,6,4,3,5,7,15,8,9,10,12,16,13,14,26,18,21,22]))};function ft(e){return Object.hasOwn(dt,e)?dt[e]():a(()=>import(e),[])}async function pt(e,t,n=ft){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?.(ut(r.routes,t));return t.signal.throwIfAborted(),{screen:r,data:i}}async function mt(e,t,n=e=>a(()=>import(e),[])){if(t.throwIfAborted(),!e)return;if(`error`in e)throw Error(e.error);let r=await n(e.url);return t.throwIfAborted(),C(r.default)}function ht(r){let a,d=``;async function f(){let{module:t,project:n,label:i}=r.props;a=void 0,d=``,r.update();let{location:o}=r.props,s={project:n,signal:r.signal,path:o.path,url:new URL(o.href,window.location.origin),active:r.props.active,conversation:o.conversation,route:null,params:{}};try{if(`error`in t)throw Error(t.error);s.taskDesign=await mt(r.props.taskDesign,r.signal),a={...await pt(t.url,s),context:s}}catch(t){if(r.signal.aborted)return;console.error(t),d=t instanceof Error&&t.message?t.message:e(`app.client.screenHost.couldNotOpen`,{label:i})}r.update()}let p=i(()=>{f()});return()=>{let{label:i,module:m,location:h}=r.props,g=a?.context,_=``;if(a&&g)try{if(h.routes&&!$(h.routes,h.href))throw Error(e(`app.client.screenHost.noRouteMatches`,{href:h.href}));g=ut(a.screen.routes,{...g,active:r.props.active,conversation:h.conversation,url:new URL(h.href,g.url.origin)})}catch(t){_=t instanceof Error?t.message:e(`app.client.screenHost.invalidRoute`)}return t(`div`,{class:`h-full min-h-0`,mix:p,children:_?t(`div`,{class:`p-3 md:p-4`,children:t(c,{role:`alert`,children:_})}):a&&g?a.screen.render(a.data,g):d?t(`div`,{class:`h-full overflow-y-auto p-3 md:p-4`,children:t(u,{class:`max-w-2xl`,role:`alert`,children:[t(l,{title:e(`app.client.screenHost.didntOpen`,{label:i}),subtitle:d}),t(s,{class:`flex-col items-start gap-3`,children:[t(c,{as:`p`,variant:`ui`,tone:`muted`,children:e(`app.client.screenHost.fixAndRetry`)}),t(o,{mix:n(`click`,()=>{`error`in m||r.props.taskDesign&&`error`in r.props.taskDesign?window.location.reload():f()}),children:e(`app.client.screenHost.retry`)})]})]})}):t(ee,{label:e(`app.client.screenHost.loading`,{label:i})})})}}async function gt(t,n,r,i,a=fetch){t=E(t);let o=await de(j.comments.get.href({id:t}),r,i,_,a);if(i.throwIfAborted(),o.id!==t)throw Error(e(`app.client.conversationRoute.anotherDiscussion`));let s=P(o),c=n.find(e=>e.module===s.module);if(!c)throw Error(e(`app.client.conversationRoute.enableOwningScreen`));if(c.routes&&!$(c.routes,s.href))throw Error(e(`app.client.conversationRoute.locationUnavailable`));return{active:c.id,module:{url:c.module},location:{path:c.path,href:s.href,...c.routes?{routes:c.routes}:{},conversation:{id:t,original:s.original}}}}function _t(a){let d=new Map,f=a.props,p=``,m=a.props.conversation,h,g=!!m,_=``,v=!1;function y(){a.signal.aborted||a.update()}async function b(t){if(m!==t)return;h?.abort();let n=new AbortController;h=n;let r=AbortSignal.any([a.signal,n.signal]);g=!0,_=``,y();try{let n=a.props.project;if(!n)throw Error(e(`app.client.workspace.connectProjectToOpenDiscussion`));let i=await gt(t,a.props.conversationTargets??[],n.token,r);!r.aborted&&m===t&&(f=i,x.set(i.active,window.location.pathname))}catch(t){r.aborted||(_=t instanceof Error?t.message:e(`app.client.workspace.couldNotOpenDiscussion`))}finally{h===n&&!r.aborted&&(g=!1,y())}}let x=new Map,S,C,w=()=>`bud:tabs:${a.props.project?.id}:v1`,T=()=>`${window.location.pathname}${window.location.search}${window.location.hash}`;function E(e){S=e,oe(w(),e);let t=a.props.project;t&&(document.cookie=`${ue(t.id)}=${ce(e)}; Path=/; Max-Age=31536000; SameSite=Strict`),y()}function O(){if(!S)return;let e=T();C===e?C=void 0:N(D(S))!==e&&E(le(S,e))}function P(e){let t=N(D(e));E(e),t!==T()&&(C=t,r(t,{history:`replace`,resetScroll:!1}))}function F(t){let{pathname:n}=new URL(t,`http://bud.local`);if(M(t))return{href:t,title:e(`app.client.workspace.discussion`),icon:`message`};let r=a.props.screens.map(e=>({item:e,root:new URL(e.href,`http://bud.local`).pathname})).filter(({root:e})=>e===`/`||n===e||n.startsWith(`${e}/`)).sort((e,t)=>t.root.length-e.root.length)[0],i=r?.item??a.props.screens[0];if(i.id===`pages`&&r&&n.startsWith(`${r.root}/`)){let e=n.slice(r.root.length);return{href:t,title:a.props.project?.routes.find(t=>t.path===e)?.title??e,icon:i.icon}}let o=(r&&r.root!==`/`?n.slice(r.root.length):n).split(`/`).filter(Boolean).at(-1);return{href:t,title:(o&&r?.root!==`/`?decodeURIComponent(o):void 0)??i.label,icon:i.icon}}let de=i((e,t)=>{v=!0,m&&b(m);function n(){let{pathname:e,search:t,hash:n}=window.location,r=`${e}${t}${n}`,i=M(r);if(i)return i!==m&&(m=i,b(i)),f.location.conversation?.id===i&&x.set(f.active,r),!0;let a=d.get(f.active);if(!a)return!1;let o=a.location.path;return e!==o&&(o===`/`||!e.startsWith(`${o}/`))?!1:(h?.abort(),m=void 0,g=!1,_=``,x.set(f.active,r),a.location={...a.location,href:r,conversation:void 0},f={...f,location:a.location},!0)}n(),a.props.project&&E(k(ne(w()),T(),crypto.randomUUID())),a.update(),window.addEventListener(`click`,e=>{if(!S||!(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(),E(A(S,`${n.pathname}${n.search}${n.hash}`,crypto.randomUUID(),!1)))},{capture:!0,signal:t}),window.addEventListener(`popstate`,()=>{!n()&&!window.navigation?.currentEntry?.getState()&&r(window.location.href,{history:`replace`,resetScroll:!1}),window.navigation||O(),a.update()},{signal:t}),window.navigation?.addEventListener(`navigate`,n,{signal:t}),window.navigation?.addEventListener(`currententrychange`,()=>{n(),O(),a.update()},{signal:t}),window.navigation?.addEventListener(`navigatesuccess`,()=>{n(),a.update()},{signal:t})});return()=>{let{screens:i,project:y,taskDesign:w}=a.props,T=JSON.stringify([a.props.active,a.props.location.href,a.props.conversation]);if(p!==T){if(p=T,m=a.props.conversation,h?.abort(),_=``,g=!!m,m){let e=m;v&&a.queueTask(()=>{b(e)})}else f=a.props}let{active:E,module:ne,location:O}=f,k=i.find(e=>e.id===E)??i[0];y&&!g&&!_&&d.set(k.id,{module:ne,location:O,taskDesign:k.id===`tasks`?w:void 0});let M=S??a.props.initialTabs??(y?ie(O.href,`current`):void 0);M&&a.queueTask(()=>he(M.active));let oe=i.map(e=>e.id===k.id?e:{...e,href:x.get(e.id)??e.href});return t(se,{items:oe,activeId:k.id,title:k.label,canvas:!!y,logo:y?.logo?{light:j.logo.href({theme:`light`}),dark:y.logo.dark?j.logo.href({theme:`dark`}):void 0,label:y.name}:void 0,status:y?t(ge,{project:y}):void 0,tabs:y&&M?t(re,{tabs:M.tabs.map(e=>({id:e.id,...F(N(e))})),active:M.active,recent:D(M).recent.filter(e=>e!==N(D(M))).map(F),canBack:D(M).index>0,canForward:D(M).index<D(M).entries.length-1,onSelect:e=>P({...M,active:e}),onClose:e=>P(ae(M,e)),onBack:()=>P(te(M,-1)),onForward:()=>P(te(M,1)),onNew:()=>P(A(M,i[0]?.href??`/`,crypto.randomUUID(),!0)),onOpen:e=>{C=void 0,r(e)}}):void 0,children:y?t(`div`,{class:`h-full min-h-0`,mix:de,children:[g?t(ee,{label:e(`app.client.workspace.openingDiscussion`)}):_?t(`div`,{class:`p-3 md:p-4`,children:t(u,{class:`max-w-2xl`,role:`alert`,children:[t(l,{title:e(`app.client.workspace.discussionDidntOpen`),subtitle:_}),t(s,{children:t(o,{mix:n(`click`,()=>{m&&b(m)}),children:e(`app.client.workspace.retry`)})})]})}):null,[...d].map(([e,{module:n,taskDesign:r,location:a}])=>t(`div`,{class:`h-full min-h-0`,hidden:g||!!_||e!==k.id,children:t(ht,{label:i.find(t=>t.id===e)?.label??e,module:n,taskDesign:r,project:y,location:a,active:!g&&!_&&e===k.id})},`${e}:${y.token}`))]}):t(u,{class:`max-w-2xl`,children:[t(l,{title:e(`app.client.workspace.yourProjectSideBySide`),subtitle:e(`app.client.workspace.openBudBesideLocalProject`)}),t(s,{children:t(c,{as:`p`,variant:`ui`,children:e(`app.client.workspace.startProjectWithBudVitePlugin`)})})]})})}}export{_t as Workspace};
|
package/dist/client/index.html
CHANGED
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
</script>
|
|
34
34
|
<!--bud-import-map-->
|
|
35
35
|
<title>bud.sh</title>
|
|
36
|
-
<script data-rmx-preserve-dom type="module" crossorigin src="/assets/index-
|
|
37
|
-
<link data-rmx-preserve-dom rel="modulepreload" crossorigin href="/assets/i18n-
|
|
36
|
+
<script data-rmx-preserve-dom type="module" crossorigin src="/assets/index-Dn2pfmXf.js"></script>
|
|
37
|
+
<link data-rmx-preserve-dom rel="modulepreload" crossorigin href="/assets/i18n-hH_Ba5QO.js">
|
|
38
38
|
<link data-rmx-preserve-dom rel="modulepreload" crossorigin href="/assets/component-DWct-Tq6.js">
|
|
39
39
|
<link data-rmx-preserve-dom rel="modulepreload" crossorigin href="/assets/jsx-B4XNFIzB.js">
|
|
40
40
|
<link data-rmx-preserve-dom rel="modulepreload" crossorigin href="/assets/children-N0l0v7XI.js">
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
<link data-rmx-preserve-dom rel="modulepreload" crossorigin href="/assets/frame-D6XmK4Df.js">
|
|
43
43
|
<link data-rmx-preserve-dom rel="modulepreload" crossorigin href="/assets/run-B2H4brp5.js">
|
|
44
44
|
<link data-rmx-preserve-dom rel="modulepreload" crossorigin href="/assets/preload-helper-BLdHbfdN.js">
|
|
45
|
-
<link data-rmx-preserve-dom rel="stylesheet" crossorigin href="/assets/index-
|
|
45
|
+
<link data-rmx-preserve-dom rel="stylesheet" crossorigin href="/assets/index-tpHYVXma.css">
|
|
46
46
|
</head>
|
|
47
47
|
<body>
|
|
48
48
|
<!--app-html-->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { $t as Button, H as CanvasWorkspace, Pn as Fragment, Rn as jsx, U as captureCanvasPoint, Zt as Loader, _n as Icon, bt as conversationHref, en as ToolbarSeparator, et as BranchSidebar, gn as Text, in as IconButton, l as projectStore, ln as readPreference, mn as t, on as Tooltip, rn as Select, t as commentsUnavailable, tn as WorkspaceLayout, un as writePreference, vn as ref, xn as on } from "./comment-data-
|
|
2
|
-
import { i as pictureKey, n as createProjectPreviews, t as createProjectBranches } from "./project-branches-
|
|
3
|
-
import { n as createProjectComments, r as loadComments, t as defineScreen } from "./screen-
|
|
4
|
-
import { t as ProjectThreadLinks } from "./project-thread-links-
|
|
1
|
+
import { $t as Button, H as CanvasWorkspace, Pn as Fragment, Rn as jsx, U as captureCanvasPoint, Zt as Loader, _n as Icon, bt as conversationHref, en as ToolbarSeparator, et as BranchSidebar, gn as Text, in as IconButton, l as projectStore, ln as readPreference, mn as t, on as Tooltip, rn as Select, t as commentsUnavailable, tn as WorkspaceLayout, un as writePreference, vn as ref, xn as on } from "./comment-data-Cn5y2VxV.js";
|
|
2
|
+
import { i as pictureKey, n as createProjectPreviews, t as createProjectBranches } from "./project-branches-DlCWmfRo.js";
|
|
3
|
+
import { n as createProjectComments, r as loadComments, t as defineScreen } from "./screen-CfdC3NbR.js";
|
|
4
|
+
import { t as ProjectThreadLinks } from "./project-thread-links-BZXQ200n.js";
|
|
5
5
|
//#region app/client/preview-image.tsx
|
|
6
6
|
var failedHeight = 760;
|
|
7
7
|
var stopPan = on("pointerdown", (event) => event.stopPropagation());
|
|
@@ -49962,10 +49962,6 @@ var de = {
|
|
|
49962
49962
|
text: "Leinwand verschieben",
|
|
49963
49963
|
source: "233eddf0"
|
|
49964
49964
|
},
|
|
49965
|
-
"canvas.canvasWorkspace.reload": {
|
|
49966
|
-
text: "Neu laden",
|
|
49967
|
-
source: "1a43a2ac"
|
|
49968
|
-
},
|
|
49969
49965
|
"canvas.canvasWorkspace.savingComments": {
|
|
49970
49966
|
text: "Kommentare werden gespeichert",
|
|
49971
49967
|
source: "1f15fbfb"
|
|
@@ -54059,7 +54055,6 @@ var en = {
|
|
|
54059
54055
|
"canvas.canvasWorkspace.interactWithPages": "Interact with pages",
|
|
54060
54056
|
"canvas.canvasWorkspace.newComment": "New comment",
|
|
54061
54057
|
"canvas.canvasWorkspace.panCanvas": "Pan canvas",
|
|
54062
|
-
"canvas.canvasWorkspace.reload": "Reload",
|
|
54063
54058
|
"canvas.canvasWorkspace.savingComments": "Saving comments",
|
|
54064
54059
|
"canvas.canvasWorkspace.showDarkPages": "Show dark pages",
|
|
54065
54060
|
"canvas.canvasWorkspace.showFullPages": "Show full pages",
|
|
@@ -82980,23 +82975,13 @@ function CanvasWorkspace(handle) {
|
|
|
82980
82975
|
if (zoomLabel) zoomLabel.textContent = `${Math.round(scale * 100)}%`;
|
|
82981
82976
|
}
|
|
82982
82977
|
}),
|
|
82983
|
-
handle.props.
|
|
82984
|
-
role:
|
|
82985
|
-
class:
|
|
82986
|
-
children:
|
|
82978
|
+
handle.props.commentsUnavailable || notice ? /* @__PURE__ */ jsx("div", {
|
|
82979
|
+
role: "status",
|
|
82980
|
+
class: "absolute top-3 left-3 max-w-[calc(100%-24px)] bud-overlay rounded-lg px-3 py-2 text-muted",
|
|
82981
|
+
children: /* @__PURE__ */ jsx(Text$1, {
|
|
82987
82982
|
variant: "ui-caption",
|
|
82988
|
-
children: handle.props.
|
|
82989
|
-
})
|
|
82990
|
-
type: "button",
|
|
82991
|
-
class: "ml-2 underline",
|
|
82992
|
-
mix: on("click", () => {
|
|
82993
|
-
handle.props.onReload?.();
|
|
82994
|
-
}),
|
|
82995
|
-
children: /* @__PURE__ */ jsx(Text$1, {
|
|
82996
|
-
variant: "ui-caption",
|
|
82997
|
-
children: t$2("canvas.canvasWorkspace.reload")
|
|
82998
|
-
})
|
|
82999
|
-
}) : null]
|
|
82983
|
+
children: handle.props.commentsUnavailable || notice
|
|
82984
|
+
})
|
|
83000
82985
|
}) : null,
|
|
83001
82986
|
panel && !handle.props.commentsUnavailable ? /* @__PURE__ */ jsx(ConversationSidebar, {
|
|
83002
82987
|
threads: handle.props.snapshot.threads,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { i as __toESM } from "./rolldown-runtime-DktXgydw.js";
|
|
2
|
-
import { $ as FileSearchPanel, $r as parseReviewActionResult, A as parseEditorPreferences, Ar as areDiffTargetsEqual, At as defaultReviewView, Br as areThemesEqual, Bt as fileHref, Cr as createCodeAnchor, D as ReviewActionDialog, Dr as renderDiffWithHighlighter, E as FileConflictPanel, Er as isDiffPlainText, F as FileWorkspace, Fr as markWorkerErrorReported, Ft as reviewComparison, Gr as themeResolver, Gt as fileRoutes, Hr as prepareThemeResolution, Ht as readFileLocation, I as defaultFileDestination, Ir as isFilePlainText, It as reviewContextKey, Jr as resolveLanguage, Kr as getThemes, L as fileActionIntent, Lr as renderFileWithHighlighter, Lt as reviewHref, M as FileMutationDialog, Mr as WorkerPoolTerminatedError, Mt as parseReviewSession, N as FileReviewPanel, Nr as WorkerPoolWorkerError, Nt as readReviewLocation, O as FileEditorPanel, Or as areDiffRenderOptionsEqual, P as codeThemes, Pr as isHandledWorkerPoolError, Pt as rememberReviewPosition, Qr as parseReviewActionRecoveries, R as mutationFileView, Rn as jsx, Rr as areFileRenderOptionsEqual, Rt as closeFileTab, St as isCodeConversation, Tr as reviewConflictIdentity, Tt as readConversationLocation, Ur as validateResolvedThemeName, Ut as reconcileFileView, Vr as getSharedHighlighter, Vt as parseFileView, Wr as attachResolvedThemes, Wt as rememberFile, Xr as ResolvedLanguages, Yr as areLanguagesAttached, Zr as parseReviewActionPlan, ai as parseRecoveries, bt as conversationHref, ci as parseReviewRepository, cn as toast, di as parseFileSearchQuery, ei as parseFileSaveRequest, f as storeDocument, fi as parseFileSearchResult, gi as parseFilePath, gn as Text, hi as parseFileIndex, ii as parseMutationResult, j as FileRecoveryDialog, jr as WorkerPoolTaskCanceledError, k as defaultEditorPreferences, kr as areFilesEqual, kt as defaultReviewPosition, l as projectStore, li as parseReviewSnapshot, ln as readPreference, m as storedFiles, mi as parseFileDocument, mn as t, ni as maxFileSaveBytes, oi as parseReviewDiff, p as storedDocument, pi as parseFileChange, qr as getResolvedOrResolveLanguage, ri as parseMutationPlan, s as applyFileUpdate, si as parseReviewHistory, ti as parseFileSaveResult, tt as ConversationSidebar, u as saveFiles, ui as parseReviewSource, un as writePreference, v as projectLive, vn as ref, vt as codeCommentCounts, wr as parseFileUpdate, wt as locateCodeConversations, y as routes, z as remainingMutationIntent, zr as hasResolvedThemes, zt as defaultFileView } from "./comment-data-
|
|
2
|
+
import { $ as FileSearchPanel, $r as parseReviewActionResult, A as parseEditorPreferences, Ar as areDiffTargetsEqual, At as defaultReviewView, Br as areThemesEqual, Bt as fileHref, Cr as createCodeAnchor, D as ReviewActionDialog, Dr as renderDiffWithHighlighter, E as FileConflictPanel, Er as isDiffPlainText, F as FileWorkspace, Fr as markWorkerErrorReported, Ft as reviewComparison, Gr as themeResolver, Gt as fileRoutes, Hr as prepareThemeResolution, Ht as readFileLocation, I as defaultFileDestination, Ir as isFilePlainText, It as reviewContextKey, Jr as resolveLanguage, Kr as getThemes, L as fileActionIntent, Lr as renderFileWithHighlighter, Lt as reviewHref, M as FileMutationDialog, Mr as WorkerPoolTerminatedError, Mt as parseReviewSession, N as FileReviewPanel, Nr as WorkerPoolWorkerError, Nt as readReviewLocation, O as FileEditorPanel, Or as areDiffRenderOptionsEqual, P as codeThemes, Pr as isHandledWorkerPoolError, Pt as rememberReviewPosition, Qr as parseReviewActionRecoveries, R as mutationFileView, Rn as jsx, Rr as areFileRenderOptionsEqual, Rt as closeFileTab, St as isCodeConversation, Tr as reviewConflictIdentity, Tt as readConversationLocation, Ur as validateResolvedThemeName, Ut as reconcileFileView, Vr as getSharedHighlighter, Vt as parseFileView, Wr as attachResolvedThemes, Wt as rememberFile, Xr as ResolvedLanguages, Yr as areLanguagesAttached, Zr as parseReviewActionPlan, ai as parseRecoveries, bt as conversationHref, ci as parseReviewRepository, cn as toast, di as parseFileSearchQuery, ei as parseFileSaveRequest, f as storeDocument, fi as parseFileSearchResult, gi as parseFilePath, gn as Text, hi as parseFileIndex, ii as parseMutationResult, j as FileRecoveryDialog, jr as WorkerPoolTaskCanceledError, k as defaultEditorPreferences, kr as areFilesEqual, kt as defaultReviewPosition, l as projectStore, li as parseReviewSnapshot, ln as readPreference, m as storedFiles, mi as parseFileDocument, mn as t, ni as maxFileSaveBytes, oi as parseReviewDiff, p as storedDocument, pi as parseFileChange, qr as getResolvedOrResolveLanguage, ri as parseMutationPlan, s as applyFileUpdate, si as parseReviewHistory, ti as parseFileSaveResult, tt as ConversationSidebar, u as saveFiles, ui as parseReviewSource, un as writePreference, v as projectLive, vn as ref, vt as codeCommentCounts, wr as parseFileUpdate, wt as locateCodeConversations, y as routes, z as remainingMutationIntent, zr as hasResolvedThemes, zt as defaultFileView } from "./comment-data-Cn5y2VxV.js";
|
|
3
3
|
import { B as DEFAULT_THEMES, C as getFiletypeFromFileName, S as getCustomExtensionsVersion, x as getCustomExtensionsMap } from "./cloneFileDiffMetadata-C1BcNpxN.js";
|
|
4
4
|
import { t as require_lru } from "./lru-C0_oUet4.js";
|
|
5
|
-
import { n as createProjectComments, t as defineScreen } from "./screen-
|
|
6
|
-
import { t as ProjectThreadLinks } from "./project-thread-links-
|
|
5
|
+
import { n as createProjectComments, t as defineScreen } from "./screen-CfdC3NbR.js";
|
|
6
|
+
import { t as ProjectThreadLinks } from "./project-thread-links-BZXQ200n.js";
|
|
7
7
|
//#region ../../node_modules/.pnpm/@pierre+diffs@1.5.2_@shikijs+themes@4.5.0_react-dom@19.3.1_react@19.3.1__react@19.3.1/node_modules/@pierre/diffs/dist/highlighter/languages/getResolvedLanguages.js
|
|
8
8
|
function getResolvedLanguages(languages) {
|
|
9
9
|
const resolvedLanguages = [];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Kt as pageRoutes, Pn as Fragment, Qt as Spinner, Rn as jsx, Zi as array, Zt as Loader, _i as MAX_CANVAS_Y, _t as PagesWorkspace, aa as object, ca as parseSafe, gn as Text, ia as number, in as IconButton, l as projectStore, la as string, ln as readPreference, mn as t, oa as optional, rn as Select, un as writePreference, vn as ref, xn as on } from "./comment-data-
|
|
1
|
+
import { Kt as pageRoutes, Pn as Fragment, Qt as Spinner, Rn as jsx, Zi as array, Zt as Loader, _i as MAX_CANVAS_Y, _t as PagesWorkspace, aa as object, ca as parseSafe, gn as Text, ia as number, in as IconButton, l as projectStore, la as string, ln as readPreference, mn as t, oa as optional, rn as Select, un as writePreference, vn as ref, xn as on } from "./comment-data-Cn5y2VxV.js";
|
|
2
2
|
import { n as workspaceTab, t as followWorkspaceTab } from "../hosted.js";
|
|
3
|
-
import { n as createProjectPreviews, r as locatePreview, t as createProjectBranches } from "./project-branches-
|
|
4
|
-
import { n as createProjectComments, t as defineScreen } from "./screen-
|
|
3
|
+
import { n as createProjectPreviews, r as locatePreview, t as createProjectBranches } from "./project-branches-DlCWmfRo.js";
|
|
4
|
+
import { n as createProjectComments, t as defineScreen } from "./screen-CfdC3NbR.js";
|
|
5
5
|
//#region app/client/page-picture.tsx
|
|
6
6
|
/**
|
|
7
7
|
* A page as its latest captured picture, for Pages where there is no running site: its slices
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Jn as parsePreviewBranch, Qi as boolean, Qn as parsePreviewPins, S as writeRows, Zi as array, aa as object, b as plainRow, c as previewKey, ca as parseSafe, ia as number, l as projectStore, la as string, mn as t, qn as parsePreview, ra as nullable, ta as enum_, v as projectLive, vi as parseElementAnchor, y as routes } from "./comment-data-
|
|
1
|
+
import { Jn as parsePreviewBranch, Qi as boolean, Qn as parsePreviewPins, S as writeRows, Zi as array, aa as object, b as plainRow, c as previewKey, ca as parseSafe, ia as number, l as projectStore, la as string, mn as t, qn as parsePreview, ra as nullable, ta as enum_, v as projectLive, vi as parseElementAnchor, y as routes } from "./comment-data-Cn5y2VxV.js";
|
|
2
2
|
//#region app/client/project-previews.ts
|
|
3
3
|
/**
|
|
4
4
|
* A preview's capture in a theme at a viewport. Captures from before viewports existed name
|
package/dist/hosted/assets/{project-thread-links-BRLgByEe.js → project-thread-links-BZXQ200n.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as ThreadTaskLinks, Di as parseWorkItemRef, Dt as taskHref, Fi as valueByRole, Pn as Fragment, Rn as jsx, _ as requestComments, fr as parseThread, in as IconButton, mn as t, vn as ref, vr as parseThreadLinkInput, w as ThreadTaskPicker, xn as on, y as routes, yi as parseWorkWorkspace } from "./comment-data-
|
|
2
|
-
import { n as requestTasks } from "./tasks-request-
|
|
1
|
+
import { C as ThreadTaskLinks, Di as parseWorkItemRef, Dt as taskHref, Fi as valueByRole, Pn as Fragment, Rn as jsx, _ as requestComments, fr as parseThread, in as IconButton, mn as t, vn as ref, vr as parseThreadLinkInput, w as ThreadTaskPicker, xn as on, y as routes, yi as parseWorkWorkspace } from "./comment-data-Cn5y2VxV.js";
|
|
2
|
+
import { n as requestTasks } from "./tasks-request-CFPLvLc7.js";
|
|
3
3
|
//#region app/client/project-task-picker.tsx
|
|
4
4
|
/**
|
|
5
5
|
* Loads searchable task choices only while the picker is mounted.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as writeRows, _ as requestComments, a as saveThreads, ar as predictThreadStatus, b as plainRow, br as parseThreadSnapshot, cn as toast, fr as parseThread, g as CommentsRequestError, gr as parseThreadId, hr as parseThreadFilter, i as saveThread, ir as predictThreadReply, l as projectStore, mn as t, n as unavailableComments, nr as predictThreadCreate, o as threadMatches, rr as predictThreadDelete, x as writeOptimistically, y as routes } from "./comment-data-
|
|
1
|
+
import { S as writeRows, _ as requestComments, a as saveThreads, ar as predictThreadStatus, b as plainRow, br as parseThreadSnapshot, cn as toast, fr as parseThread, g as CommentsRequestError, gr as parseThreadId, hr as parseThreadFilter, i as saveThread, ir as predictThreadReply, l as projectStore, mn as t, n as unavailableComments, nr as predictThreadCreate, o as threadMatches, rr as predictThreadDelete, x as writeOptimistically, y as routes } from "./comment-data-Cn5y2VxV.js";
|
|
2
2
|
//#region app/client/project-comments.ts
|
|
3
3
|
var viewers = /* @__PURE__ */ new Map();
|
|
4
4
|
function parseViewer(value) {
|
|
@@ -233,6 +233,10 @@ function createProjectComments(options) {
|
|
|
233
233
|
if (!detailFailures.size) error = "";
|
|
234
234
|
}
|
|
235
235
|
} catch (cause) {
|
|
236
|
+
if (!signal.aborted && turn === generation && cause instanceof CommentsRequestError && cause.code === "not-found") {
|
|
237
|
+
await forget(id);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
236
240
|
if (!signal.aborted && turn === generation) {
|
|
237
241
|
detailFailures.add(id);
|
|
238
242
|
error = cause instanceof Error ? cause.message : t("app.client.projectComments.couldNotLoadDiscussion");
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { $t as Button, B as TaskWorkspace, C as ThreadTaskLinks, Dt as taskHref, Et as selectedTask, Jt as CommentThreadDetail, Mi as parseWorkSyncResult, Oi as parseWorkMutationResult, Ot as taskRole, Pn as Fragment, Rn as jsx, S as writeRows, T as ItemDiscussion, Ti as parseWorkDetail, Tt as readConversationLocation, Xt as CommentComposer, Yt as CommentThreadItem, b as plainRow, bi as parseSectionData, cn as toast, cr as predictWorkUpdate, gn as Text, h as storedWorkspace, l as projectStore, mn as t, nt as CommentThreadHeading, or as predictWorkAction, qt as taskRoutes, sr as predictWorkCreate, vn as ref, x as writeOptimistically, xn as on, xt as conversationLabel, y as routes } from "./comment-data-
|
|
2
|
-
import { n as requestTasks, t as TaskRequestError } from "./tasks-request-
|
|
1
|
+
import { $t as Button, B as TaskWorkspace, C as ThreadTaskLinks, Dt as taskHref, Et as selectedTask, Jt as CommentThreadDetail, Mi as parseWorkSyncResult, Oi as parseWorkMutationResult, Ot as taskRole, Pn as Fragment, Rn as jsx, S as writeRows, T as ItemDiscussion, Ti as parseWorkDetail, Tt as readConversationLocation, Xt as CommentComposer, Yt as CommentThreadItem, b as plainRow, bi as parseSectionData, cn as toast, cr as predictWorkUpdate, gn as Text, h as storedWorkspace, l as projectStore, mn as t, nt as CommentThreadHeading, or as predictWorkAction, qt as taskRoutes, sr as predictWorkCreate, vn as ref, x as writeOptimistically, xn as on, xt as conversationLabel, y as routes } from "./comment-data-Cn5y2VxV.js";
|
|
2
|
+
import { n as requestTasks, t as TaskRequestError } from "./tasks-request-CFPLvLc7.js";
|
|
3
3
|
import { r as projectWork } from "../hosted.js";
|
|
4
|
-
import { i as loadItemComments, n as createProjectComments, t as defineScreen } from "./screen-
|
|
5
|
-
import { n as ProjectTaskPicker, t as ProjectThreadLinks } from "./project-thread-links-
|
|
4
|
+
import { i as loadItemComments, n as createProjectComments, t as defineScreen } from "./screen-CfdC3NbR.js";
|
|
5
|
+
import { n as ProjectTaskPicker, t as ProjectThreadLinks } from "./project-thread-links-BZXQ200n.js";
|
|
6
6
|
//#region app/client/task-discussion.tsx
|
|
7
7
|
/**
|
|
8
8
|
* Owns a task's filtered discussions and lazy detail requests within its mounted lifetime.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Bn as createMultiMatcher, Di as parseWorkItemRef, ki as parseWorkQuery, mn as t, y as routes } from "./comment-data-
|
|
1
|
+
import { Bn as createMultiMatcher, Di as parseWorkItemRef, ki as parseWorkQuery, mn as t, y as routes } from "./comment-data-Cn5y2VxV.js";
|
|
2
2
|
//#region app/client/tasks-request.ts
|
|
3
3
|
var reads = createMultiMatcher();
|
|
4
4
|
var writes = createMultiMatcher();
|
package/dist/hosted/hosted.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { $i as createSchema, $n as parsePreviewViewport, $t as Button, Ai as parseWorkSnapshot, An as normalizeAttributeName, Bi as withoutMessages, Bn as createMultiMatcher, Ci as parseWorkConnection, Cn as composeMixedProps, Ct as legacyConversationHref, Di as parseWorkItemRef, Dn as FRAMEWORK_PROPS, Dt as taskHref, Ei as parseWorkItem, En as isEntry, Et as selectedTask, Fi as valueByRole, Fn as Frame, G as mergeThreads, Gi as identifier$3, Gn as PREVIEW_THUMBNAIL_WIDTHS, Gt as fileRoutes, Hi as parseWorkSchema, Hn as joinPatterns, Ii as messageDeletionRefusal, In as createComponent, J as conversationId, Ji as record$1, Jn as parsePreviewBranch, K as stableJson, Ki as nonempty$1, Kn as PREVIEW_TILE_HEIGHT, Kt as pageRoutes, Li as messageDeletionRefusals, Ln as createFrameHandle, Mi as parseWorkSyncResult, Mn as serializeStyleObject, Ni as parseWorkUpdate, Nn as shouldStringifyBooleanAttribute, Oi as parseWorkMutationResult, On as SELF_CLOSING_TAGS, Pi as parseWorkValue, Pn as Fragment, Q as text$6, Qi as boolean$2, Qn as parsePreviewPins, Ri as parseMessage, Rn as jsx, S as writeRows, Si as parseWorkActivity, Sn as normalizeUnsafeHTMLProps, Sr as parseThreadStatusInput, Ti as parseWorkDetail, Tn as clientEntry, Tt as readConversationLocation, Ui as statusCategory, Un as RoutePattern, V as parseTaskDesign, Vi as fieldByRole, Vn as equal, W as CommentMergeError, Wi as WorkValidationError, Wn as MAX_PREVIEW_HEIGHT, X as parseCommentThread, Xi as any, Xn as parsePreviewHash, Y as object$2, Yi as strict$2, Yn as parsePreviewCapture, Z as revision$2, Zi as array$2, Zn as parsePreviewId, Zt as Loader, _ as requestComments, _i as MAX_CANVAS_Y, _r as parseThreadInput, aa as object$1, an as LiveStatus, at as FieldCardHeader, b as plainRow, bi as parseSectionData, bn as stripFlushMarkers, br as parseThreadSnapshot, ca as parseSafe, ct as initialShellTabs, d as saveWorkspace, dn as hasMessage, dr as parseAnchor, dt as readTabsCookie, ea as defaulted, er as RESYNC, fn as isLocale, fr as parseThread, ft as stepShellTab, gn as Text, gr as parseThreadId, gt as visitShellTab, hn as useLocaleSource, hr as parseThreadFilter, ht as tabsCookieValue, ia as number$2, it as FieldCardContent, ji as parseWorkSync, jn as sanitizeUrlAttribute, jt as legacyFileHref, ki as parseWorkQuery, kn as isAllowedHostPropName, l as projectStore, la as string$2, ln as readPreference, lr as parseWorkChange, lt as openShellTab, mn as t, mr as parseThreadDeleteInput, mt as tabsCookieName, n as unavailableComments, na as fail$11, nn as ShellTabBar, oa as optional$3, ot as activeTab, pn as locale, pr as parseThreadCapabilities, pt as tabHref, q as parseCommentInput$1, qi as parseWork, qt as taskRoutes, r as followThreads, rt as FieldCard, sa as parse, sn as AppShell, st as closeShellTab, t as commentsUnavailable, ta as enum_, tr as parseLiveId, un as writePreference, ur as MAX_THREADS, ut as parseShellTabs, v as projectLive, vi as parseElementAnchor, vn as ref$1, vr as parseThreadLinkInput, wi as parseWorkCreate, wn as resolveMixDescriptors, xi as parseWorkActionInput, xn as on, xr as parseThreadStatus, y as routes, yi as parseWorkWorkspace, yn as appendFlushMarker, yr as parseThreadReplyInput, yt as conversationDestination, zi as parseMessageAuthor, zn as Route } from "./assets/comment-data-
|
|
2
|
-
import { n as requestTasks } from "./assets/tasks-request-
|
|
1
|
+
import { $i as createSchema, $n as parsePreviewViewport, $t as Button, Ai as parseWorkSnapshot, An as normalizeAttributeName, Bi as withoutMessages, Bn as createMultiMatcher, Ci as parseWorkConnection, Cn as composeMixedProps, Ct as legacyConversationHref, Di as parseWorkItemRef, Dn as FRAMEWORK_PROPS, Dt as taskHref, Ei as parseWorkItem, En as isEntry, Et as selectedTask, Fi as valueByRole, Fn as Frame, G as mergeThreads, Gi as identifier$3, Gn as PREVIEW_THUMBNAIL_WIDTHS, Gt as fileRoutes, Hi as parseWorkSchema, Hn as joinPatterns, Ii as messageDeletionRefusal, In as createComponent, J as conversationId, Ji as record$1, Jn as parsePreviewBranch, K as stableJson, Ki as nonempty$1, Kn as PREVIEW_TILE_HEIGHT, Kt as pageRoutes, Li as messageDeletionRefusals, Ln as createFrameHandle, Mi as parseWorkSyncResult, Mn as serializeStyleObject, Ni as parseWorkUpdate, Nn as shouldStringifyBooleanAttribute, Oi as parseWorkMutationResult, On as SELF_CLOSING_TAGS, Pi as parseWorkValue, Pn as Fragment, Q as text$6, Qi as boolean$2, Qn as parsePreviewPins, Ri as parseMessage, Rn as jsx, S as writeRows, Si as parseWorkActivity, Sn as normalizeUnsafeHTMLProps, Sr as parseThreadStatusInput, Ti as parseWorkDetail, Tn as clientEntry, Tt as readConversationLocation, Ui as statusCategory, Un as RoutePattern, V as parseTaskDesign, Vi as fieldByRole, Vn as equal, W as CommentMergeError, Wi as WorkValidationError, Wn as MAX_PREVIEW_HEIGHT, X as parseCommentThread, Xi as any, Xn as parsePreviewHash, Y as object$2, Yi as strict$2, Yn as parsePreviewCapture, Z as revision$2, Zi as array$2, Zn as parsePreviewId, Zt as Loader, _ as requestComments, _i as MAX_CANVAS_Y, _r as parseThreadInput, aa as object$1, an as LiveStatus, at as FieldCardHeader, b as plainRow, bi as parseSectionData, bn as stripFlushMarkers, br as parseThreadSnapshot, ca as parseSafe, ct as initialShellTabs, d as saveWorkspace, dn as hasMessage, dr as parseAnchor, dt as readTabsCookie, ea as defaulted, er as RESYNC, fn as isLocale, fr as parseThread, ft as stepShellTab, gn as Text, gr as parseThreadId, gt as visitShellTab, hn as useLocaleSource, hr as parseThreadFilter, ht as tabsCookieValue, ia as number$2, it as FieldCardContent, ji as parseWorkSync, jn as sanitizeUrlAttribute, jt as legacyFileHref, ki as parseWorkQuery, kn as isAllowedHostPropName, l as projectStore, la as string$2, ln as readPreference, lr as parseWorkChange, lt as openShellTab, mn as t, mr as parseThreadDeleteInput, mt as tabsCookieName, n as unavailableComments, na as fail$11, nn as ShellTabBar, oa as optional$3, ot as activeTab, pn as locale, pr as parseThreadCapabilities, pt as tabHref, q as parseCommentInput$1, qi as parseWork, qt as taskRoutes, r as followThreads, rt as FieldCard, sa as parse, sn as AppShell, st as closeShellTab, t as commentsUnavailable, ta as enum_, tr as parseLiveId, un as writePreference, ur as MAX_THREADS, ut as parseShellTabs, v as projectLive, vi as parseElementAnchor, vn as ref$1, vr as parseThreadLinkInput, wi as parseWorkCreate, wn as resolveMixDescriptors, xi as parseWorkActionInput, xn as on, xr as parseThreadStatus, y as routes, yi as parseWorkWorkspace, yn as appendFlushMarker, yr as parseThreadReplyInput, yt as conversationDestination, zi as parseMessageAuthor, zn as Route } from "./assets/comment-data-Cn5y2VxV.js";
|
|
2
|
+
import { n as requestTasks } from "./assets/tasks-request-CFPLvLc7.js";
|
|
3
3
|
import * as Crypto from "node:crypto";
|
|
4
4
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
5
5
|
import * as Path from "node:path";
|
|
@@ -38884,10 +38884,10 @@ function ProjectLiveStatus(handle) {
|
|
|
38884
38884
|
//#endregion
|
|
38885
38885
|
//#region app/client/screens.ts
|
|
38886
38886
|
var builtIns = {
|
|
38887
|
-
"bud:pages": () => import("./assets/pages-
|
|
38888
|
-
"bud:canvas": () => import("./assets/canvas-
|
|
38889
|
-
"bud:tasks": () => import("./assets/tasks-
|
|
38890
|
-
"bud:files": () => import("./assets/files-
|
|
38887
|
+
"bud:pages": () => import("./assets/pages-B0ZlVdci.js"),
|
|
38888
|
+
"bud:canvas": () => import("./assets/canvas-BYTOp1p7.js"),
|
|
38889
|
+
"bud:tasks": () => import("./assets/tasks-_yKh2Z6q.js"),
|
|
38890
|
+
"bud:files": () => import("./assets/files-B1P2_24q.js")
|
|
38891
38891
|
};
|
|
38892
38892
|
/**
|
|
38893
38893
|
* Imports a screen module: a built-in by its key, any other by the URL the server gave it.
|
package/dist/node/design.js
CHANGED
|
@@ -3853,10 +3853,6 @@ var de = {
|
|
|
3853
3853
|
text: "Leinwand verschieben",
|
|
3854
3854
|
source: "233eddf0"
|
|
3855
3855
|
},
|
|
3856
|
-
"canvas.canvasWorkspace.reload": {
|
|
3857
|
-
text: "Neu laden",
|
|
3858
|
-
source: "1a43a2ac"
|
|
3859
|
-
},
|
|
3860
3856
|
"canvas.canvasWorkspace.savingComments": {
|
|
3861
3857
|
text: "Kommentare werden gespeichert",
|
|
3862
3858
|
source: "1f15fbfb"
|
|
@@ -7950,7 +7946,6 @@ var en = {
|
|
|
7950
7946
|
"canvas.canvasWorkspace.interactWithPages": "Interact with pages",
|
|
7951
7947
|
"canvas.canvasWorkspace.newComment": "New comment",
|
|
7952
7948
|
"canvas.canvasWorkspace.panCanvas": "Pan canvas",
|
|
7953
|
-
"canvas.canvasWorkspace.reload": "Reload",
|
|
7954
7949
|
"canvas.canvasWorkspace.savingComments": "Saving comments",
|
|
7955
7950
|
"canvas.canvasWorkspace.showDarkPages": "Show dark pages",
|
|
7956
7951
|
"canvas.canvasWorkspace.showFullPages": "Show full pages",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { $t as Button, H as CanvasWorkspace, U as captureCanvasPoint, Zt as Loader, _n as Icon, bt as conversationHref, en as ToolbarSeparator, et as BranchSidebar, gn as Text, in as IconButton, l as projectStore, ln as readPreference, mn as t, on as Tooltip, rn as Select, t as commentsUnavailable, tn as WorkspaceLayout, un as writePreference } from "./comment-data-
|
|
2
|
-
import { i as pictureKey, n as createProjectPreviews, t as createProjectBranches } from "./project-branches-
|
|
3
|
-
import { n as createProjectComments, r as loadComments, t as defineScreen } from "./screen-
|
|
4
|
-
import { t as ProjectThreadLinks } from "./project-thread-links-
|
|
1
|
+
import { $t as Button, H as CanvasWorkspace, U as captureCanvasPoint, Zt as Loader, _n as Icon, bt as conversationHref, en as ToolbarSeparator, et as BranchSidebar, gn as Text, in as IconButton, l as projectStore, ln as readPreference, mn as t, on as Tooltip, rn as Select, t as commentsUnavailable, tn as WorkspaceLayout, un as writePreference } from "./comment-data-yfWEdDQL.js";
|
|
2
|
+
import { i as pictureKey, n as createProjectPreviews, t as createProjectBranches } from "./project-branches-D7rVCxQX.js";
|
|
3
|
+
import { n as createProjectComments, r as loadComments, t as defineScreen } from "./screen-DapOVrga.js";
|
|
4
|
+
import { t as ProjectThreadLinks } from "./project-thread-links-m-OLpsD9.js";
|
|
5
5
|
import { on, ref } from "remix/component";
|
|
6
6
|
import { Fragment, jsx, jsxs } from "remix/component/jsx-runtime";
|
|
7
7
|
//#region app/client/preview-image.tsx
|
|
@@ -41890,10 +41890,6 @@ var de = {
|
|
|
41890
41890
|
text: "Leinwand verschieben",
|
|
41891
41891
|
source: "233eddf0"
|
|
41892
41892
|
},
|
|
41893
|
-
"canvas.canvasWorkspace.reload": {
|
|
41894
|
-
text: "Neu laden",
|
|
41895
|
-
source: "1a43a2ac"
|
|
41896
|
-
},
|
|
41897
41893
|
"canvas.canvasWorkspace.savingComments": {
|
|
41898
41894
|
text: "Kommentare werden gespeichert",
|
|
41899
41895
|
source: "1f15fbfb"
|
|
@@ -45987,7 +45983,6 @@ var en = {
|
|
|
45987
45983
|
"canvas.canvasWorkspace.interactWithPages": "Interact with pages",
|
|
45988
45984
|
"canvas.canvasWorkspace.newComment": "New comment",
|
|
45989
45985
|
"canvas.canvasWorkspace.panCanvas": "Pan canvas",
|
|
45990
|
-
"canvas.canvasWorkspace.reload": "Reload",
|
|
45991
45986
|
"canvas.canvasWorkspace.savingComments": "Saving comments",
|
|
45992
45987
|
"canvas.canvasWorkspace.showDarkPages": "Show dark pages",
|
|
45993
45988
|
"canvas.canvasWorkspace.showFullPages": "Show full pages",
|
|
@@ -74888,23 +74883,13 @@ function CanvasWorkspace(handle) {
|
|
|
74888
74883
|
if (zoomLabel) zoomLabel.textContent = `${Math.round(scale * 100)}%`;
|
|
74889
74884
|
}
|
|
74890
74885
|
}),
|
|
74891
|
-
handle.props.
|
|
74892
|
-
role:
|
|
74893
|
-
class:
|
|
74894
|
-
children:
|
|
74886
|
+
handle.props.commentsUnavailable || notice ? /* @__PURE__ */ jsx("div", {
|
|
74887
|
+
role: "status",
|
|
74888
|
+
class: "absolute top-3 left-3 max-w-[calc(100%-24px)] bud-overlay rounded-lg px-3 py-2 text-muted",
|
|
74889
|
+
children: /* @__PURE__ */ jsx(Text, {
|
|
74895
74890
|
variant: "ui-caption",
|
|
74896
|
-
children: handle.props.
|
|
74897
|
-
})
|
|
74898
|
-
type: "button",
|
|
74899
|
-
class: "ml-2 underline",
|
|
74900
|
-
mix: on("click", () => {
|
|
74901
|
-
handle.props.onReload?.();
|
|
74902
|
-
}),
|
|
74903
|
-
children: /* @__PURE__ */ jsx(Text, {
|
|
74904
|
-
variant: "ui-caption",
|
|
74905
|
-
children: t$2("canvas.canvasWorkspace.reload")
|
|
74906
|
-
})
|
|
74907
|
-
}) : null]
|
|
74891
|
+
children: handle.props.commentsUnavailable || notice
|
|
74892
|
+
})
|
|
74908
74893
|
}) : null,
|
|
74909
74894
|
panel && !handle.props.commentsUnavailable ? /* @__PURE__ */ jsx(ConversationSidebar, {
|
|
74910
74895
|
threads: handle.props.snapshot.threads,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { i as __toESM } from "./rolldown-runtime-DktXgydw.js";
|
|
2
|
-
import { $ as FileSearchPanel, $n as markWorkerErrorReported, A as parseEditorPreferences, Ar as parseFileSearchResult, At as defaultReviewView, Bt as fileHref, Cr as parseRecoveries, D as ReviewActionDialog, Dr as parseReviewSnapshot, E as FileConflictPanel, Er as parseReviewRepository, F as FileWorkspace, Ft as reviewComparison, Gn as renderDiffWithHighlighter, Gt as fileRoutes, Hn as parseFileUpdate, Ht as readFileLocation, I as defaultFileDestination, It as reviewContextKey, Jn as areDiffTargetsEqual, Kn as areDiffRenderOptionsEqual, L as fileActionIntent, Lt as reviewHref, M as FileMutationDialog, Mr as parseFileDocument, Mt as parseReviewSession, N as FileReviewPanel, Nr as parseFileIndex, Nt as readReviewLocation, O as FileEditorPanel, Or as parseReviewSource, P as codeThemes, Pr as parseFilePath, Pt as rememberReviewPosition, Qn as isHandledWorkerPoolError, R as mutationFileView, Rt as closeFileTab, Sr as parseMutationResult, St as isCodeConversation, Tr as parseReviewHistory, Tt as readConversationLocation, Un as reviewConflictIdentity, Ut as reconcileFileView, Vn as createCodeAnchor, Vt as parseFileView, Wn as isDiffPlainText, Wt as rememberFile, Xn as WorkerPoolTerminatedError, Yn as WorkerPoolTaskCanceledError, Zn as WorkerPoolWorkerError, _r as parseReviewActionResult, ar as getSharedHighlighter, br as maxFileSaveBytes, bt as conversationHref, cn as toast, cr as attachResolvedThemes, dr as getResolvedOrResolveLanguage, er as isFilePlainText, f as storeDocument, fr as resolveLanguage, gn as Text, gr as parseReviewActionRecoveries, hr as parseReviewActionPlan, ir as areThemesEqual, j as FileRecoveryDialog, jr as parseFileChange, k as defaultEditorPreferences, kr as parseFileSearchQuery, kt as defaultReviewPosition, l as projectStore, ln as readPreference, lr as themeResolver, m as storedFiles, mn as t, mr as ResolvedLanguages, nr as areFileRenderOptionsEqual, or as prepareThemeResolution, p as storedDocument, pr as areLanguagesAttached, qn as areFilesEqual, rr as hasResolvedThemes, s as applyFileUpdate, sr as validateResolvedThemeName, tr as renderFileWithHighlighter, tt as ConversationSidebar, u as saveFiles, un as writePreference, ur as getThemes, v as projectLive, vr as parseFileSaveRequest, vt as codeCommentCounts, wr as parseReviewDiff, wt as locateCodeConversations, xr as parseMutationPlan, y as routes, yr as parseFileSaveResult, z as remainingMutationIntent, zt as defaultFileView } from "./comment-data-
|
|
2
|
+
import { $ as FileSearchPanel, $n as markWorkerErrorReported, A as parseEditorPreferences, Ar as parseFileSearchResult, At as defaultReviewView, Bt as fileHref, Cr as parseRecoveries, D as ReviewActionDialog, Dr as parseReviewSnapshot, E as FileConflictPanel, Er as parseReviewRepository, F as FileWorkspace, Ft as reviewComparison, Gn as renderDiffWithHighlighter, Gt as fileRoutes, Hn as parseFileUpdate, Ht as readFileLocation, I as defaultFileDestination, It as reviewContextKey, Jn as areDiffTargetsEqual, Kn as areDiffRenderOptionsEqual, L as fileActionIntent, Lt as reviewHref, M as FileMutationDialog, Mr as parseFileDocument, Mt as parseReviewSession, N as FileReviewPanel, Nr as parseFileIndex, Nt as readReviewLocation, O as FileEditorPanel, Or as parseReviewSource, P as codeThemes, Pr as parseFilePath, Pt as rememberReviewPosition, Qn as isHandledWorkerPoolError, R as mutationFileView, Rt as closeFileTab, Sr as parseMutationResult, St as isCodeConversation, Tr as parseReviewHistory, Tt as readConversationLocation, Un as reviewConflictIdentity, Ut as reconcileFileView, Vn as createCodeAnchor, Vt as parseFileView, Wn as isDiffPlainText, Wt as rememberFile, Xn as WorkerPoolTerminatedError, Yn as WorkerPoolTaskCanceledError, Zn as WorkerPoolWorkerError, _r as parseReviewActionResult, ar as getSharedHighlighter, br as maxFileSaveBytes, bt as conversationHref, cn as toast, cr as attachResolvedThemes, dr as getResolvedOrResolveLanguage, er as isFilePlainText, f as storeDocument, fr as resolveLanguage, gn as Text, gr as parseReviewActionRecoveries, hr as parseReviewActionPlan, ir as areThemesEqual, j as FileRecoveryDialog, jr as parseFileChange, k as defaultEditorPreferences, kr as parseFileSearchQuery, kt as defaultReviewPosition, l as projectStore, ln as readPreference, lr as themeResolver, m as storedFiles, mn as t, mr as ResolvedLanguages, nr as areFileRenderOptionsEqual, or as prepareThemeResolution, p as storedDocument, pr as areLanguagesAttached, qn as areFilesEqual, rr as hasResolvedThemes, s as applyFileUpdate, sr as validateResolvedThemeName, tr as renderFileWithHighlighter, tt as ConversationSidebar, u as saveFiles, un as writePreference, ur as getThemes, v as projectLive, vr as parseFileSaveRequest, vt as codeCommentCounts, wr as parseReviewDiff, wt as locateCodeConversations, xr as parseMutationPlan, y as routes, yr as parseFileSaveResult, z as remainingMutationIntent, zt as defaultFileView } from "./comment-data-yfWEdDQL.js";
|
|
3
3
|
import { B as DEFAULT_THEMES, C as getFiletypeFromFileName, S as getCustomExtensionsVersion, x as getCustomExtensionsMap } from "./cloneFileDiffMetadata-C1BcNpxN.js";
|
|
4
4
|
import { t as require_lru } from "./lru-C0_oUet4.js";
|
|
5
|
-
import { n as createProjectComments, t as defineScreen } from "./screen-
|
|
6
|
-
import { t as ProjectThreadLinks } from "./project-thread-links-
|
|
5
|
+
import { n as createProjectComments, t as defineScreen } from "./screen-DapOVrga.js";
|
|
6
|
+
import { t as ProjectThreadLinks } from "./project-thread-links-m-OLpsD9.js";
|
|
7
7
|
import { ref } from "remix/component";
|
|
8
8
|
import { jsx, jsxs } from "remix/component/jsx-runtime";
|
|
9
9
|
//#region ../../node_modules/.pnpm/@pierre+diffs@1.5.2_@shikijs+themes@4.5.0_react-dom@19.3.1_react@19.3.1__react@19.3.1/node_modules/@pierre/diffs/dist/highlighter/languages/getResolvedLanguages.js
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Fr as MAX_CANVAS_Y, Kt as pageRoutes, Qt as Spinner, Zt as Loader, _t as PagesWorkspace, gn as Text, in as IconButton, l as projectStore, ln as readPreference, mn as t, rn as Select, un as writePreference } from "./comment-data-
|
|
1
|
+
import { Fr as MAX_CANVAS_Y, Kt as pageRoutes, Qt as Spinner, Zt as Loader, _t as PagesWorkspace, gn as Text, in as IconButton, l as projectStore, ln as readPreference, mn as t, rn as Select, un as writePreference } from "./comment-data-yfWEdDQL.js";
|
|
2
2
|
import { n as workspaceTab, t as followWorkspaceTab } from "../node-host.js";
|
|
3
|
-
import { n as createProjectPreviews, r as locatePreview, t as createProjectBranches } from "./project-branches-
|
|
4
|
-
import { n as createProjectComments, t as defineScreen } from "./screen-
|
|
3
|
+
import { n as createProjectPreviews, r as locatePreview, t as createProjectBranches } from "./project-branches-D7rVCxQX.js";
|
|
4
|
+
import { n as createProjectComments, t as defineScreen } from "./screen-DapOVrga.js";
|
|
5
5
|
import { array, number, object, optional, parseSafe, string } from "remix/data-schema";
|
|
6
6
|
import { on, ref } from "remix/component";
|
|
7
7
|
import { Fragment, jsx, jsxs } from "remix/component/jsx-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ir as parseElementAnchor, S as writeRows, Si as parsePreviewPins, _i as parsePreview, b as plainRow, c as previewKey, l as projectStore, mn as t, v as projectLive, vi as parsePreviewBranch, y as routes } from "./comment-data-
|
|
1
|
+
import { Ir as parseElementAnchor, S as writeRows, Si as parsePreviewPins, _i as parsePreview, b as plainRow, c as previewKey, l as projectStore, mn as t, v as projectLive, vi as parsePreviewBranch, y as routes } from "./comment-data-yfWEdDQL.js";
|
|
2
2
|
import { array, boolean, enum_, nullable, number, object, parseSafe, string } from "remix/data-schema";
|
|
3
3
|
//#region app/client/project-previews.ts
|
|
4
4
|
/**
|
package/dist/node-host/assets/{project-thread-links-CauJF0Cz.js → project-thread-links-m-OLpsD9.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { $r as valueByRole, An as parseThread, C as ThreadTaskLinks, Dt as taskHref, Gr as parseWorkItemRef, In as parseThreadLinkInput, Lr as parseWorkWorkspace, _ as requestComments, in as IconButton, mn as t, w as ThreadTaskPicker, y as routes } from "./comment-data-
|
|
2
|
-
import { n as requestTasks } from "./tasks-request-
|
|
1
|
+
import { $r as valueByRole, An as parseThread, C as ThreadTaskLinks, Dt as taskHref, Gr as parseWorkItemRef, In as parseThreadLinkInput, Lr as parseWorkWorkspace, _ as requestComments, in as IconButton, mn as t, w as ThreadTaskPicker, y as routes } from "./comment-data-yfWEdDQL.js";
|
|
2
|
+
import { n as requestTasks } from "./tasks-request-B0aeNocI.js";
|
|
3
3
|
import { on, ref } from "remix/component";
|
|
4
4
|
import { Fragment, jsx, jsxs } from "remix/component/jsx-runtime";
|
|
5
5
|
//#region app/client/project-task-picker.tsx
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { An as parseThread, Cn as predictThreadStatus, Nn as parseThreadFilter, Pn as parseThreadId, Rn as parseThreadSnapshot, S as writeRows, Sn as predictThreadReply, _ as requestComments, a as saveThreads, b as plainRow, bn as predictThreadCreate, cn as toast, g as CommentsRequestError, i as saveThread, l as projectStore, mn as t, n as unavailableComments, o as threadMatches, x as writeOptimistically, xn as predictThreadDelete, y as routes } from "./comment-data-
|
|
1
|
+
import { An as parseThread, Cn as predictThreadStatus, Nn as parseThreadFilter, Pn as parseThreadId, Rn as parseThreadSnapshot, S as writeRows, Sn as predictThreadReply, _ as requestComments, a as saveThreads, b as plainRow, bn as predictThreadCreate, cn as toast, g as CommentsRequestError, i as saveThread, l as projectStore, mn as t, n as unavailableComments, o as threadMatches, x as writeOptimistically, xn as predictThreadDelete, y as routes } from "./comment-data-yfWEdDQL.js";
|
|
2
2
|
//#region app/client/project-comments.ts
|
|
3
3
|
var viewers = /* @__PURE__ */ new Map();
|
|
4
4
|
function parseViewer(value) {
|
|
@@ -233,6 +233,10 @@ function createProjectComments(options) {
|
|
|
233
233
|
if (!detailFailures.size) error = "";
|
|
234
234
|
}
|
|
235
235
|
} catch (cause) {
|
|
236
|
+
if (!signal.aborted && turn === generation && cause instanceof CommentsRequestError && cause.code === "not-found") {
|
|
237
|
+
await forget(id);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
236
240
|
if (!signal.aborted && turn === generation) {
|
|
237
241
|
detailFailures.add(id);
|
|
238
242
|
error = cause instanceof Error ? cause.message : t("app.client.projectComments.couldNotLoadDiscussion");
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { $t as Button, B as TaskWorkspace, C as ThreadTaskLinks, Dt as taskHref, En as predictWorkUpdate, Et as selectedTask, Jt as CommentThreadDetail, Kr as parseWorkMutationResult, Ot as taskRole, Rr as parseSectionData, S as writeRows, T as ItemDiscussion, Tn as predictWorkCreate, Tt as readConversationLocation, Ur as parseWorkDetail, Xr as parseWorkSyncResult, Xt as CommentComposer, Yt as CommentThreadItem, b as plainRow, cn as toast, gn as Text, h as storedWorkspace, l as projectStore, mn as t, nt as CommentThreadHeading, qt as taskRoutes, wn as predictWorkAction, x as writeOptimistically, xt as conversationLabel, y as routes } from "./comment-data-
|
|
2
|
-
import { n as requestTasks, t as TaskRequestError } from "./tasks-request-
|
|
1
|
+
import { $t as Button, B as TaskWorkspace, C as ThreadTaskLinks, Dt as taskHref, En as predictWorkUpdate, Et as selectedTask, Jt as CommentThreadDetail, Kr as parseWorkMutationResult, Ot as taskRole, Rr as parseSectionData, S as writeRows, T as ItemDiscussion, Tn as predictWorkCreate, Tt as readConversationLocation, Ur as parseWorkDetail, Xr as parseWorkSyncResult, Xt as CommentComposer, Yt as CommentThreadItem, b as plainRow, cn as toast, gn as Text, h as storedWorkspace, l as projectStore, mn as t, nt as CommentThreadHeading, qt as taskRoutes, wn as predictWorkAction, x as writeOptimistically, xt as conversationLabel, y as routes } from "./comment-data-yfWEdDQL.js";
|
|
2
|
+
import { n as requestTasks, t as TaskRequestError } from "./tasks-request-B0aeNocI.js";
|
|
3
3
|
import { r as projectWork } from "../node-host.js";
|
|
4
|
-
import { i as loadItemComments, n as createProjectComments, t as defineScreen } from "./screen-
|
|
5
|
-
import { n as ProjectTaskPicker, t as ProjectThreadLinks } from "./project-thread-links-
|
|
4
|
+
import { i as loadItemComments, n as createProjectComments, t as defineScreen } from "./screen-DapOVrga.js";
|
|
5
|
+
import { n as ProjectTaskPicker, t as ProjectThreadLinks } from "./project-thread-links-m-OLpsD9.js";
|
|
6
6
|
import { on, ref } from "remix/component";
|
|
7
7
|
import { Fragment, jsx, jsxs } from "remix/component/jsx-runtime";
|
|
8
8
|
//#region app/client/task-discussion.tsx
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Gr as parseWorkItemRef, mn as t, qr as parseWorkQuery, y as routes } from "./comment-data-
|
|
1
|
+
import { Gr as parseWorkItemRef, mn as t, qr as parseWorkQuery, y as routes } from "./comment-data-yfWEdDQL.js";
|
|
2
2
|
import { createMultiMatcher } from "remix/route-pattern/match";
|
|
3
3
|
//#region app/client/tasks-request.ts
|
|
4
4
|
var reads = createMultiMatcher();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { $r as valueByRole, $t as Button, An as parseThread, Bn as parseThreadStatusInput, Br as parseWorkActivity, Ci as parsePreviewViewport, Ct as legacyConversationHref, Dn as parseWorkChange, Dt as taskHref, Et as selectedTask, Fn as parseThreadInput, Fr as MAX_CANVAS_Y, G as mergeThreads, Gr as parseWorkItemRef, Gt as fileRoutes, Hr as parseWorkCreate, In as parseThreadLinkInput, Ir as parseElementAnchor, J as conversationId, Jr as parseWorkSnapshot, K as stableJson, Kr as parseWorkMutationResult, Kt as pageRoutes, Ln as parseThreadReplyInput, Lr as parseWorkWorkspace, Mn as parseThreadDeleteInput, Nn as parseThreadFilter, On as MAX_THREADS, Pn as parseThreadId, Q as text$6, Qr as parseWorkValue, Rn as parseThreadSnapshot, Rr as parseSectionData, S as writeRows, Si as parsePreviewPins, Tt as readConversationLocation, Ur as parseWorkDetail, V as parseTaskDesign, Vr as parseWorkConnection, W as CommentMergeError, Wr as parseWorkItem, X as parseCommentThread, Xr as parseWorkSyncResult, Y as object$2, Yr as parseWorkSync, Z as revision$2, Zr as parseWorkUpdate, Zt as Loader, _ as requestComments, ai as fieldByRole, an as LiveStatus, at as FieldCardHeader, b as plainRow, bi as parsePreviewHash, ci as WorkValidationError, ct as initialShellTabs, d as saveWorkspace, di as parseWork, dn as hasMessage, dt as readTabsCookie, ei as messageDeletionRefusal, fi as record$2, fn as isLocale, ft as stepShellTab, gi as PREVIEW_TILE_HEIGHT, gn as Text, gt as visitShellTab, hi as PREVIEW_THUMBNAIL_WIDTHS, hn as useLocaleSource, ht as tabsCookieValue, ii as withoutMessages, it as FieldCardContent, jn as parseThreadCapabilities, jt as legacyFileHref, kn as parseAnchor, l as projectStore, li as identifier$3, ln as readPreference, lt as openShellTab, mi as MAX_PREVIEW_HEIGHT, mn as t, mt as tabsCookieName, n as unavailableComments, ni as parseMessage, nn as ShellTabBar, oi as parseWorkSchema, ot as activeTab, pi as strict$2, pn as locale, pt as tabHref, q as parseCommentInput$1, qr as parseWorkQuery, qt as taskRoutes, r as followThreads, ri as parseMessageAuthor, rt as FieldCard, si as statusCategory, sn as AppShell, st as closeShellTab, t as commentsUnavailable, ti as messageDeletionRefusals, ui as nonempty$1, un as writePreference, ut as parseShellTabs, v as projectLive, vi as parsePreviewBranch, vn as RESYNC, xi as parsePreviewId, y as routes, yi as parsePreviewCapture, yn as parseLiveId, yt as conversationDestination, zn as parseThreadStatus, zr as parseWorkActionInput } from "./assets/comment-data-
|
|
2
|
-
import { n as requestTasks } from "./assets/tasks-request-
|
|
1
|
+
import { $r as valueByRole, $t as Button, An as parseThread, Bn as parseThreadStatusInput, Br as parseWorkActivity, Ci as parsePreviewViewport, Ct as legacyConversationHref, Dn as parseWorkChange, Dt as taskHref, Et as selectedTask, Fn as parseThreadInput, Fr as MAX_CANVAS_Y, G as mergeThreads, Gr as parseWorkItemRef, Gt as fileRoutes, Hr as parseWorkCreate, In as parseThreadLinkInput, Ir as parseElementAnchor, J as conversationId, Jr as parseWorkSnapshot, K as stableJson, Kr as parseWorkMutationResult, Kt as pageRoutes, Ln as parseThreadReplyInput, Lr as parseWorkWorkspace, Mn as parseThreadDeleteInput, Nn as parseThreadFilter, On as MAX_THREADS, Pn as parseThreadId, Q as text$6, Qr as parseWorkValue, Rn as parseThreadSnapshot, Rr as parseSectionData, S as writeRows, Si as parsePreviewPins, Tt as readConversationLocation, Ur as parseWorkDetail, V as parseTaskDesign, Vr as parseWorkConnection, W as CommentMergeError, Wr as parseWorkItem, X as parseCommentThread, Xr as parseWorkSyncResult, Y as object$2, Yr as parseWorkSync, Z as revision$2, Zr as parseWorkUpdate, Zt as Loader, _ as requestComments, ai as fieldByRole, an as LiveStatus, at as FieldCardHeader, b as plainRow, bi as parsePreviewHash, ci as WorkValidationError, ct as initialShellTabs, d as saveWorkspace, di as parseWork, dn as hasMessage, dt as readTabsCookie, ei as messageDeletionRefusal, fi as record$2, fn as isLocale, ft as stepShellTab, gi as PREVIEW_TILE_HEIGHT, gn as Text, gt as visitShellTab, hi as PREVIEW_THUMBNAIL_WIDTHS, hn as useLocaleSource, ht as tabsCookieValue, ii as withoutMessages, it as FieldCardContent, jn as parseThreadCapabilities, jt as legacyFileHref, kn as parseAnchor, l as projectStore, li as identifier$3, ln as readPreference, lt as openShellTab, mi as MAX_PREVIEW_HEIGHT, mn as t, mt as tabsCookieName, n as unavailableComments, ni as parseMessage, nn as ShellTabBar, oi as parseWorkSchema, ot as activeTab, pi as strict$2, pn as locale, pt as tabHref, q as parseCommentInput$1, qr as parseWorkQuery, qt as taskRoutes, r as followThreads, ri as parseMessageAuthor, rt as FieldCard, si as statusCategory, sn as AppShell, st as closeShellTab, t as commentsUnavailable, ti as messageDeletionRefusals, ui as nonempty$1, un as writePreference, ut as parseShellTabs, v as projectLive, vi as parsePreviewBranch, vn as RESYNC, xi as parsePreviewId, y as routes, yi as parsePreviewCapture, yn as parseLiveId, yt as conversationDestination, zn as parseThreadStatus, zr as parseWorkActionInput } from "./assets/comment-data-yfWEdDQL.js";
|
|
2
|
+
import { n as requestTasks } from "./assets/tasks-request-B0aeNocI.js";
|
|
3
3
|
import { access, mkdir, mkdtemp, readFile, readdir, realpath, rename, rm, stat, symlink, writeFile } from "node:fs/promises";
|
|
4
4
|
import * as Path from "node:path";
|
|
5
5
|
import { dirname, extname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
@@ -37591,10 +37591,10 @@ function ProjectLiveStatus(handle) {
|
|
|
37591
37591
|
//#endregion
|
|
37592
37592
|
//#region app/client/screens.ts
|
|
37593
37593
|
var builtIns = {
|
|
37594
|
-
"bud:pages": () => import("./assets/pages-
|
|
37595
|
-
"bud:canvas": () => import("./assets/canvas-
|
|
37596
|
-
"bud:tasks": () => import("./assets/tasks-
|
|
37597
|
-
"bud:files": () => import("./assets/files-
|
|
37594
|
+
"bud:pages": () => import("./assets/pages-CW4aF6dK.js"),
|
|
37595
|
+
"bud:canvas": () => import("./assets/canvas-DxmcFZCh.js"),
|
|
37596
|
+
"bud:tasks": () => import("./assets/tasks-BBK_CybR.js"),
|
|
37597
|
+
"bud:files": () => import("./assets/files-anHi-apm.js")
|
|
37598
37598
|
};
|
|
37599
37599
|
/**
|
|
37600
37600
|
* Imports a screen module: a built-in by its key, any other by the URL the server gave it.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Bn as Icon } from "./events-iHpLGr3k.js";
|
|
2
|
-
import { Bt as Button, En as t, H as captureCanvasPoint, On as Text, Rt as Loader, Sn as writePreference, V as CanvasWorkspace, W as BranchSidebar, fn as ToolbarSeparator, gn as IconButton, hn as Select, l as projectStore, pn as WorkspaceLayout, t as commentsUnavailable, ut as conversationHref, vn as Tooltip, xn as readPreference } from "./comment-data-
|
|
3
|
-
import { i as pictureKey, n as createProjectPreviews, t as createProjectBranches } from "./project-branches-
|
|
4
|
-
import { n as createProjectComments, r as loadComments, t as defineScreen } from "./screen-
|
|
5
|
-
import { t as ProjectThreadLinks } from "./project-thread-links-
|
|
2
|
+
import { Bt as Button, En as t, H as captureCanvasPoint, On as Text, Rt as Loader, Sn as writePreference, V as CanvasWorkspace, W as BranchSidebar, fn as ToolbarSeparator, gn as IconButton, hn as Select, l as projectStore, pn as WorkspaceLayout, t as commentsUnavailable, ut as conversationHref, vn as Tooltip, xn as readPreference } from "./comment-data-NLeHG89b.js";
|
|
3
|
+
import { i as pictureKey, n as createProjectPreviews, t as createProjectBranches } from "./project-branches-CwTsf6WQ.js";
|
|
4
|
+
import { n as createProjectComments, r as loadComments, t as defineScreen } from "./screen-B1zH_1O3.js";
|
|
5
|
+
import { t as ProjectThreadLinks } from "./project-thread-links-lLS_rq7c.js";
|
|
6
6
|
import { on, ref } from "remix/component";
|
|
7
7
|
import { Fragment, jsx, jsxs } from "remix/component/jsx-runtime";
|
|
8
8
|
//#region app/client/preview-image.tsx
|