whose-turn 1.0.0-alpha.7 → 1.0.0-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- const _=e=>fetch(e).then(t=>t.json(),()=>Promise.reject(new Error("unreachable"))),O=(e,t)=>fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})}).then(n=>n.json(),()=>Promise.reject(new Error("unreachable"))),d=(e,t)=>(e.details||[]).find(n=>n["@type"]===t),A=e=>{var t;return((t=d(e,"BadRequest"))==null?void 0:t.field_violations)||[]},y=e=>{var o,a;const t=d(e,"BadRequest");if(t&&t.field_violations)return t.field_violations.map(i=>i.description);const n=(a=(o=d(e,"ErrorInfo"))==null?void 0:o.metadata)==null?void 0:a.detail;return[n?String(n):e.message]},f=e=>{var t;return((t=d(e,"ErrorInfo"))==null?void 0:t.reason)||""},N=e=>fetch("/api/handoff?"+new URLSearchParams(e)).then(t=>t.ok?t.text():Promise.reject(new Error(String(t.status)))),P=e=>typeof e=="string"&&/^https:\/\//.test(e)?e:"",g="No workspace configured. Open Settings.",R=e=>e!=="",v=(e,t,n)=>e.some(o=>o.id===t&&o.open_moves!==n)?e.map(o=>o.id===t?{...o,open_moves:n}:o):e,D=(e,t,n={},o="")=>{const a=e.filter(s=>{var r;return s.group==="you"||s.handled&&((r=n[s.row_id])==null?void 0:r.auto)}).map(s=>({row:s,handled:s.group!=="you"||!!s.handled})).sort((s,r)=>s.row.rank-r.row.rank||String(s.row.updated).localeCompare(String(r.row.updated))),i=a.filter(s=>!s.handled).length,h=t==="handled";return{rows:a.filter(s=>s.handled===h||s.row.row_id===o),open:i,handled:a.length-i}},c=e=>String(e.status_since||e.updated),b=e=>e.filter(t=>t.group==="done").sort((t,n)=>c(n).localeCompare(c(t))).slice(0,15),k=e=>e.filter(t=>t.group==="others").sort((t,n)=>String(n.updated).localeCompare(String(t.updated))),u=e=>!e.ticket_url&&!!e.pr&&e.pr===e.key,U=e=>e.some(t=>t.pr&&!u(t)),C=e=>e==="failing"?"bad":e==="running"?"warn":e==="passing"?"ok":"",p={code_review:"info",qa:"info",on_hold:"hold"},L=e=>p[e||""]||"",I=e=>({open:"info",done:"ok",dropped:"warn"})[e||""]||"info",j=(e,t,n=1)=>e.filter(o=>o>t+n).length,m="unreachable",l="The local server is not answering",E=l+"; try again once it is back.",B=l+"; your text is kept.",T={NO_WORKSPACE:g,NOT_CONFIGURED:"The maintainer's tracker is not connected on this machine, so nothing can be sent from here.",UPSTREAM_FAILED:"The tracker did not answer; try again in a minute.",RATE_LIMITED:"The source is rate-limited; the monitor backs off.",OPEN_TOO_SOON:"The app window is already opening; give it a few seconds.",UPDATE_IN_PROGRESS:"An update is already installing; the monitor restarts when it is done.",UPDATE_UNAVAILABLE:"There is no update to install right now.",INTERNAL:"The local server failed; see its log."},w=(e,t="Not saved")=>T[f(e)]||t+": "+(e.message||"the server refused the change."),M=(e,{refused:t="Not saved",unreachable:n=E}={})=>{if(e instanceof Error)return e.message===m?n:t+": "+e.message;if(!e||typeof e!="object"||Array.isArray(e))return"";const o=e.error;return o?w(o,t):""},x=e=>{const t=Math.round((Date.now()-new Date(e).getTime())/6e4);return isFinite(t)?t<1?"now":t<60?t+"m ago":t<2880?Math.round(t/60)+"h ago":new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric"}):""},W=e=>{const t=(Date.now()-new Date(e??"").getTime())/36e5;return!isFinite(t)||t<0?{text:"",old:!1,hours:0}:{text:t<1?"<1h":t<48?Math.floor(t)+"h":Math.floor(t/24)+"d",old:t>=24,hours:t}},q=e=>e?new Date(e).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"",F=(e,t)=>t?`${e}--${t}`:"";export{l as S,B as T,R as a,M as b,y as c,x as d,w as e,C as f,_ as g,N as h,u as i,L as j,q as k,b as l,F as m,W as n,j as o,O as p,U as q,f as r,P as s,k as t,I as u,A as v,v as w,D as y};
@@ -1,7 +0,0 @@
1
- import{w as Z,t as at,r as lt,s as Rs,c as R,n as _e,a as kt,b as N,d as j,o as r,e as i,F as U,f as X,g as ee,u as h,h as q,i as a,j as m,k as S,_ as K,l as rt,m as G,p as P,q as Y,v as Ts,x as Fe,y as Ne,z as me,A as Wt,B as et,C as te,D as As,E as be,G as ye,H as $e,I as Ms,J as Ut,K as Is}from"./_plugin-vue_export-helper-DeQjDyQ9.js";import{s as zs,m as it,u as Vt,a as Ft,r as Ht,p as Os,b as Ds,i as bt,l as Lt,c as Bs,M as ne,d as De,e as Me,f as Ns,g as He,h as ge,j as Ps,k as Ce,n as Ws,o as Us,q as Vs,t as ct,v as Fs,w as Hs,x as Ls,y as qs,z as js,A as $t,B as Ys}from"./scheme-BdlolNvz.js";import{g as Ee,r as Ks,a as Xs,e as Gs,w as qt,p as ce,b as ie,T as tt,S as xe,c as dt,d as re,h as Js,s as ut,i as jt,m as Re,f as Zs,j as Yt,k as Le,l as Qs,n as ht,o as en,y as tn,q as Kt,t as sn,u as nn,v as on}from"./bem-zV6iDqYN.js";const ke=zs(Ht),xt=(e,t)=>{const s=ne,n=new Float32Array(s*s);for(let l=0;l<n.length;l+=1)n[l]=e[l]===t?1e6:0;const o=(l,c,d)=>{n[c]+d<n[l]&&(n[l]=n[c]+d)};for(let l=0;l<s;l+=1)for(let c=0;c<s;c+=1){const d=l*s+c;c>0&&o(d,d-1,1),l>0&&o(d,d-s,1),c>0&&l>0&&o(d,d-s-1,Math.SQRT2),c<s-1&&l>0&&o(d,d-s+1,Math.SQRT2)}for(let l=s-1;l>=0;l-=1)for(let c=s-1;c>=0;c-=1){const d=l*s+c;c<s-1&&o(d,d+1,1),l<s-1&&o(d,d+s,1),c<s-1&&l<s-1&&o(d,d+s+1,Math.SQRT2),c>0&&l<s-1&&o(d,d+s-1,Math.SQRT2)}return n},Ge=e=>{const t=String(e||"").trim(),s=/^#([0-9a-f]{6})$/i.exec(t);if(s)return[0,2,4].map(o=>parseInt(s[1].slice(o,o+2),16));const n=t.match(/[\d.]+/g);return n&&n.length>=3?n.slice(0,3).map(Number):null},an=e=>{const t=getComputedStyle(e),s=Ge(t.getPropertyValue("--md-primary"))||[44,86,151],n=Ge(t.getPropertyValue("--md-on-primary-container"))||s;return{core:bt()?s:s.map((o,l)=>Lt(o,n[l],.35)),rim:Ge(t.getPropertyValue("--blob-3"))||[23,223,220],strength:bt()?.9:1}},ln=(e,t,s)=>({size:e.range(.85,1.05)*Math.min(t,s),right:e.chance(.4),bottom:e.chance(.7),overflowX:e.range(-.02,.06),overflowY:e.range(-.02,.04)}),rn=e=>{const t={minX:ne,maxX:0,minY:ne,maxY:0};for(let n=0;n<e.length;n+=1)if(e[n]){const o=n%ne,l=Math.floor(n/ne);t.minX=Math.min(t.minX,o),t.maxX=Math.max(t.maxX,o),t.minY=Math.min(t.minY,l),t.maxY=Math.max(t.maxY,l)}const s=n=>(n-ne/2)/De;return{minX:s(t.minX),maxX:s(t.maxX),minY:s(t.minY),maxY:s(t.maxY)}},cn=(e,t,s,n)=>{const o=t.maxX-t.minX,l=t.maxY-t.minY,c=Math.min(e.size,2*s*.95/o,2*n*.98/l),d=c/2,y=-e.overflowX*c,_=-e.overflowY*c;return{size:c,centerX:e.right?s-y-t.maxX*d:y-t.minX*d,centerY:e.bottom?n-_-t.maxY*d:_-t.minY*d}},dn=(e,t,s)=>"rgba("+e.core.map((o,l)=>Math.round(Lt(o,e.rim[l],t))).join(",")+","+s.toFixed(3)+")",un=(e,t,s)=>{const n=[],o=t.size/62,l=t.size/2/De,c=t.size*Ns/4,d=o*.866;for(let y=0,_=t.centerY-c;_<t.centerY+c;y+=1,_+=d)for(let u=t.centerX-c+y%2*o/2;u<t.centerX+c;u+=o){const k=u+e.range(-.3,.3)*o,f=_+e.range(-.3,.3)*o,p=Math.floor((k-t.centerX)/l+ne/2),v=Math.floor((f-t.centerY)/l+ne/2);if(p<0||v<0||p>=ne||v>=ne)continue;const x=v*ne+p,g=e.next(),z=e.range(.75,1.25),E=e.range(-.15,.15);if(s.inside[x]){const b=s.depth[x]/De,T=Me(b/.035),O=Me(b/.3);if(g>.5+.5*T)continue;n.push({x:k,y:f,radius:o*.5*(.45+.55*T)*(.95+.3*O)*z,alpha:.5+.25*T+.25*O,tint:Me(.65-.65*O+E)})}else{const b=s.gap[x]/De;if(g>.14*Math.exp(-b/.05)+.004)continue;n.push({x:k,y:f,radius:o*e.range(.1,.24),alpha:.35,tint:Me(.8+E)})}}return n},hn=()=>document.getElementById("wt"),pn=()=>document.getElementById("backdrop"),Xt=()=>Math.floor(Math.random()*4294967296),Ie={},L={workspace:"",seed:Xt(),species:"",wantedSpecies:"",wantedPose:"",built:null},_n=(e,t)=>{const s=Bs(L.seed),n=ke[Math.floor(s.next()*ke.length)];L.species=ke.includes(L.wantedSpecies)?L.wantedSpecies:n;const o=ln(s,e,t),l={facing:o.right?-1:1,tilt:s.range(-.07,.07),stretchX:s.range(.92,1.08),stretchY:s.range(.92,1.08)};s.chance(.25)&&(l.facing=-l.facing);const c=Os(Ds(Ht,L.species,s,{pose:L.wantedPose}).shapes,l),d={inside:c,depth:xt(c,1),gap:xt(c,0)},y=cn(o,rn(c),e,t);return{key:L.seed+":"+L.species+":"+e+"x"+t,dots:un(s,y,d)}},Pe=()=>{const e=pn();if(!e)return;const t=e.clientWidth,s=e.clientHeight,n=window.devicePixelRatio||1,o=Math.round(t*n),l=Math.round(s*n);(e.width!==o||e.height!==l)&&(e.width=o,e.height=l);const c=e.getContext("2d");if(!c||(c.setTransform(n,0,0,n,0,0),c.clearRect(0,0,t,s),!t||!s))return;const d=L.seed+":"+(L.wantedSpecies||"?")+":"+t+"x"+s;(!L.built||L.built.key.split(":")[0]!==String(L.seed)||!L.built.key.endsWith(t+"x"+s)||L.wantedSpecies&&L.species!==L.wantedSpecies)&&(L.built=_n(t,s));const y=hn();if(!y)return d;const _=an(y);return L.built.dots.forEach(u=>{c.fillStyle=dn(_,u.tint,u.alpha*_.strength),c.beginPath(),c.arc(u.x,u.y,u.radius,0,Math.PI*2),c.fill()}),d};window.whoseTurnBackdrop={species:ke.slice(),seeded:it,get current(){return{workspace:L.workspace,species:L.species,seed:L.seed}},show:e=>{const t=e||{},s=String(t.workspace||"");Ie[s]||(Ie[s]=Xt());const n=t.seed!==void 0?Number(t.seed)>>>0:Ie[s];Ie[s]=n;const o=t.species&&ke.includes(t.species)?t.species:"",l=String(t.pose||"");return s===L.workspace&&n===L.seed&&o===L.wantedSpecies&&l===L.wantedPose&&L.built||(L.workspace=s,L.seed=n,L.wantedSpecies=o,L.wantedPose=l,L.built=null,Pe()),window.whoseTurnBackdrop.current},repaint:Pe};Z(He,Pe);Vt(window,"resize",Ft(Pe,200));const{show:Gt,repaint:fn,seeded:Nc}=window.whoseTurnBackdrop,vn="[data-tip-click]",St=e=>e instanceof Element?e.closest(vn):null,mn=e=>e.isConnected&&e.getClientRects().length>0,yn=()=>{if(!window.tippy)return()=>{};const e=new Set;let t=!1;const s=new Set,n=new MutationObserver(()=>k());let o=!1;const l=()=>{e.size&&!o?n.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style","class","hidden"]}):!e.size&&o&&n.disconnect(),o=e.size>0},c=E=>{e.add(E),l()},d=E=>{e.delete(E),l()},y=E=>{s.delete(E),E.hide()},_=E=>e.forEach(b=>{b.reference!==E&&y(b)}),u=()=>_(null),k=()=>{e.forEach(E=>{E.reference.isConnected?mn(E.reference)||y(E):(d(E),E.destroy())})},f=E=>{const b=St(E.target);t=!b,_(b)},p=E=>{const b=St(E.target),T=b==null?void 0:b._tippy;T&&(s.has(T)?y(T):(s.add(T),T.show()))},v=E=>{E.key==="Escape"&&u()},x=()=>{t=!1};window.tippy.delegate(document.body,{target:"[data-tip]",content:E=>E.dataset.tip||"",trigger:"mouseenter focus",delay:[0,80],duration:[120,80],interactive:!0,hideOnClick:!1,maxWidth:440,placement:"top",theme:"wt",appendTo:()=>document.body,onShow:E=>{if(t)return!1;c(E)},onHide:E=>s.has(E)?!1:void 0,onHidden:d,onDestroy:E=>{d(E),s.delete(E)}});const g=new ResizeObserver(u);g.observe(document.body);const z=[[document,"pointerdown",f,!0],[document,"pointerup",x,!0],[document,"click",p,!0],[document,"keydown",v,!0],[document,"pointercancel",x,!0],[document,"dragstart",u,!0],[document,"scroll",u,!0],[window,"resize",u,!1]];return z.forEach(([E,b,T,O])=>E.addEventListener(b,T,O)),()=>{n.disconnect(),g.disconnect(),z.forEach(([E,b,T,O])=>E.removeEventListener(b,T,O))}},wn=()=>{let e=0;return{next:()=>++e,accepts:t=>t===e}},Ct=e=>{const t=structuredClone(at(e)),s=t.connectors||{},n=t.rules||{};return n.statuses=n.statuses||{},{...t,connectors:Array.isArray(s)?s:Object.entries(s).map(([o,l])=>({type:o,...l})),rules:n,theme:t.theme||{}}},gn=e=>{const t=structuredClone(at(e));return t.theme&&!Object.keys(t.theme).length&&delete t.theme,t.rules&&!Object.keys(t.rules.statuses||{}).length&&delete t.rules.statuses,t.rules&&!Object.keys(t.rules).length&&delete t.rules,t},Et=new WeakMap;let kn=0;const ze=e=>{const t=at(e);let s=Et.get(t);return s||(s=++kn,Et.set(t,s)),s},Rt=e=>JSON.stringify(e),bn=(e,t)=>{const s=[];return e.forEach(n=>n.connectors.forEach(o=>{const l=t.get(o)||{};Object.keys(l).forEach(c=>{l[c]&&s.push({ws:n.id,connector:o.id||o.type,key:c,value:l[c]})})})),s},de=(e,t,s)=>{typeof s=="boolean"||s&&s.length?e[t]=s:delete e[t]},$n=(e,t)=>{const s=n=>{const o=t.indexOf(n.id);return o<0?t.length:o};return[...e].sort((n,o)=>s(n)-s(o))},xn=(e,t,s,n)=>{const o=e.filter(l=>l!==t);return o.splice(o.indexOf(s)+(n?0:1),0,t),o},Sn={backlog:"in the backlog",passed:"passed",code_review:"in review",qa:"in testing",on_hold:"on hold",todo:"to do",in_progress:"in progress",done:"done"},Jt=e=>Sn[e]||`in ${e.replace(/_/g," ")}`,Cn={you:"your move",reviewer:"the reviewer's move",qa:"the tester's move",them:"waiting on others"},he=(e,t)=>{var s;return((s=e[t])==null?void 0:s.name)||t.replace(/[._]/g," ")},En=(e,t,s)=>e?t:s,Rn={approved:"the PR is approved",changes_requested:"changes are requested on the PR",none:"the PR has no review"},Tn=(e,t,s)=>{switch(t){case"ticket.status":return`the ticket is ${Jt(String(s))}`;case"ticket.assignee":return s==="me"?"the ticket is on you":`the ticket is assigned to ${s}`;case"pr.checks":return s==="none"?"the PR has no checks":`the PR checks are ${s}`;case"pr.review":return Rn[String(s)]||`the PR review is ${s}`;case"pr.base":return`the PR goes into ${s}`;default:return`${he(e,t)} is ${s}`}},An=(e,t,s,n)=>{if(s==="present")return En(n,`${he(e,t)} is given`,`${he(e,t)} is missing`);if(s==="prefix")return t==="pr.base"?`the PR goes into a branch starting with ${n}`:`${he(e,t)} starts with ${n}`;if(t==="unanswered_count"){const l=Number(n);return`${{gt:`more than ${l}`,gte:`at least ${l}`,lt:`fewer than ${l}`,lte:`at most ${l}`}[s]} mentions of you wait for an answer`}const o={gt:"more than",gte:"at least",lt:"less than",lte:"at most"};return`${he(e,t)} is ${o[s]} ${n}`},Mn=(e,t,s)=>{var o;if(Array.isArray(s))return t==="ticket.status"?`the ticket is ${s.map(l=>Jt(String(l))).join(" or ")}`:`${he(e,t)} is ${s.join(" or ")}`;if(s&&typeof s=="object")return Object.entries(s).map(([l,c])=>An(e,t,l,c)).join(" and ");const n=(o=e[t])==null?void 0:o.says;return typeof s=="boolean"&&n?n[s?0:1]:Tn(e,t,s)},In=(e,t)=>t.replace(/\{([\w.]+)\}/g,(s,n)=>`{${he(e,n)}}`),zn=(e,t={})=>{const s=Object.entries(e.when).map(([o,l])=>Mn(t,o,l)),n=e.then.whose==="hidden"?"not shown":`${Cn[e.then.whose]||e.then.whose}, "${In(t,e.then.next||"")}"`;return{when:s.length?`When ${s.join(" and ")}:`:"In every other case:",then:n}},On=e=>e.modal?"modal":e.note?"note":e.settings?"settings":e.feedback?"feedback":e.whatsNew?"whatsNew":null,Dn=(e,t)=>{const s=new URLSearchParams(e).get("mode");return s==="app"||s==="tab"?s:t==="app"?"app":"tab"},Bn=e=>"/?mode=tab"+(e?"&ws="+encodeURIComponent(e):""),Nn=e=>({width:e.outerWidth,height:e.outerHeight}),Zt={writeDefaults:!1},Qt=ge("wt-ws","",Zt),es=Ps("wt-mode","",Zt),w=Rs({workspaces:[],workspace:{id:"",name:"",connectors:[],links:[],key_pattern:"",theme:null},turn:[],feed:[],marks:{seen:[],base:0,handled:{},info:{}},counts:{mine:0,others:0,failing:0,done:0},todos:[],errors:{},health:{ok:!0,stale:!1,fresh_at:"",failing:[],alerts:[]},problems:[],polled_at:"",update:{current:"",latest:"",available:!1,state:"idle"}}),C=lt({ws:new URLSearchParams(location.search).get("ws")||Qt.value,open:new Set,mode:Dn(location.search,es.value),live:!1,reconnects:0,status:"Connecting…",modal:null,note:"",feedback:!1,whatsNew:!1,settings:!1,settingsDirty:!1,settingsAsk:!1,settingsAt:"",focusFeed:""});es.value=C.mode;const We=Ce("",6e3),pe=(e,t)=>{const s=ie(e,t);return s&&(We.value=s),!s},Pn=()=>{C.mode==="app"&&Vt(window,"resize",Ft(()=>ce("/api/window",Nn(window)).catch(pe),600))},ts={resume:()=>{}},fe=Us({scheduler:e=>{const t=Vs(e,3e4,{immediate:!1});return ts.resume=t.resume,t}}),Je=R(()=>{const e=w.workspace.theme;return e&&e.light&&e.dark?e[He.value?"dark":"light"]:{}}),ae=R(()=>w.counts),Tt=R(()=>{const e=w.workspace.name,t=e?e+": ":"",s=Object.entries(w.errors||{}),n=w.health.failing||[],o=d=>n.find(({source:y})=>d===y||d.startsWith(y+".")),l=n.map(({source:d,polls:y})=>{const _=s.filter(([u])=>{var k;return((k=o(u))==null?void 0:k.source)===d}).map(([,u])=>u);return`Source ${d}: ${_.join(", ")||"failing"}, failed ${y} polls in a row`}),c=new Set(n.map(({source:d})=>"failing:"+d));return[...w.problems||[],...w.health.alerts.filter(d=>!c.has(d.id||"")).map(d=>d.text),...l,...s.filter(([d])=>!o(d)).map(([d,y])=>t+d+": "+y)]}),ss=(e="")=>{C.settingsAt=e,C.settings=!0},ns=R(()=>On(C)),Wn=()=>{const e=ns.value;if(e==="modal"&&(C.modal=null),e==="note"&&(C.note=""),e==="feedback"&&(C.feedback=!1),e==="whatsNew"&&(C.whatsNew=!1),e==="settings"){if(C.settingsDirty){C.settingsAsk=!0;return}C.settings=!1}},st=new Map,Un=(e,t)=>{t&&st.set(e,document.activeElement)},Vn=(e,t)=>{if(t)return;const s=st.get(e);st.delete(e),s instanceof HTMLElement&&s.focus()},Fn={modal:()=>!!C.modal,note:()=>!!C.note,settings:()=>C.settings,feedback:()=>C.feedback,whatsNew:()=>C.whatsNew};Z(()=>w.turn.some(e=>e.row_id===C.note),e=>{e||(C.note="")},{flush:"sync"});Object.entries(Fn).forEach(([e,t])=>{Z(t,s=>Un(e,s),{flush:"sync"}),Z(t,s=>Vn(e,s),{flush:"post"})});let Ue=-1,nt=0;const At=wn(),Te=(e=C.ws)=>{const t=At.next();return Ee("/api/state"+(e?"?ws="+encodeURIComponent(e):"")).then(s=>At.accepts(t)?s.error?Ks(s.error)!=="NO_SUCH_WORKSPACE"||!Xs(e)?(C.status=Gs(s.error,"Could not load"),w):Te(""):(Object.assign(w,s),C.ws=w.workspace.id,C.status="",Gt({workspace:w.workspace.id}),document.title="Whose Turn · "+w.workspace.name,w):w)},os=()=>(Ue=-1,Te()),Se=Ws("/api/stream",[],{immediate:!1,autoConnect:!1,autoReconnect:!0,serializer:{read:e=>JSON.parse(e||"null")}});Z(Se.status,e=>{C.live=e==="OPEN",C.live&&(C.status="",C.reconnects++)},{flush:"sync"});Z(Se.error,e=>{e&&(C.status="Disconnected from the local server, retrying…")},{flush:"sync"});Z(Se.data,e=>{if(e){if("update"in e){w.update=e.update;return}typeof e.open_moves=="number"&&(w.workspaces=qt(w.workspaces,e.ws,e.open_moves)),!(w.workspace.id&&e.ws!==w.workspace.id)&&(C.status="",e.version!==Ue?(Ue=e.version,nt===0&&Te()):w.polled_at=e.polled_at)}},{flush:"sync"});const Hn=()=>{Se.eventSource.value||Se.open()},Ln=()=>(ts.resume(),Te().then(Hn)),qn=e=>e===w.workspace.id?Promise.resolve():(Ue=-1,nt++,Te(e).then(()=>{C.ws===e&&(Qt.value=C.ws,C.open.clear())},()=>{We.value=xe+"; staying on "+w.workspace.name+"."}).finally(()=>{nt--})),as=(e,t)=>ce(e,{ws:w.workspace.id,...t}),we=e=>as("/api/marks",e).then(t=>{const s=ie(t);return s||(Object.assign(w,{marks:t.marks,turn:t.turn,counts:t.counts}),w.workspaces=qt(w.workspaces,w.workspace.id,t.counts.mine)),s},t=>ie(t)),jn=e=>{C.focusFeed=e},Yn=e=>as("/api/todos",e).then(t=>{const s=ie(t,{unreachable:tt});return!s&&Array.isArray(t)&&(w.todos=t),s},t=>ie(t,{unreachable:tt})),Mt=e=>Ee("/api/config").then(t=>ce("/api/config",{workspaces:$n(t.workspaces,e),secrets:[]})).then(t=>{pe(t,{refused:"The order was not saved"})&&os()},t=>pe(t,{refused:"The order was not saved"})),It=()=>{C.status="Checking now…",ce("/api/refresh").catch(e=>{C.status="",pe(e)}),Gt({workspace:w.workspace.id,seed:Math.floor(Math.random()*4294967296)})},Kn="M12 2.5l1.9 5.6 5.6 1.9-5.6 1.9L12 17.5l-1.9-5.6L4.5 10l5.6-1.9L12 2.5zM5 15l.9 2.6 2.6.9-2.6.9L5 22l-.9-2.6-2.6-.9 2.6-.9L5 15zm14-2l.7 2 2 .7-2 .7-.7 2-.7-2-2-.7 2-.7.7-2z",Xn="M16 1H6a2 2 0 0 0-2 2v12h2V3h10V1zm3 4H10a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2zm0 16h-9V7h9v14z",Gn="M19.4 13a7.6 7.6 0 0 0 0-2l2-1.5-2-3.4-2.4 1a7.5 7.5 0 0 0-1.7-1L15 3.5H9l-.3 2.6a7.5 7.5 0 0 0-1.7 1l-2.4-1-2 3.4 2 1.5a7.6 7.6 0 0 0 0 2l-2 1.5 2 3.4 2.4-1a7.5 7.5 0 0 0 1.7 1l.3 2.6h6l.3-2.6a7.5 7.5 0 0 0 1.7-1l2.4 1 2-3.4-2-1.5zM12 15.5a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7z",Jn="M23 12l-2.4-2.8.3-3.7-3.6-.8-1.9-3.2L12 3 8.6 1.5 6.7 4.7l-3.6.8.3 3.7L1 12l2.4 2.8-.3 3.7 3.6.8 1.9 3.2L12 21l3.4 1.5 1.9-3.2 3.6-.8-.3-3.7L23 12zm-10 5h-2v-2h2v2zm0-4h-2V7h2v6z",Zn="M19 8h-1.8a5.9 5.9 0 0 0-1.3-1.9l1.6-1.6-1.4-1.4-1.9 1.9A5.7 5.7 0 0 0 12 4.5a5.7 5.7 0 0 0-2.2.5L7.9 3.1 6.5 4.5l1.6 1.6A5.9 5.9 0 0 0 6.8 8H5v2h1.2a7 7 0 0 0 0 1v1H5v2h1.3a6 6 0 0 0 11.4 0H19v-2h-1.2v-1a7 7 0 0 0 0-1H19V8zm-7 10a4 4 0 0 1-4-4v-3a4 4 0 0 1 8 0v3a4 4 0 0 1-4 4zm-1-7h2v5h-2z",Qn=e=>{let t=2166136261;for(let s=0;s<e.length;s+=1)t^=e.charCodeAt(s),t=Math.imul(t,16777619);return t>>>0},ls=e=>{const t=String(e||"").trim().split(/[\s_-]+/).filter(Boolean);return(t.length>=2?t.slice(0,3).map(n=>n.charAt(0)):(t[0]||"?").slice(0,2).split("")).join("").toUpperCase()},eo=e=>({1:17,2:14,3:11})[e.length]||11,rs=(e,t)=>{const s=t(Qn(e.id)),n=[],o=3+Math.floor(s()*3);for(let c=0;c<o;c+=1){const d=s()*Math.PI*2,y=9+s()*7;n.push({cx:(18+Math.cos(d)*y).toFixed(1),cy:(18+Math.sin(d)*y).toFixed(1),r:(1.6+s()*2.2).toFixed(1),opacity:(.35+s()*.4).toFixed(2)})}const l=ls(e.name||e.id);return{dots:n,glyph:l,fontSize:eo(l)}},to=(e,t)=>{const s=e.dots.map(l=>`<circle cx="${l.cx}" cy="${l.cy}" r="${l.r}" fill="${t.dot}" opacity="${l.opacity}"/>`).join(""),n=e.fontSize>=17?24:23,o=e.glyph.replace(/[&<>]/g,"");return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><rect width="36" height="36" rx="10" fill="${t.fill}"/>${s}<text x="18" y="${n}" text-anchor="middle" font-size="${e.fontSize}" font-weight="700" letter-spacing="-0.5" font-family="Roboto, Inter, system-ui, sans-serif" fill="${t.ink}">${o}</text></svg>`},zt='a[href], button:not([disabled]), input:not([disabled]), select, textarea, [tabindex]:not([tabindex="-1"])',so="input, textarea, select, [contenteditable]",no=(e,t,s)=>{if(!e.length)return null;const n=s?e[0]:e[e.length-1];return t===n||!e.some(o=>o===t)?s?e[e.length-1]:e[0]:null},oo=e=>{let t=null;Z(e,s=>{s?(t=document.activeElement,_e(()=>{var l;const n=document.querySelectorAll(".modal"),o=n[n.length-1];o&&!o.contains(document.activeElement)&&((l=o.querySelector(zt))==null||l.focus())})):(t==null||t.focus(),t=null)}),ct("Tab",s=>{if(!e.value)return;const n=document.querySelectorAll(".modal"),o=n[n.length-1],l=o?[...o.querySelectorAll(zt)]:[],c=no(l,document.activeElement,s.shiftKey);c&&(s.preventDefault(),c.focus())},{target:document})},Ot={"/":".feed__search-input",t:".todos__input"},ao=e=>ct(Object.keys(Ot),t=>{const s=t.target;if(e.value||t.metaKey||t.ctrlKey||t.altKey||s!=null&&s.closest(so))return;const n=document.querySelector(Ot[t.key]);n&&(t.preventDefault(),n.focus())},{target:document}),lo=30,Dt=(e,t,s)=>Math.round(Math.max(t,Math.min(s,e))),ro=(e,t)=>Math.ceil(e+(t>1?lo:0)),io=(e,t,s)=>e-t*s.length-s.reduce((n,o)=>n+(o.collapsed?o.height:o.floor),0),pt=e=>{const t=ge("wt-panel-sizes",{},{writeDefaults:!1});return{size:R(()=>t.value[kt(e)]??null),set:o=>{const l=kt(e);if(!l)return;const{[l]:c,...d}=t.value;t.value=o===null?d:{...d,[l]:o}}}},co="Unreleased",uo=(e,t,s)=>{const n=e.filter(c=>c.version!==co),o=n.findIndex(c=>c.version===s);if(!t||o<0||t===s)return[];const l=n.findIndex(c=>c.version===t);return n.slice(o,l<0?o+1:l)},ho=e=>e.sections.map(t=>`### ${t.kind}
2
- ${t.items.map(s=>`- ${s}`).join(`
3
- `)}`).join(`
4
-
5
- `),po="wt-seen-version",_t=Fs(()=>{const e=ge(po,""),t=N(null),s=N(""),n=R(()=>t.value?uo(t.value.versions,e.value,t.value.current):[]);return{changelog:t,problem:s,unseen:n,load:async()=>{s.value="";try{const c=await Ee("/api/changelog");if(c.error){s.value=dt(c.error).join(" · ");return}t.value=c,e.value||(e.value=c.current)}catch{s.value=xe}},markSeen:()=>{t.value&&(e.value=t.value.current)}}}),_o={class:"rail","aria-label":"Workspaces"},fo=["data-drop","href","aria-label","aria-selected","onClick","onKeydown","onDragstart","onDragover","onDrop"],vo={viewBox:"0 0 36 36",class:"rail__icon","aria-hidden":"true"},mo=["fill"],yo=["cx","cy","r","fill","opacity"],wo=["y","font-size","fill"],go={class:"rail__label"},ko={key:0,class:"rail__warn",title:"A source of this workspace fails"},bo={key:1,class:"rail__badge"},$o={viewBox:"0 0 24 24",class:"rail__gear","aria-hidden":"true"},xo=["d"],So={key:0,class:"rail__dot",title:"Unseen changes"},Co={viewBox:"0 0 24 24",class:"rail__gear","aria-hidden":"true"},Eo=["d"],Ro=j({__name:"Rail",emits:["settings","whatsNew"],setup(e,{emit:t}){const s=t,{unseen:n}=_t(),o=R(()=>Object.fromEntries(w.workspaces.map(b=>[b.id,rs(b,it)]))),l=R(()=>Object.fromEntries(w.workspaces.map(b=>{const T=b.theme?b.theme[He.value?"dark":"light"]:null;return[b.id,{fill:T?T["--md-primary-container"]:"var(--md-primary-container)",ink:T?T["--md-on-primary-container"]:"var(--md-on-primary-container)",dot:T?T["--md-primary"]:"var(--md-primary)"}]}))),c=b=>b.id===w.workspace.id?Object.keys(w.errors||{}).length>0:!!b.failing_sources,d=b=>{b.detail>0&&b.currentTarget.blur()},y=(b,T)=>{d(b),qn(T)},_=b=>{s("settings"),d(b)},u=b=>{s("whatsNew"),d(b)},k=async(b,T)=>{const O=b.key==="ArrowUp"?-1:b.key==="ArrowDown"?1:0,V=w.workspaces.map(H=>H.id),$=V.indexOf(T.id);if(!b.altKey||!O||$+O<0||$+O>=V.length)return;b.preventDefault();const F=b.currentTarget;V.splice($+O,0,...V.splice($,1)),await Mt(V),await _e(),F.focus()},f=N(""),p=N({}),v=b=>{const T=b.currentTarget;return b.clientY-T.getBoundingClientRect().top<T.offsetHeight/2},x=(b,T)=>{f.value=T.id,b.dataTransfer&&(b.dataTransfer.effectAllowed="move",b.dataTransfer.setData("text/plain",T.id))},g=()=>{f.value="",p.value={}},z=(b,T)=>{if(!f.value||f.value===T.id)return;b.preventDefault(),b.dataTransfer&&(b.dataTransfer.dropEffect="move");const O=v(b)?"before":"after";(p.value.id!==T.id||p.value.side!==O)&&(p.value={id:T.id,side:O})},E=(b,T)=>{if(!f.value||f.value===T.id)return;b.preventDefault();const O=xn(w.workspaces.map(V=>V.id),f.value,T.id,v(b));p.value={},Mt(O)};return(b,T)=>(r(),i("nav",_o,[(r(!0),i(U,null,X(h(w).workspaces,O=>(r(),i("a",{key:O.id,class:q(["rail__item",{"rail__item--dragging":f.value===O.id}]),"data-drop":p.value.id===O.id?p.value.side:null,href:"?ws="+encodeURIComponent(O.id),"aria-label":O.name,"aria-selected":O.id===h(w).workspace.id,draggable:"true",onClick:ee(V=>y(V,O.id),["prevent"]),onKeydown:V=>k(V,O),onDragstart:V=>x(V,O),onDragend:g,onDragover:V=>z(V,O),onDragleave:T[0]||(T[0]=V=>p.value={}),onDrop:V=>E(V,O)},[(r(),i("svg",vo,[a("rect",{x:"0",y:"0",width:"36",height:"36",rx:"10",fill:l.value[O.id].fill},null,8,mo),(r(!0),i(U,null,X(o.value[O.id].dots,(V,$)=>(r(),i("circle",{key:$,cx:V.cx,cy:V.cy,r:V.r,fill:l.value[O.id].dot,opacity:V.opacity},null,8,yo))),128)),a("text",{x:"18",y:o.value[O.id].fontSize>=17?24:23,"text-anchor":"middle","font-size":o.value[O.id].fontSize,"font-weight":"700","letter-spacing":"-0.5","font-family":"Roboto, Inter, system-ui, sans-serif",fill:l.value[O.id].ink},m(o.value[O.id].glyph),9,wo)])),a("span",go,m(O.name),1),c(O)?(r(),i("span",ko,"!")):S("",!0),O.open_moves?(r(),i("span",bo,m(O.open_moves),1)):S("",!0)],42,fo))),128)),T[3]||(T[3]=a("span",{class:"rail__spacer"},null,-1)),a("a",{class:"rail__item",href:"#whats-new","aria-label":"What's new",onClick:ee(u,["prevent"])},[(r(),i("svg",$o,[a("path",{d:h(Jn),fill:"currentColor"},null,8,xo)])),T[1]||(T[1]=a("span",{class:"rail__label"},"What's new",-1)),h(n).length?(r(),i("span",So)):S("",!0)]),a("a",{class:"rail__item",href:"#settings","aria-label":"Settings",onClick:ee(_,["prevent"])},[(r(),i("svg",Co,[a("path",{d:h(Gn),fill:"currentColor"},null,8,Eo)])),T[2]||(T[2]=a("span",{class:"rail__label"},"Settings",-1))])]))}}),To=K(Ro,[["__scopeId","data-v-ffe046bc"]]),Ze=" · checks every minute",is=(e,t,s,n)=>{const o=e.failing.map(c=>c.source),l=t?re(t):"—";return o.length&&o.length>=s?{dot:"off",text:"No data: "+o.join(", ")+" failing · last data "+re(e.fresh_at),failing:o,noData:!0}:e.stale?{dot:"off",text:"Stale · last data "+re(e.fresh_at)+Ze,failing:o,noData:!1}:o.length?{dot:n?"warn":"off",text:o.join(", ")+" failing · last check "+l+Ze,failing:o,noData:!1}:{dot:n?"ok":"off",text:"Live · last check "+l+Ze,failing:o,noData:!1}},Ao=["data-tip"],Mo={class:"ai-button__icon",viewBox:"0 0 24 24","aria-hidden":"true"},Io=["d"],zo={class:"ai-button__badge",viewBox:"0 0 24 24","aria-hidden":"true"},Oo=["d"],Do=j({__name:"AiButton",props:{query:{},big:{type:Boolean}},setup(e){const t=e,s={"":"Copy for AI: this with its context as text, ready to paste into Claude or any other assistant",sent:"Copied",failed:"Could not copy"},n=Ce("",1600),o=R(()=>s[n.value]),l=N(null);Z(o,d=>{var y,_;return(_=(y=l.value)==null?void 0:y._tippy)==null?void 0:_.setContent(d)});const c=()=>Js(t.query).then(d=>navigator.clipboard.writeText(d)).then(()=>{n.value="sent"},()=>{n.value="failed"});return(d,y)=>(r(),i("button",{ref_key:"button",ref:l,type:"button",class:q(["ai-button",{"ai-button--big":e.big,"ai-button--sent":h(n)==="sent","ai-button--failed":h(n)==="failed"}]),"aria-label":"Copy for AI","data-tip":o.value,onClick:ee(c,["stop"])},[(r(),i("svg",Mo,[a("path",{d:h(Xn),fill:"currentColor"},null,8,Io)])),(r(),i("svg",zo,[a("path",{d:h(Kn),fill:"currentColor"},null,8,Oo)]))],10,Ao))}}),ve=K(Do,[["__scopeId","data-v-46197bdc"]]),ot="wt-updated-to",Bo=()=>window.location.reload(),No=e=>{try{sessionStorage.setItem(ot,e)}catch{}},Po=()=>{try{const e=sessionStorage.getItem(ot)||"";return sessionStorage.removeItem(ot),e}catch{return""}},Wo={key:2,class:"update-chip update-chip--busy",role:"status"},Uo=["title"],Vo=15e3,Fo=9e4,Ho=j({__name:"UpdateChip",setup(e){const t=N("");let s="";const n=N(""),o=N(!1),l=Ce("",Vo),c=R(()=>w.update),d=R(()=>c.value.state==="restarting"||!!t.value&&!C.live),y=R(()=>!n.value&&(c.value.state==="installing"||d.value||!!t.value)),{start:_,stop:u}=Hs(()=>o.value=!0,Fo,{immediate:!1});rt(()=>{l.value=Po()}),Z(()=>c.value.current,p=>{if(p){if(!s){s=p;return}p!==s&&(n.value=p,t.value="",u())}},{immediate:!0});const k=()=>{if(y.value)return;o.value=!1,t.value=c.value.latest,_();const p=v=>{if(!pe(v,{refused:"The update did not start"})){t.value="",u();return}w.update=v.update};ce("/api/update").then(p,p)},f=()=>{n.value&&No(n.value),Bo()};return(p,v)=>h(l)?(r(),i("button",{key:0,type:"button",class:"update-chip update-chip--done",title:"See what changed",onClick:v[0]||(v[0]=x=>h(C).whatsNew=!0)}," Updated to "+m(h(l)),1)):n.value?(r(),i("button",{key:1,type:"button",class:"update-chip update-chip--ready",title:"Reload the window to apply the changes",onClick:f}," Updated to "+m(n.value)+" · Reload ",1)):y.value?(r(),i("span",Wo,[v[1]||(v[1]=a("span",{class:"update-chip__spinner","aria-hidden":"true"},null,-1)),G(m(d.value?"Restarting…":`Installing ${t.value||c.value.latest}…`),1),o.value?(r(),i("button",{key:0,type:"button",class:"update-chip__link",title:"The restart is taking longer than usual",onClick:f}," Reload ")):S("",!0)])):c.value.available&&c.value.state==="failed"?(r(),i("button",{key:3,type:"button",class:"update-chip update-chip--failed",title:c.value.reason,onClick:k}," Update failed · Retry ",8,Uo)):c.value.available?(r(),i("button",{key:4,type:"button",class:"update-chip",onClick:k},m(c.value.latest)+" is out · Update ",1)):S("",!0)}}),Lo=K(Ho,[["__scopeId","data-v-c5c2c37f"]]),qo={class:"status-bar"},jo={class:"status-bar__icon",viewBox:"0 0 24 24","aria-hidden":"true"},Yo=["d"],Ko={key:0,class:"status-bar__notice",role:"alert"},Xo=["href"],Go=["aria-disabled"],Jo=5e3,Zo=j({__name:"StatusBar",emits:["report"],setup(e,{emit:t}){const s=t,n=R(()=>(fe.value,is(w.health,w.polled_at,w.workspace.connectors.length,C.live))),o=N(!1),l=N(!1),c=R(()=>l.value?"Opened in the app window. You can close this tab.":C.status||n.value.text),d=_=>pe(_,{refused:"The app window did not open"}),y=()=>{if(o.value)return;o.value=!0,setTimeout(()=>o.value=!1,Jo);const _=u=>{d(u),l.value=!ie(u)};ce("/api/open",{mode:"app"}).then(_,_)};return(_,u)=>(r(),i("div",qo,[a("button",{type:"button",class:"btn status-bar__btn status-bar__report",title:"A bug or a wish about this monitor, straight to its backlog",onClick:u[0]||(u[0]=k=>s("report"))},[(r(),i("svg",jo,[a("path",{d:h(Zn),fill:"currentColor"},null,8,Yo)])),u[2]||(u[2]=G("Report ",-1))]),a("span",{class:q(["status-bar__live",{"status-bar__live--off":n.value.dot==="off","status-bar__live--warn":n.value.dot==="warn"}])},null,2),a("span",null,m(c.value),1),h(We)?(r(),i("span",Ko,m(h(We)),1)):S("",!0),P(Lo),a("button",{type:"button",class:"btn status-bar__btn",onClick:u[1]||(u[1]=(...k)=>h(It)&&h(It)(...k))},"Refresh now"),h(C).mode==="app"?(r(),i("a",{key:1,class:"btn status-bar__btn",href:h(Bn)(h(C).ws),target:"_blank",rel:"noopener"},"Open in browser",8,Xo)):(r(),i("button",{key:2,type:"button",class:q(["btn status-bar__btn",{"status-bar__btn--busy":o.value}]),"aria-disabled":o.value,onClick:y},m(o.value?"Opening…":"Open as app"),11,Go)),P(ve,{query:{all:"1"}}),u[3]||(u[3]=a("span",{class:"ai-hint status-bar__ai-hint"},"Copy for AI: everything",-1))]))}}),Qo=K(Zo,[["__scopeId","data-v-1a4ce564"]]),cs=e=>{const t=ge("wt-collapsed",[],{writeDefaults:!1}),s=R(()=>t.value.includes(e));return{collapsed:s,toggle:()=>{t.value=s.value?t.value.filter(o=>o!==e):[...t.value,e]}}},ea=["href"],ta={key:1},le=j({__name:"ExtLink",props:{text:{default:""},url:{default:""}},setup(e){const t=e,s=R(()=>ut(t.url));return(n,o)=>s.value?(r(),i("a",{key:0,href:s.value,target:"_blank",rel:"noopener"},m(e.text),9,ea)):(r(),i("span",ta,m(e.text),1))}}),sa={class:"workspace-header__title"},na={class:"workspace-header__name"},oa={key:0,class:"workspace-header__line workspace-header__strip"},aa={class:"workspace-header__count"},la={class:"workspace-header__count"},ra={class:"workspace-header__count"},ia={class:"workspace-header__count"},ca={class:"workspace-header__line workspace-header__give"},da={class:"workspace-header__links"},ua={class:"workspace-header__tiles"},ha={class:"workspace-header__tile-value"},pa={class:"workspace-header__tile"},_a={class:"workspace-header__tile-value"},fa={class:"workspace-header__tile-value"},va={class:"workspace-header__tile"},ma={class:"workspace-header__tile-value"},ya=j({__name:"WorkspaceHeader",setup(e){const{collapsed:t,toggle:s}=cs("header");return(n,o)=>(r(),i("header",{id:"summary",class:q(["island workspace-header",{"workspace-header--collapsed":h(t)}])},[a("div",sa,[a("h1",na,m(h(w).workspace.name||"Whose Turn"),1),h(t)?(r(),i("p",oa,[o[1]||(o[1]=G(" Your move ",-1)),a("b",aa,m(h(ae).mine),1),o[2]||(o[2]=G(" · Waiting on others ",-1)),a("b",la,m(h(ae).others),1),o[3]||(o[3]=G(" · Failing ",-1)),a("b",ra,m(h(ae).failing),1),o[4]||(o[4]=G(" · Done ",-1)),a("b",ia,m(h(ae).done),1)])):S("",!0),a("p",ca,[P(ve,{query:{ws:h(w).workspace.id,kind:"workspace"},big:""},null,8,["query"]),o[5]||(o[5]=a("span",{class:"ai-hint"},"Copy for AI: this workspace",-1)),a("span",da,[(r(!0),i(U,null,X(h(w).workspace.links||[],l=>(r(),Y(le,{key:l.url,text:l.label,url:l.url,title:l.url},null,8,["text","url","title"]))),128))])])]),a("button",{type:"button",class:q(["fold-toggle workspace-header__fold",{"fold-toggle--folded":h(t)}]),"aria-label":"Fold the header","data-tip":"Fold the header; it stays folded until you open it again",onClick:o[0]||(o[0]=ee((...l)=>h(s)&&h(s)(...l),["stop"]))}," ▾ ",2),a("div",ua,[a("div",{class:q(["workspace-header__tile",{"workspace-header__tile--you":h(ae).mine>0}])},[o[6]||(o[6]=a("span",{class:"workspace-header__tile-label"},"Your move",-1)),a("strong",ha,m(h(ae).mine),1)],2),a("div",pa,[o[7]||(o[7]=a("span",{class:"workspace-header__tile-label"},"Waiting on others",-1)),a("strong",_a,m(h(ae).others),1)]),a("div",{class:q(["workspace-header__tile",{"workspace-header__tile--fail":h(ae).failing}])},[o[8]||(o[8]=a("span",{class:"workspace-header__tile-label"},"Open PRs with failing checks",-1)),a("strong",fa,m(h(ae).failing),1)],2),a("div",va,[o[9]||(o[9]=a("span",{class:"workspace-header__tile-label"},"Done in the last 30 days",-1)),a("strong",ma,m(h(ae).done),1)])])],2))}}),wa=K(ya,[["__scopeId","data-v-3421a7f0"]]),ft=e=>{Z(()=>C.reconnects,e)},ga=j({__name:"Chevron",props:{open:{type:Boolean},tag:{default:"button"}},setup(e){return(t,s)=>(r(),Y(Ts(e.tag),{class:q(["chevron",{"chevron--open":e.open}]),type:e.tag==="button"?"button":void 0,"aria-expanded":e.tag==="button"?e.open:void 0},null,8,["class","type","aria-expanded"]))}}),qe=K(ga,[["__scopeId","data-v-a14fa9ba"]]),ka=["aria-orientation","aria-label"],Bt=16,ba=j({__name:"ResizeHandle",props:{label:{},axis:{},bounds:{type:Function},grow:{},top:{type:Boolean}},emits:["resize","reset"],setup(e,{emit:t}){const s=e,n=t,o=s.grow??1;let l={pointer:0,size:0,min:0,max:0};const c=u=>s.axis==="y"?u.clientY:u.clientX,d=u=>{const{current:k,min:f,max:p}=s.bounds();l={pointer:c(u),size:k,min:f,max:p},u.currentTarget.setPointerCapture(u.pointerId)},y=u=>{if(!u.currentTarget.hasPointerCapture(u.pointerId))return;const k=(c(u)-l.pointer)*o;n("resize",Dt(l.size+k,l.min,l.max))},_=u=>{const k=s.axis==="y"?"ArrowDown":"ArrowRight",f=s.axis==="y"?"ArrowUp":"ArrowLeft";if(u.key!==k&&u.key!==f)return;u.preventDefault();const{current:p,min:v,max:x}=s.bounds(),g=(u.key===k?Bt:-Bt)*o;n("resize",Dt(p+g,v,x))};return(u,k)=>(r(),i("div",{class:q(["resize-handle",["resize-handle--"+e.axis,{"resize-handle--top":e.top}]]),role:"separator",tabindex:"0","aria-orientation":e.axis==="y"?"horizontal":"vertical","aria-label":e.label,"data-tip":"Drag to resize; double click to reset",onPointerdown:ee(d,["prevent"]),onPointermove:y,onKeydown:_,onDblclick:k[0]||(k[0]=f=>n("reset"))},null,42,ka))}}),ds=K(ba,[["__scopeId","data-v-8e637688"]]),$a=["id"],xa={class:"island__head"},Sa={class:"island__title"},Ca={class:"island__note"},Ea={class:"island__note-text"},Ra=["aria-label","data-tip"],Ta={class:"island__body"},Aa=280,Ma=360,Ia=j({__name:"Island",props:{id:{},sizeKey:{default:""},title:{},note:{default:""},tip:{default:""},column:{type:Boolean},resize:{default:"height"}},setup(e){const t=e,{collapsed:s,toggle:n}=cs(t.id),{size:o,set:l}=pt(()=>t.sizeKey),c=Fe("root"),d=N(0),y=g=>parseFloat(g)||0,_=(g,z)=>{let E=0;for(let b=g.parentElement;b&&b!==z;b=b.parentElement)E+=b.scrollTop;return E},u=(g,z)=>{const E=[...g.children].find(T=>T.contains(z));return(E?[...g.children].slice([...g.children].indexOf(E)+1):[]).filter(T=>!T.classList.contains("row-scroll__more")).reduce((T,O)=>{const V=O;return T+(y(getComputedStyle(V).minHeight)||V.offsetHeight)},0)},k=()=>{const g=c.value,z=g==null?void 0:g.querySelector(".island__body");if(!g||!z||s.value||t.resize!=="height")return;const E=z.querySelectorAll("tbody > tr, .todos__list > li"),b=g.getBoundingClientRect().top,T=y(getComputedStyle(z).paddingBottom);if(!E.length){d.value=Math.ceil(z.offsetTop+z.scrollHeight);return}const O=E[0].getBoundingClientRect().bottom-b+_(E[0],g);d.value=ro(O+u(z,E[0])+T+2,E.length)};let f=0;const p=()=>{cancelAnimationFrame(f),f=requestAnimationFrame(k)};rt(()=>{var z;const g=(z=c.value)==null?void 0:z.querySelector(".island__body");g&&(Ls(g,p,{childList:!0,subtree:!0}),qs(g,p)),p()});const v=g=>{var z;return[...((z=g.parentElement)==null?void 0:z.children)??[]].filter(E=>E!==g&&E instanceof HTMLElement).map(E=>({collapsed:E.classList.contains("island--collapsed"),height:E.offsetHeight,floor:y(E.style.getPropertyValue("--island-floor"))}))},x=()=>{const g=c.value;if(k(),t.resize==="width"){const b=g.parentElement,T=y(getComputedStyle(b).columnGap);return{current:g.offsetWidth,min:Aa,max:b.clientWidth-T-Ma}}const z=g.parentElement,E=y(getComputedStyle(z).rowGap);return{current:g.offsetHeight,min:d.value,max:Math.max(io(z.clientHeight,E,v(g)),z.clientHeight)}};return(g,z)=>(r(),i("section",{id:e.id,ref_key:"root",ref:c,class:q(["island",{"island--collapsed":h(s),"island--column":e.column,"island--sized":h(o)!==null&&e.resize==="height"}]),style:Ne(e.resize==="height"?{"--island-floor":d.value+"px","--island-height":(h(o)??0)+"px"}:void 0)},[a("div",xa,[P(qe,{open:!h(s),"aria-label":"Fold "+e.title,"data-tip":"Fold this panel; it stays folded until you open it again",onClick:ee(h(n),["stop"])},null,8,["open","aria-label","onClick"]),a("h2",Sa,[G(m(e.title)+" ",1),me(g.$slots,"head",{},void 0)]),a("p",Ca,[a("span",Ea,m(e.note),1),e.tip?(r(),i("button",{key:0,type:"button",class:"hint-icon","aria-label":"About "+e.title,"data-tip":e.tip,"data-tip-click":""}," ? ",8,Ra)):S("",!0)])]),a("div",Ta,[me(g.$slots,"default",{},void 0)]),h(s)?S("",!0):(r(),Y(ds,{key:0,label:"Resize "+e.title,axis:e.resize==="width"?"x":"y",grow:e.resize==="width"?-1:1,bounds:x,onResize:h(l),onReset:z[0]||(z[0]=E=>h(l)(null))},null,8,["label","axis","grow","onResize"]))],14,$a))}}),je=K(Ia,[["__scopeId","data-v-37152aeb"]]),za=["aria-label"],Oa=["aria-pressed","onClick"],Da={key:0,class:"count"},Ba=j({__name:"Segmented",props:et({options:{},label:{default:""},chips:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const t=Wt(e,"modelValue");return(s,n)=>(r(),i("span",{class:q(["segmented",{"segmented--chips":e.chips}]),role:"group","aria-label":e.label},[(r(!0),i(U,null,X(e.options,o=>(r(),i("button",{key:o.id,type:"button",class:"segmented__option","aria-pressed":t.value===o.id,onClick:l=>t.value=o.id},[G(m(o.label),1),o.count!==void 0?(r(),i("b",Da,m(o.count),1)):S("",!0)],8,Oa))),128))],10,za))}}),Ve=K(Ba,[["__scopeId","data-v-201d5e2f"]]),Na={class:"ticket-cell"},Pa={class:"ticket-cell__summary"},Wa=j({__name:"TicketCell",props:{row:{}},setup(e){return(t,s)=>(r(),i("td",Na,[P(le,{text:e.row.key,url:h(jt)(e.row)?e.row.pr_url:e.row.ticket_url,class:"ticket-key"},null,8,["text","url"]),a("span",Pa,m(e.row.summary),1)]))}}),vt=K(Wa,[["__scopeId","data-v-e2d11a0b"]]),Ua={key:0,class:"pr-cell"},Va={key:1,class:"pill"},Fa=j({__name:"PrCell",props:{row:{}},setup(e){return(t,s)=>(r(),i("td",null,[e.row.pr&&!h(jt)(e.row)?(r(),i("span",Ua,[P(le,{text:e.row.pr,url:e.row.pr_url,class:"pr-cell__link"},null,8,["text","url"]),e.row.pr_state==="OPEN"&&e.row.checks?(r(),i("span",{key:0,class:q(["pill",h(Re)("pill",h(Zs)(e.row.checks))])},m(e.row.checks),3)):e.row.pr_state?(r(),i("span",Va,m(e.row.pr_state.toLowerCase()),1)):S("",!0)])):S("",!0)]))}}),us=K(Fa,[["__scopeId","data-v-6078ccbd"]]),Ha=["open"],La={class:"recently-done__summary"},qa={class:"count"},ja={class:"table"},Ya=["data-tip"],Ka={class:"table__actions"},Xa=480,Ga=j({__name:"RecentlyDone",setup(e){const{size:t,set:s}=pt(()=>`${w.workspace.id}:recently-done`),n=Fe("list"),o=_=>{var k;const u=(k=_.closest(".island__body"))==null?void 0:k.querySelector(".row-scroll");return u?Math.max(0,u.clientHeight-(parseFloat(getComputedStyle(u).minHeight)||0)):0},l=()=>{const _=n.value,k=(_.querySelector("tbody > tr")??_).getBoundingClientRect().bottom-_.getBoundingClientRect().top,f=parseFloat(getComputedStyle(_).paddingBottom)||0;return{current:_.offsetHeight,min:Math.ceil(k+_.scrollTop+f),max:Math.min(Xa,_.offsetHeight+o(_))}},c=ge("wt-recent-open",!1,{writeDefaults:!1,serializer:{read:_=>_==="1",write:_=>_?"1":"0"}}),d=_=>{c.value=_.target.open},y=R(()=>(fe.value,Qs(w.turn).map(_=>({row:_,since:ht(_.status_since||_.updated)}))));return(_,u)=>y.value.length?(r(),i("details",{key:0,class:"recently-done",open:h(c),onToggle:d},[a("summary",La,[P(qe,{tag:"span",open:h(c)},null,8,["open"]),u[1]||(u[1]=G(" Recently done ",-1)),a("span",qa,m(y.value.length),1)]),a("div",{ref_key:"list",ref:n,class:"recently-done__list",style:Ne(h(t)===null?void 0:{maxHeight:h(t)+"px",height:h(t)+"px"})},[a("table",ja,[u[2]||(u[2]=a("thead",null,[a("tr",null,[a("th",null,"Ticket"),a("th",null,"Status"),a("th",null,"Done"),a("th",{class:"table__actions-col"},[a("span",{class:"visually-hidden"},"Copy for AI")])])],-1)),a("tbody",null,[(r(!0),i(U,null,X(y.value,({row:k,since:f})=>(r(),i("tr",{key:k.row_id},[P(vt,{row:k},null,8,["row"]),a("td",null,[a("span",{class:q(["pill",h(Re)("pill",h(Yt)(k.status_group))])},m(k.status),3)]),a("td",null,[a("span",{class:"age","data-tip":"Done "+h(Le)(k.status_since||k.updated)},m(f.text),9,Ya)]),a("td",Ka,[P(ve,{class:"table__ai",query:{ws:h(w).workspace.id,kind:"row",ref:k.row_id}},null,8,["query"])])]))),128))])])],4),h(c)?(r(),Y(ds,{key:0,label:"Resize Recently done",axis:"y",top:"",grow:-1,bounds:l,onResize:h(s),onReset:u[0]||(u[0]=k=>h(s)(null))},null,8,["onResize"])):S("",!0)],40,Ha)):S("",!0)}}),Ja=K(Ga,[["__scopeId","data-v-68a4b78e"]]),Za=13,Qa=j({__name:"RowScroll",props:{floor:{type:Boolean}},setup(e){const t=N(null),s=N(null),{y:n}=js(t),{height:o}=$t(t),{height:l}=$t(s),c=()=>{var f,p,v;return[...((v=(p=(f=s.value)==null?void 0:f.querySelector("table"))==null?void 0:p.tBodies[0])==null?void 0:v.rows)||[]]},d=()=>c().filter(f=>!("rowTail"in f.dataset)),y=f=>{const p=f.nextElementSibling;return((p==null?void 0:p.dataset.rowTail)!==void 0?p:f).getBoundingClientRect().bottom},_=()=>{const f=t.value;return f?f.getBoundingClientRect().top+f.clientTop+f.clientHeight:0},u=R(()=>(n.value,o.value,l.value,en(d().map(y),_(),Za))),k=()=>{var z,E;const f=t.value,p=d(),v=p[p.length-u.value];if(!f||!v)return;const g=((E=(z=s.value)==null?void 0:z.querySelector("thead"))==null?void 0:E.getBoundingClientRect().bottom)??f.getBoundingClientRect().top;f.scrollBy({top:v.getBoundingClientRect().top-g,behavior:"smooth"})};return(f,p)=>(r(),i(U,null,[a("div",{ref_key:"scroller",ref:t,class:q(["row-scroll",{"row-scroll--floor":e.floor}])},[a("div",{ref_key:"content",ref:s},[me(f.$slots,"default",{},void 0)],512)],2),u.value?(r(),i("button",{key:0,type:"button",class:"row-scroll__more",onClick:k}," +"+m(u.value)+" more ",1)):S("",!0)],64))}}),hs=K(Qa,[["__scopeId","data-v-e7f699d1"]]),el=N("open"),tl=()=>el,sl={key:0,class:"your-move__undo",role:"status"},nl={class:"table"},ol={key:0},al={key:1,class:"hide-narrow"},ll={class:"hint-row"},rl={class:"your-move__next"},il=["data-tip"],cl=["data-tip"],dl=["data-tip"],ul={key:0,class:"alert alert--inline your-move__problem",role:"alert"},hl={class:"table__actions"},pl=["aria-label","onClick"],_l={colspan:"99",class:"your-move__line-cell"},fl=["onClick"],vl={class:"your-move__outcome"},ml={class:"your-move__time"},yl={key:1,class:"empty"},wl=j({__name:"YourMove",setup(e){const t=tl(),s=R(()=>{fe.value;const f=tn(w.turn,t.value,w.marks.info,C.note),p=f.rows.map(v=>{const x=w.marks.info[v.row.row_id],g=!!(x!=null&&x.auto);return{...v,age:ht(v.row.activity_at),auto:g,lined:g||!!(x!=null&&x.note),line:(g?x==null?void 0:x.outcome:x==null?void 0:x.note)||""}});return{...f,rows:p}}),n=R(()=>Kt(s.value.rows.map(f=>f.row))),o=R(()=>s.value.rows.some(f=>f.row.comment)),l=R(()=>[{id:"open",label:"Open",count:s.value.open},{id:"handled",label:"Handled",count:s.value.handled}]),c=R(()=>{if(t.value==="handled")return"Nothing marked as handled.";const{noData:f,failing:p}=is(w.health,w.polled_at,w.workspace.connectors.length,C.live);return f?"No data: "+p.join(", ")+(p.length===1?" is":" are")+" failing. Check Settings.":"Nothing is waiting on you."}),d=lt(new Map);ft(()=>d.clear());const y=f=>new Date(w.marks.handled[f.row.row_id]||"").toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit"}),_=async f=>{const p=f.row.row_id,v=!f.handled,x=await we({handled:{[p]:v?new Date().toISOString():null}});x?d.set(p,x):(d.delete(p),u.value=v?p:"",C.note=v?p:"")},u=Ce("",8e3),k=()=>{const f=u.value;return u.value="",we({handled:{[f]:null}})};return(f,p)=>(r(),Y(je,{id:"your-move","size-key":`${h(w).workspace.id}:your-move`,title:"Your move",note:"Next step is yours",tip:"Each row is something where the next step is yours. Ticket, PR and comment open in a new tab."},{head:te(()=>[P(Ve,{modelValue:h(t),"onUpdate:modelValue":p[0]||(p[0]=v=>As(t)?t.value=v:null),options:l.value,label:"Show",class:"your-move__view"},null,8,["modelValue","options"])]),default:te(()=>[h(u)?(r(),i("p",sl,[p[1]||(p[1]=G(" Marked handled. ",-1)),a("button",{type:"button",class:"your-move__undo-btn",onClick:k},"Undo")])):S("",!0),P(hs,{floor:""},{default:te(()=>[a("table",nl,[a("thead",null,[a("tr",null,[p[2]||(p[2]=a("th",null,"Ticket",-1)),p[3]||(p[3]=a("th",null,"Next step",-1)),n.value?(r(),i("th",ol,"PR")):S("",!0),o.value?(r(),i("th",al,"Last comment")):S("",!0),p[4]||(p[4]=a("th",{class:"table__actions-col"},[a("span",{class:"visually-hidden"},"Mark")],-1))])]),a("tbody",null,[(r(!0),i(U,null,X(s.value.rows,v=>(r(),i(U,{key:v.row.row_id},[a("tr",{class:q(["your-move__row",{"your-move__row--handled":v.handled,"your-move__row--lined":v.lined}])},[P(vt,{row:v.row},null,8,["row"]),a("td",null,[a("span",ll,[a("span",rl,m(v.row.next),1),v.age.text?(r(),i("span",{key:0,class:q(["age",{"age--old":v.age.old}]),"data-tip":"Waiting since "+h(Le)(v.row.activity_at)},m(v.age.text),11,il)):S("",!0),v.row.why?(r(),i("button",{key:1,type:"button",class:"hint-label","aria-label":"Why this is your move","data-tip":v.row.why,"data-tip-click":""}," why ",8,cl)):S("",!0),v.handled&&!v.auto?(r(),i("span",{key:2,class:"handled-chip","data-tip":"Marked "+h(re)(h(w).marks.handled[v.row.row_id]||"")+". Comes back in 7 days if it is still open, or sooner when something new happens."},"handled",8,dl)):S("",!0)]),d.get(v.row.row_id)?(r(),i("p",ul,m(d.get(v.row.row_id)),1)):S("",!0)]),n.value?(r(),Y(us,{key:0,row:v.row},null,8,["row"])):S("",!0),o.value?(r(),i("td",{key:1,class:q(["hide-narrow",{"your-move__quote":v.row.comment}])},[v.row.comment?(r(),Y(le,{key:0,text:v.row.comment,url:v.row.comment_url},null,8,["text","url"])):S("",!0)],2)):S("",!0),a("td",hl,[P(ve,{class:"table__ai",query:{ws:h(w).workspace.id,kind:"row",ref:v.row.row_id}},null,8,["query"]),v.auto?S("",!0):(r(),i("button",{key:0,type:"button",class:q(["your-move__mark",{"your-move__mark--undo":v.handled}]),"aria-label":(v.handled?"Move back to open: ":"Mark as handled: ")+v.row.key,onClick:ee(x=>_(v),["stop"])},m(v.handled?"Undo":"Handled"),11,pl))])],2),v.lined?(r(),i("tr",{key:0,"data-row-tail":"",class:q(["your-move__line-row",{"your-move__line-row--handled":v.handled}])},[a("td",_l,[a("button",{type:"button",class:"your-move__line","data-tip":"Open the full text and edit the note",onClick:x=>h(C).note=v.row.row_id},[p[5]||(p[5]=a("span",{class:"your-move__arrow","aria-hidden":"true"},"→",-1)),a("span",vl,m(v.line),1),a("time",ml,m(y(v)),1)],8,fl)])],2)):S("",!0)],64))),128))])])]),_:1}),s.value.rows.length?S("",!0):(r(),i("p",yl,m(c.value),1)),h(t)==="open"?(r(),Y(Ja,{key:2})):S("",!0)]),_:1},8,["size-key"]))}}),gl=K(wl,[["__scopeId","data-v-3a6ca0d0"]]),kl=N(!1),bl=()=>kl,$l={class:"todos__add"},xl={key:0,class:"alert alert--inline",role:"alert"},Sl={key:1,class:"todos__undo",role:"status"},Cl={class:"todos__list"},El=["aria-checked","aria-label","onClick"],Rl=["onKeydown"],Tl=["onDblclick"],Al={class:"todos__meta"},Ml=["onClick"],Il=["onClick"],zl={key:0,class:"empty todos__empty"},Ol=j({__name:"Todos",setup(e){const t=bl(),s=N(""),n=R(()=>(w.todos||[]).filter($=>!$.done)),o=R(()=>(w.todos||[]).filter($=>$.done)),l=R(()=>new RegExp(w.workspace.key_pattern||"(?!)","g")),c=$=>{const F=[];let H=0;const se=$.text;for(const I of se.matchAll(l.value))I.index>H&&F.push({text:se.slice(H,I.index)}),F.push({text:I[0],url:I[0]===$.key?$.ticket_url:""}),H=I.index+I[0].length;return H<se.length&&F.push({text:se.slice(H)}),F},d=R(()=>(fe.value,(t.value?n.value.concat(o.value):n.value).map($=>({todo:$,parts:c($),meta:($.by&&$.by!=="you"?$.by+" · ":"")+re($.created)})))),y=N("");ft(()=>{y.value=""});const _=async $=>(y.value=await Yn($),!y.value),u=async()=>{const $=s.value.trim();$&&await _({action:"add",text:$})&&s.value.trim()===$&&(s.value="")},k=$=>_({action:$.done?"undo":"done",id:$.id}),f=N(null),p=async $=>{await _({action:"delete",id:$.id})&&(f.value=$)},v=async()=>{const $=f.value;if(f.value=null,$&&await _({action:"add",text:$.text})&&$.done){const F=(w.todos||[]).find(H=>H.text===$.text&&!H.done);F&&await _({action:"done",id:F.id})}},x=N(""),g=N(""),z=Fe("editBox"),E=async $=>{var F,H;x.value=$.id,g.value=$.text,await _e(),(H=(F=z.value)==null?void 0:F[0])==null||H.focus()},b=()=>{x.value=""},T=async $=>{const F=g.value.trim();if(!F||F===$.text)return b();await _({action:"edit",id:$.id,text:F})&&b()},O=R({get:()=>t.value?"done":"open",set:$=>{t.value=$==="done"}}),V=R(()=>[{id:"open",label:"Open",count:n.value.length},{id:"done",label:"Done",count:o.value.length}]);return($,F)=>(r(),Y(je,{id:"todo","size-key":`${h(w).workspace.id}:todo`,title:"To do",note:"Your own notes",tip:'Your personal to-dos, kept on this machine. Add here, or ask Claude: "add to my to-do: …". A ticket key like PROJ-123 in the text becomes a link.'},{head:te(()=>[P(Ve,{modelValue:O.value,"onUpdate:modelValue":F[0]||(F[0]=H=>O.value=H),options:V.value,label:"Show",class:"todos__view"},null,8,["modelValue","options"])]),default:te(()=>[a("div",$l,[be(a("input",{"onUpdate:modelValue":F[1]||(F[1]=H=>s.value=H),class:"input todos__input",type:"text",placeholder:"Add a to-do and press Enter","aria-label":"New to-do",autocomplete:"off",onKeydown:ye(u,["enter"])},null,544),[[$e,s.value]]),a("button",{type:"button",class:"btn btn--tonal",onClick:u},"Add")]),y.value?(r(),i("p",xl,m(y.value),1)):S("",!0),f.value?(r(),i("p",Sl,[F[3]||(F[3]=G(" To-do deleted. ",-1)),a("button",{type:"button",class:"todos__undo-btn",onClick:v},"Undo")])):S("",!0),a("ul",Cl,[(r(!0),i(U,null,X(d.value,({todo:H,parts:se,meta:I})=>(r(),i("li",{key:H.id,class:q(["todos__item",{"todos__item--done":H.done}])},[a("button",{type:"button",class:q(["todos__check",{"todos__check--on":H.done}]),role:"checkbox","aria-checked":!!H.done,"aria-label":H.done?"Mark not done":"Mark done",onClick:W=>k(H)},null,10,El),x.value===H.id?be((r(),i("input",{key:0,ref_for:!0,ref_key:"editBox",ref:z,"onUpdate:modelValue":F[2]||(F[2]=W=>g.value=W),class:"input todos__edit",type:"text",maxlength:"500","aria-label":"Edit to-do",autocomplete:"off",onKeydown:[ye(W=>T(H),["enter"]),ye(b,["esc"])],onBlur:b},null,40,Rl)),[[$e,g.value]]):(r(),i("span",{key:1,class:"todos__text",onDblclick:W=>E(H)},[(r(!0),i(U,null,X(se,(W,B)=>(r(),i(U,{key:B},[W.url!==void 0?(r(),Y(le,{key:0,text:W.text,url:W.url},null,8,["text","url"])):(r(),i(U,{key:1},[G(m(W.text),1)],64))],64))),128))],40,Tl)),a("span",Al,m(I),1),a("button",{type:"button",class:"todos__pencil","aria-label":"Edit to-do",onClick:W=>E(H)}," ✎ ",8,Ml),a("button",{type:"button",class:"todos__delete","aria-label":"Delete to-do",onClick:W=>p(H)}," × ",8,Il)],2))),128)),d.value.length?S("",!0):(r(),i("span",zl,m(h(t)?"Nothing here yet.":"Nothing to do. Add one above, or ask Claude."),1))])]),_:1},8,["size-key"]))}}),Dl=K(Ol,[["__scopeId","data-v-6dbdbb66"]]),Bl={key:0,class:"count"},Nl={key:0,class:"empty"},Pl={class:"table waiting__table"},Wl={key:0,class:"hide-narrow"},Ul={key:1,class:"waiting__col waiting__col--pr"},Vl=["data-tip"],Fl={key:0,class:"hide-narrow"},Hl={key:0,class:"hint-row"},Ll=["data-tip"],ql={class:"table__actions"},jl=j({__name:"Waiting",setup(e){const t=R(()=>(fe.value,sn(w.turn).map(l=>({row:l,since:l.status_since?ht(l.status_since):null,own:l.status_group==="backlog"})))),s=R(()=>Kt(t.value.map(({row:l})=>l))),n=R(()=>t.value.some(({row:l,own:c})=>l.hold_url||!c&&l.next)),o=R(()=>t.value.length&&t.value.every(({own:l})=>l)?"Your backlog":"Someone else holds the next step");return(l,c)=>(r(),Y(je,{id:"waiting","size-key":`${h(w).workspace.id}:waiting`,title:"Waiting on others",note:o.value,tip:"Tickets you touched in the last 30 days where someone else holds the next step: a reviewer, QA, or a new owner."},{head:te(()=>[t.value.length?(r(),i("span",Bl,m(t.value.length),1)):S("",!0)]),default:te(()=>[t.value.length?(r(),Y(hs,{key:1},{default:te(()=>[a("table",Pl,[a("thead",null,[a("tr",null,[c[0]||(c[0]=a("th",{class:"waiting__col waiting__col--ticket"},"Ticket",-1)),c[1]||(c[1]=a("th",{class:"waiting__col waiting__col--status"},"Status",-1)),c[2]||(c[2]=a("th",{class:"waiting__col waiting__col--with"},"With",-1)),n.value?(r(),i("th",Wl,"Waiting for")):S("",!0),s.value?(r(),i("th",Ul,"PR")):S("",!0),c[3]||(c[3]=a("th",{class:"table__actions-col waiting__col waiting__col--actions"},[a("span",{class:"visually-hidden"},"Copy for AI")],-1))])]),a("tbody",null,[(r(!0),i(U,null,X(t.value,({row:d,since:y,own:_})=>(r(),i("tr",{key:d.row_id},[P(vt,{row:d},null,8,["row"]),a("td",null,[a("span",{class:q(["pill",h(Re)("pill",h(Yt)(d.status_group))])},m(d.status),3)]),a("td",null,[G(m(_?"you":d.whose)+" ",1),y?(r(),i("span",{key:0,class:q(["age",{"age--old":y.hours>=72}]),"data-tip":d.status+" since "+h(Le)(d.status_since)},m(y.text),11,Vl)):S("",!0)]),n.value?(r(),i("td",Fl,[d.hold_url?(r(),i("span",Hl,[P(le,{text:d.next,url:d.hold_url,class:"waiting__reason"},null,8,["text","url"]),a("button",{type:"button",class:"hint-label","aria-label":"Full reason","data-tip":d.hold_full||d.next}," full ",8,Ll)])):_?S("",!0):(r(),i(U,{key:1},[G(m(d.next),1)],64))])):S("",!0),s.value?(r(),Y(us,{key:1,row:d},null,8,["row"])):S("",!0),a("td",ql,[P(ve,{class:"table__ai",query:{ws:h(w).workspace.id,kind:"row",ref:d.row_id}},null,8,["query"])])]))),128))])])]),_:1})):(r(),i("p",Nl,"Nothing is waiting on someone else."))]),_:1},8,["size-key","note"]))}}),Yl=K(jl,[["__scopeId","data-v-90e8bf77"]]),Kl=(e,t)=>e.seen instanceof Set?e.seen.has(t):e.seen.includes(t),ps=(e,t)=>new Date(e.at).getTime()>(t.base||0)&&!Kl(t,e.id),Xl=(e,t)=>{const s=String(t||"").toLowerCase().split(/\s+/).filter(Boolean);if(!s.length)return!0;const n=[e.ref,e.key,e.title,e.kind,e.who,e.text,e.body].join(" ").toLowerCase();return s.every(o=>n.includes(o))},Gl=e=>e.key||e.ref||e.id,Jl=(e,t)=>{const s=new Map;for(const n of e){const o=Gl(n),l=s.get(o)||{id:o,items:[],newest:n.at,unread:0,title:""};s.set(o,l),l.items.push(n),l.title||(l.title=n.title||""),n.at>l.newest&&(l.newest=n.at),ps(n,t)&&(l.unread+=1)}return[...s.values()].sort((n,o)=>String(o.newest).localeCompare(String(n.newest)))},Zl=e=>new Set(e.filter(t=>t.group==="you"&&!t.handled).map(t=>t.key)),Ql=(e,t=2)=>{const s=[...new Set(e.map(o=>o.kind))],n=s.length-t;return s.slice(0,t).join(" · ")+(n>0?` +${n}`:"")},er=e=>/fail|changes/.test(e)?"bad":/approved|merged|passed/.test(e)?"ok":"",tr=e=>/comment|approved|changes|mentioned|review requested/.test(e.kind)&&String(e.body||"").trim()!=="",_s=e=>e.ref!==e.key&&(e.key||e.title)||"",sr=e=>[_s(e),e.text===e.title?"":e.text].filter(Boolean).join(" · "),nr=e=>e.type==="github"&&e.label==="GitHub"?"GH":ls(e.label),or=["id"],ar={class:"feed-item__body"},lr={class:"feed-item__top"},rr={key:1,class:"feed-item__who"},ir={key:2,class:"at-you"},cr={class:"feed-item__right"},dr={class:"timestamp feed-item__when"},ur={key:0,class:"feed-item__text"},hr={class:"feed-item__full"},pr={class:"feed-item__actions"},_r={key:1,class:"feed-item__text"},fr=j({__name:"FeedItem",props:{item:{},source:{},fresh:{type:Boolean},flash:{type:Boolean},expanded:{type:Boolean}},emits:["open","toggle","seen"],setup(e,{emit:t}){const s=e,n=t,o=R(()=>nr(s.source)),l=R(()=>_s(s.item)),c=R(()=>sr(s.item)),d=R(()=>er(s.item.kind)),y=R(()=>d.value||(s.source.type==="github"?"":"jira")),_=R(()=>tr(s.item)),u=R(()=>_.value&&s.expanded),k=R(()=>(fe.value,re(s.item.at))),f=()=>{s.fresh&&n("seen",s.item.id)},p=()=>{n("toggle",s.item.id),f()};return(v,x)=>(r(),i("li",{id:"feed-"+e.item.id,class:q(["feed-item",{"feed-item--new":e.fresh,"feed-item--open":u.value,"feed-item--flash":e.flash}]),onClick:f},[a("span",{class:q(["feed-item__icon",h(Re)("feed-item__icon",y.value)])},m(o.value),3),a("div",ar,[a("div",lr,[_.value?(r(),Y(qe,{key:0,open:u.value,"aria-label":u.value?"Collapse":"Expand",onClick:ee(p,["stop"])},null,8,["open","aria-label"])):S("",!0),P(le,{text:e.item.ref,url:e.item.url},null,8,["text","url"]),a("span",{class:q(["feed-item__kind",{"feed-item__kind--bad":d.value==="bad"}])},m(e.item.kind),3),e.item.who?(r(),i("span",rr,m(e.item.who),1)):S("",!0),e.item.mention?(r(),i("span",ir,"@you")):S("",!0),a("span",cr,[a("span",dr,m(k.value),1)])]),u.value?(r(),i(U,{key:0},[l.value?(r(),i("span",ur,m(l.value),1)):S("",!0),a("div",hr,m(e.item.body),1),a("div",pr,[a("button",{type:"button",class:"btn btn--tonal",onClick:x[0]||(x[0]=ee(g=>n("open",e.item),["stop"]))}," Open formatted "),P(ve,{query:{ws:h(w).workspace.id,kind:"feed",ref:e.item.id}},null,8,["query"]),P(le,{text:"Open in "+e.source.label,url:e.item.url,class:"btn"},null,8,["text","url"])])],64)):c.value?(r(),i("span",_r,m(c.value),1)):S("",!0)])],10,or))}}),Nt=K(fr,[["__scopeId","data-v-8cc9dc10"]]),vr=lt({source:"all",view:ge("wt-feed-view","ticket",{writeDefaults:!1}),query:"",openGroups:new Set}),mr=()=>vr,yr={key:0,class:"feed__new-count"},wr={class:"feed__bar"},gr={key:0,class:"alert alert--inline",role:"alert"},kr={key:1,class:"feed__undo",role:"status"},br={class:"feed__search"},$r={class:"feed__search-count"},xr={key:2,class:"empty"},Sr={key:3,class:"feed__list"},Cr=["title","onClick"],Er={class:"feed__group-text"},Rr={class:"feed__group-key"},Tr={key:0,class:"feed__group-sum"},Ar={class:"feed__group-meta"},Mr={class:"feed__group-kinds"},Ir={class:"timestamp feed__group-when"},zr={key:0,class:"feed__children"},Or=2500,Dr=j({__name:"Feed",emits:["open"],setup(e,{emit:t}){const s=t,n=mr(),o=[{id:"ticket",label:"By ticket"},{id:"flat",label:"Flat"}],l=R(()=>w.workspace.connectors||[]),c=R(()=>Object.fromEntries(l.value.map(I=>[I.id,I]))),d=I=>c.value[I]||{id:I,type:I,label:I},y=R(()=>l.value.length>1?[{id:"all",label:"All"}].concat(l.value.map(I=>({id:I.id,label:I.label}))):[]),_=R({get:()=>y.value.some(I=>I.id===n.source)?n.source:"all",set:I=>{n.source=I}});Z(()=>w.workspace.id,()=>{n.query=""});const u=N("");Z(()=>C.focusFeed,async I=>{var B;const W=w.feed.find(Q=>Q.id===I);C.focusFeed="",W&&(n.source="all",n.query="",n.openGroups.add(W.key||W.ref||W.id),u.value=I,await _e(),(B=document.getElementById(`feed-${I}`))==null||B.scrollIntoView({block:"center"}),setTimeout(()=>{u.value=""},Or))});const k=R(()=>({base:w.marks.base,seen:new Set(w.marks.seen)})),f=I=>ps(I,k.value),p=R(()=>w.feed.filter(f).length),v=R(()=>w.feed.filter(I=>_.value==="all"||I.source===_.value)),x=R(()=>v.value.filter(I=>Xl(I,n.query)).slice(0,200)),g=R(()=>new Map(w.turn.map(I=>[I.key,I]))),z=R(()=>Zl(w.turn)),E=R(()=>(fe.value,Jl(x.value,k.value).map(I=>({...I,row:g.value.get(I.id),move:z.value.has(I.id),when:re(I.newest),kinds:Ql(I.items),open:n.openGroups.has(I.id)||!!n.query})))),b=(I,W)=>{I.has(W)?I.delete(W):I.add(W)},T=I=>b(n.openGroups,I.id),O=I=>b(C.open,I),V=I=>we({seen:[I]}).then(pe),$=N("");ft(()=>{$.value=""});const F=N(null),H=async()=>{const I=new Set(w.marks.seen),W={base:w.marks.base,added:w.feed.map(B=>B.id).filter(B=>!I.has(B))};$.value=await we({seen:w.feed.map(B=>B.id),base:Date.now()}),F.value=$.value?null:W},se=async()=>{const I=F.value;F.value=null,I&&($.value=await we({unseen:I.added,base:I.base}))};return(I,W)=>(r(),Y(je,{id:"feed","size-key":`${h(w).workspace.id}:feed`,title:"What changed",note:"Newest first, every source",tip:"Newest first: comments, reviews, merges and failed checks on your PRs, and ticket changes. Each item opens where it happened.",class:"feed",column:"",resize:"width"},{head:te(()=>[p.value?(r(),i("span",yr,m(p.value)+" new",1)):S("",!0)]),default:te(()=>[a("div",wr,[y.value.length?(r(),Y(Ve,{key:0,modelValue:_.value,"onUpdate:modelValue":W[0]||(W[0]=B=>_.value=B),options:y.value,label:"Feed source"},null,8,["modelValue","options"])):S("",!0),P(Ve,{modelValue:h(n).view,"onUpdate:modelValue":W[1]||(W[1]=B=>h(n).view=B),options:o,label:"Feed view"},null,8,["modelValue"])]),$.value?(r(),i("p",gr,m($.value),1)):S("",!0),F.value?(r(),i("p",kr,[W[5]||(W[5]=G(" Marked all read. ",-1)),a("button",{type:"button",class:"feed__undo-btn",onClick:se},"Undo")])):S("",!0),a("div",br,[be(a("input",{"onUpdate:modelValue":W[2]||(W[2]=B=>h(n).query=B),class:"input feed__search-input",type:"search",placeholder:"Search the feed: key, author, words…","aria-label":"Search the feed",autocomplete:"off"},null,512),[[$e,h(n).query,void 0,{trim:!0}]]),a("span",$r,m(h(n).query?x.value.length+" of "+v.value.length:""),1),a("button",{type:"button",class:"feed__mark-read",onClick:H},"Mark all read")]),h(w).feed.length?(r(),i("ol",Sr,[h(n).view==="ticket"?(r(!0),i(U,{key:0},X(E.value,B=>(r(),i("li",{key:B.id,class:q(["feed__group",{"feed__group--new":B.unread,"feed__group--open":B.open,"feed__group--move":B.move}])},[a("div",{class:"feed__group-head",title:B.move?"Your move on this ticket":void 0,onClick:Q=>T(B)},[P(qe,{open:B.open,"aria-label":"Fold "+B.id},null,8,["open","aria-label"]),a("div",Er,[a("div",Rr,[P(le,{text:B.id,url:B.row?B.row.ticket_url:B.items[0].url,class:"ticket-key feed__group-ticket"},null,8,["text","url"]),B.row||B.title?(r(),i("span",Tr,m(B.row?B.row.summary:B.title),1)):S("",!0)]),a("div",Ar,[a("span",{class:q(["feed__group-count",{"feed__group-count--new":B.unread}])},m(B.unread?B.unread+" new":B.items.length+(B.items.length===1?" event":" events")),3),a("span",Mr,m(B.kinds),1),a("span",Ir,m(B.when),1)])]),P(ve,{class:"feed__group-copy",query:{ws:h(w).workspace.id,kind:"thread",ref:B.id}},null,8,["query"])],8,Cr),B.open?(r(),i("ul",zr,[(r(!0),i(U,null,X(B.items,Q=>(r(),Y(Nt,{key:Q.id,item:Q,source:d(Q.source),fresh:f(Q),flash:u.value===Q.id,expanded:h(C).open.has(Q.id),onOpen:W[3]||(W[3]=Ye=>s("open",Ye)),onToggle:O,onSeen:V},null,8,["item","source","fresh","flash","expanded"]))),128))])):S("",!0)],2))),128)):(r(!0),i(U,{key:1},X(x.value,B=>(r(),Y(Nt,{key:B.id,item:B,source:d(B.source),fresh:f(B),flash:u.value===B.id,expanded:h(C).open.has(B.id),onOpen:W[4]||(W[4]=Q=>s("open",Q)),onToggle:O,onSeen:V},null,8,["item","source","fresh","flash","expanded"]))),128))])):(r(),i("p",xr," No changes yet. New comments, reviews and status changes show up here. "))]),_:1},8,["size-key"]))}}),Br=K(Dr,[["__scopeId","data-v-bbacc3b6"]]),Nr={id:"first-run",class:"island first-run","aria-labelledby":"first-run-title"},Pr={class:"first-run__text"},Wr=j({__name:"FirstRun",setup(e){const t=()=>ss("connectors");return(s,n)=>(r(),i("section",Nr,[n[1]||(n[1]=a("h2",{id:"first-run-title",class:"first-run__title"}," Whose Turn watches your tickets and pull requests and shows what is waiting on you. ",-1)),a("p",Pr,[a("b",null,m(h(w).workspace.name),1),n[0]||(n[0]=G(" has no sources yet, so there is nothing to watch. Connect a repository or a tracker. ",-1))]),a("div",{class:"first-run__actions"},[a("button",{type:"button",class:"btn btn--tonal",onClick:t},"Add a source")]),n[2]||(n[2]=a("p",{class:"first-run__text first-run__ai"},' Or ask Claude: "add my GitHub repository to Whose Turn." ',-1))]))}}),Ur=K(Wr,[["__scopeId","data-v-84359c2d"]]),Vr=new RegExp("(`[^`]{1,500}`)|(\\*\\*[^*]{1,500}\\*\\*)|(\\[[^\\]]{1,300}\\]\\(https?:\\/\\/[^)\\s]{1,2000}\\))|(https?:\\/\\/[^\\s<>()]{1,2000})|(@[A-Za-z0-9-]+(?: [A-Z][a-z]+)?)|((?<![A-Za-z0-9])\\*[^*\\s][^*]{0,500}\\*(?![A-Za-z0-9])|(?<![A-Za-z0-9])_[^_\\s][^_]{0,500}_(?![A-Za-z0-9]))","g"),Pt=(e,t)=>{const s=ut(t);return s?{type:"link",text:e,href:s}:{type:"text",text:e}},Fr=e=>{const t=e[0];if(e[1])return{type:"code",text:t.slice(1,-1)};if(e[2])return{type:"strong",text:t.slice(2,-2)};if(e[3]){const s=t.indexOf("](");return Pt(t.slice(1,s),t.slice(s+2,-1))}return e[4]?Pt(t,t):e[5]?{type:"mention",text:t}:{type:"em",text:t.slice(1,-1)}},Oe=e=>{const t=new RegExp(Vr),s=[];let n=0,o;for(;o=t.exec(e);)o.index>n&&s.push({type:"text",text:e.slice(n,o.index)}),s.push(Fr(o)),n=o.index+o[0].length;return n<e.length&&s.push({type:"text",text:e.slice(n)}),s},Hr=e=>{const t=String(e||"").replace(/<!--[\s\S]*?-->/g,"").split(`
6
- `),s=[];let n=[],o=null;const l=()=>{n.length&&(s.push({type:"paragraph",lines:n.map(Oe)}),n=[]),o=null};for(let c=0;c<t.length;c++){const d=t[c];if(/^\s*```/.test(d)){l();const k=[];for(c++;c<t.length&&!/^\s*```/.test(t[c]);c++)k.push(t[c]);s.push({type:"fence",text:k.join(`
7
- `)});continue}const y=d.match(/^(#{1,6})\s+(.*)$/);if(y){l(),s.push({type:"heading",level:y[1].length<=2?4:5,inline:Oe(y[2])});continue}const _=d.match(/^>\s?(.*)$/);if(_){l(),s.push({type:"quote",inline:Oe(_[1])});continue}const u=d.match(/^\s*([-*+]|\d+[.)])\s+(.*)$/);if(u){const k=o;n.length&&(l(),o=k);const f=/\d/.test(u[1]),p=o,v=p&&p.ordered===f?p:{type:"list",ordered:f,items:[]};v!==p&&s.push(v),o=v,v.items.push(Oe(u[2]));continue}if(!d.trim()){l();continue}o=null,n.push(d)}return l(),s},Be=(e,t,s="")=>{const n=document.createElement(e);return n.textContent=t,s&&(n.className=s),n},Lr=e=>{if(e.type==="text")return document.createTextNode(e.text);if(e.type==="link"){const t=Be("a",e.text);return t.setAttribute("href",e.href),t.setAttribute("target","_blank"),t.setAttribute("rel","noopener"),t}return e.type==="mention"?Be("span",e.text,"markdown-view__mention"):Be(e.type,e.text)},fs=(e,t)=>{e.forEach(s=>t.append(Lr(s)))},Qe=(e,t)=>{const s=document.createElement(e);return fs(t,s),s},qr=e=>{if(e.type==="fence"){const s=document.createElement("pre");return s.append(Be("code",e.text)),s}if(e.type==="heading")return Qe(`h${e.level}`,e.inline);if(e.type==="quote")return Qe("blockquote",e.inline);if(e.type==="list"){const s=document.createElement(e.ordered?"ol":"ul");return e.items.forEach(n=>s.append(Qe("li",n))),s}const t=document.createElement("p");return e.lines.forEach((s,n)=>{n&&t.append(document.createElement("br")),fs(s,t)}),t},jr=e=>{const t=document.createDocumentFragment();return Hr(e).forEach(s=>t.append(qr(s))),t},Yr=j({__name:"MarkdownView",props:{source:{default:""}},setup(e){const t=e,s=N(null);return Ms(()=>{s.value&&s.value.replaceChildren(jr(t.source))}),(n,o)=>(r(),i("div",{ref_key:"host",ref:s,class:"markdown-view"},null,512))}}),vs=K(Yr,[["__scopeId","data-v-dcf42e95"]]),Kr={class:"modal__card"},Xr={class:"modal__head"},Gr={id:"modal-title",class:"modal__title"},Jr=["href"],Zr=j({__name:"CommentModal",setup(e){const t=R(()=>C.modal),s=R(()=>t.value?[t.value.ref,t.value.kind,t.value.who].filter(Boolean).join(" · "):""),n=R(()=>t.value?ut(t.value.url):""),o=R(()=>{var d;const c=(w.workspace.connectors||[]).find(y=>{var _;return y.id===((_=t.value)==null?void 0:_.source)});return"Open in "+(c?c.label:(d=t.value)==null?void 0:d.source)}),l=()=>{C.modal=null};return(c,d)=>t.value?(r(),i("div",{key:0,class:"modal",role:"dialog","aria-modal":"true","aria-labelledby":"modal-title",onClick:ee(l,["self"])},[a("div",Kr,[a("div",Xr,[a("h3",Gr,m(s.value),1),n.value?(r(),i("a",{key:0,class:"btn",href:n.value,target:"_blank",rel:"noopener"},m(o.value),9,Jr)):S("",!0),a("button",{type:"button",class:"btn",onClick:l},"Close")]),P(vs,{source:t.value.body||t.value.text||""},null,8,["source"])])])):S("",!0)}}),Qr=["aria-labelledby"],ei={class:"modal__card"},ti={class:"modal__head"},si=["id"],ni={key:0,class:"modal__foot"},oi=j({__name:"Modal",props:{title:{},labelId:{},flush:{type:Boolean}},emits:["close"],setup(e,{emit:t}){const s=t;return(n,o)=>(r(),i("div",{class:"modal",role:"dialog","aria-modal":"true","aria-labelledby":e.labelId,onClick:o[1]||(o[1]=ee(l=>s("close"),["self"]))},[a("div",ei,[a("div",ti,[a("h3",{id:e.labelId,class:"modal__title"},m(e.title),9,si),me(n.$slots,"head",{},void 0),a("button",{type:"button",class:"btn",onClick:o[0]||(o[0]=l=>s("close"))},"Close")]),a("div",{class:q(["modal__body",{"modal__body--flush":e.flush}])},[me(n.$slots,"default",{},void 0)],2),n.$slots.footer?(r(),i("div",ni,[me(n.$slots,"footer",{},void 0)])):S("",!0)])],8,Qr))}}),ms=K(oi,[["__scopeId","data-v-f2f8cfc9"]]),ai={class:"note-modal__summary"},li={key:0,class:"note-modal__facts"},ri={class:"note-modal__author"},ii={class:"note-modal__label",for:"note-text"},ci=["onKeydown"],di={key:1,class:"alert alert--inline",role:"alert"},ui=j({__name:"NoteModal",setup(e){const t=R(()=>w.turn.find(f=>f.row_id===C.note)),s=R(()=>w.marks.info[C.note]),n=R(()=>{var f;return((f=s.value)==null?void 0:f.note)||""}),o=N(""),l=N(""),c=N(null);Z(()=>C.note,async f=>{var p;f&&(o.value=n.value,l.value="",await _e(),(p=c.value)==null||p.focus())},{immediate:!0,flush:"post"});const d=()=>{C.note=""},y=async()=>{const f=o.value.replace(/\s+/g," ").trim();if(f===n.value){d();return}l.value=await we({notes:{[C.note]:f}}),l.value||d()},_=()=>{var p;const f=((p=s.value)==null?void 0:p.event)||"";d(),jn(f)},u=R(()=>{var f;return(f=s.value)==null?void 0:f.detail}),k=R(()=>{var f,p;return((f=u.value)==null?void 0:f.what)||((p=s.value)==null?void 0:p.outcome)||""});return(f,p)=>{var v,x;return h(C).note&&t.value?(r(),Y(ms,{key:0,title:t.value.key+" · "+((v=s.value)!=null&&v.auto?"Passed on":"Handled"),"label-id":"note-title",onClose:d},Ut({footer:te(()=>[a("button",{type:"button",class:"btn",onClick:d},m(n.value?"Cancel":"Skip"),1),a("button",{type:"button",class:"btn btn--tonal",onClick:y},"Save")]),default:te(()=>{var g,z,E,b,T,O;return[a("p",ai,m(t.value.summary),1),(g=s.value)!=null&&g.auto?(r(),i("dl",li,[p[5]||(p[5]=a("dt",null,"What happened",-1)),a("dd",null,m(k.value),1),(z=u.value)!=null&&z.assignee?(r(),i(U,{key:0},[p[1]||(p[1]=a("dt",null,"Assignee",-1)),a("dd",null,m(u.value.assignee),1)],64)):S("",!0),(E=u.value)!=null&&E.status?(r(),i(U,{key:1},[p[2]||(p[2]=a("dt",null,"Status",-1)),a("dd",null,m(u.value.status),1)],64)):S("",!0),(b=u.value)!=null&&b.summary?(r(),i(U,{key:2},[p[3]||(p[3]=a("dt",null,"Event",-1)),a("dd",null,m(u.value.summary),1)],64)):S("",!0),(T=u.value)!=null&&T.comment?(r(),i(U,{key:3},[p[4]||(p[4]=a("dt",null,"Comment",-1)),a("dd",null,[a("span",ri,m(u.value.comment.author)+":",1),G(" "+m(u.value.comment.text),1)])],64)):S("",!0),p[6]||(p[6]=a("dt",null,"When",-1)),a("dd",null,m(h(Le)(h(w).marks.handled[h(C).note]||"")),1)])):S("",!0),a("label",ii,m((O=s.value)!=null&&O.auto?"Your note on top":"Note")+" (optional)",1),be(a("textarea",{id:"note-text",ref_key:"field",ref:c,"onUpdate:modelValue":p[0]||(p[0]=V=>o.value=V),class:"input note-modal__text",rows:"3",maxlength:"200",placeholder:"Add a note…",onKeydown:ye(ee(y,["prevent"]),["enter"])},null,40,ci),[[$e,o.value]]),l.value?(r(),i("p",di,m(l.value),1)):S("",!0)]}),_:2},[(x=s.value)!=null&&x.auto?{name:"head",fn:te(()=>[s.value.event?(r(),i("button",{key:0,type:"button",class:"btn",onClick:_},"Open in feed")):S("",!0)]),key:"0"}:void 0]),1032,["title"])):S("",!0)}}}),hi=K(ui,[["__scopeId","data-v-6fc1670a"]]),pi={class:"modal__card feedback-sheet__card"},_i={class:"modal__head"},fi={class:"modal__meta"},vi=["aria-disabled"],mi={key:0,class:"alert"},yi={class:"sheet-form"},wi=["placeholder","onKeydown"],gi={key:0,class:"feedback-sheet__note"},ki={key:1,class:"feedback-sheet__note"},bi={key:2,class:"empty"},$i=["href"],xi={key:3,class:"feedback-sheet__reports"},Si=["href"],Ci={class:"feedback-sheet__report-title"},Ei={class:"timestamp"},Ri=j({__name:"FeedbackSheet",setup(e){const t=N(""),s=N(null),n=N(!1),o=N([]),l=N(null),c=N(""),d=N(!0),y=Ce("",1600),_=N([]),u=x=>"/report?id="+encodeURIComponent(x),k=()=>Ee("/api/feedback").then(x=>{d.value=x.configured,c.value=x.configured?"Linear · "+x.project:"not connected",_.value=x.reports||[]},()=>{o.value=[xe+"; past reports cannot be loaded."]}),f=()=>{C.feedback=!1},p=()=>{const x=t.value.trim();if(!x){o.value=["Write at least one line."];return}o.value=[],navigator.clipboard.writeText(x).then(()=>{y.value="sent"},()=>{y.value="failed"})},v=()=>{if(!d.value||n.value)return;const x=t.value.trim();if(!x){o.value=["Write at least one line."];return}n.value=!0,ce("/api/feedback",{text:x,from:"the window",ws:w.workspace.id,kind_ref:{kind:"workspace",ref:w.workspace.id}}).then(g=>{if(n.value=!1,g.error){o.value=dt(g.error);return}l.value=g.issue||null,t.value="",_.value=g.reports||_.value}).catch(g=>{n.value=!1,o.value=[ie(g,{refused:"Not sent",unreachable:tt})]})};return Z(()=>C.feedback,x=>{x&&(o.value=[],l.value=null,k().then(()=>_e(()=>{var g;return(g=s.value)==null?void 0:g.focus()})))}),(x,g)=>h(C).feedback?(r(),i("div",{key:0,class:"modal",role:"dialog","aria-modal":"true","aria-labelledby":"feedback-title",onClick:ee(f,["self"])},[a("div",pi,[a("div",_i,[g[1]||(g[1]=a("h3",{id:"feedback-title",class:"modal__title"},"Report a problem or a wish",-1)),a("span",fi,m(c.value),1),a("button",{type:"button",class:"btn btn--tonal","aria-disabled":!d.value||n.value,onClick:v},m(n.value?"Composing…":"Send"),9,vi),a("button",{type:"button",class:"btn",onClick:f},"Close")]),o.value.length?(r(),i("div",mi,m(o.value.join(" · ")),1)):S("",!0),a("div",yi,[be(a("textarea",{ref_key:"field",ref:s,"onUpdate:modelValue":g[0]||(g[0]=z=>t.value=z),class:"input feedback-sheet__text",rows:"5",placeholder:"Describe the problem or the wish in your own words."+(d.value?" Cmd+Enter sends.":""),autocomplete:"off",onKeydown:[ye(ee(v,["meta","prevent"]),["enter"]),ye(ee(v,["ctrl","prevent"]),["enter"])]},null,40,wi),[[$e,t.value]]),d.value?(r(),i("p",ki," An assistant turns it into a proper issue (title, kind, description) and files it in the Whose Turn backlog with this workspace's summary attached. ")):(r(),i("p",gi,[g[2]||(g[2]=G(" The maintainer's tracker is not connected on this machine, so nothing can be sent from here. Copy your remark and pass it on yourself. ",-1)),a("button",{type:"button",class:"btn",onClick:p},m(h(y)==="sent"?"Copied":h(y)==="failed"?"Could not copy":"Copy remark"),1)])),l.value?(r(),i("p",bi,[g[3]||(g[3]=G(" Filed as ",-1)),a("a",{href:u(l.value.identifier),target:"_blank",rel:"noopener"},m(l.value.identifier),9,$i),G(" · "+m(l.value.title),1)])):S("",!0),_.value.length?(r(),i("div",xi,[g[4]||(g[4]=a("h4",{class:"sheet-form__heading"},"Your reports",-1)),(r(!0),i(U,null,X(_.value,z=>(r(),i("div",{key:z.id,class:"feedback-sheet__report"},[a("a",{href:u(z.id),target:"_blank",rel:"noopener"},m(z.id),9,Si),a("span",Ci,m(z.title),1),a("span",{class:q(["pill",h(Re)("pill",h(nn)(z.outcome))])},m(z.state||"filed"),3),a("span",Ei,m(h(re)(z.changed_at||z.filed_at)),1)]))),128))])):S("",!0)])])])):S("",!0)}}),Ti=K(Ri,[["__scopeId","data-v-8e2792d9"]]),Ai={class:"field-row"},Mi={class:"field-row__label"},Ii={key:0,class:"field-row__check"},zi=["checked"],Oi=["aria-invalid","value"],Di={key:0,value:""},Bi=["value"],Ni=["value"],Pi={key:3,class:"field-row__inline"},Wi=["value"],Ui=["value"],Vi=["aria-invalid","value"],Fi=["aria-invalid","placeholder","value"],Hi={key:6,class:"field-row__error",role:"alert"},Li={key:7,class:"field-row__hint"},qi=j({__name:"FieldRow",props:et({spec:{},placeholder:{default:""},hint:{default:""},error:{default:""}},{modelValue:{type:[String,Array,Boolean]},modelModifiers:{}}),emits:et(["secret"],["update:modelValue"]),setup(e,{emit:t}){const s=e,n=t,o=Wt(e,"modelValue"),l=/^#[0-9a-f]{6}$/i,c=()=>String(o.value??""),d=()=>o.value||[],y=p=>{o.value=p},_=()=>o.value??s.spec.default??!1,u=p=>{o.value=p===(s.spec.default??!1)?void 0:p},k=p=>p.target.value,f=p=>y(p.split(",").map(v=>v.trim()).filter(Boolean));return(p,v)=>(r(),i("div",Ai,[a("label",Mi,m(e.spec.label)+m(e.spec.required?" *":""),1),e.spec.boolean?(r(),i("label",Ii,[a("input",{type:"checkbox",checked:_(),onChange:v[0]||(v[0]=x=>u(x.target.checked))},null,40,zi),G(" "+m(e.hint||e.spec.hint),1)])):e.spec.choices?(r(),i("select",{key:1,class:"input","aria-invalid":!!e.error,value:c(),onChange:v[1]||(v[1]=x=>y(k(x)))},[!e.spec.required&&!e.spec.choices.includes(c())?(r(),i("option",Di,"(default)")):S("",!0),c()&&!e.spec.choices.includes(c())?(r(),i("option",{key:1,value:c()},m(c()),9,Bi)):S("",!0),(r(!0),i(U,null,X(e.spec.choices,x=>(r(),i("option",{key:x,value:x},m(x),9,Ni))),128))],40,Oi)):e.spec.secret?(r(),i("input",{key:2,class:"input",type:"password",placeholder:"paste to replace",autocomplete:"off",onInput:v[2]||(v[2]=x=>n("secret",e.spec.key,k(x)))},null,32)):e.spec.colour?(r(),i("div",Pi,[a("input",{class:"input field-row__colour",type:"color",value:l.test(c())?c():"#888888",onInput:v[3]||(v[3]=x=>y(k(x)))},null,40,Wi),a("input",{class:"input",type:"text",placeholder:"#rrggbb",value:c(),onInput:v[4]||(v[4]=x=>y(k(x)))},null,40,Ui),a("button",{type:"button",class:"btn",onClick:v[5]||(v[5]=x=>y(""))},"None")])):e.spec.list?(r(),i("input",{key:4,class:"input",type:"text","aria-invalid":!!e.error,value:d().join(", "),onInput:v[6]||(v[6]=x=>f(k(x)))},null,40,Vi)):(r(),i("input",{key:5,class:"input",type:"text","aria-invalid":!!e.error,placeholder:e.placeholder,value:c(),onInput:v[7]||(v[7]=x=>y(k(x)))},null,40,Fi)),e.error?(r(),i("small",Hi,m(e.error),1)):S("",!0),!e.spec.boolean&&(e.hint||e.spec.hint)?(r(),i("small",Li,m(e.hint||e.spec.hint),1)):S("",!0)]))}}),ue=K(qi,[["__scopeId","data-v-33714840"]]),ji={class:"modal__card settings-sheet__card"},Yi={class:"modal__head"},Ki={class:"modal__meta"},Xi={key:0,class:"settings-sheet__dirty"},Gi={key:0,class:"settings-sheet__confirm",role:"alertdialog"},Ji={class:"settings-sheet__confirm-text"},Zi={key:1,class:"alert settings-sheet__alert",role:"alert"},Qi={key:2,class:"alert settings-sheet__alert"},ec={key:3,class:"settings-sheet__body"},tc={class:"settings-sheet__list"},sc=["aria-current","onClick"],nc={class:"sheet-form"},oc={key:0,class:"empty"},ac={ref:"connectors-head",class:"sheet-form__heading"},lc={class:"settings-sheet__connector-head"},rc={class:"settings-sheet__connector-name"},ic=["onClick"],cc={class:"settings-sheet__actions"},dc=["onClick"],uc={key:0,class:"settings-sheet__rules"},hc={class:"settings-sheet__rule-when"},pc={class:"settings-sheet__rule-then"},_c={key:1,class:"empty"},fc=j({__name:"SettingsSheet",setup(e){const t=N([]),s=N(0),n=N([]),o=N({workspace:[],theme:[],rules:[],statuses:[]}),l=N(""),c=N([]),d=N({}),y=new Map,_=N({}),u=N({}),k=N({}),f=Fe("connectors-head"),p=new Map,v=N(0),x=N(""),g=N(null),z=N(""),E=R(()=>C.settings&&!z.value&&(v.value>0||Rt(t.value)!==x.value)),b=A=>d.value[`workspaces[${s.value}].${A}`]||"",T=R(()=>{const A=$.value&&y.get(ze($.value));return A&&$.value&&A!==$.value.id?`Its to-dos and marks stay under the old id "${A}"; they do not follow the rename.`:""}),O={key:"id",label:"Source id"},V={key:"label",label:"Label"},$=R(()=>t.value[s.value]),F=R(()=>($.value&&u.value[$.value.id]||[]).map(A=>zn(A,_.value))),H=R(()=>$.value&&k.value[$.value.id]||[]),se=A=>n.value.find(D=>D.type===A.type)||{type:A.type,label:A.type,fields:[]},I=R(()=>t.value.map((A,D)=>({uid:ze(A),label:A.name||A.id||"Workspace "+(D+1)}))),W=R(()=>{var A;return(((A=$.value)==null?void 0:A.connectors)||[]).map(D=>({entry:D,uid:ze(D),spec:se(D)}))}),B=A=>{var M;const D=(M=w.workspaces.find(J=>J.id===A))==null?void 0:M.theme_seed;return D?`empty: ${D}, derived from the workspace id`:"empty derives one from the workspace id"},Q=(A,D)=>A[D],Ye=(A,D,M)=>{p.set(A,Object.assign(p.get(A)||{},{[D]:M})),v.value+=1},ys=(A,D,M)=>D==="id"?A.id=String(M??""):de(A,D,M),ws=()=>{t.value.push(Ct({id:"new-"+(t.value.length+1),name:"New workspace"})),s.value=t.value.length-1},gs=()=>{t.value.splice(s.value,1),s.value=Math.max(0,s.value-1)},ks=()=>{$.value&&(g.value={text:`Delete ${$.value.name||$.value.id}? Its to-dos and marks stay on disk.`,yes:"Delete",no:"Keep",run:gs})},bs=A=>{var D;return(D=$.value)==null?void 0:D.connectors.push({type:A.type})},$s=A=>{$.value&&(p.delete($.value.connectors[A]),$.value.connectors.splice(A,1))},xs=A=>{if(!$.value)return;const D=se($.value.connectors[A]).label;g.value={text:`Remove the ${D} source from ${$.value.name||$.value.id}?`,yes:"Remove",no:"Keep",run:()=>$s(A)}},Ss=()=>Ee("/api/config").then(A=>{z.value="",t.value=(A.workspaces||[]).map(Ct),n.value=A.connectors||[],o.value=A.fields,p.clear(),v.value=0,g.value=null,s.value=Math.max(0,t.value.findIndex(D=>D.id===w.workspace.id)),l.value=A.config_file||"",c.value=A.problems||[],d.value={},y.clear(),t.value.forEach(D=>y.set(ze(D),D.id)),_.value=A.facts||{},u.value=A.tables||{},k.value=A.table_warnings||{},x.value=Rt(t.value)}).catch(()=>{z.value=xe+"; settings cannot be loaded."}).then(_e).then(()=>{var A;C.settingsAt==="connectors"&&((A=f.value)==null||A.scrollIntoView({block:"start"})),C.settingsAt=""}),Ke=()=>{C.settings=!1},mt=()=>{g.value={text:"Discard changes?",yes:"Discard",no:"Keep editing",run:Ke}},yt=()=>E.value?mt():Ke(),wt=A=>{const D=g.value;g.value=null,A&&(D==null||D.run())},Cs=async()=>{try{const A=await ce("/api/config",{workspaces:t.value.map(D=>gn(D)),secrets:bn(t.value,p)});if(A.error){const D=on(A.error);d.value=Object.fromEntries(D.filter(M=>M.field!=="workspaces").map(M=>[M.field,M.description])),c.value=D.length?D.filter(M=>M.field==="workspaces").map(M=>M.description):dt(A.error),D.length&&!c.value.length&&(c.value=["Fix the marked fields; nothing was saved."]);return}Ke(),os()}catch(A){c.value=[ie(A,{unreachable:xe+"; your changes are kept, save again."})]}};return Z(E,A=>{C.settingsDirty=A},{immediate:!0}),Z(()=>C.settingsAsk,A=>{A&&(C.settingsAsk=!1,mt())}),Z(()=>C.settings,A=>{A&&Ss()}),(A,D)=>h(C).settings?(r(),i("div",{key:0,class:"modal",role:"dialog","aria-modal":"true","aria-labelledby":"settings-title",onClick:ee(yt,["self"])},[a("div",ji,[a("div",Yi,[D[2]||(D[2]=a("h3",{id:"settings-title",class:"modal__title"},"Settings",-1)),a("span",Ki,m(l.value),1),E.value?(r(),i("span",Xi,"Unsaved changes")):S("",!0),z.value?S("",!0):(r(),i("button",{key:1,type:"button",class:"btn btn--tonal",onClick:Cs},"Save")),a("button",{type:"button",class:"btn",onClick:yt},"Close")]),g.value?(r(),i("div",Gi,[a("span",Ji,m(g.value.text),1),a("button",{type:"button",class:"btn btn--danger",onClick:D[0]||(D[0]=M=>wt(!0))},m(g.value.yes),1),a("button",{type:"button",class:"btn",onClick:D[1]||(D[1]=M=>wt(!1))},m(g.value.no),1)])):S("",!0),z.value?(r(),i("div",Zi,m(z.value),1)):c.value.length?(r(),i("div",Qi,m(c.value.join(" · ")),1)):S("",!0),z.value?S("",!0):(r(),i("div",ec,[a("ul",tc,[(r(!0),i(U,null,X(I.value,(M,J)=>(r(),i("li",{key:M.uid},[a("button",{type:"button",class:"settings-sheet__workspace","aria-current":J===s.value,onClick:Ae=>s.value=J},m(M.label),9,sc)]))),128)),a("li",null,[a("button",{type:"button",class:"settings-sheet__workspace settings-sheet__workspace--add",onClick:ws}," + Add workspace ")])]),a("div",nc,[$.value?(r(),i(U,{key:1},[D[3]||(D[3]=a("h4",{class:"sheet-form__heading"},"Workspace",-1)),(r(!0),i(U,null,X(o.value.workspace,M=>(r(),Y(ue,{key:M.key,spec:M,hint:M.key==="id"?T.value:"",error:b(M.key),"model-value":Q($.value,M.key),"onUpdate:modelValue":J=>ys($.value,M.key,J)},null,8,["spec","hint","error","model-value","onUpdate:modelValue"]))),128)),D[4]||(D[4]=a("h4",{class:"sheet-form__heading"},"Theme",-1)),(r(!0),i(U,null,X(o.value.theme,M=>{var J;return r(),Y(ue,{key:M.key,spec:M,hint:M.key==="seed"&&!((J=$.value.theme)!=null&&J.seed)?B($.value.id):"","model-value":Q($.value.theme,M.key),"onUpdate:modelValue":Ae=>h(de)($.value.theme,M.key,Ae)},null,8,["spec","hint","model-value","onUpdate:modelValue"])}),128)),a("h4",ac,"Sources",512),(r(!0),i(U,null,X(W.value,({entry:M,spec:J,uid:Ae},gt)=>(r(),i("div",{key:Ae,class:"settings-sheet__connector"},[a("div",lc,[a("strong",rc,m(J.label),1),a("button",{type:"button",class:"btn btn--danger",onClick:oe=>xs(gt)}," Remove ",8,ic)]),P(ue,{spec:O,placeholder:J.type,hint:"only needed when one type appears twice","model-value":Q(M,"id"),"onUpdate:modelValue":oe=>h(de)(M,"id",oe)},null,8,["placeholder","model-value","onUpdate:modelValue"]),P(ue,{spec:V,placeholder:J.label,hint:"its name in the feed","model-value":Q(M,"label"),"onUpdate:modelValue":oe=>h(de)(M,"label",oe)},null,8,["placeholder","model-value","onUpdate:modelValue"]),(r(!0),i(U,null,X(J.fields,oe=>(r(),Y(ue,{key:oe.key,spec:oe,error:b("connectors["+gt+"]."+oe.key),"model-value":Q(M,oe.key),"onUpdate:modelValue":Xe=>h(de)(M,oe.key,Xe),onSecret:(Xe,Es)=>Ye(M,Xe,Es)},null,8,["spec","error","model-value","onUpdate:modelValue","onSecret"]))),128))]))),128)),a("div",cc,[(r(!0),i(U,null,X(n.value,M=>(r(),i("button",{key:M.type,type:"button",class:"btn",onClick:J=>bs(M)}," + Add "+m(M.label)+" source ",9,dc))),128))]),D[5]||(D[5]=a("h4",{class:"sheet-form__heading"},"Rules",-1)),(r(!0),i(U,null,X(o.value.rules,M=>(r(),Y(ue,{key:M.key,spec:M,error:b("rules."+M.key),"model-value":Q($.value.rules,M.key),"onUpdate:modelValue":J=>h(de)($.value.rules,M.key,J)},null,8,["spec","error","model-value","onUpdate:modelValue"]))),128)),(r(!0),i(U,null,X(o.value.statuses,M=>(r(),Y(ue,{key:M.key,spec:M,"model-value":Q($.value.rules.statuses,M.key),"onUpdate:modelValue":J=>h(de)($.value.rules.statuses,M.key,J)},null,8,["spec","model-value","onUpdate:modelValue"]))),128)),D[6]||(D[6]=a("h4",{class:"sheet-form__heading"},"Whose turn table",-1)),D[7]||(D[7]=a("p",{class:"settings-sheet__rules-note"}," The rows in force, top to bottom: the first one that fits decides. Read-only here: ask Claude to change them. ",-1)),(r(!0),i(U,null,X(H.value,M=>(r(),i("p",{key:M,class:"settings-sheet__rules-warning"},m(M),1))),128)),F.value.length?(r(),i("ol",uc,[(r(!0),i(U,null,X(F.value,(M,J)=>(r(),i("li",{key:J,class:"settings-sheet__rule"},[a("span",hc,m(M.when),1),a("span",pc,m(M.then),1)]))),128))])):(r(),i("p",_c,"Save the workspace to see its rows.")),a("div",{class:"settings-sheet__actions"},[a("button",{type:"button",class:"btn btn--danger",onClick:ks}," Delete workspace ")])],64)):(r(),i("p",oc,"No workspaces yet. Add one on the left."))])]))])])):S("",!0)}}),vc=K(fc,[["__scopeId","data-v-8253a01a"]]),mc={class:"modal__meta"},yc={key:0,class:"alert",role:"alert"},wc={class:"whats-new__head"},gc={class:"whats-new__name"},kc={key:0,class:"whats-new__date"},bc={key:1,class:"whats-new__tag whats-new__tag--running"},$c={key:2,class:"whats-new__tag"},xc={key:1,class:"whats-new__empty"},Sc=j({__name:"WhatsNewSheet",setup(e){const{changelog:t,problem:s,unseen:n,load:o,markSeen:l}=_t(),c=N([]),d=()=>{C.whatsNew=!1};return Z(()=>C.whatsNew,async y=>{y&&(t.value||await o(),c.value=n.value.map(_=>_.version),l())}),(y,_)=>h(C).whatsNew?(r(),Y(ms,{key:0,title:"What's new","label-id":"whats-new-title",flush:"",onClose:d},Ut({default:te(()=>{var u;return[h(s)?(r(),i("div",yc,m(h(s)),1)):S("",!0),(r(!0),i(U,null,X((u=h(t))==null?void 0:u.versions,k=>{var f;return r(),i("article",{key:k.version,class:"whats-new__version"},[a("header",wc,[a("h4",gc,m(k.version),1),k.date?(r(),i("span",kc,m(k.date),1)):S("",!0),k.version===((f=h(t))==null?void 0:f.current)?(r(),i("span",bc,"Running")):S("",!0),c.value.includes(k.version)?(r(),i("span",$c,"New")):S("",!0)]),k.sections.length?(r(),Y(vs,{key:0,source:h(ho)(k)},null,8,["source"])):(r(),i("p",xc,"No notes for this version."))])}),128))]}),_:2},[h(t)?{name:"head",fn:te(()=>[a("span",mc,"Running "+m(h(t).current),1)]),key:"0"}:void 0]),1024)):S("",!0)}}),Cc=K(Sc,[["__scopeId","data-v-78394e08"]]),Ec={class:"app__shell"},Rc=["inert"],Tc={id:"wt",class:"dashboard dashboard--fit"},Ac=["inert"],Mc={class:"dashboard__main"},Ic=j({__name:"App",setup(e){const t=R(()=>!!w.workspace.id&&!w.workspace.connectors.length),{size:s}=pt(()=>`${w.workspace.id}:feed`),n=R(()=>s.value===null?void 0:{"--feed-width":s.value+"px"}),o=_t(),l=R(()=>ns.value!==null);oo(l),ao(l),Z(Je,fn,{flush:"post"});const c={light:{fill:"#d8e2ff",ink:"#001a41",dot:"#2c5697"},dark:{fill:"#2b4678",ink:"#d8e2ff",dot:"#adc6ff"}},d=R(()=>{const{id:y,name:_}=w.workspace;if(!y)return null;const u=Je.value,k=c[He.value?"dark":"light"],f={fill:u["--md-primary-container"]||k.fill,ink:u["--md-on-primary-container"]||k.ink,dot:u["--md-primary"]||k.dot};return"data:image/svg+xml,"+encodeURIComponent(to(rs({id:y,name:_},it),f))});return Ys(d),ct("Escape",Wn,{target:document}),rt(()=>{Pn(),o.load()}),(y,_)=>(r(),i("div",{class:"app",style:Ne(h(Je))},[P(To,{inert:l.value,onSettings:_[0]||(_[0]=u=>h(C).settings=!0),onWhatsNew:_[1]||(_[1]=u=>h(C).whatsNew=!0)},null,8,["inert"]),a("div",Ec,[P(Qo,{inert:l.value,onReport:_[2]||(_[2]=u=>h(C).feedback=!0)},null,8,["inert"]),h(Tt).length?(r(),i("div",{key:0,class:"alert",inert:l.value},[G(m(h(Tt).join(" · "))+" ",1),a("button",{type:"button",class:"alert__action",onClick:_[3]||(_[3]=u=>h(ss)())},"Open Settings")],8,Rc)):S("",!0),a("div",Tc,[_[5]||(_[5]=a("canvas",{id:"backdrop",class:"dashboard__backdrop","aria-hidden":"true"},null,-1)),P(wa,{inert:l.value},null,8,["inert"]),t.value?(r(),Y(Ur,{key:0,inert:l.value},null,8,["inert"])):(r(),i("div",{key:1,class:"dashboard__layout",style:Ne(n.value),inert:l.value},[a("div",Mc,[P(gl,{class:"dashboard__move"}),P(Dl,{class:"dashboard__todo"}),P(Yl,{class:"dashboard__waiting"})]),P(Br,{class:"dashboard__feed",onOpen:_[4]||(_[4]=u=>h(C).modal=u)})],12,Ac)),P(Ti),P(vc),P(Cc),P(Zr),P(hi)])])],4))}}),zc=K(Ic,[["__scopeId","data-v-580c2b4a"]]);Is(zc).mount("#app");Ln();yn();
@@ -1 +0,0 @@
1
- .rail[data-v-ffe046bc]{position:fixed;inset:0 auto 0 0;z-index:30;box-sizing:border-box;display:flex;flex-direction:column;gap:4px;width:60px;padding:12px 8px;overflow:hidden;border-right:1px solid var(--glass-edge);background:rgb(var(--glass),.72);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);font-family:var(--md-font);color:var(--md-on-surface);transition:width .18s ease,box-shadow .18s ease}.rail[data-v-ffe046bc]:hover,.rail[data-v-ffe046bc]:has(:focus-visible){width:232px;box-shadow:12px 0 32px #0000001f}.app:has(.modal) .rail[data-v-ffe046bc]{z-index:0}.rail__item[data-v-ffe046bc]{position:relative;display:flex;align-items:center;gap:12px;height:44px;padding:0 4px;border-radius:12px;color:inherit;text-decoration:none;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none}.rail__item[data-v-ffe046bc]:focus-visible{outline:var(--focus-ring);outline-offset:-2px}.rail__item--dragging[data-v-ffe046bc]{opacity:.4}.rail__item[data-drop=before][data-v-ffe046bc]{box-shadow:0 -2px 0 0 var(--md-primary)}.rail__item[data-drop=after][data-v-ffe046bc]{box-shadow:0 2px 0 0 var(--md-primary)}.rail__item[data-v-ffe046bc]:hover{background:var(--state-hover)}.rail__item[aria-selected=true][data-v-ffe046bc]{background:var(--md-secondary-container);color:var(--md-on-secondary-container)}.rail__icon[data-v-ffe046bc]{flex:none;display:block;width:36px;height:36px;border-radius:10px}.rail__gear[data-v-ffe046bc]{flex:none;display:grid;place-items:center;width:36px;height:36px;color:var(--md-on-surface-variant)}.rail__label[data-v-ffe046bc]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:500;opacity:0;transition:opacity .12s ease}.rail:hover .rail__label[data-v-ffe046bc],.rail:has(:focus-visible) .rail__label[data-v-ffe046bc]{opacity:1}.rail__badge[data-v-ffe046bc]{position:absolute;top:2px;left:30px;box-sizing:border-box;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--md-primary);color:var(--md-on-primary);font-size:10px;font-weight:700;line-height:18px;text-align:center}.rail:hover .rail__badge[data-v-ffe046bc],.rail:has(:focus-visible) .rail__badge[data-v-ffe046bc]{position:static;flex:none}.rail__warn[data-v-ffe046bc]{position:absolute;left:26px;top:26px;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;background:var(--md-error);color:var(--md-on-error);font-size:10px;font-weight:800;line-height:1}.rail__dot[data-v-ffe046bc]{position:absolute;top:6px;left:28px;box-sizing:border-box;width:10px;height:10px;border:2px solid var(--md-surface);border-radius:50%;background:var(--md-primary)}.rail__spacer[data-v-ffe046bc]{flex:1}.ai-button[data-v-46197bdc]{position:relative;display:inline-grid;place-items:center;width:26px;height:26px;border-radius:50%;cursor:pointer;color:var(--md-primary);background:rgb(var(--md-state),.06);vertical-align:middle;transition:background .12s ease,transform .12s ease}.ai-button__icon[data-v-46197bdc]{width:15px;height:15px}.ai-button__badge[data-v-46197bdc]{position:absolute;right:-3px;top:-3px;width:12px;height:12px}.ai-button[data-v-46197bdc]:hover{background:var(--md-secondary-container);transform:scale(1.08)}.ai-button[data-v-46197bdc]:focus-visible{outline:var(--focus-ring);outline-offset:1px}.ai-button.ai-button--sent[data-v-46197bdc]{background:var(--md-tertiary-container);color:var(--md-on-tertiary-container)}.ai-button.ai-button--failed[data-v-46197bdc]{background:var(--md-error-container);color:var(--md-on-error-container)}.ai-button--big[data-v-46197bdc]{width:32px;height:32px;background:rgb(var(--glass),.7)}.ai-button--big .ai-button__icon[data-v-46197bdc]{width:18px;height:18px}.update-chip[data-v-c5c2c37f]{display:inline-flex;gap:8px;align-items:center;height:26px;padding:0 12px;font:inherit;color:var(--md-on-primary-container);white-space:nowrap;cursor:pointer;background:var(--md-primary-container);border:0;border-radius:var(--md-r-chip)}.update-chip--busy[data-v-c5c2c37f]{cursor:default}.update-chip--ready[data-v-c5c2c37f]{color:var(--md-on-primary);background:var(--md-primary)}.update-chip--failed[data-v-c5c2c37f]{color:var(--md-on-error-container);background:var(--md-error-container)}.update-chip__spinner[data-v-c5c2c37f]{width:12px;height:12px;border:2px solid currentcolor;border-top-color:transparent;border-radius:50%;animation:update-chip-spin-c5c2c37f .9s linear infinite}@media(prefers-reduced-motion:reduce){.update-chip__spinner[data-v-c5c2c37f]{animation:none}}.update-chip__link[data-v-c5c2c37f]{padding:0;font:inherit;color:inherit;text-decoration:underline;cursor:pointer;background:none;border:0}@keyframes update-chip-spin-c5c2c37f{to{transform:rotate(360deg)}}.status-bar[data-v-1a4ce564]{display:flex;align-items:center;gap:10px;margin:0 4px 8px;font-family:var(--md-font);font-size:12px;color:var(--md-on-surface-variant)}.status-bar__btn[data-v-1a4ce564]{height:26px;padding:0 12px;font-size:12px;text-decoration:none}.status-bar__btn--busy[data-v-1a4ce564]{opacity:.6;pointer-events:none}.status-bar__report[data-v-1a4ce564]{gap:6px}.status-bar__icon[data-v-1a4ce564]{width:16px;height:16px}.status-bar__live[data-v-1a4ce564]{width:8px;height:8px;border-radius:50%;background:var(--live-on);box-shadow:0 0 0 0 var(--live-pulse-rest);animation:status-bar-pulse-1a4ce564 2s infinite}.status-bar__live--off[data-v-1a4ce564]{background:var(--live-off);animation:none}.status-bar__live--warn[data-v-1a4ce564]{background:var(--live-warn);animation:none}.status-bar__notice[data-v-1a4ce564]{color:var(--live-off)}.status-bar__ai-hint[data-v-1a4ce564]{margin-left:-4px}@keyframes status-bar-pulse-1a4ce564{0%{box-shadow:0 0 0 0 var(--live-pulse-from)}70%{box-shadow:0 0 0 8px var(--live-pulse-to)}to{box-shadow:0 0 0 0 var(--live-pulse-to)}}@media(prefers-reduced-motion:reduce){.status-bar__live[data-v-1a4ce564]{animation:none}}.workspace-header[data-v-3421a7f0]{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,2fr) 32px;gap:8px;padding:8px;background:linear-gradient(135deg,var(--blob-1),var(--blob-2));color:var(--header-ink, var(--md-on-primary-container))}@media(prefers-reduced-transparency:reduce){.workspace-header[data-v-3421a7f0]{background:var(--md-s-low)}}.workspace-header__title[data-v-3421a7f0]{display:grid;align-content:center;gap:4px;padding:12px 16px}.workspace-header__name[data-v-3421a7f0]{margin:0;font-size:28px;font-weight:400;line-height:36px;color:var(--md-on-primary-container)}.workspace-header__line[data-v-3421a7f0]{margin:0;font-size:14px;opacity:.85}.workspace-header__count[data-v-3421a7f0]{font-weight:700;font-variant-numeric:tabular-nums}.workspace-header__give[data-v-3421a7f0]{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;margin-top:8px;white-space:nowrap}.workspace-header__links[data-v-3421a7f0]{display:inline-flex;gap:6px}.workspace-header__links a[data-v-3421a7f0]{display:inline-flex;align-items:center;height:24px;padding:0 10px;border:1px solid var(--glass-edge);border-radius:999px;background:rgb(var(--glass),.55);color:inherit;font-size:12px;font-weight:500}.workspace-header__links a[data-v-3421a7f0]:hover{background:rgb(var(--glass),.85)}.workspace-header__fold[data-v-3421a7f0]{grid-row:1;grid-column:3;place-self:center center;margin:0;color:inherit}.workspace-header__tiles[data-v-3421a7f0]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.workspace-header__tile[data-v-3421a7f0]{display:grid;align-content:start;gap:4px;padding:12px 16px;border:1px solid var(--glass-edge);border-radius:var(--md-r-card);background:rgb(var(--glass),calc(var(--glass-a) + .1));-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:var(--md-on-surface)}@media(prefers-reduced-transparency:reduce){.workspace-header__tile[data-v-3421a7f0]{background:var(--md-s-low);-webkit-backdrop-filter:none;backdrop-filter:none}}.workspace-header__tile-label[data-v-3421a7f0]{color:var(--md-on-surface-variant);font-size:12px;font-weight:500;line-height:16px;letter-spacing:.03em}.workspace-header__tile-value[data-v-3421a7f0]{min-height:40px;font-size:32px;font-weight:400;line-height:40px;font-variant-numeric:tabular-nums}.workspace-header__tile--you[data-v-3421a7f0]{border-color:transparent;background:var(--md-primary);color:var(--md-on-primary)}.workspace-header__tile--you .workspace-header__tile-label[data-v-3421a7f0]{color:var(--md-on-primary);opacity:.85}.workspace-header__tile--fail .workspace-header__tile-value[data-v-3421a7f0]{color:var(--md-error)}.workspace-header--collapsed[data-v-3421a7f0]{grid-template-columns:minmax(0,1fr) 32px;padding:4px 8px}.workspace-header--collapsed .workspace-header__title[data-v-3421a7f0]{display:flex;flex-wrap:wrap;align-items:baseline;gap:14px;padding:4px 8px}.workspace-header--collapsed .workspace-header__name[data-v-3421a7f0]{font-size:18px;line-height:28px}.workspace-header--collapsed .workspace-header__tiles[data-v-3421a7f0],.workspace-header--collapsed .workspace-header__give[data-v-3421a7f0]{display:none}.workspace-header--collapsed .workspace-header__fold[data-v-3421a7f0]{grid-column:2}.workspace-header--collapsed .workspace-header__strip[data-v-3421a7f0]{font-size:13px}@media(max-width:900px){.workspace-header[data-v-3421a7f0],.workspace-header--collapsed[data-v-3421a7f0]{grid-template-columns:minmax(0,1fr) 32px}.workspace-header__fold[data-v-3421a7f0]{grid-column:2}.workspace-header__tiles[data-v-3421a7f0]{grid-column:1 / -1}}@media(max-width:640px){.workspace-header__tiles[data-v-3421a7f0]{grid-template-columns:repeat(2,minmax(0,1fr))}}.chevron[data-v-a14fa9ba]{flex:none;display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;color:var(--md-on-surface-variant);cursor:pointer;-webkit-user-select:none;user-select:none}.chevron[data-v-a14fa9ba]:before{content:"";width:7px;height:7px;border-right:2px solid currentcolor;border-bottom:2px solid currentcolor;transform:translate(-1px) rotate(-45deg);transition:transform .15s ease}.chevron--open[data-v-a14fa9ba]:before{transform:translateY(-2px) rotate(45deg)}.chevron[data-v-a14fa9ba]:hover{background:var(--state-hover)}.chevron[data-v-a14fa9ba]:focus-visible{outline:var(--focus-ring)}.resize-handle[data-v-8e637688]{position:absolute;z-index:2;touch-action:none;border-radius:4px}.resize-handle[data-v-8e637688]:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;border-radius:2px;background:var(--md-outline-variant);opacity:0;transition:opacity .15s ease}.resize-handle[data-v-8e637688]:hover:after,.resize-handle[data-v-8e637688]:focus-visible:after{opacity:1}.resize-handle[data-v-8e637688]:focus-visible{outline:var(--focus-ring)}.resize-handle--y[data-v-8e637688]{right:0;bottom:0;left:0;height:10px;cursor:row-resize}.resize-handle--y.resize-handle--top[data-v-8e637688]{top:0;bottom:auto}.resize-handle--y[data-v-8e637688]:after{width:40px;height:4px}.resize-handle--x[data-v-8e637688]{top:0;bottom:0;left:0;width:10px;cursor:col-resize}.resize-handle--x[data-v-8e637688]:after{width:4px;height:40px}@media(max-width:900px){.resize-handle[data-v-8e637688]{display:none}}.island__head[data-v-37152aeb]{display:flex;flex-wrap:nowrap;align-items:center;justify-content:space-between;gap:8px;padding:12px 20px 12px 12px}.island__title[data-v-37152aeb]{flex:none;margin:0;font-size:16px;line-height:24px;font-weight:500;letter-spacing:.01em;white-space:nowrap}.island__note[data-v-37152aeb]{display:flex;flex:1 1 auto;align-items:center;justify-content:flex-end;gap:6px;min-width:0;margin:0;overflow:visible;color:var(--md-on-surface-variant);font-size:12px;line-height:16px;letter-spacing:.03em;text-align:right;white-space:nowrap;text-overflow:ellipsis}.island__note-text[data-v-37152aeb]{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.island__body[data-v-37152aeb]{padding:0 20px 12px}.island--column .island__head[data-v-37152aeb]{gap:4px}.island--column .island__body[data-v-37152aeb]{display:flex;flex-direction:column;min-height:0;padding-top:4px}.island.island--collapsed .island__body[data-v-37152aeb]{display:none}@media(min-width:901px){.dashboard--fit .dashboard__main .island__body[data-v-37152aeb]{display:flex;flex:1 1 auto;flex-direction:column;min-height:0;padding-bottom:0}.dashboard--fit .dashboard__main .island.island--collapsed .island__body[data-v-37152aeb]{display:none}}.segmented[data-v-201d5e2f]{display:inline-flex;overflow:hidden;border:1px solid var(--md-outline);border-radius:999px;vertical-align:middle}.segmented--chips[data-v-201d5e2f]{flex:none;align-self:flex-start;background:rgb(var(--glass),.4)}.segmented__option[data-v-201d5e2f]{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 11px;border-left:1px solid var(--md-outline);font-size:12px;font-weight:500;color:var(--md-on-surface);cursor:pointer;-webkit-user-select:none;user-select:none}.segmented__option[data-v-201d5e2f]:first-child{border-left:0}.segmented__option[aria-pressed=true][data-v-201d5e2f]{background:var(--md-secondary-container);color:var(--md-on-secondary-container)}.segmented__option[data-v-201d5e2f]:focus-visible{outline:var(--focus-ring);outline-offset:-2px}.segmented--chips .segmented__option[data-v-201d5e2f]{gap:normal;height:32px;padding:0 14px;font-family:var(--md-font);font-size:14px;letter-spacing:.01em}.segmented--chips .segmented__option[data-v-201d5e2f]:hover{background:var(--state-hover)}.segmented--chips .segmented__option[aria-pressed=true][data-v-201d5e2f]{background:var(--md-secondary-container);color:var(--md-on-secondary-container)}.ticket-cell__summary[data-v-e2d11a0b]{display:block;max-width:44ch;margin-top:2px;color:var(--md-on-surface-variant);font-size:12px;line-height:16px;letter-spacing:.03em}.pr-cell[data-v-6078ccbd]{display:flex;flex-direction:column;align-items:flex-start;gap:4px}.pr-cell__link[data-v-6078ccbd]{max-width:100%;overflow-wrap:anywhere}.recently-done[data-v-68a4b78e]{position:relative;display:flex;flex:0 1 auto;flex-direction:column;min-height:33px;margin:0 -20px;padding:0 20px;overflow:hidden;border-top:1px solid var(--md-outline-variant)}.recently-done[open][data-v-68a4b78e]{min-height:128px}.recently-done__summary[data-v-68a4b78e]{display:flex;flex:none;align-items:center;gap:4px;min-height:40px;list-style:none;color:var(--md-on-surface-variant);font-size:14px;font-weight:500;cursor:pointer}.recently-done__summary[data-v-68a4b78e]::-webkit-details-marker{display:none}.recently-done__list[data-v-68a4b78e]{flex:1 1 auto;min-height:0;max-height:min(30vh,240px);margin:0 -20px;padding-bottom:8px;overflow:auto}.row-scroll[data-v-e7f699d1]{overflow-x:auto;margin:0 -20px}@media(min-width:901px){.dashboard--fit .dashboard__main .row-scroll[data-v-e7f699d1]{flex:1 1 auto;min-height:0;overflow:auto;scroll-padding-top:40px}.dashboard--fit .row-scroll[data-v-e7f699d1]::-webkit-scrollbar{width:8px;height:8px}.dashboard--fit .row-scroll[data-v-e7f699d1]::-webkit-scrollbar-thumb{border-radius:4px;background:var(--md-outline-variant)}}.dashboard--fit .dashboard__main .row-scroll--floor[data-v-e7f699d1]{min-height:5rem}.row-scroll__more[data-v-e7f699d1]{flex:none;display:block;margin:0 -20px;padding:4px 20px 6px;border-top:1px solid var(--md-outline-variant);color:var(--md-primary);font-size:13px;font-weight:500;cursor:pointer}.row-scroll__more[data-v-e7f699d1]:hover{background:rgb(var(--md-state),.06)}.row-scroll__more[data-v-e7f699d1]:focus-visible{outline:var(--focus-ring);outline-offset:-2px}.your-move__undo[data-v-3a6ca0d0]{margin:0;padding:4px 0;color:var(--md-on-surface-variant);font-size:13px}.your-move__undo-btn[data-v-3a6ca0d0]{color:var(--md-primary);font-weight:500;cursor:pointer}.your-move__view[data-v-3a6ca0d0]{margin-left:10px}.your-move__next[data-v-3a6ca0d0]{font-weight:500}.your-move__line-cell[data-v-3a6ca0d0]{max-width:0;padding-top:0}.your-move__line[data-v-3a6ca0d0]{display:flex;align-items:center;gap:8px;box-sizing:border-box;width:100%;min-width:0;height:24px;padding:0 10px 0 8px;border-left:2px solid var(--md-outline);border-radius:0 6px 6px 0;background:var(--md-s-high);color:var(--md-on-surface-variant);font-size:12px;line-height:16px;text-align:left;cursor:pointer}.your-move__line[data-v-3a6ca0d0]:hover{background:var(--md-s-highest)}.your-move__line[data-v-3a6ca0d0]:focus-visible{outline:var(--focus-ring);outline-offset:1px}.your-move__arrow[data-v-3a6ca0d0]{flex:none}.your-move__outcome[data-v-3a6ca0d0]{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.your-move__time[data-v-3a6ca0d0]{flex:none;margin-left:auto;font-variant-numeric:tabular-nums}.your-move__quote[data-v-3a6ca0d0]{max-width:48ch;color:var(--md-on-surface-variant);font-size:12px;line-height:16px}.your-move__quote a[data-v-3a6ca0d0]{color:var(--md-on-surface-variant)}.your-move__problem[data-v-3a6ca0d0]{margin:4px 0 0;padding:4px 10px;font-size:12px}.your-move__mark[data-v-3a6ca0d0]{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 12px;border:1px solid var(--md-outline);border-radius:999px;color:var(--md-on-surface);font-size:12px;font-weight:600;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none}.your-move__mark[data-v-3a6ca0d0]:hover{background:var(--state-hover)}.your-move__mark[data-v-3a6ca0d0]:before{content:"";width:9px;height:5px;border-bottom:2px solid currentcolor;border-left:2px solid currentcolor;transform:translateY(-2px) rotate(-45deg)}.your-move__mark--undo[data-v-3a6ca0d0]:before{display:none}.your-move__mark[data-v-3a6ca0d0]:focus-visible{outline:var(--focus-ring);outline-offset:2px}.your-move__row--lined td[data-v-3a6ca0d0]{border-bottom:0;padding-bottom:8px}.your-move__row--handled td[data-v-3a6ca0d0],.your-move__line-row--handled td[data-v-3a6ca0d0]{opacity:.55}.your-move__row--handled .your-move__next[data-v-3a6ca0d0]{text-decoration:line-through;text-decoration-color:var(--md-outline)}.your-move__row--handled .table__actions[data-v-3a6ca0d0]{opacity:1}.todos__view[data-v-6dbdbb66]{margin-left:10px}.todos__add[data-v-6dbdbb66]{display:flex;align-items:center;gap:8px;padding:8px 0}.todos__input[data-v-6dbdbb66]{flex:1;min-width:0;height:32px;padding:0 12px;background:rgb(var(--md-state),.04);font-size:14px}.todos__list[data-v-6dbdbb66]{margin:0 -20px;padding:0;overflow-y:auto;list-style:none}.todos__item[data-v-6dbdbb66]{display:grid;grid-template-columns:20px minmax(0,1fr) auto 20px 20px;align-items:center;gap:10px;padding:7px 20px;border-top:1px solid var(--md-outline-variant)}.todos__item[data-v-6dbdbb66]:first-child{border-top:0}.todos__item[data-v-6dbdbb66]:hover{background:rgb(var(--md-state),.06)}.todos__text[data-v-6dbdbb66]{overflow-wrap:anywhere}.todos__item--done .todos__text[data-v-6dbdbb66]{color:var(--md-on-surface-variant);text-decoration:line-through}.todos__empty[data-v-6dbdbb66]{display:block;padding:6px 20px 10px}.todos__check[data-v-6dbdbb66]{box-sizing:border-box;display:grid;place-items:center;width:18px;height:18px;border:2px solid var(--md-outline);border-radius:5px;cursor:pointer}.todos__check--on[data-v-6dbdbb66]{border-color:var(--md-primary);background:var(--md-primary)}.todos__check--on[data-v-6dbdbb66]:after{content:"";width:8px;height:4px;border-bottom:2px solid var(--md-on-primary);border-left:2px solid var(--md-on-primary);transform:translateY(-1px) rotate(-45deg)}.todos__meta[data-v-6dbdbb66]{color:var(--md-on-surface-variant);font-size:11px;white-space:nowrap}.todos__edit[data-v-6dbdbb66]{min-width:0;height:28px;padding:0 8px;font-size:14px}.todos__undo[data-v-6dbdbb66]{margin:0;padding:4px 0;color:var(--md-on-surface-variant);font-size:13px}.todos__undo-btn[data-v-6dbdbb66]{color:var(--md-primary);font-weight:500;cursor:pointer}.todos__pencil[data-v-6dbdbb66],.todos__delete[data-v-6dbdbb66]{color:var(--md-on-surface-variant);font-size:16px;line-height:1;text-align:center;cursor:pointer;opacity:0}.todos__pencil[data-v-6dbdbb66]:focus-visible,.todos__delete[data-v-6dbdbb66]:focus-visible{opacity:1}.todos__item:hover .todos__pencil[data-v-6dbdbb66],.todos__item:hover .todos__delete[data-v-6dbdbb66]{opacity:1}@media(min-width:901px){.dashboard--fit .dashboard__todo .todos__list[data-v-6dbdbb66]{flex:1 1 auto;min-height:0}.dashboard--fit .dashboard__todo .todos__list[data-v-6dbdbb66]:not(:has(.todos__item)){display:none}}.waiting__table[data-v-90e8bf77]{table-layout:fixed}.waiting__col--ticket[data-v-90e8bf77]{width:22%}.waiting__col--status[data-v-90e8bf77],.waiting__col--with[data-v-90e8bf77]{width:6.5rem}.waiting__col--pr[data-v-90e8bf77]{width:4.5rem}.waiting__col--actions[data-v-90e8bf77]{width:2rem}.waiting__reason[data-v-90e8bf77]{display:block;min-width:0;max-width:44ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feed-item[data-v-8cc9dc10]{display:grid;grid-template-columns:32px minmax(0,1fr);align-items:start;gap:12px;padding:10px 20px;cursor:default}.feed-item[data-v-8cc9dc10]:hover{background:var(--state-hover)}.feed-item.feed-item--open[data-v-8cc9dc10]{background:rgb(var(--md-state),.05)}.feed-item.feed-item--new[data-v-8cc9dc10]{background:var(--new-bg);box-shadow:inset 4px 0 0 var(--new),inset 0 0 0 1px var(--new-edge)}.feed-item.feed-item--flash[data-v-8cc9dc10]{box-shadow:inset 0 0 0 2px var(--md-primary)}.feed-item__icon[data-v-8cc9dc10]{flex:none;display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:var(--md-s-highest);color:var(--md-on-surface-variant);font-size:11px;font-weight:700;letter-spacing:.02em}.feed-item__icon--jira[data-v-8cc9dc10]{background:var(--md-primary-container);color:var(--md-on-primary-container)}.feed-item__icon--bad[data-v-8cc9dc10]{background:var(--md-error-container);color:var(--md-on-error-container)}.feed-item__icon--ok[data-v-8cc9dc10]{background:var(--md-tertiary-container);color:var(--md-on-tertiary-container)}.feed-item__body[data-v-8cc9dc10]{display:grid;gap:2px;min-width:0}.feed-item__top[data-v-8cc9dc10]{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;font-size:14px}.feed-item__right[data-v-8cc9dc10]{flex:none;display:inline-flex;align-items:center;gap:4px;margin-left:auto}.feed-item__kind[data-v-8cc9dc10]{font-weight:500}.feed-item__kind--bad[data-v-8cc9dc10]{color:var(--md-error)}.feed-item__who[data-v-8cc9dc10]{color:var(--md-on-surface-variant)}.feed-item__text[data-v-8cc9dc10]{display:-webkit-box;overflow:hidden;color:var(--md-on-surface-variant);font-size:12px;line-height:16px;letter-spacing:.03em;overflow-wrap:anywhere;-webkit-line-clamp:2;-webkit-box-orient:vertical}.feed-item__full[data-v-8cc9dc10]{max-height:16rem;margin-top:6px;padding:10px 12px;overflow:auto;border:1px solid var(--glass-edge);border-radius:var(--md-r-chip);background:rgb(var(--glass),.55);color:var(--md-on-surface);font-size:13px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}.feed-item__actions[data-v-8cc9dc10]{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.feed-item--new .feed-item__kind[data-v-8cc9dc10]{color:var(--md-on-surface);font-weight:700}.feed-item--new .feed-item__text[data-v-8cc9dc10]{color:var(--md-on-surface)}.feed-item--new .feed-item__icon[data-v-8cc9dc10]{box-shadow:0 0 0 2px var(--new)}.feed-item--new .feed-item__when[data-v-8cc9dc10]:before{content:"NEW";display:inline-block;margin-right:6px;padding:1px 6px;border-radius:4px;background:var(--new);color:var(--new-ink);font-size:10px;font-weight:800;letter-spacing:.06em;vertical-align:1px}.feed-item:not(.feed-item--new) .feed-item__body[data-v-8cc9dc10]{opacity:.78}@media(max-width:1500px){.feed[data-v-bbacc3b6] .island__note-text{display:none}}.feed__undo[data-v-bbacc3b6]{margin:0 0 4px;color:var(--md-on-surface-variant);font-size:13px}.feed__undo-btn[data-v-bbacc3b6]{color:var(--md-primary);font-weight:500;cursor:pointer}.feed__bar[data-v-bbacc3b6]{display:flex;flex:none;flex-wrap:nowrap;align-items:center;justify-content:space-between;gap:8px;margin:0 0 8px}.feed__new-count[data-v-bbacc3b6]{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:999px;background:var(--new);color:var(--new-ink);box-shadow:0 0 12px var(--new-glow);font-size:12px;font-weight:800}.feed__mark-read[data-v-bbacc3b6]{flex:none;padding:4px 8px;border-radius:999px;color:var(--md-primary);font-size:13px;font-weight:500;cursor:pointer;-webkit-user-select:none;user-select:none}.feed__mark-read[data-v-bbacc3b6]:hover{background:var(--state-hover)}.feed__mark-read[data-v-bbacc3b6]:focus-visible{outline:var(--focus-ring)}.feed__search[data-v-bbacc3b6]{display:flex;flex:none;align-items:center;gap:8px;margin:0 0 8px}.feed__search-input[data-v-bbacc3b6]{flex:1;min-width:0;height:30px;padding:0 10px;font-size:13px}.feed__search-count[data-v-bbacc3b6]{flex:none;color:var(--md-on-surface-variant);font-size:12px}.feed__list[data-v-bbacc3b6]{flex:1 1 auto;min-height:12rem;margin:0 -20px;padding:0 0 4px;overflow-y:auto;list-style:none}.feed__group[data-v-bbacc3b6]{display:grid;grid-template-columns:minmax(0,1fr);align-items:start;gap:0;padding:0;cursor:default}.feed__group[data-v-bbacc3b6]:hover{background:var(--state-hover)}.feed__group.feed__group--open[data-v-bbacc3b6]{background:rgb(var(--md-state),.05)}.feed__group.feed__group--new[data-v-bbacc3b6]{background:var(--new-bg);box-shadow:inset 4px 0 0 var(--new),inset 0 0 0 1px var(--new-edge)}.feed__group-head[data-v-bbacc3b6]{display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:12px;padding:10px 20px;cursor:pointer}.feed__group-copy[data-v-bbacc3b6]{opacity:.55}.feed__group-head:hover .feed__group-copy[data-v-bbacc3b6]{opacity:1}.feed__group-head[data-v-bbacc3b6]:hover{background:var(--state-hover)}.feed__group--new>.feed__group-head[data-v-bbacc3b6]{background:var(--new-bg);box-shadow:inset 4px 0 0 var(--new)}.feed__group--move[data-v-bbacc3b6],.feed__group--move>.feed__group-head[data-v-bbacc3b6]{box-shadow:inset 4px 0 0 var(--move)}.feed__group.feed__group--new.feed__group--move[data-v-bbacc3b6]{box-shadow:inset 4px 0 0 var(--move),inset 0 0 0 1px var(--new-edge)}.feed__group-text[data-v-bbacc3b6]{min-width:0}.feed__group-key[data-v-bbacc3b6]{display:flex;align-items:baseline;gap:8px;font-size:14px}.feed__group-ticket[data-v-bbacc3b6]{flex:none;font-weight:600}.feed__group-sum[data-v-bbacc3b6]{overflow:hidden;color:var(--md-on-surface-variant);font-size:13px;text-overflow:ellipsis;white-space:nowrap}.feed__group-meta[data-v-bbacc3b6]{display:flex;align-items:center;gap:8px;margin-top:2px;color:var(--md-on-surface-variant);font-size:12px}.feed__group-kinds[data-v-bbacc3b6]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feed__group-when[data-v-bbacc3b6]{margin-left:auto}.feed__group-count[data-v-bbacc3b6]{flex:none;display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:999px;background:var(--md-s-highest);color:var(--md-on-surface-variant);font-size:11px;font-weight:700}.feed__group-count--new[data-v-bbacc3b6]{background:var(--new);color:var(--new-ink)}.feed__children[data-v-bbacc3b6]{margin:0 0 0 31px;padding:0 0 4px;border-left:2px solid var(--md-outline-variant);list-style:none}.feed__children .feed-item[data-v-bbacc3b6]{padding-left:14px}@media(min-width:901px){.dashboard--fit .feed__list[data-v-bbacc3b6]::-webkit-scrollbar{width:8px;height:8px}.dashboard--fit .feed__list[data-v-bbacc3b6]::-webkit-scrollbar-thumb{border-radius:4px;background:var(--md-outline-variant)}}@media(max-width:900px){.feed__list[data-v-bbacc3b6]{max-height:28rem}}.first-run[data-v-84359c2d]{display:grid;place-self:start center;gap:14px;width:min(640px,100%);padding:28px 32px}.first-run__title[data-v-84359c2d]{margin:0;font-size:22px;font-weight:400;line-height:28px}.first-run__text[data-v-84359c2d]{margin:0;color:var(--md-on-surface-variant)}.first-run__actions[data-v-84359c2d]{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}.first-run__ai[data-v-84359c2d]{font-size:13px}.markdown-view[data-v-dcf42e95]{padding:16px 20px 20px;overflow:auto;overflow-wrap:anywhere;font-size:14px;line-height:1.6}.markdown-view[data-v-dcf42e95] h4,.markdown-view[data-v-dcf42e95] h5{margin:16px 0 6px;font-weight:600}.markdown-view[data-v-dcf42e95] h4{font-size:16px}.markdown-view[data-v-dcf42e95] h5{font-size:14px}.markdown-view[data-v-dcf42e95] p{margin:0 0 10px}.markdown-view[data-v-dcf42e95] ul,.markdown-view[data-v-dcf42e95] ol{margin:0 0 10px;padding-left:22px}.markdown-view[data-v-dcf42e95] li{margin:2px 0}.markdown-view[data-v-dcf42e95] code{padding:1px 5px;border-radius:4px;background:rgb(var(--md-state),.1);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em}.markdown-view[data-v-dcf42e95] pre{margin:0 0 12px;padding:12px 14px;overflow:auto;border-radius:8px;background:#00000047}.markdown-view[data-v-dcf42e95] pre code{padding:0;background:none;font-size:12.5px;line-height:1.5;white-space:pre}.markdown-view[data-v-dcf42e95] blockquote{margin:0 0 10px;padding:4px 12px;border-left:3px solid var(--md-primary);color:var(--md-on-surface-variant)}.markdown-view[data-v-dcf42e95] strong{font-weight:600}.markdown-view[data-v-dcf42e95] .markdown-view__mention{color:var(--md-primary);font-weight:500}.modal__body[data-v-f2f8cfc9]{display:flex;flex-direction:column;gap:12px;padding:16px 20px;overflow:auto}.modal__body--flush[data-v-f2f8cfc9]{gap:0;padding:0}.modal__foot[data-v-f2f8cfc9]{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px;border-top:1px solid var(--md-outline-variant)}.note-modal__summary[data-v-6fc1670a]{margin:0;color:var(--md-on-surface-variant);font-size:13px}.note-modal__facts[data-v-6fc1670a]{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;margin:0;font-size:13px}.note-modal__facts dt[data-v-6fc1670a]{color:var(--md-on-surface-variant)}.note-modal__facts dd[data-v-6fc1670a]{margin:0;overflow-wrap:anywhere}.note-modal__author[data-v-6fc1670a]{font-weight:500}.note-modal__label[data-v-6fc1670a]{color:var(--md-on-surface-variant);font-size:12px}.note-modal__text[data-v-6fc1670a]{width:100%;box-sizing:border-box;resize:vertical}.feedback-sheet__card[data-v-8e2792d9]{width:min(640px,100%)}.feedback-sheet__text[data-v-8e2792d9]{min-height:7rem;resize:vertical}.feedback-sheet__note[data-v-8e2792d9]{margin:0;color:var(--md-on-surface-variant);font-size:12px}.feedback-sheet__report[data-v-8e2792d9]{display:flex;align-items:baseline;gap:8px;padding:4px 0;border-top:1px solid var(--md-outline-variant);font-size:13px}.feedback-sheet__report-title[data-v-8e2792d9]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.field-row[data-v-33714840]{display:grid;grid-template-columns:170px minmax(0,1fr);align-items:center;gap:4px 14px}.field-row__label[data-v-33714840]{color:var(--md-on-surface);font-size:13px}.field-row__hint[data-v-33714840]{grid-column:2;color:var(--md-on-surface-variant);font-size:11px}.field-row__error[data-v-33714840]{grid-column:2;color:var(--md-error);font-size:12px}.field-row__check[data-v-33714840]{display:flex;align-items:center;gap:8px;color:var(--md-on-surface-variant);font-size:11px}.field-row__colour[data-v-33714840]{width:44px;height:30px;padding:2px}.field-row__inline[data-v-33714840]{display:flex;align-items:center;gap:8px}.settings-sheet__card[data-v-8253a01a]{width:min(1040px,100%);height:min(760px,100%)}.settings-sheet__dirty[data-v-8253a01a]{color:var(--md-error);font-size:12px;font-weight:600}.settings-sheet__confirm[data-v-8253a01a]{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:12px 20px 0;padding:8px 12px;border-radius:10px;background:var(--md-warn-container);color:var(--md-on-warn-container);font-size:13px}.settings-sheet__confirm-text[data-v-8253a01a]{flex:1}.settings-sheet__alert[data-v-8253a01a]{margin:12px 20px 0}.settings-sheet__body[data-v-8253a01a]{display:grid;flex:1;grid-template-columns:220px minmax(0,1fr);gap:0;min-height:0}.settings-sheet__list[data-v-8253a01a]{display:flex;flex-direction:column;gap:4px;margin:0;padding:12px;overflow:auto;border-right:1px solid var(--md-outline-variant);list-style:none}.settings-sheet__workspace[data-v-8253a01a]{box-sizing:border-box;display:block;width:100%;padding:8px 12px;overflow:hidden;border-radius:10px;font-size:14px;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.settings-sheet__workspace[data-v-8253a01a]:hover{background:var(--state-hover)}.settings-sheet__workspace[aria-current=true][data-v-8253a01a]{background:var(--md-secondary-container);color:var(--md-on-secondary-container)}.settings-sheet__workspace[data-v-8253a01a]:focus-visible{outline:var(--focus-ring);outline-offset:-2px}.settings-sheet__workspace--add[data-v-8253a01a]{color:var(--md-primary);font-weight:500}.settings-sheet__connector[data-v-8253a01a]{display:flex;flex-direction:column;gap:10px;padding:12px 14px;border:1px solid var(--md-outline-variant);border-radius:12px;background:rgb(var(--glass),.35)}.settings-sheet__connector-head[data-v-8253a01a]{display:flex;align-items:center;gap:10px}.settings-sheet__connector-name[data-v-8253a01a]{flex:1;font-weight:600}.settings-sheet__actions[data-v-8253a01a]{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.settings-sheet__rules[data-v-8253a01a]{display:flex;flex-direction:column;gap:6px;margin:0;padding:0 0 0 28px;font-size:13px}.settings-sheet__rule[data-v-8253a01a]{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:12px;padding:4px 0;border-bottom:1px solid var(--md-outline-variant)}.settings-sheet__rule-when[data-v-8253a01a]{color:var(--md-on-surface-variant);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;overflow-wrap:anywhere}.settings-sheet__rule-then[data-v-8253a01a]{overflow-wrap:anywhere}.settings-sheet__rules-note[data-v-8253a01a]{margin:0;color:var(--md-on-surface-variant)}.settings-sheet__rules-warning[data-v-8253a01a]{margin:0;padding:6px 10px;border-radius:8px;background:var(--md-warn-container);color:var(--md-on-warn-container)}.whats-new__version[data-v-78394e08]{padding:16px 0 4px;border-bottom:1px solid var(--md-outline-variant)}.whats-new__version[data-v-78394e08]:last-child{border-bottom:0}.whats-new__head[data-v-78394e08]{display:flex;gap:10px;align-items:baseline;padding:0 20px}.whats-new__name[data-v-78394e08]{margin:0;font-size:16px;font-weight:600}.whats-new__date[data-v-78394e08]{font-size:12px;color:var(--md-on-surface-variant)}.whats-new__tag[data-v-78394e08]{padding:1px 8px;font-size:11px;font-weight:600;color:var(--md-on-primary);background:var(--md-primary);border-radius:var(--md-r-chip)}.whats-new__tag--running[data-v-78394e08]{color:var(--md-on-secondary-container);background:var(--md-secondary-container)}.whats-new__empty[data-v-78394e08]{margin:6px 20px 14px;font-size:13px;color:var(--md-on-surface-variant)}.app__shell[data-v-580c2b4a]{box-sizing:border-box;display:flex;flex-direction:column;height:100%;padding:12px 12px 12px 72px}.app__shell>.dashboard[data-v-580c2b4a]{flex:1 1 auto;min-height:0}@media(min-width:901px){.app__shell>.dashboard.dashboard--fit[data-v-580c2b4a]{height:auto}}@media(max-width:900px){.app__shell[data-v-580c2b4a]{height:auto}}