@sma1lboy/kobe 0.7.25 → 0.7.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/dist/cli/index.js +2 -1
- package/dist/web-ui/assets/AppShell-CQxa6abu.js +7 -0
- package/dist/web-ui/assets/{ChatTerminal-DL9kz6iJ.js → ChatTerminal-BMSvAiAB.js} +2 -2
- package/dist/web-ui/assets/{ChatTranscript-DL4KGcCP.js → ChatTranscript-BJhX29XX.js} +2 -2
- package/dist/web-ui/assets/arrow-left-Cbh2rcaq.js +1 -0
- package/dist/web-ui/assets/board-l1dAjN3Y.js +6 -0
- package/dist/web-ui/assets/chips-D1mC9nB4.js +2 -0
- package/dist/web-ui/assets/index-i463t0Rc.js +10 -0
- package/dist/web-ui/assets/overview-DZo39fTv.js +1 -0
- package/dist/web-ui/assets/routes-DOqWXZU_.js +1 -0
- package/dist/web-ui/assets/tabs-7WK4MwGF.js +1 -0
- package/dist/web-ui/assets/task._taskId-DmEKhgY3.js +1 -0
- package/dist/web-ui/assets/terminal-BUdn99hL.js +1 -0
- package/dist/web-ui/assets/terminal-CapzGZr6.js +1 -0
- package/dist/web-ui/index.html +3 -2
- package/package.json +1 -1
- package/dist/web-ui/assets/AppShell-BUxSw0xG.js +0 -7
- package/dist/web-ui/assets/arrow-left-CPDGLwQs.js +0 -1
- package/dist/web-ui/assets/board-CbwyUj3Z.js +0 -7
- package/dist/web-ui/assets/chips-BYg-ofbe.js +0 -2
- package/dist/web-ui/assets/index-DdSnT7Rv.js +0 -10
- package/dist/web-ui/assets/overview-BFm-fRcJ.js +0 -1
- package/dist/web-ui/assets/react-B8IZ02wI.js +0 -1
- package/dist/web-ui/assets/routes-B6JWLjSF.js +0 -1
- package/dist/web-ui/assets/task._taskId-CnOx0dEd.js +0 -1
- package/dist/web-ui/assets/terminal-D7PGfbSa.js +0 -1
- package/dist/web-ui/assets/triage-89UXpkZl.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as e,f as t,v as n}from"./tabs-7WK4MwGF.js";import{S as r,c as i,l as a,n as o,r as s,x as c,y as l}from"./index-i463t0Rc.js";import{C as u,S as d,T as f,i as p,m,n as h,o as g,p as _,r as v,v as y,w as b}from"./chips-D1mC9nB4.js";import{t as x}from"./arrow-left-Cbh2rcaq.js";var S=e(n(),1);function C(e,t,n){if(e.length===0)return null;let r=t?e.indexOf(t):-1;return r===-1?n===1?e[0]:e[e.length-1]:e[Math.min(Math.max(r+n,0),e.length-1)]}function w(e,t){return t&&e.includes(t)?t:null}var T=r(),E=[{key:`attention`,title:`Needs you`,hint:`waiting on input, rate-limited, or errored`,accent:`text-kobe-blue`},{key:`working`,title:`Working`,hint:`engine is running right now`,accent:`text-kobe-orange`},{key:`changes`,title:`Uncommitted changes`,hint:`idle with a dirty worktree`,accent:`text-kobe-green`},{key:`quiet`,title:`Quiet`,hint:`idle, clean`,accent:`text-subtle`}];function D({entry:e,preview:t,conflict:n,highlighted:r,onOpen:i}){let{task:a,engine:o,changes:s}=e,c=u(o?.state);return(0,T.jsxs)(`button`,{type:`button`,"data-overview-card":a.id,onClick:i,className:`flex w-full flex-col gap-1.5 border bg-surface p-3 text-left transition-colors hover:border-primary hover:bg-inset ${r?`border-primary bg-inset`:`border-line`}`,children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,T.jsx)(`span`,{className:`h-1.5 w-1.5 shrink-0 rounded-full ${d(o?.state)}`}),(0,T.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[13px] text-fg`,children:a.title||a.branch||a.id}),(0,T.jsx)(h,{badge:n}),(0,T.jsx)(v,{pr:a.prStatus}),s&&(s.added>0||s.deleted>0)&&(0,T.jsxs)(`span`,{className:`shrink-0 font-mono text-[10px]`,children:[(0,T.jsxs)(`span`,{className:`text-kobe-green`,children:[`+`,s.added]}),` `,(0,T.jsxs)(`span`,{className:`text-kobe-red`,children:[`−`,s.deleted]})]})]}),t&&(0,T.jsxs)(`div`,{className:`flex items-baseline gap-1.5 text-[11px] text-muted`,title:t,children:[(0,T.jsx)(`span`,{className:`shrink-0 font-mono text-subtle`,children:`❯`}),(0,T.jsx)(`span`,{className:`min-w-0 truncate`,children:t})]}),(0,T.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] text-subtle`,children:[(0,T.jsx)(`span`,{className:`min-w-0 truncate font-mono`,children:a.branch||a.repo}),(0,T.jsxs)(`span`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:[c&&(0,T.jsx)(`span`,{className:`text-muted`,children:c}),(0,T.jsx)(`span`,{children:p(a.updatedAt||a.createdAt)})]})]})]})}function O(){let{tasks:e,engineStates:n,worktreeChanges:r,conflicts:u,hydrated:d}=s(),p=c(),h=a(),[v,O]=(0,S.useState)(``),k=(0,S.useRef)(null),A=(0,S.useMemo)(()=>{let t=t=>{let n=e.find(e=>e.id===t);return n?.title||n?.branch||t},n=new Map;for(let e of new Set(u.flatMap(e=>[e.a,e.b]))){let r=_(u,e);r&&n.set(e,{...r,tip:m(u,e,t)})}return n},[u,e]);(0,S.useEffect)(()=>{for(let t of e)t.archived||t.kind===`main`||i(t)},[e,n]);let j=(0,S.useMemo)(()=>e.filter(e=>!e.archived&&e.kind!==`main`).map(e=>{let t=n[e.id],i=r[e.worktreePath];return{task:e,engine:t,changes:i,bucket:l(t,i)}}),[e,n,r]),M=(0,S.useMemo)(()=>j.filter(e=>g(e.task,v)),[j,v]),N=(0,S.useMemo)(()=>{let e={attention:[],working:[],changes:[],quiet:[]};for(let t of M)e[t.bucket].push(t);return e},[M]),P=(0,S.useMemo)(()=>E.flatMap(({key:e})=>N[e].map(e=>e.task.id)),[N]),[F,I]=(0,S.useState)(null);(0,S.useEffect)(()=>{I(e=>w(P,e))},[P]),(0,S.useEffect)(()=>{F&&document.querySelector(`[data-overview-card="${CSS.escape(F)}"]`)?.scrollIntoView({block:`nearest`})},[F]);let L=e=>{t(e),o(`task.setActive`,{taskId:e}).catch(()=>{}),p({to:`/task/$taskId`,params:{taskId:e}})};(0,S.useEffect)(()=>{let e=e=>{if(e.metaKey||e.ctrlKey||e.altKey)return;let t=e.target,n=!!t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.tagName===`SELECT`||t.isContentEditable),r=e.key===`j`||e.key===`ArrowDown`,i=e.key===`k`||e.key===`ArrowUp`;if(e.key===`/`&&!n)e.preventDefault(),k.current?.focus();else if(e.key===`Escape`&&t===k.current&&v)e.preventDefault(),O(``);else if((r||i)&&!n){if(P.length===0)return;e.preventDefault(),I(e=>C(P,e,r?1:-1))}else if(e.key===`Enter`&&!n&&F){if(t?.closest(`button,a,[role=button]`))return;e.preventDefault(),L(F)}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[v,P,F]);let R={attention:N.attention.length,working:N.working.length,changes:N.changes.length,conflicts:y(u,M.map(e=>e.task.id))};return(0,T.jsxs)(`div`,{className:`flex h-screen flex-col overflow-hidden bg-bg text-fg`,children:[(0,T.jsxs)(`header`,{className:`flex h-10 shrink-0 items-center gap-3 border-b border-line bg-surface px-3`,children:[(0,T.jsxs)(`button`,{type:`button`,onClick:()=>p({to:`/`}),className:`flex items-center gap-1.5 text-muted transition-colors hover:text-fg`,title:`Back to workspace`,children:[(0,T.jsx)(x,{size:15,strokeWidth:1.8}),(0,T.jsx)(`span`,{className:`text-[12px]`,children:`Workspace`})]}),(0,T.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-fg`,children:`Overview`}),(0,T.jsxs)(`label`,{className:`flex h-7 items-center gap-1.5 border border-line bg-bg px-2 text-muted focus-within:border-line-active`,children:[(0,T.jsx)(f,{size:13,strokeWidth:1.8,className:`shrink-0 text-subtle`}),(0,T.jsx)(`input`,{ref:k,value:v,onChange:e=>O(e.target.value),onKeyDown:e=>{e.key===`Enter`&&P.length>0&&(e.preventDefault(),L(P[0]),e.currentTarget.blur())},placeholder:`Filter tasks ( / )`,className:`w-44 bg-transparent text-[12px] text-fg placeholder:text-subtle focus:outline-none`}),v&&(0,T.jsx)(`button`,{type:`button`,onClick:()=>O(``),className:`shrink-0 text-subtle hover:text-fg`,"aria-label":`clear filter`,title:`Clear filter`,children:(0,T.jsx)(b,{size:13,strokeWidth:2})})]}),(0,T.jsxs)(`div`,{className:`ml-auto flex items-center gap-3 font-mono text-[11px]`,children:[(0,T.jsxs)(`span`,{className:`text-kobe-blue`,children:[R.attention,` need input`]}),(0,T.jsxs)(`span`,{className:`text-kobe-orange`,children:[R.working,` running`]}),(0,T.jsxs)(`span`,{className:`text-kobe-green`,children:[R.changes,` dirty`]}),R.conflicts>0&&(0,T.jsxs)(`span`,{className:`text-kobe-red`,children:[R.conflicts,` conflicting`]})]})]}),(0,T.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto p-4`,children:d?j.length===0?(0,T.jsx)(`p`,{className:`text-[12px] text-subtle`,children:`No worktree tasks yet. Create one from the workspace.`}):M.length===0?(0,T.jsxs)(`p`,{className:`text-[12px] text-subtle`,children:[`No tasks match “`,v.trim(),`”.`]}):(0,T.jsx)(`div`,{className:`grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-4`,children:E.map(({key:e,title:t,hint:n,accent:r})=>{let i=N[e];return(0,T.jsxs)(`section`,{className:`flex min-w-0 flex-col`,children:[(0,T.jsxs)(`div`,{className:`mb-2 flex items-baseline gap-2`,children:[(0,T.jsx)(`h2`,{className:`text-[11px] font-bold uppercase tracking-[0.12em] ${r}`,children:t}),(0,T.jsx)(`span`,{className:`font-mono text-[10px] text-subtle`,children:i.length})]}),(0,T.jsx)(`p`,{className:`mb-2 text-[10px] leading-relaxed text-subtle`,children:n}),(0,T.jsx)(`div`,{className:`flex flex-col gap-2`,children:i.length===0?(0,T.jsx)(`div`,{className:`border border-dashed border-line-subtle p-3 text-center text-[11px] text-subtle`,children:`none`}):i.map(e=>(0,T.jsx)(D,{entry:e,preview:h[e.task.id],conflict:A.get(e.task.id)??null,highlighted:e.task.id===F,onOpen:()=>L(e.task.id)},e.task.id))})]},e)})}):(0,T.jsx)(`p`,{className:`text-[12px] text-subtle`,children:`Loading…`})})]})}var k=O;export{k as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./AppShell-CQxa6abu.js";var t=e;export{t as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./terminal-CapzGZr6.js";var t=Object.create,n=Object.defineProperty,r=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,a=Object.getPrototypeOf,o=Object.prototype.hasOwnProperty,s=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),c=(e,t)=>{let r={};for(var i in e)n(r,i,{get:e[i],enumerable:!0});return t||n(r,Symbol.toStringTag,{value:`Module`}),r},l=(e,t,a,s)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var c=i(t),l=0,u=c.length,d;l<u;l++)d=c[l],!o.call(e,d)&&d!==a&&n(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(s=r(t,d))||s.enumerable});return e},u=(e,r,i)=>(i=e==null?{}:t(a(e)),l(r||!e||!e.__esModule?n(i,`default`,{value:e,enumerable:!0}):i,e)),d=s((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var A=/\/+/g;function j(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function M(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function N(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+j(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(A,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u<e.length;u++)a=e[u],s=l+j(a,u),c+=N(a,r,i,s,o);else if(u=m(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+j(a,u++),c+=N(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return N(M(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function P(e,t,n){if(e==null)return e;var r=[],i=0;return N(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function F(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t)},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var I=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)},L={map:P,forEach:function(e,t,n){P(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return P(e,function(){t++}),t},toArray:function(e){return P(e,function(e){return e})||[]},only:function(e){if(!O(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=L,e.Component=v,e.Fragment=r,e.Profiler=a,e.PureComponent=b,e.StrictMode=i,e.Suspense=l,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=w,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return w.H.useMemoCache(e)}},e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=g({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!T.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return E(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)T.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return E(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=O,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:F}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=function(e){var t=w.T,n={};w.T=n;try{var r=e(),i=w.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(C,I)}catch(e){I(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),w.T=t}},e.unstable_useCacheRefresh=function(){return w.H.useCacheRefresh()},e.use=function(e){return w.H.use(e)},e.useActionState=function(e,t,n){return w.H.useActionState(e,t,n)},e.useCallback=function(e,t){return w.H.useCallback(e,t)},e.useContext=function(e){return w.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return w.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return w.H.useEffect(e,t)},e.useEffectEvent=function(e){return w.H.useEffectEvent(e)},e.useId=function(){return w.H.useId()},e.useImperativeHandle=function(e,t,n){return w.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return w.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return w.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return w.H.useMemo(e,t)},e.useOptimistic=function(e,t){return w.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return w.H.useReducer(e,t,n)},e.useRef=function(e){return w.H.useRef(e)},e.useState=function(e){return w.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return w.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return w.H.useTransition()},e.version=`19.2.7`})),f=s(((e,t)=>{t.exports=d()})),p=c({addEmptyTab:()=>F,addTab:()=>N,clearSelectedTask:()=>M,clearSplitTab:()=>V,closeTab:()=>R,configureTab:()=>I,consumePendingPrompt:()=>k,ensureEngineTab:()=>P,migrateStoredTab:()=>y,openFilePreviewTab:()=>L,pruneMissingTasks:()=>j,resetLayout:()=>A,selectTask:()=>E,setActiveTab:()=>z,setPendingPrompt:()=>O,setSplitTab:()=>B,useTabsState:()=>H,withTaskTab:()=>v}),m=u(f(),1),h=`kobe-web.tabs`,g={selectedTaskId:null,tabsByTask:{},activeByTask:{},splitByTask:{}};function _(){return{id:T(),kind:`empty`,title:`New tab`}}function v(e,t){let n=e.tabsByTask[t]??[],r=e.activeByTask[t],i=e.splitByTask[t],a=e;if(i&&(!n.some(e=>e.id===i)||i===r)){let{[t]:n,...r}=e.splitByTask;a={...e,splitByTask:r}}if(n.length>0)return r&&n.some(e=>e.id===r)?a:{...a,activeByTask:{...e.activeByTask,[t]:n[0].id}};let o=_();return{...a,tabsByTask:{...e.tabsByTask,[t]:[o]},activeByTask:{...e.activeByTask,[t]:o.id}}}function y(e){let t=e,n=typeof e?.kind==`string`?e.kind:void 0;if(n===`notes`)return _();let r=n===`chat`?`vendor`:n??`vendor`;return{...t,kind:r}}function b(){try{let e=localStorage.getItem(h);if(e){let t=JSON.parse(e),n=Object.fromEntries(Object.entries(t.tabsByTask??{}).map(([e,t])=>[e,t.map(y)])),r={selectedTaskId:t.selectedTaskId??null,tabsByTask:n,activeByTask:t.activeByTask??{},splitByTask:t.splitByTask??{}};return r.selectedTaskId?v(r,r.selectedTaskId):r}}catch{}return g}var x=typeof localStorage>`u`?g:b(),S=new Set;function C(e){x=e;try{localStorage.setItem(h,JSON.stringify(x))}catch{}for(let e of S)e()}var w=0;function T(){try{return crypto.randomUUID()}catch{return w+=1,`tab-${Date.now().toString(36)}-${w}`}}function E(e){C(v({...x,selectedTaskId:e},e))}var D=new Map;function O(e,t){D.set(e,t)}function k(e){let t=D.get(e);return t===void 0?null:(D.delete(e),t)}function A(){for(let t of Object.values(x.tabsByTask))for(let n of t)(n.kind===`vendor`||n.kind===`terminal`)&&e(n.id);C({...g})}function j(t){let n=Object.keys(x.tabsByTask).filter(e=>!t.has(e)),r=x.selectedTaskId!==null&&!t.has(x.selectedTaskId);if(n.length===0&&!r)return;for(let t of n)for(let n of x.tabsByTask[t]??[])(n.kind===`vendor`||n.kind===`terminal`)&&e(n.id);let i={...x.tabsByTask},a={...x.activeByTask},o={...x.splitByTask};for(let e of n)delete i[e],delete a[e],delete o[e];C({selectedTaskId:r?null:x.selectedTaskId,tabsByTask:i,activeByTask:a,splitByTask:o})}function M(){C({...x,selectedTaskId:null})}function N(e){let t=x.tabsByTask[e]??[],n=T(),r={id:n,kind:`vendor`,title:`Vendor ${t.filter(e=>e.kind===`vendor`).length+1}`};return C({...x,tabsByTask:{...x.tabsByTask,[e]:[...t,r]},activeByTask:{...x.activeByTask,[e]:n},splitByTask:x.splitByTask}),n}function P(e){let t=x.tabsByTask[e]??[],n=t.find(e=>e.kind===`vendor`);if(n)return n.id;let r=T(),i={id:r,kind:`vendor`,title:`Vendor ${t.filter(e=>e.kind===`vendor`).length+1}`};return C({...x,tabsByTask:{...x.tabsByTask,[e]:[...t,i]}}),r}function F(e){let t=x.tabsByTask[e]??[],n=_();return C({...x,tabsByTask:{...x.tabsByTask,[e]:[...t,n]},activeByTask:{...x.activeByTask,[e]:n.id},splitByTask:x.splitByTask}),n.id}function I(e,t,n){let r=x.tabsByTask[e]??[],i=r.map(e=>e.id===t?n===`vendor`?{id:t,kind:n,title:`Vendor ${r.filter(e=>e.kind===`vendor`).length+1}`}:n===`transcript`?{id:t,kind:n,title:`Chat`}:{id:t,kind:n,title:`Terminal ${r.filter(e=>e.kind===`terminal`).length+1}`}:e);C({...x,tabsByTask:{...x.tabsByTask,[e]:i},activeByTask:{...x.activeByTask,[e]:t},splitByTask:x.splitByTask})}function L(e,t){let n=x.tabsByTask[e]??[],r=n.find(e=>e.kind===`file`&&e.path===t);if(r)return z(e,r.id),r.id;let i=T(),a={id:i,kind:`file`,title:t.split(`/`).at(-1)??t,path:t};return C({...x,tabsByTask:{...x.tabsByTask,[e]:[...n,a]},activeByTask:{...x.activeByTask,[e]:i},splitByTask:x.splitByTask}),i}function R(e,t){let n=x.tabsByTask[e]??[],r=n.findIndex(e=>e.id===t),i=n.filter(e=>e.id!==t);i.length===0&&(i=[_()]);let a=x.activeByTask[e]===t,o={...x.activeByTask},s={...x.splitByTask};if(a){let t=Math.max(0,Math.min(r,i.length-1));o[e]=i[t].id}(s[e]===t||s[e]===o[e])&&delete s[e],C({...x,tabsByTask:{...x.tabsByTask,[e]:i},activeByTask:o,splitByTask:s})}function z(e,t){let n={...x.splitByTask},r={...x.activeByTask},i=r[e];n[e]===t&&i&&i!==t?n[e]=i:n[e]===t&&delete n[e],r[e]=t,C({...x,activeByTask:r,splitByTask:n})}function B(e,t){let n=x.tabsByTask[e]??[];if(!n.some(e=>e.id===t))return;let r=x.activeByTask[e],i={...x.activeByTask};if(r===t){let r=n.find(e=>e.id!==t);if(!r)return;i[e]=r.id}C({...x,activeByTask:i,splitByTask:{...x.splitByTask,[e]:t}})}function V(e){let{[e]:t,...n}=x.splitByTask;C({...x,splitByTask:n})}function H(){return(0,m.useSyncExternalStore)(e=>(S.add(e),()=>S.delete(e)),()=>x,()=>x)}export{H as _,R as a,u as b,P as c,A as d,E as f,p as g,B as h,V as i,L as l,O as m,N as n,I as o,z as p,M as r,k as s,F as t,j as u,f as v,s as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as e,b as t,f as n,v as r}from"./tabs-7WK4MwGF.js";import{S as i,n as a,t as o}from"./index-i463t0Rc.js";import{t as s}from"./AppShell-CQxa6abu.js";var c=t(r()),l=i();function u(){let{taskId:t}=o.useParams(),{selectedTaskId:r}=e();return(0,c.useEffect)(()=>{!t||t===r||(n(t),a(`task.setActive`,{taskId:t}).catch(()=>{}))},[t,r]),(0,l.jsx)(s,{})}export{u as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,r as t,t as n}from"./terminal-CapzGZr6.js";export{n as closePtyTab,e as ptyUrl,t as sendPtyText};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(){let e=location.protocol===`https:`?`wss`:`ws`,t=location.hostname||`localhost`,n=Number.parseInt(location.port||`5173`,10);return`${e}://${t}:${Number.isFinite(n)?n+2:5175}`}function t(){let e=location.protocol===`https:`?`https`:`http`,t=location.hostname||`localhost`,n=Number.parseInt(location.port||`5173`,10);return`${e}://${t}:${Number.isFinite(n)?n+2:5175}`}function n(t,n,r,i,a){let o=new URLSearchParams({tab:t,taskId:n,mode:r,cols:String(i),rows:String(a)});return`${e()}/pty?${o.toString()}`}async function r(e){try{await fetch(`${t()}/pty/close`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({tab:e})})}catch{}}async function i(e,n,r){let i=await fetch(`${t()}/pty/send`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({tab:e,taskId:n,text:r})}),a={};try{a=await i.json()}catch{if(i.status===404)throw Error("the PTY server doesn't know /pty/send — restart `kobe web` (the sidecar doesn't hot-reload)")}if(!i.ok||!a.sent)throw Error(a.error??`send failed (${i.status})`);return{spawned:a.spawned===!0}}export{n,i as r,r as t};
|
package/dist/web-ui/index.html
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
<meta charset="UTF-8" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>kobe-web</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-i463t0Rc.js"></script>
|
|
9
|
+
<link rel="modulepreload" crossorigin href="/assets/terminal-CapzGZr6.js">
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/tabs-7WK4MwGF.js">
|
|
10
11
|
<link rel="stylesheet" crossorigin href="/assets/index-CtJIPdVH.css">
|
|
11
12
|
</head>
|
|
12
13
|
<body>
|
package/package.json
CHANGED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatTerminal-DL9kz6iJ.js","assets/react-B8IZ02wI.js","assets/index-DdSnT7Rv.js","assets/index-CtJIPdVH.css","assets/chips-BYg-ofbe.js","assets/terminal-D7PGfbSa.js","assets/ChatTranscript-DL4KGcCP.js","assets/ChatTerminal-kHJ-D0s7.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{i as e,t}from"./react-B8IZ02wI.js";import{a as n,i as r,n as i}from"./index-DdSnT7Rv.js";import{B as a,D as o,E as s,F as c,I as l,L as u,M as d,N as f,O as p,P as m,R as h,S as g,T as _,V as v,_ as y,a as b,b as x,c as S,g as C,h as w,i as T,k as E,n as D,o as ee,r as O,s as k,t as A,v as te,w as j,x as M,y as ne,z as N}from"./chips-BYg-ofbe.js";import{a as P,c as re,f as ie,i as ae,n as oe,o as F,p as se,r as I,s as ce,t as le,u as ue}from"./ChatTranscript-DL4KGcCP.js";import{t as de}from"./terminal-D7PGfbSa.js";import{t as fe}from"./triage-89UXpkZl.js";var pe=v(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),me=v(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),he=v(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),ge=v(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),_e=v(`columns-3`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}]]),ve=v(`folder-input`,[[`path`,{d:`M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1`,key:`fm4g5t`}],[`path`,{d:`M2 13h10`,key:`pgb2dq`}],[`path`,{d:`m9 16 3-3-3-3`,key:`6m91ic`}]]),ye=v(`layout-grid`,[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]),be=v(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),xe=v(`messages-square`,[[`path`,{d:`M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z`,key:`1n2ejm`}],[`path`,{d:`M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1`,key:`1qfcsi`}]]),Se=v(`palette`,[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]),Ce=v(`panel-right`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}]]),we=v(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),Te=v(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),Ee=v(`terminal`,[[`path`,{d:`M12 19h8`,key:`baeox8`}],[`path`,{d:`m4 17 6-6-6-6`,key:`1yngyt`}]]),L=e(t(),1),R=[{id:`claude`,label:`Claude`},{id:`codex`,label:`Codex`}],De=!1,z=new Set;function Oe(){De||(De=!0,fetch(`/api/engines`).then(async e=>{if(!e.ok)return;let t=await e.json();if(!(!Array.isArray(t.engines)||t.engines.length===0)){R=t.engines.filter(e=>typeof e?.id==`string`&&typeof e?.label==`string`);for(let e of z)e()}}).catch(()=>{}))}function B(){return Oe(),(0,L.useSyncExternalStore)(e=>(z.add(e),()=>z.delete(e)),()=>R,()=>R)}function ke(e,t){return t?e.find(e=>e.id===t)?.label??t:`claude`}function Ae(e,t=36){return e.length<=t?e:`…${e.slice(e.length-t+1)}`}var V={query:``,statusFilter:`all`,sortMode:`default`,showArchived:!1},je=null,H=new Set;function U(e){V={...V,...e};for(let e of H)e()}function W(e){U({query:e})}function Me(e){U({statusFilter:e})}function Ne(e){U({sortMode:e})}function Pe(e){U({showArchived:e})}function Fe(e){!e||e===je||(je=e,U({sortMode:e}))}function Ie(){return V}function Le(){return(0,L.useSyncExternalStore)(e=>(H.add(e),()=>H.delete(e)),Ie,Ie)}var G=n();function Re({onClose:e}){let{tasks:t}=S(),n=r(),i=(0,L.useRef)(null);I(i);let a=(0,L.useMemo)(()=>{let e=new Set,n=[];for(let r of t)r.repo&&!e.has(r.repo)&&(e.add(r.repo),n.push(r.repo));return n.sort()},[t]),o=(0,L.useMemo)(()=>new Set(t.map(e=>e.worktreePath).filter(Boolean)),[t]),[s,c]=(0,L.useState)(a[0]??``),[l,u]=(0,L.useState)(null),[d,f]=(0,L.useState)(!1),[p,h]=(0,L.useState)(null),g=async e=>{if(e){f(!0),u(null);try{let{worktrees:t}=await k(`worktree.discoverAdoptable`,{repo:e});u(t)}catch(e){F(`scan worktrees`,e),u([])}finally{f(!1)}}},_=async t=>{h(t.path);try{let{task:r}=await k(`worktree.adopt`,{repo:s,worktreePath:t.path,branch:t.branch,ifExists:`return`});m(r.id),k(`task.setActive`,{taskId:r.id}).catch(()=>{}),n({to:`/task/$taskId`,params:{taskId:r.id}}),P(`success`,`Adopted ${t.branch||t.path}`),e()}catch(e){F(`adopt worktree`,e)}finally{h(null)}};return(0,G.jsx)(`div`,{className:`fixed inset-0 z-40 flex items-center justify-center bg-black/60`,onClick:e,onKeyDown:t=>{t.key===`Escape`&&e()},role:`presentation`,children:(0,G.jsxs)(`div`,{ref:i,role:`dialog`,"aria-modal":`true`,"aria-label":`Adopt worktree`,className:`flex max-h-[80vh] w-[32rem] max-w-[calc(100vw-2rem)] flex-col border border-line bg-surface shadow-xl`,onClick:e=>e.stopPropagation(),onKeyDown:()=>{},children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between border-b border-line px-3 py-2`,children:[(0,G.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-fg`,children:`Adopt worktree`}),(0,G.jsx)(`span`,{className:`font-mono text-[10px] text-subtle`,children:`pull an existing worktree into kobe`})]}),(0,G.jsxs)(`div`,{className:`space-y-2 px-3 py-3`,children:[(0,G.jsx)(`div`,{className:`mb-1 text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Repo`}),(0,G.jsxs)(`div`,{className:`flex gap-2`,children:[(0,G.jsxs)(`select`,{value:s,onChange:e=>c(e.target.value),className:`min-w-0 flex-1 border border-line bg-bg px-2 py-1.5 text-[12px] text-fg focus:border-line-active focus:outline-none`,children:[a.length===0&&(0,G.jsx)(`option`,{value:``,children:`No known repos`}),a.map(e=>(0,G.jsx)(`option`,{value:e,children:e},e))]}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>void g(s),disabled:!s||d,className:`shrink-0 border border-primary bg-inset px-3 py-1.5 text-[11px] text-fg transition-colors hover:bg-primary/10 disabled:opacity-40`,children:d?`Scanning…`:`Scan`})]})]}),(0,G.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto border-t border-line`,children:l===null?(0,G.jsx)(`p`,{className:`px-3 py-6 text-center text-[12px] text-subtle`,children:`Pick a repo and Scan to find adoptable worktrees.`}):l.length===0?(0,G.jsx)(`p`,{className:`px-3 py-6 text-center text-[12px] text-subtle`,children:`No adoptable worktrees found for this repo.`}):l.map(e=>{let t=o.has(e.path);return(0,G.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-line-subtle px-3 py-2 last:border-b-0`,children:[(0,G.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`span`,{className:`truncate font-mono text-[12px] text-fg`,children:e.branch||`(detached)`}),e.dirty&&(0,G.jsx)(`span`,{className:`shrink-0 text-[10px] text-kobe-yellow`,children:`dirty`}),e.kobeManaged&&(0,G.jsx)(`span`,{className:`shrink-0 text-[10px] text-subtle`,children:`kobe`})]}),(0,G.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-[10px] text-subtle`,children:[(0,G.jsx)(`span`,{className:`truncate font-mono`,children:e.path}),e.lastActivityMs>0&&(0,G.jsx)(`span`,{className:`ml-auto shrink-0`,children:T(e.lastActivityMs)})]})]}),t?(0,G.jsx)(`span`,{className:`shrink-0 text-[10px] text-subtle`,children:`tracked`}):(0,G.jsx)(`button`,{type:`button`,onClick:()=>void _(e),disabled:p!==null,className:`shrink-0 border border-line bg-bg px-2 py-1 text-[11px] text-muted transition-colors hover:border-primary hover:text-fg disabled:opacity-40`,children:p===e.path?`Adopting…`:`Adopt`})]},e.path)})}),(0,G.jsx)(`div`,{className:`flex justify-end border-t border-line px-3 py-2`,children:(0,G.jsx)(`button`,{type:`button`,onClick:e,className:`border border-line bg-bg px-3 py-1.5 text-[11px] text-muted transition-colors hover:border-primary hover:text-fg`,children:`Close`})})]})})}function ze(e,t){if(!e)return 0;let n=e.toLowerCase(),r=t.toLowerCase(),i=0,a=0,o=-1;for(let e=0;e<r.length&&i<n.length;e++)r[e]===n[i]&&(a+=e-o,o=e,i++);return i===n.length?a:null}function Be(e,t){return e.map(e=>({id:`theme:${e}`,label:`Theme: ${e}`,hint:e===t?`active`:`theme`,name:e}))}function Ve({kind:e}){return e===`new`?(0,G.jsx)(we,{size:14,strokeWidth:2}):e===`settings`?(0,G.jsx)(Te,{size:14,strokeWidth:1.8}):e===`overview`?(0,G.jsx)(ye,{size:14,strokeWidth:1.8}):e===`board`?(0,G.jsx)(_e,{size:14,strokeWidth:1.8}):e===`theme`?(0,G.jsx)(Se,{size:14,strokeWidth:1.8}):(0,G.jsx)(pe,{size:14,strokeWidth:1.8})}function He({open:e,onClose:t,onNewTask:n,onOpenSettings:i}){let{tasks:o}=S(),{names:s,active:c,overridden:l}=g(),u=r(),[d,f]=(0,L.useState)(``),[p,h]=(0,L.useState)(0),_=(0,L.useRef)(null),v=(0,L.useRef)(null),y=(0,L.useRef)(null);I(v,e),(0,L.useEffect)(()=>{y.current?.querySelector(`[data-index="${p}"]`)?.scrollIntoView({block:`nearest`})},[p]),(0,L.useEffect)(()=>{e&&(f(``),h(0),requestAnimationFrame(()=>_.current?.focus()))},[e]);let b=(0,L.useMemo)(()=>{let e=o.filter(e=>!e.archived).map(e=>({id:`task:${e.id}`,label:e.title||e.branch||e.id,hint:e.kind===`main`?`project`:e.branch,icon:`task`,run:()=>{m(e.id),k(`task.setActive`,{taskId:e.id}).catch(e=>F(`switch task`,e)),u({to:`/task/$taskId`,params:{taskId:e.id}}),t()}})),r=[{id:`action:new`,label:`New task`,hint:`create`,icon:`new`,run:()=>{n(),t()}},{id:`action:overview`,label:`Open overview`,hint:`triage`,icon:`overview`,run:()=>{u({to:`/overview`}),t()}},{id:`action:board`,label:`Open board`,hint:`kanban`,icon:`board`,run:()=>{u({to:`/board`}),t()}},{id:`action:settings`,label:`Open settings`,hint:`settings`,icon:`settings`,run:()=>{i(),t()}}],a=Be(s,c).map(e=>({id:e.id,label:e.label,hint:e.hint,icon:`theme`,run:()=>{M(e.name),t()}}));return l&&a.unshift({id:`theme:follow-tui`,label:`Theme: Follow TUI`,hint:`clear override`,icon:`theme`,run:()=>{x(),t()}}),[...r,...a,...e]},[o,s,c,l,u,t,n,i]),C=(0,L.useMemo)(()=>d.trim()?b.map(e=>{let t=`${e.label} ${e.hint??``}`,n=ze(d.trim(),t);return n===null?null:{cmd:e,score:n}}).filter(e=>e!==null).sort((e,t)=>e.score-t.score).map(e=>e.cmd):b,[b,d]);return(0,L.useEffect)(()=>{h(e=>Math.min(e,Math.max(0,C.length-1)))},[C.length]),e?(0,G.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-start justify-center bg-black/50 pt-[12vh]`,onClick:t,onKeyDown:()=>{},role:`presentation`,children:(0,G.jsxs)(`div`,{ref:v,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,className:`w-[34rem] max-w-[calc(100vw-2rem)] overflow-hidden border border-line bg-surface shadow-2xl`,onClick:e=>e.stopPropagation(),onKeyDown:()=>{},children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-line px-3 py-2.5`,children:[(0,G.jsx)(a,{size:15,strokeWidth:1.8,className:`shrink-0 text-subtle`}),(0,G.jsx)(`input`,{ref:_,value:d,onChange:e=>f(e.target.value),onKeyDown:e=>{e.key===`ArrowDown`?(e.preventDefault(),h(e=>Math.min(e+1,C.length-1))):e.key===`ArrowUp`?(e.preventDefault(),h(e=>Math.max(e-1,0))):e.key===`Enter`?(e.preventDefault(),C[p]?.run()):e.key===`Escape`&&(e.preventDefault(),t())},placeholder:`Jump to a task or run a command…`,className:`min-w-0 flex-1 bg-transparent text-[13px] text-fg placeholder:text-subtle focus:outline-none`}),(0,G.jsx)(`kbd`,{className:`shrink-0 border border-line px-1.5 py-0.5 font-mono text-[10px] text-subtle`,children:`esc`})]}),(0,G.jsx)(`div`,{ref:y,className:`max-h-[50vh] overflow-y-auto py-1`,children:C.length===0?(0,G.jsxs)(`div`,{className:`px-3 py-6 text-center text-[12px] text-subtle`,children:[`No matches for “`,d,`”.`]}):C.map((e,t)=>(0,G.jsxs)(`button`,{type:`button`,"data-index":t,onClick:e.run,onMouseMove:()=>h(t),className:`flex w-full items-center gap-3 px-3 py-2 text-left ${t===p?`bg-inset`:`hover:bg-inset/50`}`,children:[(0,G.jsx)(`span`,{className:`shrink-0 ${t===p?`text-primary`:`text-subtle`}`,children:(0,G.jsx)(Ve,{kind:e.icon})}),(0,G.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[13px] text-fg`,children:e.label}),e.hint&&(0,G.jsx)(`span`,{className:`shrink-0 font-mono text-[10px] text-subtle`,children:e.hint})]},e.id))}),(0,G.jsxs)(`div`,{className:`flex items-center gap-3 border-t border-line px-3 py-1.5 font-mono text-[10px] text-subtle`,children:[(0,G.jsx)(`span`,{children:`↑↓ move`}),(0,G.jsx)(`span`,{children:`↵ run`}),(0,G.jsx)(`span`,{children:`esc close`})]})]})}):null}var Ue=[{keys:[`⌘`,`K`],label:`Command palette — jump to a task or run an action`},{keys:[`j`,`k`],label:`Move between tasks in the rail (also ↑ / ↓)`},{keys:[`/`],label:`Focus the task filter — then ↵ jumps to the top match, esc clears`},{keys:[`?`],label:`This help`},{keys:[`esc`],label:`Close a dialog / palette / help`}],We=[{keys:[`↑`,`↓`],label:`Move selection`},{keys:[`↵`],label:`Run the selected command`},{keys:[`theme`],label:`Type "theme" to switch theme (or Follow TUI)`}],Ge=[{keys:[`↑`,`↓`],label:`Recall previously-sent prompts (newest first)`},{keys:[`↵`],label:`Send · Shift+↵ for a newline`}],Ke=[{label:`New task`,detail:`the + in the task rail (or palette → New task)`},{label:`Adopt worktree`,detail:`the folder-in icon next to + — pull an existing worktree in`},{label:`Overview`,detail:`the grid icon in the top bar — triage every task at once; j/k highlight, Enter opens`},{label:`Chat / Vendor / Terminal`,detail:`tab kinds inside a task workspace; Chat has search, a hide-tools toggle, and copy-as-Markdown`},{label:`Triage`,detail:`rail status chips (All/Needs/Run/Dirty) + the Overview grid — filter by what needs you`},{label:`Changes / diff`,detail:`filter files by path, toggle line wrap on a file preview`},{label:`Copy link`,detail:`Task panel → Copy link — share a deep link to a task`},{label:`Notifications`,detail:`Settings → Notifications — get pinged when a task needs you`}];function qe({k:e}){return(0,G.jsx)(`kbd`,{className:`inline-flex min-w-[1.4rem] items-center justify-center border border-line bg-inset px-1.5 py-0.5 font-mono text-[11px] text-fg`,children:e})}function K({keys:e,label:t}){return(0,G.jsxs)(`div`,{className:`flex items-center gap-3 py-1`,children:[(0,G.jsx)(`span`,{className:`flex shrink-0 items-center gap-1`,children:e.map(e=>(0,G.jsx)(qe,{k:e},e))}),(0,G.jsx)(`span`,{className:`min-w-0 flex-1 text-[12px] text-muted`,children:t})]})}function Je({onClose:e}){let t=(0,L.useRef)(null);return I(t),(0,L.useEffect)(()=>{let t=t=>{t.key===`Escape`&&e()};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[e]),(0,G.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/60`,onClick:e,onKeyDown:()=>{},role:`presentation`,children:(0,G.jsxs)(`div`,{ref:t,role:`dialog`,"aria-modal":`true`,"aria-label":`Keyboard shortcuts`,className:`w-[30rem] max-w-[calc(100vw-2rem)] border border-line bg-surface shadow-xl`,onClick:e=>e.stopPropagation(),onKeyDown:()=>{},children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between border-b border-line px-3 py-2`,children:[(0,G.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-fg`,children:`Keyboard & shortcuts`}),(0,G.jsx)(`kbd`,{className:`border border-line px-1.5 py-0.5 font-mono text-[10px] text-subtle`,children:`esc`})]}),(0,G.jsxs)(`div`,{className:`space-y-4 px-4 py-3`,children:[(0,G.jsxs)(`section`,{children:[(0,G.jsx)(`div`,{className:`mb-1 text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Global`}),Ue.map(e=>(0,G.jsx)(K,{...e},e.label))]}),(0,G.jsxs)(`section`,{children:[(0,G.jsx)(`div`,{className:`mb-1 text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`In the command palette`}),We.map(e=>(0,G.jsx)(K,{...e},e.label))]}),(0,G.jsxs)(`section`,{children:[(0,G.jsx)(`div`,{className:`mb-1 text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`In the engine composer`}),Ge.map(e=>(0,G.jsx)(K,{...e},e.label))]}),(0,G.jsxs)(`section`,{children:[(0,G.jsx)(`div`,{className:`mb-1 text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Where things are`}),Ke.map(e=>(0,G.jsxs)(`div`,{className:`flex items-baseline gap-2 py-0.5 text-[12px]`,children:[(0,G.jsx)(`span`,{className:`shrink-0 font-semibold text-fg`,children:e.label}),(0,G.jsx)(`span`,{className:`min-w-0 flex-1 text-subtle`,children:e.detail})]},e.label))]})]})]})})}function q({children:e}){return(0,G.jsx)(`div`,{className:`mb-1 text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:e})}var J=`w-full border border-line bg-bg px-2 py-1.5 text-[12px] text-fg placeholder:text-subtle focus:border-line-active focus:outline-none`;function Ye({onClose:e}){let{tasks:t}=S(),n=B(),i=r(),a=(0,L.useRef)(null);I(a);let o=(0,L.useMemo)(()=>{let e=new Set,n=[];for(let r of t){let t=r.repo;t&&!e.has(t)&&(e.add(t),n.push(t))}return n.sort()},[t]),[s,c]=(0,L.useState)(o[0]??``),[u,d]=(0,L.useState)(!1),[f,p]=(0,L.useState)(``),[h,g]=(0,L.useState)(``),[v,y]=(0,L.useState)(``),[b,x]=(0,L.useState)(n[0]?.id??`claude`),[C,w]=(0,L.useState)(``),[T,E]=(0,L.useState)(!1),D=s.trim().length>0&&!T,ee=async()=>{if(D){E(!0);try{let t={repo:s.trim()};f.trim()&&(t.title=f.trim()),h.trim()&&(t.branch=h.trim()),v.trim()&&(t.baseRef=v.trim()),b&&(t.vendor=b);let{taskId:n,task:r}=await k(`task.create`,t);m(n);let a=C.trim();a&&(l(n,a),_(n)),i({to:`/task/$taskId`,params:{taskId:n}}),await k(`task.setActive`,{taskId:n}).catch(()=>{}),P(`success`,`Task created: ${r?.title||r?.branch||n}`),e()}catch(e){F(`create task`,e)}finally{E(!1)}}};return(0,G.jsx)(`div`,{className:`fixed inset-0 z-40 flex items-center justify-center bg-black/60`,onClick:e,onKeyDown:t=>{t.key===`Escape`&&e()},role:`presentation`,children:(0,G.jsxs)(`div`,{ref:a,role:`dialog`,"aria-modal":`true`,"aria-label":`New task`,className:`w-[28rem] max-w-[calc(100vw-2rem)] border border-line bg-surface shadow-xl`,onClick:e=>e.stopPropagation(),onKeyDown:()=>{},children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between border-b border-line px-3 py-2`,children:[(0,G.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-fg`,children:`New Task`}),(0,G.jsx)(`span`,{className:`font-mono text-[10px] text-subtle`,children:`worktree + engine session`})]}),(0,G.jsxs)(`form`,{className:`space-y-3 px-3 py-3`,onSubmit:e=>{e.preventDefault(),ee()},children:[(0,G.jsxs)(`div`,{children:[(0,G.jsx)(q,{children:`Repo`}),o.length>0&&!u?(0,G.jsxs)(`div`,{className:`flex gap-2`,children:[(0,G.jsx)(`select`,{value:s,onChange:e=>c(e.target.value),className:`${J} min-w-0 flex-1`,children:o.map(e=>(0,G.jsx)(`option`,{value:e,children:e},e))}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>{d(!0),c(``)},className:`shrink-0 border border-line bg-bg px-2 text-[11px] text-muted hover:border-primary hover:text-fg`,title:`Type a repo path instead`,children:`path…`})]}):(0,G.jsxs)(`div`,{className:`flex gap-2`,children:[(0,G.jsx)(`input`,{value:s,onChange:e=>c(e.target.value),placeholder:`/absolute/path/to/repo`,className:`${J} min-w-0 flex-1 font-mono`}),o.length>0&&(0,G.jsx)(`button`,{type:`button`,onClick:()=>{d(!1),c(o[0]??``)},className:`shrink-0 border border-line bg-bg px-2 text-[11px] text-muted hover:border-primary hover:text-fg`,title:`Pick a known repo`,children:`list`})]})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(q,{children:`Title`}),(0,G.jsx)(`input`,{value:f,onChange:e=>p(e.target.value),placeholder:`optional — auto-titled from the first message`,className:J})]}),(0,G.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsx)(q,{children:`Branch`}),(0,G.jsx)(`input`,{value:h,onChange:e=>g(e.target.value),placeholder:`auto`,className:`${J} font-mono`})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(q,{children:`Base ref`}),(0,G.jsx)(`input`,{value:v,onChange:e=>y(e.target.value),placeholder:`default branch`,className:`${J} font-mono`})]})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(q,{children:`Engine`}),(0,G.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:n.map(e=>(0,G.jsx)(`button`,{type:`button`,onClick:()=>x(e.id),className:`border px-2 py-1 text-[11px] transition-colors ${b===e.id?`border-primary bg-inset text-fg`:`border-line bg-bg text-muted hover:border-primary hover:text-fg`}`,children:ke(n,e.id)},e.id))})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(q,{children:`First prompt`}),(0,G.jsx)(`textarea`,{value:C,onChange:e=>w(e.target.value),placeholder:`optional — waits in the engine composer, ready to send`,rows:2,className:`${J} resize-none`})]}),(0,G.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t border-line pt-3`,children:[(0,G.jsx)(`button`,{type:`button`,onClick:e,className:`border border-line bg-bg px-3 py-1.5 text-[11px] text-muted transition-colors hover:border-primary hover:text-fg`,children:`Cancel`}),(0,G.jsx)(`button`,{type:`submit`,disabled:!D,className:`border border-primary bg-inset px-3 py-1.5 text-[11px] text-fg transition-colors hover:bg-primary/10 disabled:opacity-40`,children:T?`Creating…`:`Create task`})]})]})]})})}function Xe({palette:e}){return(0,G.jsx)(`span`,{className:`flex shrink-0 overflow-hidden rounded border border-line`,children:[e.bg,e.primary,e[`kobe-blue`],e[`kobe-green`]].filter(Boolean).map((e,t)=>(0,G.jsx)(`span`,{className:`h-5 w-3`,style:{backgroundColor:e}},t))})}function Ze(){let{names:e,palettes:t,active:n,overridden:r}=g();return(0,G.jsxs)(`div`,{className:`border border-line bg-surface p-4`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsx)(`div`,{className:`text-[11px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Appearance`}),r?(0,G.jsx)(`button`,{type:`button`,onClick:x,className:`border border-line bg-bg px-2 py-0.5 text-[10px] text-muted transition-colors hover:border-primary hover:text-fg`,title:`Clear the web-local theme and follow the TUI again`,children:`Follow TUI`}):(0,G.jsx)(`span`,{className:`font-mono text-[10px] text-subtle`,children:`following TUI`})]}),e.length===0?(0,G.jsx)(`p`,{className:`mt-4 text-[12px] text-subtle`,children:`Loading themes…`}):(0,G.jsx)(`div`,{className:`mt-4 grid grid-cols-1 gap-1.5 sm:grid-cols-2`,children:e.map(e=>{let r=e===n;return(0,G.jsxs)(`button`,{type:`button`,onClick:()=>M(e),className:`flex items-center gap-2 border px-2 py-1.5 text-left transition-colors ${r?`border-primary bg-inset`:`border-line bg-bg hover:border-primary`}`,children:[(0,G.jsx)(Xe,{palette:t[e]??{}}),(0,G.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[12px] ${r?`text-fg`:`text-muted`}`,children:e}),r&&(0,G.jsx)(he,{size:13,strokeWidth:2.5,className:`shrink-0 text-primary`})]},e)})})]})}function Qe(e){switch(e){case`error`:return`border-kobe-red/50 text-kobe-red`;case`success`:return`border-kobe-green/50 text-kobe-green`;default:return`border-line text-fg`}}function $e(){let e=ce();return e.length===0?null:(0,G.jsx)(`div`,{className:`pointer-events-none fixed bottom-10 right-3 z-50 flex w-80 flex-col gap-2`,children:e.map(e=>(0,G.jsxs)(`div`,{className:`pointer-events-auto flex items-start gap-2 border bg-surface px-3 py-2 shadow-lg ${Qe(e.kind)}`,children:[(0,G.jsx)(`span`,{className:`min-w-0 flex-1 break-words text-[12px] leading-relaxed`,children:e.message}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>ae(e.id),className:`shrink-0 text-subtle hover:text-fg`,"aria-label":`dismiss notification`,children:(0,G.jsx)(N,{size:13,strokeWidth:2})})]},e.id))})}function et(e,t){return`${e.replace(/\/+$/,``)}/task/${encodeURIComponent(t)}`}function tt({title:e,body:t,confirmLabel:n,danger:r=!1,busy:i=!1,onConfirm:a,onCancel:o}){let s=(0,L.useRef)(null),c=(0,L.useRef)(null);return I(c),(0,L.useEffect)(()=>{s.current?.focus();let e=e=>{e.key===`Escape`&&o()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[o]),(0,G.jsx)(`div`,{className:`fixed inset-0 z-40 flex items-center justify-center bg-black/60`,onClick:o,onKeyDown:()=>{},role:`presentation`,children:(0,G.jsxs)(`div`,{ref:c,role:`alertdialog`,"aria-modal":`true`,"aria-label":e,className:`w-96 border border-line bg-surface shadow-xl`,onClick:e=>e.stopPropagation(),onKeyDown:()=>{},children:[(0,G.jsx)(`div`,{className:`border-b border-line px-3 py-2 text-[10px] font-bold uppercase tracking-[0.12em] text-fg`,children:e}),(0,G.jsx)(`p`,{className:`px-3 py-3 text-[12px] leading-relaxed text-muted`,children:t}),(0,G.jsxs)(`div`,{className:`flex justify-end gap-2 border-t border-line px-3 py-2`,children:[(0,G.jsx)(`button`,{type:`button`,onClick:o,className:`border border-line bg-bg px-3 py-1 text-[11px] text-muted transition-colors hover:border-primary hover:text-fg`,children:`Cancel`}),(0,G.jsx)(`button`,{ref:s,type:`button`,onClick:a,disabled:i,className:`border px-3 py-1 text-[11px] transition-colors disabled:opacity-40 ${r?`border-kobe-red/50 bg-kobe-red/10 text-kobe-red hover:bg-kobe-red/20`:`border-primary bg-inset text-fg hover:bg-primary/10`}`,children:i?`Working…`:n})]})]})})}async function nt(e,t={}){let n=new URLSearchParams({worktreePath:e});t.path&&n.set(`path`,t.path),t.namesOnly&&n.set(`namesOnly`,`1`);let r=await fetch(`/api/diff?${n.toString()}`),i=await r.json();if(!r.ok||i.error)throw Error(i.error??`diff fetch failed (${r.status})`);return{files:i.files??[],raw:i.raw??``}}function rt(e){switch(e){case`added`:return{label:`A`,cls:`text-kobe-green`};case`untracked`:return{label:`U`,cls:`text-kobe-green`};case`modified`:return{label:`M`,cls:`text-kobe-yellow`};case`deleted`:return{label:`D`,cls:`text-kobe-red`};case`renamed`:return{label:`R`,cls:`text-kobe-blue`};case`copied`:return{label:`C`,cls:`text-kobe-blue`};default:return{label:e.slice(0,1).toUpperCase()||`?`,cls:`text-muted`}}}function it(e){switch(e){case`hunk`:return`kobe-diff-hunk`;case`meta`:return`kobe-diff-meta`;case`add`:return`kobe-diff-add`;case`del`:return`kobe-diff-del`;default:return`kobe-diff-ctx`}}function at(e,t){let n=t.trim().toLowerCase();return n?e.filter(e=>e.path.toLowerCase().includes(n)):e}var ot=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/,st=[`diff --git`,`index `,`--- `,`+++ `,`new file`,`deleted file`,`rename `,`similarity `,`copy `,`\\ No newline`,`Binary files`];function ct(e){return st.some(t=>e.startsWith(t))}function lt(e){let t=0,n=0;for(let r of ut(e))r.kind===`add`?t++:r.kind===`del`&&n++;return{added:t,deleted:n}}function ut(e){let t=e.replace(/\n$/,``).split(`
|
|
3
|
-
`),n=[],r=0,i=0,a=!1;for(let e of t){let t=ot.exec(e);if(t){r=Number.parseInt(t[1],10),i=Number.parseInt(t[2],10),a=!0,n.push({kind:`hunk`,oldLn:null,newLn:null,text:e});continue}if(e.startsWith(`diff --git`)&&(a=!1),!a&&(ct(e)||e===``)){n.push({kind:`meta`,oldLn:null,newLn:null,text:e});continue}let o=e[0];o===`+`?(n.push({kind:`add`,oldLn:null,newLn:i,text:e}),i++):o===`-`?(n.push({kind:`del`,oldLn:r,newLn:null,text:e}),r++):ct(e)?n.push({kind:`meta`,oldLn:null,newLn:null,text:e}):(n.push({kind:`ctx`,oldLn:r,newLn:i,text:e}),r++,i++)}return n}function dt({added:e,deleted:t}){return e===0&&t===0?null:(0,G.jsxs)(`span`,{className:`shrink-0 font-mono text-[10px]`,children:[(0,G.jsxs)(`span`,{className:`text-kobe-green`,children:[`+`,e]}),` `,(0,G.jsxs)(`span`,{className:`text-kobe-red`,children:[`−`,t]})]})}function ft(e){let{worktreeChanges:t}=S(),n=e?t[e]:void 0;return n?`${n.added}:${n.deleted}`:`none`}function pt({patch:e,wrap:t}){let n=(0,L.useMemo)(()=>ut(e),[e]);return e.trim()?(0,G.jsx)(`div`,{className:`kobe-diff min-h-0 flex-1 overflow-auto py-2 font-mono text-[12px] leading-[1.15rem] ${t?`kobe-diff-wrap`:``}`,children:n.map((e,t)=>(0,G.jsxs)(`div`,{className:`kobe-diff-row ${it(e.kind)}`,children:[(0,G.jsx)(`span`,{className:`kobe-diff-gutter`,children:e.oldLn??``}),(0,G.jsx)(`span`,{className:`kobe-diff-gutter`,children:e.newLn??``}),(0,G.jsx)(`span`,{className:`kobe-diff-text`,children:e.text===``?` `:e.text})]},t))}):(0,G.jsx)(`div`,{className:`flex h-full items-center justify-center text-[12px] text-subtle`,children:`No textual diff for this file.`})}function mt({worktreePath:e,onOpenFile:t}){let[n,r]=(0,L.useState)(null),[i,a]=(0,L.useState)(!1),[o,s]=(0,L.useState)(null),c=ft(e),{worktreeChanges:l}=S(),u=e?l[e]:void 0,d=(0,L.useRef)(0),f=(0,L.useCallback)(async()=>{if(!e){r(null),s(null);return}let t=++d.current;a(!0),s(null);try{let n=await nt(e,{namesOnly:!0});t===d.current&&r(n)}catch(e){t===d.current&&(s(e instanceof Error?e.message:String(e)),r(null))}finally{t===d.current&&a(!1)}},[e]);(0,L.useEffect)(()=>{f()},[f,c]);let[p,m]=(0,L.useState)(``);(0,L.useEffect)(()=>{m(``)},[e]);let h=n?.files??[],g=(0,L.useMemo)(()=>at(h,p),[h,p]);return(0,G.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2`,children:[(0,G.jsxs)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:[`Changes`,h.length>0?` · ${h.length}`:``]}),u&&(0,G.jsx)(dt,{added:u.added,deleted:u.deleted}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>void f(),disabled:!e||i,className:`ml-auto rounded border border-line px-1.5 py-0.5 text-[10px] text-muted transition-colors hover:bg-surface disabled:opacity-40`,children:i?`…`:`↻`})]}),e?o?(0,G.jsx)(`div`,{className:`px-3 py-4 text-[12px] leading-relaxed text-kobe-red`,children:o}):h.length===0?(0,G.jsx)(`div`,{className:`flex flex-1 items-center justify-center px-4 text-center`,children:(0,G.jsx)(`div`,{className:`text-[12px] text-subtle`,children:i?`Loading changes…`:`Worktree clean.`})}):(0,G.jsxs)(G.Fragment,{children:[h.length>1&&(0,G.jsx)(`input`,{value:p,onChange:e=>m(e.target.value),onKeyDown:e=>{e.key===`Escape`&&p&&(e.preventDefault(),m(``))},placeholder:`Filter ${h.length} files…`,spellCheck:!1,className:`mx-3 mb-1 shrink-0 border border-line bg-bg px-2 py-1 font-mono text-[11px] text-fg placeholder:text-subtle focus:border-line-active focus:outline-none`}),g.length===0?(0,G.jsx)(`div`,{className:`px-3 py-3 text-center text-[11px] text-subtle`,children:`No files match.`}):(0,G.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:g.map(e=>{let n=rt(e.status);return(0,G.jsxs)(`button`,{type:`button`,onClick:()=>t(e.path),title:e.path,className:`flex w-full items-center gap-2 border-l-2 border-transparent px-3 py-2 text-left transition-colors hover:border-primary hover:bg-inset`,children:[(0,G.jsx)(`span`,{className:`w-3 shrink-0 text-center font-mono text-[11px] font-bold ${n.cls}`,children:n.label}),(0,G.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[12px] text-fg/90`,children:Ae(e.path,34)}),e.staged&&(0,G.jsx)(`span`,{className:`shrink-0 text-[9px] uppercase text-subtle`,children:`staged`})]},e.path)})})]}):(0,G.jsx)(`div`,{className:`flex flex-1 items-center justify-center px-4 text-center`,children:(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`div`,{className:`text-[12px] font-semibold text-fg`,children:`No task selected`}),(0,G.jsx)(`div`,{className:`mt-1 max-w-48 text-[12px] leading-relaxed text-subtle`,children:`Select a task to watch its worktree changes.`})]})})]})}function ht({worktreePath:e,path:t}){let[n,r]=(0,L.useState)(null),[i,a]=(0,L.useState)(!1),[o,s]=(0,L.useState)(!1),[c,l]=(0,L.useState)(null);(0,L.useEffect)(()=>{if(!e){r(null);return}let n=!1;return s(!0),l(null),nt(e,{path:t}).then(e=>{n||r(e.files.find(e=>e.path===t)??null)}).catch(e=>{n||l(e instanceof Error?e.message:String(e))}).finally(()=>{n||s(!1)}),()=>{n=!0}},[e,t,ft(e)]);let u=n?lt(n.patch):null;return(0,G.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col border border-line bg-bg`,children:[(0,G.jsxs)(`div`,{className:`flex h-9 shrink-0 items-center gap-2 border-b border-line px-3`,children:[(0,G.jsx)(`span`,{className:`truncate font-mono text-[12px] text-fg`,title:t,children:t}),u&&(0,G.jsx)(`span`,{className:`ml-auto shrink-0`,children:(0,G.jsx)(dt,{added:u.added,deleted:u.deleted})}),n&&(0,G.jsx)(`span`,{className:`shrink-0 text-[10px] uppercase tracking-wide text-subtle ${u&&(u.added||u.deleted)?``:`ml-auto`}`,children:n.status}),n&&(0,G.jsx)(`button`,{type:`button`,onClick:()=>a(e=>!e),title:i?`Disable line wrap`:`Wrap long lines`,className:`shrink-0 border px-1.5 py-0.5 font-mono text-[10px] transition-colors ${i?`border-primary bg-inset text-fg`:`border-line bg-bg text-subtle hover:border-primary hover:text-fg`}`,children:`wrap`})]}),c?(0,G.jsx)(`div`,{className:`px-3 py-4 text-[12px] leading-relaxed text-kobe-red`,children:c}):n?(0,G.jsx)(pt,{patch:n.patch,wrap:i}):o?(0,G.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-[12px] text-subtle`,children:`Loading preview…`}):(0,G.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-[12px] text-subtle`,children:`No diff for this file.`})]})}function Y(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function gt(e){let t=e.trim();return/^https?:\/\//i.test(t)?t:t.startsWith(`//`)?null:t.startsWith(`/`)||t.startsWith(`#`)||t.startsWith(`./`)||t.startsWith(`../`)?t:null}function _t(e){let t=e;return t.includes(`]`)&&t.includes(`)`)&&(t=t.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(e,t,n)=>{let r=gt(n.replace(/&/g,`&`));return r?`<a href="${Y(r)}" target="_blank" rel="noopener noreferrer" class="kobe-md-link">${t}</a>`:`${t}(${n})`})),t=t.replace(/\*\*(.+?)\*\*/g,`<strong>$1</strong>`),t=t.replace(/(^|[^*])\*([^*]+)\*/g,`$1<em>$2</em>`),t}function X(e){return e.split(/(`[^`]+`)/g).map((e,t)=>t%2==1?`<code class="kobe-md-code">${e.slice(1,-1)}</code>`:_t(e)).join(``)}function vt(e){let t=e.replace(/\r\n/g,`
|
|
4
|
-
`).split(`
|
|
5
|
-
`),n=[],r=0,i=null,a=()=>{i&&=(n.push(`</${i}>`),null)};for(;r<t.length;){let e=t[r];if(/^```/.test(e)){a();let e=[];for(r++;r<t.length&&!/^```/.test(t[r]);)e.push(Y(t[r])),r++;r++,n.push(`<pre class="kobe-md-pre"><code>${e.join(`
|
|
6
|
-
`)}</code></pre>`);continue}if(/^\s*(-{3,}|\*{3,}|_{3,})\s*$/.test(e)){a(),n.push(`<hr class="kobe-md-hr" />`),r++;continue}let o=/^(#{1,6})\s+(.*)$/.exec(e);if(o){a();let e=o[1].length;n.push(`<h${e} class="kobe-md-h">${X(Y(o[2]))}</h${e}>`),r++;continue}if(/^>\s?/.test(e)){a(),n.push(`<blockquote class="kobe-md-quote">${X(Y(e.replace(/^>\s?/,``)))}</blockquote>`),r++;continue}let s=/^\s*[-*]\s+(.*)$/.exec(e);if(s){i!==`ul`&&(a(),n.push(`<ul class="kobe-md-ul">`),i=`ul`),n.push(`<li>${X(Y(s[1]))}</li>`),r++;continue}let c=/^\s*\d+\.\s+(.*)$/.exec(e);if(c){i!==`ol`&&(a(),n.push(`<ol class="kobe-md-ol">`),i=`ol`),n.push(`<li>${X(Y(c[1]))}</li>`),r++;continue}if(e.trim()===``){a(),r++;continue}a();let l=[e];for(r++;r<t.length&&t[r].trim()!==``&&!/^(#{1,6}\s|>\s?|```|\s*[-*]\s|\s*\d+\.\s|\s*(-{3,}|\*{3,}|_{3,})\s*$)/.test(t[r]);)l.push(t[r]),r++;n.push(`<p class="kobe-md-p">${X(Y(l.join(` `)))}</p>`)}return a(),n.join(`
|
|
7
|
-
`)}async function yt(e){let t=await fetch(`/api/notes?taskId=${encodeURIComponent(e)}`);if(!t.ok){let e=await t.text().catch(()=>``);throw Error(`failed to load notes (${t.status})${e?`: ${e}`:``}`)}return(await t.json()).markdown??``}async function bt(e,t){let n=await fetch(`/api/notes`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({taskId:e,markdown:t})});if(!n.ok){let e=await n.text().catch(()=>``);throw Error(`failed to save notes (${n.status})${e?`: ${e}`:``}`)}}function xt(e){switch(e){case`saving`:return`saving…`;case`saved`:return`saved`;case`error`:return`save failed`;default:return``}}var St=600;function Ct({children:e,right:t}){return(0,G.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2`,children:[(0,G.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:e}),t]})}function wt({taskId:e,full:t=!1}){let[n,r]=(0,L.useState)(``),[i,a]=(0,L.useState)(!1),[o,s]=(0,L.useState)(!1),[c,l]=(0,L.useState)(`idle`),u=(0,L.useMemo)(()=>vt(n),[n]),d=(0,L.useRef)(null),f=(0,L.useRef)(null);(0,L.useEffect)(()=>{if(d.current&&clearTimeout(d.current),f.current=e,l(`idle`),r(``),a(!1),!e)return;let t=!1;return s(!0),yt(e).then(n=>{!t&&f.current===e&&r(n)}).catch(()=>{!t&&f.current===e&&r(``)}).finally(()=>{t||s(!1)}),()=>{t=!0}},[e]),(0,L.useEffect)(()=>()=>{d.current&&clearTimeout(d.current)},[]);let p=(0,L.useCallback)(t=>{if(r(t),!e)return;let n=e;l(`saving`),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{bt(n,t).then(()=>{f.current===n&&l(`saved`)}).catch(()=>{f.current===n&&l(`error`)})},St)},[e]);return(0,G.jsxs)(`div`,{className:`flex h-full min-h-0 flex-1 flex-col bg-bg`,children:[(0,G.jsx)(Ct,{right:e?(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[c!==`idle`&&(0,G.jsx)(`span`,{className:`text-[10px] ${c===`error`?`text-kobe-red`:`text-subtle`}`,children:xt(c)}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>a(e=>!e),className:`border px-1.5 py-0.5 text-[10px] transition-colors ${i?`border-primary bg-inset text-fg`:`border-line bg-bg text-muted hover:border-primary hover:text-fg`}`,title:`Toggle markdown preview`,children:i?`Edit`:`Preview`})]}):null,children:`Notes`}),(0,G.jsx)(`div`,{className:`min-h-0 flex-1 ${t?`px-0 pb-0`:`px-3 pb-3`}`,children:e?i?(0,G.jsx)(`div`,{className:`h-full w-full overflow-auto bg-surface px-4 py-3 ${t?`border-t border-line`:`rounded border border-line`}`,children:n.trim()?(0,G.jsx)(`div`,{className:`kobe-md text-[12px] leading-relaxed text-fg`,dangerouslySetInnerHTML:{__html:u}}):(0,G.jsx)(`p`,{className:`text-[12px] text-subtle`,children:`Nothing to preview yet.`})}):(0,G.jsx)(`textarea`,{value:n,onChange:e=>p(e.target.value),spellCheck:!1,placeholder:o?`loading notes…`:`Notes for this task — markdown, autosaved.`,disabled:o,className:`h-full w-full resize-none border-line bg-surface px-4 py-3 font-mono text-[12px] leading-relaxed text-fg placeholder:text-subtle focus:border-line-active focus:outline-none disabled:opacity-60 ${t?`border-x-0 border-b-0 border-t`:`rounded border`}`}):(0,G.jsx)(`div`,{className:`flex h-full items-center justify-center px-4 text-center`,children:(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`div`,{className:`text-[12px] font-semibold text-fg`,children:`No task selected`}),(0,G.jsx)(`div`,{className:`mt-1 max-w-48 text-[12px] leading-relaxed text-subtle`,children:`Pick a task to open its web-only scratchpad.`})]})})})]})}var Tt=[`backlog`,`in_progress`,`in_review`,`done`,`canceled`,`error`],Et=`DIRTY_WORKTREE`;function Dt(e){return e.replace(/_/g,` `)}function Z({name:e,value:t,mono:n=!1}){return(0,G.jsxs)(`div`,{className:`min-w-0 border-b border-line-subtle py-2 last:border-b-0`,children:[(0,G.jsx)(`div`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:e}),(0,G.jsx)(`div`,{className:`mt-1 min-w-0 truncate text-[12px] text-fg ${n?`font-mono`:``}`,title:t,children:t||`—`})]})}function Q({children:e,onClick:t,disabled:n,danger:r=!1}){return(0,G.jsx)(`button`,{type:`button`,onClick:t,disabled:n,className:`border px-2 py-1 text-[11px] transition-colors disabled:opacity-40 ${r?`border-kobe-red/40 text-kobe-red hover:bg-kobe-red/10`:`border-line bg-surface text-muted hover:border-primary hover:text-fg`}`,children:e})}function Ot({task:e}){let[t,n]=(0,L.useState)(e?.title??``),[i,a]=(0,L.useState)(e?.branch??``),[o,c]=(0,L.useState)(null),[l,u]=(0,L.useState)(null),d=(0,L.useRef)(null);(0,L.useEffect)(()=>()=>{d.current&&clearTimeout(d.current)},[]);let[f,p]=(0,L.useState)(null),m=B(),h=r();if((0,L.useEffect)(()=>{n(e?.title??``)},[e?.title]),(0,L.useEffect)(()=>{a(e?.branch??``)},[e?.branch]),!e)return(0,G.jsx)(`div`,{className:`flex h-full items-center justify-center px-4 text-center`,children:(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`div`,{className:`text-[12px] font-semibold text-fg`,children:`No task selected`}),(0,G.jsx)(`div`,{className:`mt-1 max-w-48 text-[12px] leading-relaxed text-subtle`,children:`Pick a task to edit its metadata and worktree state.`})]})});let g=async(e,t)=>{c(e);try{await t()}catch(t){F(e.split(`:`)[0],t)}finally{c(null)}},_=()=>{let n=t.trim();!n||n===e.title||g(`rename`,()=>k(`task.rename`,{taskId:e.id,title:n}))},v=()=>{let t=i.trim();!t||t===e.branch||g(`branch`,()=>k(`task.setBranch`,{taskId:e.id,branch:t}))},y=e=>t=>{t&&(u(e),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>u(null),1200))},b=()=>{oe(e.worktreePath).then(y(`path`))},x=()=>{oe(et(window.location.origin,e.id)).then(y(`link`))},S=()=>{p(null),g(`archive`,async()=>{await k(`task.archive`,{taskId:e.id,archived:!0}),s(),h({to:`/`}),await k(`task.setActive`,{taskId:null})})},C=()=>{g(`restore`,()=>k(`task.archive`,{taskId:e.id,archived:!1}))},w=t=>{p(null),c(`delete`),(async()=>{try{await k(`task.delete`,{taskId:e.id,force:t}),s(),h({to:`/`}),await k(`task.setActive`,{taskId:null}).catch(()=>{}),P(`success`,`Deleted "${e.title||e.branch}"`)}catch(e){let n=e instanceof Error?e.message:String(e);!t&&n.includes(Et)?p({kind:`delete`,force:!0}):F(`delete`,e)}finally{c(null)}})()};return(0,G.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,G.jsxs)(`div`,{className:`border-b border-line px-3 py-3`,children:[(0,G.jsx)(`div`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Task`}),(0,G.jsxs)(`div`,{className:`mt-2 flex gap-2`,children:[(0,G.jsx)(`input`,{value:t,onChange:e=>n(e.target.value),onBlur:_,onKeyDown:e=>{e.key===`Enter`&&_()},className:`min-w-0 flex-1 border border-line bg-bg px-2 py-1.5 text-[12px] text-fg focus:border-line-active focus:outline-none`}),(0,G.jsx)(Q,{onClick:_,disabled:o===`rename`,children:`Save`})]}),e.archived&&(0,G.jsxs)(`div`,{className:`mt-2 flex items-center justify-between gap-2 border border-kobe-yellow/40 bg-kobe-yellow/10 px-2 py-1.5`,children:[(0,G.jsx)(`span`,{className:`text-[11px] text-kobe-yellow`,children:`archived`}),(0,G.jsx)(Q,{onClick:C,disabled:o!==null,children:`Restore`})]})]}),(0,G.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-3 py-2`,children:[e.kind===`main`?(0,G.jsx)(Z,{name:`Branch`,value:e.branch,mono:!0}):(0,G.jsxs)(`div`,{className:`min-w-0 border-b border-line-subtle py-2`,children:[(0,G.jsx)(`div`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Branch`}),(0,G.jsx)(`div`,{className:`mt-1 flex gap-2`,children:(0,G.jsx)(`input`,{value:i,onChange:e=>a(e.target.value),onBlur:v,onKeyDown:e=>{e.key===`Enter`&&v()},className:`min-w-0 flex-1 border border-line bg-bg px-2 py-1 font-mono text-[12px] text-fg focus:border-line-active focus:outline-none`})})]}),(0,G.jsx)(Z,{name:`Vendor`,value:e.vendor??`claude`}),(0,G.jsx)(Z,{name:`Worktree`,value:e.worktreePath,mono:!0}),(0,G.jsx)(Z,{name:`Repo`,value:e.repo,mono:!0}),(0,G.jsxs)(`div`,{className:`mt-4`,children:[(0,G.jsx)(`div`,{className:`mb-2 text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Status`}),(0,G.jsx)(`div`,{className:`grid grid-cols-2 gap-1.5`,children:Tt.map(t=>(0,G.jsx)(`button`,{type:`button`,onClick:()=>void g(`status:${t}`,()=>k(`task.status`,{taskId:e.id,status:t})),disabled:o!==null,className:`border px-2 py-1.5 text-left text-[11px] capitalize transition-colors disabled:opacity-40 ${e.status===t?`border-primary bg-inset text-fg`:`border-line bg-surface text-muted hover:border-primary hover:text-fg`}`,children:Dt(t)},t))})]}),(0,G.jsxs)(`div`,{className:`mt-4`,children:[(0,G.jsx)(`div`,{className:`mb-2 text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Vendor`}),(0,G.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:m.map(t=>(0,G.jsx)(`button`,{type:`button`,onClick:()=>void g(`vendor:${t.id}`,()=>k(`task.setVendor`,{taskId:e.id,vendor:t.id})),disabled:o!==null,className:`border px-2 py-1 text-[11px] transition-colors disabled:opacity-40 ${(e.vendor??`claude`)===t.id?`border-primary bg-inset text-fg`:`border-line bg-surface text-muted hover:border-primary hover:text-fg`}`,children:t.label},t.id))})]}),(0,G.jsxs)(`div`,{className:`mt-4 grid grid-cols-2 gap-2`,children:[(0,G.jsx)(Q,{onClick:()=>void g(`pin`,()=>k(`task.pin`,{taskId:e.id,pinned:!e.pinned})),disabled:o!==null,children:e.pinned?`Unpin`:`Pin`}),(0,G.jsx)(Q,{onClick:()=>void g(`worktree`,()=>k(`task.ensureWorktree`,{taskId:e.id})),disabled:o!==null,children:`Ensure worktree`}),(0,G.jsx)(Q,{onClick:b,children:l===`path`?`Copied`:`Copy path`}),(0,G.jsx)(Q,{onClick:x,children:l===`link`?`Copied`:`Copy link`}),!e.archived&&(0,G.jsx)(Q,{onClick:()=>p({kind:`archive`}),disabled:o!==null,danger:!0,children:`Archive`})]}),e.kind!==`main`&&(0,G.jsxs)(`div`,{className:`mt-4 border-t border-line-subtle pt-3`,children:[(0,G.jsx)(`div`,{className:`mb-2 text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Danger zone`}),(0,G.jsx)(Q,{onClick:()=>p({kind:`delete`,force:!1}),disabled:o!==null,danger:!0,children:`Delete task + worktree`})]})]}),f?.kind===`archive`&&(0,G.jsx)(tt,{title:`Archive task`,body:`Archive "${e.title||e.branch}"? Its tmux session and engine will be stopped; the worktree stays on disk and the task can be restored from the Archived section.`,confirmLabel:`Archive`,danger:!0,busy:o===`archive`,onConfirm:S,onCancel:()=>p(null)}),f?.kind===`delete`&&(0,G.jsx)(tt,{title:f.force?`Worktree has uncommitted changes`:`Delete task`,body:f.force?`"${e.title||e.branch}" has uncommitted or untracked changes in its worktree. Force-delete discards them permanently.`:`Delete "${e.title||e.branch}"? This removes the task, kills its engine session, and removes its worktree (branch history stays in git).`,confirmLabel:f.force?`Force delete`:`Delete`,danger:!0,busy:o===`delete`,onConfirm:()=>w(f.force),onCancel:()=>p(null)})]})}function kt({drawer:e=!1,onClose:t}={}){let[n,r]=(0,L.useState)(`overview`),{selectedTaskId:i}=h(),{tasks:a}=S(),o=i?a.find(e=>e.id===i)??null:null;return(0,G.jsxs)(`aside`,{className:e?`flex h-full w-full flex-col bg-bg`:`flex w-80 shrink-0 flex-col border-l border-line bg-bg`,children:[(0,G.jsxs)(`div`,{className:`flex h-9 shrink-0 items-stretch border-b border-line bg-surface`,children:[[`overview`,`notes`,`changes`].map(e=>(0,G.jsx)(`button`,{type:`button`,onClick:()=>r(e),className:`px-3 text-[10px] font-bold uppercase tracking-[0.12em] ${n===e?`border-b-2 border-primary text-fg`:`text-subtle hover:text-muted`}`,children:e===`overview`?`Task`:e===`notes`?`Notes`:`Changes`},e)),e&&t&&(0,G.jsx)(`button`,{type:`button`,onClick:t,className:`ml-auto px-3 text-subtle hover:text-fg`,"aria-label":`Close tools`,children:(0,G.jsx)(N,{size:14,strokeWidth:2})})]}),(0,G.jsx)(`div`,{className:`min-h-0 flex-1`,children:n===`overview`?(0,G.jsx)(Ot,{task:o}):n===`notes`?(0,G.jsx)(wt,{taskId:i,full:!0}):(0,G.jsx)(mt,{worktreePath:o?.worktreePath??null,onOpenFile:e=>{i&&d(i,e)}})})]})}var At=(0,L.lazy)(()=>i(()=>import(`./ChatTerminal-DL9kz6iJ.js`).then(e=>({default:e.ChatTerminal})),__vite__mapDeps([0,1,2,3,4,5,6,7])));function jt(){return(0,G.jsx)(`div`,{className:`flex h-full w-full items-center justify-center text-[12px] text-subtle`,children:`Loading terminal…`})}function Mt(e){return e??`claude`}function Nt({taskId:e,tabId:t,vendor:n}){return(0,G.jsx)(`div`,{className:`flex h-full items-center justify-center px-6`,children:(0,G.jsx)(`div`,{className:`grid w-full max-w-2xl grid-cols-1 gap-3 md:grid-cols-3`,children:[{title:`Vendor`,detail:n,body:`Start an engine session for this task.`,icon:me,action:()=>E(e,t,`vendor`)},{title:`Chat`,detail:`transcript`,body:`Read the session as structured messages and tool calls.`,icon:xe,action:()=>E(e,t,`transcript`)},{title:`Terminal`,detail:`shell / worktree`,body:`Open a command shell in this task worktree.`,icon:Ee,action:()=>E(e,t,`terminal`)}].map(e=>{let t=e.icon;return(0,G.jsxs)(`button`,{type:`button`,onClick:e.action,className:`group flex min-h-36 flex-col border border-line bg-surface p-4 text-left transition-colors hover:border-primary hover:bg-inset`,children:[(0,G.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,G.jsx)(`span`,{className:`flex h-9 w-9 shrink-0 items-center justify-center border border-line bg-bg text-muted group-hover:border-primary group-hover:text-primary`,children:(0,G.jsx)(t,{size:17,strokeWidth:1.8})}),(0,G.jsx)(`span`,{className:`truncate text-[10px] uppercase text-subtle`,children:e.detail})]}),(0,G.jsx)(`div`,{className:`mt-5 text-[12px] font-bold uppercase tracking-[0.12em] text-fg`,children:e.title}),(0,G.jsx)(`div`,{className:`mt-2 text-[12px] leading-relaxed text-subtle`,children:e.body})]},e.title)})})})}function $({tab:e,taskId:t,taskWorktreePath:n,taskTitle:r,vendor:i}){return e?.kind===`empty`?(0,G.jsx)(Nt,{taskId:t,tabId:e.id,vendor:i}):e?.kind===`vendor`?(0,G.jsx)(L.Suspense,{fallback:(0,G.jsx)(jt,{}),children:(0,G.jsx)(At,{tabId:e.id,taskId:t,mode:`engine`},e.id)}):e?.kind===`terminal`?(0,G.jsx)(L.Suspense,{fallback:(0,G.jsx)(jt,{}),children:(0,G.jsx)(At,{tabId:e.id,taskId:t,mode:`shell`},e.id)}):e?.kind===`transcript`?(0,G.jsx)(le,{worktreePath:n,vendor:i,title:r},e.id):e?.kind===`file`?(0,G.jsx)(ht,{worktreePath:n,path:e.path},e.id):(0,G.jsx)(`div`,{className:`flex h-full items-center justify-center text-[12px] text-subtle`,children:`Opening a tab…`})}function Pt({tab:e,side:t,children:n,onCloseSplit:r}){return(0,G.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col`,children:[t===`right`&&(0,G.jsxs)(`div`,{className:`flex h-8 shrink-0 items-center justify-between border-b border-line bg-surface px-3`,children:[(0,G.jsx)(`span`,{className:`truncate text-[11px] text-muted`,children:e?.title??`Split`}),(0,G.jsx)(`button`,{type:`button`,onClick:r,className:`text-[11px] text-subtle hover:text-fg`,"aria-label":`close split`,title:`Close split`,children:`×`})]}),(0,G.jsx)(`div`,{className:`min-h-0 flex-1 p-2`,children:n})]})}function Ft(){let[e,t]=(0,L.useState)(!1),[n,r]=(0,L.useState)(null),[i,a]=(0,L.useState)(!1),{selectedTaskId:s,tabsByTask:l,activeByTask:d,splitByTask:f}=h(),m=B(),{tasks:g}=S(),_=s?g.find(e=>e.id===s):null,v=s?l[s]??[]:[],y=s?d[s]:void 0,b=s?f[s]:void 0,x=e=>{if(!s)return;let t=v.find(t=>t.id===e);p(s,e),(t?.kind===`vendor`||t?.kind===`terminal`)&&de(e)},C=v.find(e=>e.id===y)??v[0],w=b&&b!==C?.id?v.find(e=>e.id===b):void 0,T=Mt(_?.vendor),E=_?.title||_?.branch||`Session`,D=e=>{s&&(t(!1),k(`task.setVendor`,{taskId:s,vendor:e}).catch(e=>F(`switch engine`,e)))};return(0,G.jsxs)(`section`,{className:`flex min-w-0 flex-1 flex-col bg-bg`,children:[(0,G.jsx)(`div`,{className:`flex h-9 shrink-0 items-stretch border-b border-line bg-surface`,children:s?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-stretch overflow-x-auto`,role:`tablist`,children:[v.map(e=>{let t=e.id===C?.id,n=e.id===w?.id;return(0,G.jsxs)(`div`,{role:`tab`,"aria-selected":t,tabIndex:0,draggable:!0,onDragStart:t=>{t.dataTransfer.effectAllowed=`move`,t.dataTransfer.setData(`text/plain`,e.id),r(e.id)},onDragEnd:()=>{r(null),a(!1)},className:`group flex h-9 select-none items-center gap-2 border-r border-b-2 border-r-line px-3 text-[12px] transition-colors ${t?`border-b-primary bg-bg text-fg`:n?`border-b-kobe-blue bg-inset text-fg`:`border-b-transparent text-muted hover:bg-inset/50`}`,children:[(0,G.jsx)(`button`,{type:`button`,onClick:()=>c(s,e.id),className:`max-w-40 cursor-grab truncate active:cursor-grabbing`,title:n?`${e.title} (split)`:e.title,children:e.title}),n&&(0,G.jsx)(`span`,{className:`text-[9px] font-bold uppercase text-kobe-blue`,children:`Split`}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>x(e.id),className:`text-subtle opacity-0 transition-opacity hover:text-fg group-hover:opacity-100`,"aria-label":`close tab`,title:`Close tab`,children:`×`})]},e.id)}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>j(s),className:`px-3 text-[13px] text-subtle hover:text-fg`,"aria-label":`new tab`,title:`New tab`,children:`+`})]}),(0,G.jsxs)(`div`,{className:`relative flex shrink-0 items-center border-l border-line px-2`,children:[(0,G.jsx)(`button`,{type:`button`,onClick:()=>t(e=>!e),className:`rounded border border-line bg-bg px-2 py-1 text-[11px] text-muted transition-colors hover:border-primary hover:text-fg`,title:`Select vendor / model`,children:T}),e&&(0,G.jsx)(`div`,{className:`absolute right-2 top-8 z-10 w-40 border border-line bg-menu shadow-xl`,children:m.map(e=>(0,G.jsx)(`button`,{type:`button`,onClick:()=>D(e.id),className:`block w-full px-3 py-2 text-left text-[12px] hover:bg-inset ${e.id===T?`text-primary`:`text-muted`}`,children:e.label},e.id))})]})]}):(0,G.jsxs)(`div`,{className:`flex items-center gap-2 px-3 text-[11px] text-subtle`,children:[(0,G.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-subtle`}),`No task selected`]})}),(0,G.jsxs)(`section`,{className:`relative min-h-0 flex-1`,"aria-label":`Workspace`,onDragOver:e=>{if(!s||!n)return;e.preventDefault();let t=e.currentTarget.getBoundingClientRect();a(e.clientX>t.left+t.width/2)},onDragLeave:()=>a(!1),onDrop:e=>{if(!s||!n)return;e.preventDefault();let t=e.currentTarget.getBoundingClientRect();e.clientX>t.left+t.width/2?u(s,n):c(s,n),r(null),a(!1)},children:[s&&C?(0,G.jsxs)(`div`,{className:`flex h-full min-w-0`,children:[(0,G.jsx)(Pt,{tab:C,side:`left`,children:(0,G.jsx)($,{tab:C,taskId:s,taskWorktreePath:_?.worktreePath??null,taskTitle:E,vendor:T})}),w&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{className:`w-px shrink-0 bg-line`}),(0,G.jsx)(Pt,{tab:w,side:`right`,onCloseSplit:()=>{s&&o(s)},children:(0,G.jsx)($,{tab:w,taskId:s,taskWorktreePath:_?.worktreePath??null,taskTitle:E,vendor:T})})]})]}):(0,G.jsx)(`div`,{className:`flex h-full items-center justify-center px-6 text-center`,children:(0,G.jsxs)(`div`,{className:`max-w-md`,children:[(0,G.jsx)(`div`,{className:`font-mono text-[13px] font-bold text-primary`,children:`[kobe web]`}),(0,G.jsx)(`h1`,{className:`mt-4 text-[18px] font-semibold text-fg`,children:_?`Opening workspace…`:`Select a task to open its workspace.`}),(0,G.jsx)(`p`,{className:`mt-2 text-[12px] leading-relaxed text-subtle`,children:`Web workspaces keep their own browser tabs, split panes, notes, and file previews for each task.`})]})}),n&&(0,G.jsx)(`div`,{className:`pointer-events-none absolute inset-y-2 right-2 flex w-[calc(50%-0.5rem)] items-center justify-center border border-dashed ${i?`border-primary bg-primary/10`:`border-line bg-inset/40`}`,children:(0,G.jsx)(`span`,{className:`border border-line bg-bg px-2 py-1 text-[10px] font-bold uppercase tracking-[0.12em] text-muted`,children:`Drop to split right`})})]})]})}function It({children:e,suffix:t}){return(0,G.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2`,children:[(0,G.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:e}),t?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`span`,{className:`h-px flex-1 bg-line`}),(0,G.jsx)(`span`,{className:`font-mono text-[10px] font-bold uppercase text-primary`,children:t})]}):null]})}function Lt({task:e,engine:t,job:n,changes:r,active:i,onClick:a}){let o=n?.phase===`running`,s=o?`materializing…`:ne(t?.state),c=O(e.updatedAt||e.createdAt);return(0,G.jsxs)(`button`,{type:`button`,"data-task-id":e.id,onClick:a,className:`group w-full border-l-2 px-3 py-2 text-left transition-colors ${i?`border-primary bg-inset`:`border-transparent hover:bg-surface`}`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[o?(0,G.jsx)(be,{size:10,strokeWidth:2.5,className:`shrink-0 animate-spin text-primary`}):(0,G.jsx)(`span`,{className:`h-1.5 w-1.5 shrink-0 rounded-full ${te(t?.state)}`}),(0,G.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[13px] ${i?`text-fg`:`text-fg/90`}`,children:e.title||e.branch}),(0,G.jsx)(D,{pr:e.prStatus}),e.pinned&&(0,G.jsx)(`span`,{className:`shrink-0 text-[10px] text-subtle`,children:`PIN`}),(0,G.jsx)(A,{counts:r})]}),(0,G.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 pl-3.5 text-[11px] text-subtle`,children:[(0,G.jsx)(`span`,{className:`min-w-0 truncate`,children:e.branch||`—`}),(0,G.jsxs)(`span`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:[s&&(0,G.jsx)(`span`,{className:`text-muted`,children:s}),c&&(0,G.jsx)(`span`,{className:`text-subtle`,children:c})]})]})]})}function Rt({task:e,onRestore:t}){return(0,G.jsxs)(`div`,{className:`group flex items-center gap-2 border-l-2 border-transparent px-3 py-1.5`,children:[(0,G.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[12px] text-subtle`,children:e.title||e.branch}),(0,G.jsx)(`button`,{type:`button`,onClick:t,className:`shrink-0 border border-line bg-surface px-1.5 py-0.5 text-[10px] text-muted opacity-0 transition-opacity hover:border-primary hover:text-fg group-hover:opacity-100`,children:`Restore`})]})}function zt({onOpenSettings:e,onNewTask:t,onAdopt:n}){let{tasks:i,engineStates:o,jobs:s,worktreeChanges:c,uiPrefs:l,hydrated:u,streamConnected:d}=S(),{selectedTaskId:f}=h(),{query:p,statusFilter:g,sortMode:_,showArchived:v}=Le(),y=(0,L.useRef)(null),x=(0,L.useRef)(null);(0,L.useEffect)(()=>{f&&y.current?.querySelector(`[data-task-id="${CSS.escape(f)}"]`)?.scrollIntoView({block:`nearest`})},[f]);let C=l?.sortMode;(0,L.useEffect)(()=>{Fe(C)},[C]);let w=(0,L.useMemo)(()=>i.filter(e=>!e.archived),[i]),T=(0,L.useMemo)(()=>i.filter(e=>e.archived&&e.kind!==`main`),[i]),E=(0,L.useMemo)(()=>ee(w.filter(e=>b(e,p)&&fe(o[e.id],c[e.worktreePath],g)),_),[w,p,g,_,o,c]),D=E.filter(e=>e.kind===`main`),O=E.filter(e=>e.kind!==`main`),A=!u||!d&&i.length===0,te=r(),j=e=>{m(e),k(`task.setActive`,{taskId:e}).catch(()=>{}),te({to:`/task/$taskId`,params:{taskId:e}})};(0,L.useEffect)(()=>{let e=e=>{if(e.metaKey||e.ctrlKey||e.altKey)return;let t=e.key,n=t===`ArrowDown`||t===`ArrowUp`,r=t===`j`||t===`ArrowDown`,i=t===`k`||t===`ArrowUp`,a=t===`/`;if(!r&&!i&&!a)return;let o=e.target;if(o&&(o.tagName===`INPUT`||o.tagName===`TEXTAREA`||o.tagName===`SELECT`||o.isContentEditable)||document.querySelector(`[role=dialog],[role=alertdialog]`)||document.querySelector(`[data-settings-open]`))return;if(a){e.preventDefault(),x.current?.focus();return}if(n&&o&&o!==document.body&&!y.current?.contains(o)||E.length===0)return;e.preventDefault();let s=E.findIndex(e=>e.id===f);j(E[s===-1?0:Math.min(Math.max(s+(r?1:-1),0),E.length-1)].id)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[E,f]);let M=e=>{k(`task.archive`,{taskId:e.id,archived:!1}).catch(t=>F(`restore "${e.title||e.branch}"`,t))};return(0,G.jsxs)(`aside`,{className:`flex w-64 shrink-0 flex-col border-r border-line bg-bg`,children:[(0,G.jsxs)(`div`,{className:`border-b border-line bg-surface/50 px-3 py-2`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Tasks`}),(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`button`,{type:`button`,onClick:()=>Ne(_==="default"?`recent`:`default`),className:`font-mono text-[10px] uppercase ${_===`recent`?`text-primary`:`text-muted hover:text-fg`}`,title:`Toggle task sort`,children:`sort`}),(0,G.jsxs)(`span`,{className:`font-mono text-[10px] text-muted`,children:[E.length,`/`,w.length]}),(0,G.jsx)(`button`,{type:`button`,onClick:n,className:`text-muted transition-colors hover:text-primary`,title:`Adopt an existing worktree`,"aria-label":`Adopt worktree`,children:(0,G.jsx)(ve,{size:14,strokeWidth:1.9})}),(0,G.jsx)(`button`,{type:`button`,onClick:t,className:`text-muted transition-colors hover:text-primary`,title:`New task`,"aria-label":`New task`,children:(0,G.jsx)(we,{size:14,strokeWidth:2.2})})]})]}),(0,G.jsxs)(`label`,{className:`mt-2 flex h-8 items-center gap-2 border border-line bg-bg px-2 text-[12px] text-muted focus-within:border-line-active`,children:[(0,G.jsx)(a,{size:14,strokeWidth:1.8,className:`shrink-0 text-subtle`}),(0,G.jsx)(`input`,{ref:x,value:p,onChange:e=>W(e.target.value),onKeyDown:e=>{e.key===`Enter`&&E.length>0?(e.preventDefault(),j(E[0].id),e.currentTarget.blur()):e.key===`Escape`&&p&&(e.preventDefault(),W(``))},placeholder:`Filter tasks`,className:`min-w-0 flex-1 bg-transparent text-fg placeholder:text-subtle focus:outline-none`}),p&&(0,G.jsx)(`button`,{type:`button`,onClick:()=>W(``),className:`shrink-0 text-subtle hover:text-fg`,"aria-label":`clear task filter`,title:`Clear filter`,children:(0,G.jsx)(N,{size:13,strokeWidth:2})})]}),(0,G.jsx)(`div`,{className:`mt-2 flex items-center gap-1`,children:[{key:`all`,label:`All`,title:`All tasks`},{key:`attention`,label:`Needs`,title:`Needs input / errored / rate-limited`},{key:`working`,label:`Run`,title:`Engine running`},{key:`changes`,label:`Dirty`,title:`Uncommitted changes`}].map(e=>(0,G.jsx)(`button`,{type:`button`,onClick:()=>Me(e.key),title:e.title,className:`border px-1.5 py-0.5 text-[10px] transition-colors ${g===e.key?`border-primary bg-inset text-fg`:`border-line bg-bg text-subtle hover:border-primary hover:text-fg`}`,children:e.label},e.key))})]}),(0,G.jsxs)(`div`,{ref:y,className:`flex-1 overflow-y-auto`,children:[A?(0,G.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-4 text-[12px] text-subtle`,children:[(0,G.jsx)(be,{size:13,strokeWidth:2,className:`animate-spin`}),(0,G.jsx)(`span`,{children:`connecting…`})]}):w.length===0?(0,G.jsxs)(`div`,{className:`px-3 py-4 text-[12px] leading-relaxed text-subtle`,children:[(0,G.jsx)(`p`,{children:`No tasks yet.`}),(0,G.jsx)(`button`,{type:`button`,onClick:t,className:`mt-3 border border-line bg-surface px-2 py-1 text-[11px] text-muted hover:border-primary hover:text-fg`,children:`+ New task`})]}):E.length===0?(0,G.jsxs)(`div`,{className:`px-3 py-4 text-[12px] leading-relaxed text-subtle`,children:[(0,G.jsx)(`div`,{children:p?`No matches for “${p}”.`:`No tasks in this status.`}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>{W(``),Me(`all`)},className:`mt-3 border border-line bg-surface px-2 py-1 text-[11px] text-muted hover:border-primary hover:text-fg`,children:`Clear filter`})]}):(0,G.jsxs)(G.Fragment,{children:[D.length>0&&(0,G.jsx)(It,{children:`Projects`}),D.map(e=>(0,G.jsx)(Lt,{task:e,engine:o[e.id],job:s[e.id],changes:c[e.worktreePath],active:e.id===f,onClick:()=>j(e.id)},e.id)),O.length>0&&(0,G.jsx)(It,{suffix:_==="default"?void 0:_,children:`Worktrees`}),O.map(e=>(0,G.jsx)(Lt,{task:e,engine:o[e.id],job:s[e.id],changes:c[e.worktreePath],active:e.id===f,onClick:()=>j(e.id)},e.id))]}),!A&&T.length>0&&(0,G.jsxs)(`div`,{className:`mt-2 border-t border-line-subtle pb-2`,children:[(0,G.jsxs)(`button`,{type:`button`,onClick:()=>Pe(!v),className:`flex w-full items-center gap-2 px-3 py-2 text-left`,children:[(0,G.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Archived`}),(0,G.jsx)(`span`,{className:`font-mono text-[10px] text-subtle`,children:T.length}),(0,G.jsx)(`span`,{className:`ml-auto font-mono text-[10px] text-subtle`,children:v?`−`:`+`})]}),v&&T.map(e=>(0,G.jsx)(Rt,{task:e,onRestore:()=>M(e)},e.id))]})]}),(0,G.jsx)(`div`,{className:`border-t border-line p-2`,children:(0,G.jsxs)(`button`,{type:`button`,onClick:e,className:`flex w-full items-center gap-2 border border-line bg-surface px-2 py-2 text-left text-[12px] text-muted transition-colors hover:border-primary hover:bg-inset hover:text-fg`,children:[(0,G.jsx)(Te,{size:15,strokeWidth:1.8}),(0,G.jsx)(`span`,{children:`Settings`})]})})]})}function Bt({onToggleTools:e,onShowHelp:t}){let{daemonConnected:n,streamConnected:i,tasks:a}=S(),{selectedTaskId:o}=h(),s=r(),c=o?a.find(e=>e.id===o):null,l=n&&i;return(0,G.jsxs)(`header`,{className:`flex h-10 shrink-0 items-center gap-3 border-b border-line bg-surface px-3`,children:[(0,G.jsx)(`span`,{className:`font-mono text-[13px] font-bold text-primary`,children:`[kobe]`}),c?(0,G.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,G.jsx)(`span`,{className:`max-w-56 truncate rounded bg-inset px-2 py-0.5 text-[11px] text-fg`,children:c.title||c.branch}),(0,G.jsx)(`span`,{className:`hidden max-w-40 truncate font-mono text-[11px] text-subtle md:inline`,children:c.branch})]}):(0,G.jsx)(`span`,{className:`rounded bg-inset px-2 py-0.5 text-[11px] text-muted`,children:`Workspace`}),(0,G.jsxs)(`div`,{className:`ml-auto flex items-center gap-3 text-[11px] text-subtle`,children:[(0,G.jsxs)(`span`,{className:`hidden items-center gap-1.5 sm:flex`,children:[(0,G.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full ${l?`bg-kobe-green`:`bg-kobe-yellow`}`}),(0,G.jsx)(`span`,{children:l?`daemon connected`:i?`no daemon`:`connecting…`})]}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>s({to:`/overview`}),className:`flex items-center text-muted transition-colors hover:text-fg`,"aria-label":`Overview`,title:`Overview — triage all tasks`,children:(0,G.jsx)(ye,{size:15,strokeWidth:1.8})}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>s({to:`/board`}),className:`flex items-center text-muted transition-colors hover:text-fg`,"aria-label":`Board`,title:`Board — tasks by status`,children:(0,G.jsx)(_e,{size:15,strokeWidth:1.8})}),(0,G.jsx)(`button`,{type:`button`,onClick:t,className:`hidden items-center text-muted transition-colors hover:text-fg sm:flex`,"aria-label":`Keyboard shortcuts`,title:`Keyboard shortcuts (?)`,children:(0,G.jsx)(ge,{size:15,strokeWidth:1.8})}),(0,G.jsx)(`button`,{type:`button`,onClick:e,className:`flex items-center text-muted transition-colors hover:text-fg lg:hidden`,"aria-label":`Toggle task tools`,title:`Task tools`,children:(0,G.jsx)(Ce,{size:15,strokeWidth:1.8})})]})]})}function Vt(){let{daemonConnected:e,streamConnected:t,hydrated:n}=S(),[r,i]=(0,L.useState)(!1);return!(n&&t&&!e)||r?null:(0,G.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-kobe-yellow/40 bg-kobe-yellow/10 px-3 py-1.5 text-[11px] text-kobe-yellow`,children:[(0,G.jsx)(`span`,{className:`h-1.5 w-1.5 shrink-0 rounded-full bg-kobe-yellow`}),(0,G.jsx)(`span`,{className:`min-w-0 flex-1`,children:`The kobe daemon is offline — task data is frozen and mutations will fail until it reconnects (it auto-reconnects; the dashboard recovers on its own).`}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>i(!0),className:`shrink-0 text-kobe-yellow/70 hover:text-kobe-yellow`,"aria-label":`dismiss`,children:(0,G.jsx)(N,{size:13,strokeWidth:2})})]})}function Ht(){let{tasks:e,update:t}=S(),{selectedTaskId:n}=h(),r=n?e.find(e=>e.id===n):null,i=e.filter(e=>!e.archived).length;return(0,G.jsxs)(`footer`,{className:`flex h-7 shrink-0 items-center gap-4 border-t border-line bg-surface px-3 text-[11px] text-subtle`,children:[(0,G.jsxs)(`span`,{children:[i,` task`,i===1?``:`s`]}),r&&(0,G.jsxs)(`span`,{className:`min-w-0 truncate text-muted`,children:[r.kind===`main`?`project`:`worktree`,` ·`,` `,Ae(r.worktreePath,54)]}),(0,G.jsx)(`span`,{className:`ml-auto`,children:t?.latest?`update ${t.latest} available`:`kobe web`})]})}function Ut(){let e=B();return(0,G.jsxs)(`div`,{className:`border border-line bg-surface p-4`,children:[(0,G.jsx)(`div`,{className:`text-[11px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Engines`}),(0,G.jsx)(`div`,{className:`mt-4 flex flex-wrap gap-1.5`,children:e.map(e=>(0,G.jsx)(`span`,{className:`border border-line bg-bg px-2 py-1 font-mono text-[11px] text-muted`,title:e.id,children:e.label},e.id))}),(0,G.jsx)(`p`,{className:`mt-3 text-[11px] leading-relaxed text-subtle`,children:`Detected engine CLIs plus any custom engines you've registered. Switch a task's engine from its Task panel or the workspace tab dropdown.`})]})}function Wt(){let{supported:e,permission:t,enabled:n}=y();return(0,G.jsxs)(`div`,{className:`border border-line bg-surface p-4`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsx)(`div`,{className:`text-[11px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Notifications`}),e?(0,G.jsx)(`button`,{type:`button`,onClick:()=>void w(!n),disabled:t===`denied`&&!n,className:`border px-2 py-0.5 text-[10px] transition-colors disabled:opacity-40 ${n?`border-primary bg-inset text-fg`:`border-line bg-bg text-muted hover:border-primary hover:text-fg`}`,children:n?`On`:`Off`}):(0,G.jsx)(`span`,{className:`font-mono text-[10px] text-subtle`,children:`unsupported`})]}),(0,G.jsx)(`p`,{className:`mt-3 text-[11px] leading-relaxed text-subtle`,children:t===`denied`&&!n?`Browser notifications are blocked — allow them in your browser's site settings to enable.`:`Get a desktop notification when a task needs your input or errors while this tab is in the background. Click it to jump to the task.`})]})}function Gt(){let[e,t]=(0,L.useState)(!1),n=r();return(0,G.jsxs)(`div`,{className:`border border-line bg-surface p-4`,children:[(0,G.jsx)(`div`,{className:`text-[11px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Workspace`}),(0,G.jsx)(`p`,{className:`mt-3 text-[11px] leading-relaxed text-subtle`,children:`Reset the per-task tab layout (open tabs, splits, selection) if it ever gets wedged or cluttered. Pure browser state — your tasks, worktrees, and notes are untouched.`}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>{if(!e){t(!0);return}f(),n({to:`/`}),t(!1)},onBlur:()=>t(!1),className:`mt-3 border px-3 py-1.5 text-[11px] transition-colors ${e?`border-kobe-red/50 bg-kobe-red/10 text-kobe-red`:`border-line bg-bg text-muted hover:border-primary hover:text-fg`}`,children:e?`Click again to reset layout`:`Reset layout`})]})}function Kt(){let[e,t]=(0,L.useState)(``),[n,r]=(0,L.useState)(``),[i,a]=(0,L.useState)(!1);return(0,L.useEffect)(()=>{let e=!1;return ie().then(n=>{e||(t(n.review??``),r(n.pr??``),a(!0))}),()=>{e=!0}},[]),(0,G.jsxs)(`div`,{className:`border border-line bg-surface p-4 md:col-span-2`,children:[(0,G.jsx)(`div`,{className:`text-[11px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Board quick actions`}),(0,G.jsxs)(`div`,{className:`mt-4 space-y-3 text-[12px]`,children:[(0,G.jsxs)(`label`,{className:`block`,children:[(0,G.jsx)(`span`,{className:`text-muted`,children:`Review template`}),(0,G.jsx)(`textarea`,{value:e,onChange:e=>t(e.target.value),placeholder:`default: ${ue(`claude`)}`,rows:2,disabled:!i,className:`mt-1 w-full resize-y border border-line bg-bg p-2 font-mono text-[12px] text-fg placeholder:text-subtle focus:border-line-active focus:outline-none`})]}),(0,G.jsxs)(`label`,{className:`block`,children:[(0,G.jsx)(`span`,{className:`text-muted`,children:`Open-PR template`}),(0,G.jsx)(`textarea`,{value:n,onChange:e=>r(e.target.value),placeholder:`default:\n${re}`,rows:4,disabled:!i,className:`mt-1 w-full resize-y border border-line bg-bg p-2 font-mono text-[12px] text-fg placeholder:text-subtle focus:border-line-active focus:outline-none`})]}),(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,G.jsx)(`span`,{className:`text-[11px] text-subtle`,children:`Empty = built-in default. kobe appends its status/URL clause after your template — the guardrails stay regardless.`}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>{se({review:e,pr:n}).then(()=>P(`success`,`quick-action templates saved`)).catch(e=>F(`save templates`,e))},disabled:!i,className:`shrink-0 border border-line bg-bg px-2 py-1 text-[11px] text-muted transition-colors hover:border-primary hover:text-fg`,children:`Save`})]})]})]})}function qt({onClose:e}){let{daemonConnected:t,streamConnected:n,update:r}=S();return(0,G.jsxs)(`section`,{"data-settings-open":!0,className:`flex min-w-0 flex-1 flex-col bg-bg`,children:[(0,G.jsxs)(`div`,{className:`flex h-9 shrink-0 items-center justify-between border-b border-line bg-surface px-3`,children:[(0,G.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-fg`,children:`Settings`}),(0,G.jsx)(`button`,{type:`button`,onClick:e,className:`border border-line bg-bg px-2 py-1 text-[11px] text-muted transition-colors hover:border-primary hover:text-fg`,children:`Close`})]}),(0,G.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto p-4`,children:(0,G.jsxs)(`div`,{className:`grid max-w-3xl grid-cols-1 gap-3 md:grid-cols-2`,children:[(0,G.jsx)(Kt,{}),(0,G.jsxs)(`div`,{className:`border border-line bg-surface p-4`,children:[(0,G.jsx)(`div`,{className:`text-[11px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Connection`}),(0,G.jsxs)(`div`,{className:`mt-4 space-y-3 text-[12px]`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,G.jsx)(`span`,{className:`text-muted`,children:`Daemon`}),(0,G.jsx)(`span`,{className:t?`text-kobe-green`:`text-kobe-yellow`,children:t?`connected`:`offline`})]}),(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,G.jsx)(`span`,{className:`text-muted`,children:`Event stream`}),(0,G.jsx)(`span`,{className:n?`text-kobe-green`:`text-kobe-yellow`,children:n?`connected`:`connecting`})]})]})]}),(0,G.jsxs)(`div`,{className:`border border-line bg-surface p-4`,children:[(0,G.jsx)(`div`,{className:`text-[11px] font-bold uppercase tracking-[0.12em] text-subtle`,children:`Version`}),(0,G.jsxs)(`div`,{className:`mt-4 space-y-3 text-[12px]`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,G.jsx)(`span`,{className:`text-muted`,children:`Current`}),(0,G.jsx)(`span`,{className:`text-fg`,children:typeof r?.current==`string`?r.current:`unknown`})]}),(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,G.jsx)(`span`,{className:`text-muted`,children:`Latest`}),(0,G.jsx)(`span`,{className:`text-fg`,children:typeof r?.latest==`string`?r.latest:`unknown`})]})]})]}),(0,G.jsx)(`div`,{className:`md:col-span-2`,children:(0,G.jsx)(Ze,{})}),(0,G.jsx)(Wt,{}),(0,G.jsx)(Gt,{}),(0,G.jsx)(`div`,{className:`md:col-span-2`,children:(0,G.jsx)(Ut,{})})]})})]})}function Jt(){let e=r(),[t,n]=(0,L.useState)(!1),[i,a]=(0,L.useState)(!1),[o,s]=(0,L.useState)(!1),[c,l]=(0,L.useState)(!1),[u,d]=(0,L.useState)(!1),[f,p]=(0,L.useState)(!1);return(0,L.useEffect)(()=>{let e=e=>{if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`){e.preventDefault(),l(e=>!e);return}if(e.key===`?`&&!e.metaKey&&!e.ctrlKey&&!e.altKey){let t=e.target;t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.isContentEditable)||(e.preventDefault(),d(!0));return}e.key===`Escape`&&p(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,L.useEffect)(()=>(C(t=>{m(t),k(`task.setActive`,{taskId:t}).catch(()=>{}),e({to:`/task/$taskId`,params:{taskId:t}})}),()=>C(null)),[e]),(0,G.jsxs)(`div`,{className:`flex h-screen flex-col overflow-hidden bg-bg text-fg`,children:[(0,G.jsx)(Bt,{onToggleTools:()=>p(e=>!e),onShowHelp:()=>d(!0)}),(0,G.jsx)(Vt,{}),(0,G.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,G.jsx)(zt,{onOpenSettings:()=>n(!0),onNewTask:()=>a(!0),onAdopt:()=>s(!0)}),t?(0,G.jsx)(qt,{onClose:()=>n(!1)}):(0,G.jsx)(Ft,{}),(0,G.jsx)(`div`,{className:`hidden lg:flex`,children:(0,G.jsx)(kt,{})}),f&&(0,G.jsx)(`div`,{className:`fixed inset-0 z-30 flex justify-end bg-black/50 lg:hidden`,onClick:()=>p(!1),onKeyDown:e=>{e.key===`Escape`&&p(!1)},role:`presentation`,children:(0,G.jsx)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":`Task tools`,className:`h-full w-80 max-w-[85vw] border-l border-line bg-bg shadow-2xl`,onClick:e=>e.stopPropagation(),onKeyDown:()=>{},children:(0,G.jsx)(kt,{drawer:!0,onClose:()=>p(!1)})})})]}),(0,G.jsx)(Ht,{}),i&&(0,G.jsx)(Ye,{onClose:()=>a(!1)}),o&&(0,G.jsx)(Re,{onClose:()=>s(!1)}),u&&(0,G.jsx)(Je,{onClose:()=>d(!1)}),(0,G.jsx)(He,{open:c,onClose:()=>l(!1),onNewTask:()=>a(!0),onOpenSettings:()=>n(!0)}),(0,G.jsx)($e,{})]})}export{Jt as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{V as e}from"./chips-BYg-ofbe.js";var t=e(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]);export{t};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatTerminal-DL9kz6iJ.js","assets/react-B8IZ02wI.js","assets/index-DdSnT7Rv.js","assets/index-CtJIPdVH.css","assets/chips-BYg-ofbe.js","assets/terminal-D7PGfbSa.js","assets/ChatTranscript-DL4KGcCP.js","assets/ChatTerminal-kHJ-D0s7.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{i as e,t}from"./react-B8IZ02wI.js";import{a as n,i as r,n as i,r as a}from"./index-DdSnT7Rv.js";import{B as o,P as s,V as c,a as l,c as u,j as d,n as f,r as p,s as m,t as h,v as g,y as _,z as v}from"./chips-BYg-ofbe.js";import{t as y}from"./arrow-left-CPDGLwQs.js";import{a as b,d as x,f as ee,l as S,o as C,r as w,t as T}from"./ChatTranscript-DL4KGcCP.js";import{r as E}from"./terminal-D7PGfbSa.js";var te=c(`clipboard-check`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}],[`path`,{d:`m9 14 2 2 4-4`,key:`df797q`}]]),D=c(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),ne=c(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),re=c(`git-pull-request`,[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M13 6h3a2 2 0 0 1 2 2v7`,key:`1yeb86`}],[`line`,{x1:`6`,x2:`6`,y1:`9`,y2:`21`,key:`rroup`}]]),O=c(`grip-vertical`,[[`circle`,{cx:`9`,cy:`12`,r:`1`,key:`1vctgf`}],[`circle`,{cx:`9`,cy:`5`,r:`1`,key:`hp0tcf`}],[`circle`,{cx:`9`,cy:`19`,r:`1`,key:`fkjjf6`}],[`circle`,{cx:`15`,cy:`12`,r:`1`,key:`1tmaij`}],[`circle`,{cx:`15`,cy:`5`,r:`1`,key:`19l28e`}],[`circle`,{cx:`15`,cy:`19`,r:`1`,key:`f4zoj3`}]]),k=a(),A=e(t());function j(){var e=[...arguments];return(0,A.useMemo)(()=>t=>{e.forEach(e=>e(t))},e)}var M=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function N(e){let t=Object.prototype.toString.call(e);return t===`[object Window]`||t===`[object global]`}function P(e){return`nodeType`in e}function F(e){return e?N(e)?e:P(e)?e.ownerDocument?.defaultView??window:window:window}function I(e){let{Document:t}=F(e);return e instanceof t}function L(e){return N(e)?!1:e instanceof F(e).HTMLElement}function ie(e){return e instanceof F(e).SVGElement}function R(e){return e?N(e)?e.document:P(e)?I(e)?e:L(e)||ie(e)?e.ownerDocument:document:document:document}var z=M?A.useLayoutEffect:A.useEffect;function B(e){let t=(0,A.useRef)(e);return z(()=>{t.current=e}),(0,A.useCallback)(function(){var e=[...arguments];return t.current==null?void 0:t.current(...e)},[])}function V(){let e=(0,A.useRef)(null);return[(0,A.useCallback)((t,n)=>{e.current=setInterval(t,n)},[]),(0,A.useCallback)(()=>{e.current!==null&&(clearInterval(e.current),e.current=null)},[])]}function ae(e,t){t===void 0&&(t=[e]);let n=(0,A.useRef)(e);return z(()=>{n.current!==e&&(n.current=e)},t),n}function H(e,t){let n=(0,A.useRef)();return(0,A.useMemo)(()=>{let t=e(n.current);return n.current=t,t},[...t])}function U(e){let t=B(e),n=(0,A.useRef)(null);return[n,(0,A.useCallback)(e=>{e!==n.current&&t?.(e,n.current),n.current=e},[])]}function W(e){let t=(0,A.useRef)();return(0,A.useEffect)(()=>{t.current=e},[e]),t.current}var oe={};function se(e,t){return(0,A.useMemo)(()=>{if(t)return t;let n=oe[e]==null?0:oe[e]+1;return oe[e]=n,e+`-`+n},[e,t])}function ce(e){return function(t){return[...arguments].slice(1).reduce((t,n)=>{let r=Object.entries(n);for(let[n,i]of r){let r=t[n];r!=null&&(t[n]=r+e*i)}return t},{...t})}}var le=ce(1),ue=ce(-1);function de(e){return`clientX`in e&&`clientY`in e}function G(e){if(!e)return!1;let{KeyboardEvent:t}=F(e.target);return t&&e instanceof t}function fe(e){if(!e)return!1;let{TouchEvent:t}=F(e.target);return t&&e instanceof t}function pe(e){if(fe(e)){if(e.touches&&e.touches.length){let{clientX:t,clientY:n}=e.touches[0];return{x:t,y:n}}else if(e.changedTouches&&e.changedTouches.length){let{clientX:t,clientY:n}=e.changedTouches[0];return{x:t,y:n}}}return de(e)?{x:e.clientX,y:e.clientY}:null}var K=Object.freeze({Translate:{toString(e){if(!e)return;let{x:t,y:n}=e;return`translate3d(`+(t?Math.round(t):0)+`px, `+(n?Math.round(n):0)+`px, 0)`}},Scale:{toString(e){if(!e)return;let{scaleX:t,scaleY:n}=e;return`scaleX(`+t+`) scaleY(`+n+`)`}},Transform:{toString(e){if(e)return[K.Translate.toString(e),K.Scale.toString(e)].join(` `)}},Transition:{toString(e){let{property:t,duration:n,easing:r}=e;return t+` `+n+`ms `+r}}}),me=`a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]`;function he(e){return e.matches(me)?e:e.querySelector(me)}var ge={display:`none`};function _e(e){let{id:t,value:n}=e;return A.createElement(`div`,{id:t,style:ge},n)}function ve(e){let{id:t,announcement:n,ariaLiveType:r=`assertive`}=e;return A.createElement(`div`,{id:t,style:{position:`fixed`,top:0,left:0,width:1,height:1,margin:-1,border:0,padding:0,overflow:`hidden`,clip:`rect(0 0 0 0)`,clipPath:`inset(100%)`,whiteSpace:`nowrap`},role:`status`,"aria-live":r,"aria-atomic":!0},n)}function ye(){let[e,t]=(0,A.useState)(``);return{announce:(0,A.useCallback)(e=>{e!=null&&t(e)},[]),announcement:e}}var be=(0,A.createContext)(null);function xe(e){let t=(0,A.useContext)(be);(0,A.useEffect)(()=>{if(!t)throw Error(`useDndMonitor must be used within a children of <DndContext>`);return t(e)},[e,t])}function Se(){let[e]=(0,A.useState)(()=>new Set),t=(0,A.useCallback)(t=>(e.add(t),()=>e.delete(t)),[e]);return[(0,A.useCallback)(t=>{let{type:n,event:r}=t;e.forEach(e=>e[n]?.call(e,r))},[e]),t]}var Ce={draggable:`
|
|
3
|
-
To pick up a draggable item, press the space bar.
|
|
4
|
-
While dragging, use the arrow keys to move the item.
|
|
5
|
-
Press space again to drop the item in its new position, or press escape to cancel.
|
|
6
|
-
`},we={onDragStart(e){let{active:t}=e;return`Picked up draggable item `+t.id+`.`},onDragOver(e){let{active:t,over:n}=e;return n?`Draggable item `+t.id+` was moved over droppable area `+n.id+`.`:`Draggable item `+t.id+` is no longer over a droppable area.`},onDragEnd(e){let{active:t,over:n}=e;return n?`Draggable item `+t.id+` was dropped over droppable area `+n.id:`Draggable item `+t.id+` was dropped.`},onDragCancel(e){let{active:t}=e;return`Dragging was cancelled. Draggable item `+t.id+` was dropped.`}};function Te(e){let{announcements:t=we,container:n,hiddenTextDescribedById:r,screenReaderInstructions:i=Ce}=e,{announce:a,announcement:o}=ye(),s=se(`DndLiveRegion`),[c,l]=(0,A.useState)(!1);if((0,A.useEffect)(()=>{l(!0)},[]),xe((0,A.useMemo)(()=>({onDragStart(e){let{active:n}=e;a(t.onDragStart({active:n}))},onDragMove(e){let{active:n,over:r}=e;t.onDragMove&&a(t.onDragMove({active:n,over:r}))},onDragOver(e){let{active:n,over:r}=e;a(t.onDragOver({active:n,over:r}))},onDragEnd(e){let{active:n,over:r}=e;a(t.onDragEnd({active:n,over:r}))},onDragCancel(e){let{active:n,over:r}=e;a(t.onDragCancel({active:n,over:r}))}}),[a,t])),!c)return null;let u=A.createElement(A.Fragment,null,A.createElement(_e,{id:r,value:i.draggable}),A.createElement(ve,{id:s,announcement:o}));return n?(0,k.createPortal)(u,n):u}var q;(function(e){e.DragStart=`dragStart`,e.DragMove=`dragMove`,e.DragEnd=`dragEnd`,e.DragCancel=`dragCancel`,e.DragOver=`dragOver`,e.RegisterDroppable=`registerDroppable`,e.SetDroppableDisabled=`setDroppableDisabled`,e.UnregisterDroppable=`unregisterDroppable`})(q||={});function Ee(){}function De(e,t){return(0,A.useMemo)(()=>({sensor:e,options:t??{}}),[e,t])}function Oe(){var e=[...arguments];return(0,A.useMemo)(()=>[...e].filter(e=>e!=null),[...e])}var J=Object.freeze({x:0,y:0});function ke(e,t){return Math.sqrt((e.x-t.x)**2+(e.y-t.y)**2)}function Ae(e,t){let n=pe(e);if(!n)return`0 0`;let r={x:(n.x-t.left)/t.width*100,y:(n.y-t.top)/t.height*100};return r.x+`% `+r.y+`%`}function je(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return n-r}function Me(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return r-n}function Ne(e){let{left:t,top:n,height:r,width:i}=e;return[{x:t,y:n},{x:t+i,y:n},{x:t,y:n+r},{x:t+i,y:n+r}]}function Pe(e,t){if(!e||e.length===0)return null;let[n]=e;return t?n[t]:n}var Fe=e=>{let{collisionRect:t,droppableRects:n,droppableContainers:r}=e,i=Ne(t),a=[];for(let e of r){let{id:t}=e,r=n.get(t);if(r){let n=Ne(r),o=i.reduce((e,t,r)=>e+ke(n[r],t),0),s=Number((o/4).toFixed(4));a.push({id:t,data:{droppableContainer:e,value:s}})}}return a.sort(je)};function Ie(e,t){let n=Math.max(t.top,e.top),r=Math.max(t.left,e.left),i=Math.min(t.left+t.width,e.left+e.width),a=Math.min(t.top+t.height,e.top+e.height),o=i-r,s=a-n;if(r<i&&n<a){let n=t.width*t.height,r=e.width*e.height,i=o*s,a=i/(n+r-i);return Number(a.toFixed(4))}return 0}var Le=e=>{let{collisionRect:t,droppableRects:n,droppableContainers:r}=e,i=[];for(let e of r){let{id:r}=e,a=n.get(r);if(a){let n=Ie(a,t);n>0&&i.push({id:r,data:{droppableContainer:e,value:n}})}}return i.sort(Me)};function Re(e,t,n){return{...e,scaleX:t&&n?t.width/n.width:1,scaleY:t&&n?t.height/n.height:1}}function ze(e,t){return e&&t?{x:e.left-t.left,y:e.top-t.top}:J}function Be(e){return function(t){return[...arguments].slice(1).reduce((t,n)=>({...t,top:t.top+e*n.y,bottom:t.bottom+e*n.y,left:t.left+e*n.x,right:t.right+e*n.x}),{...t})}}var Ve=Be(1);function He(e){if(e.startsWith(`matrix3d(`)){let t=e.slice(9,-1).split(/, /);return{x:+t[12],y:+t[13],scaleX:+t[0],scaleY:+t[5]}}else if(e.startsWith(`matrix(`)){let t=e.slice(7,-1).split(/, /);return{x:+t[4],y:+t[5],scaleX:+t[0],scaleY:+t[3]}}return null}function Ue(e,t,n){let r=He(t);if(!r)return e;let{scaleX:i,scaleY:a,x:o,y:s}=r,c=e.left-o-(1-i)*parseFloat(n),l=e.top-s-(1-a)*parseFloat(n.slice(n.indexOf(` `)+1)),u=i?e.width/i:e.width,d=a?e.height/a:e.height;return{width:u,height:d,top:l,right:c+u,bottom:l+d,left:c}}var We={ignoreTransform:!1};function Ge(e,t){t===void 0&&(t=We);let n=e.getBoundingClientRect();if(t.ignoreTransform){let{transform:t,transformOrigin:r}=F(e).getComputedStyle(e);t&&(n=Ue(n,t,r))}let{top:r,left:i,width:a,height:o,bottom:s,right:c}=n;return{top:r,left:i,width:a,height:o,bottom:s,right:c}}function Ke(e){return Ge(e,{ignoreTransform:!0})}function qe(e){let t=e.innerWidth,n=e.innerHeight;return{top:0,left:0,right:t,bottom:n,width:t,height:n}}function Je(e,t){return t===void 0&&(t=F(e).getComputedStyle(e)),t.position===`fixed`}function Ye(e,t){t===void 0&&(t=F(e).getComputedStyle(e));let n=/(auto|scroll|overlay)/;return[`overflow`,`overflowX`,`overflowY`].some(e=>{let r=t[e];return typeof r==`string`?n.test(r):!1})}function Xe(e,t){let n=[];function r(i){if(t!=null&&n.length>=t||!i)return n;if(I(i)&&i.scrollingElement!=null&&!n.includes(i.scrollingElement))return n.push(i.scrollingElement),n;if(!L(i)||ie(i)||n.includes(i))return n;let a=F(e).getComputedStyle(i);return i!==e&&Ye(i,a)&&n.push(i),Je(i,a)?n:r(i.parentNode)}return e?r(e):n}function Ze(e){let[t]=Xe(e,1);return t??null}function Qe(e){return!M||!e?null:N(e)?e:P(e)?I(e)||e===R(e).scrollingElement?window:L(e)?e:null:null}function $e(e){return N(e)?e.scrollX:e.scrollLeft}function et(e){return N(e)?e.scrollY:e.scrollTop}function tt(e){return{x:$e(e),y:et(e)}}var Y;(function(e){e[e.Forward=1]=`Forward`,e[e.Backward=-1]=`Backward`})(Y||={});function nt(e){return!M||!e?!1:e===document.scrollingElement}function rt(e){let t={x:0,y:0},n=nt(e)?{height:window.innerHeight,width:window.innerWidth}:{height:e.clientHeight,width:e.clientWidth},r={x:e.scrollWidth-n.width,y:e.scrollHeight-n.height};return{isTop:e.scrollTop<=t.y,isLeft:e.scrollLeft<=t.x,isBottom:e.scrollTop>=r.y,isRight:e.scrollLeft>=r.x,maxScroll:r,minScroll:t}}var it={x:.2,y:.2};function at(e,t,n,r,i){let{top:a,left:o,right:s,bottom:c}=n;r===void 0&&(r=10),i===void 0&&(i=it);let{isTop:l,isBottom:u,isLeft:d,isRight:f}=rt(e),p={x:0,y:0},m={x:0,y:0},h={height:t.height*i.y,width:t.width*i.x};return!l&&a<=t.top+h.height?(p.y=Y.Backward,m.y=r*Math.abs((t.top+h.height-a)/h.height)):!u&&c>=t.bottom-h.height&&(p.y=Y.Forward,m.y=r*Math.abs((t.bottom-h.height-c)/h.height)),!f&&s>=t.right-h.width?(p.x=Y.Forward,m.x=r*Math.abs((t.right-h.width-s)/h.width)):!d&&o<=t.left+h.width&&(p.x=Y.Backward,m.x=r*Math.abs((t.left+h.width-o)/h.width)),{direction:p,speed:m}}function ot(e){if(e===document.scrollingElement){let{innerWidth:e,innerHeight:t}=window;return{top:0,left:0,right:e,bottom:t,width:e,height:t}}let{top:t,left:n,right:r,bottom:i}=e.getBoundingClientRect();return{top:t,left:n,right:r,bottom:i,width:e.clientWidth,height:e.clientHeight}}function st(e){return e.reduce((e,t)=>le(e,tt(t)),J)}function ct(e){return e.reduce((e,t)=>e+$e(t),0)}function lt(e){return e.reduce((e,t)=>e+et(t),0)}function ut(e,t){if(t===void 0&&(t=Ge),!e)return;let{top:n,left:r,bottom:i,right:a}=t(e);Ze(e)&&(i<=0||a<=0||n>=window.innerHeight||r>=window.innerWidth)&&e.scrollIntoView({block:`center`,inline:`center`})}var dt=[[`x`,[`left`,`right`],ct],[`y`,[`top`,`bottom`],lt]],ft=class{constructor(e,t){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;let n=Xe(t),r=st(n);this.rect={...e},this.width=e.width,this.height=e.height;for(let[e,t,i]of dt)for(let a of t)Object.defineProperty(this,a,{get:()=>{let t=i(n),o=r[e]-t;return this.rect[a]+o},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}},pt=class{constructor(e){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach(e=>this.target?.removeEventListener(...e))},this.target=e}add(e,t,n){var r;(r=this.target)==null||r.addEventListener(e,t,n),this.listeners.push([e,t,n])}};function mt(e){let{EventTarget:t}=F(e);return e instanceof t?e:R(e)}function ht(e,t){let n=Math.abs(e.x),r=Math.abs(e.y);return typeof t==`number`?Math.sqrt(n**2+r**2)>t:`x`in t&&`y`in t?n>t.x&&r>t.y:`x`in t?n>t.x:`y`in t?r>t.y:!1}var X;(function(e){e.Click=`click`,e.DragStart=`dragstart`,e.Keydown=`keydown`,e.ContextMenu=`contextmenu`,e.Resize=`resize`,e.SelectionChange=`selectionchange`,e.VisibilityChange=`visibilitychange`})(X||={});function gt(e){e.preventDefault()}function _t(e){e.stopPropagation()}var Z;(function(e){e.Space=`Space`,e.Down=`ArrowDown`,e.Right=`ArrowRight`,e.Left=`ArrowLeft`,e.Up=`ArrowUp`,e.Esc=`Escape`,e.Enter=`Enter`,e.Tab=`Tab`})(Z||={});var vt={start:[Z.Space,Z.Enter],cancel:[Z.Esc],end:[Z.Space,Z.Enter,Z.Tab]},yt=(e,t)=>{let{currentCoordinates:n}=t;switch(e.code){case Z.Right:return{...n,x:n.x+25};case Z.Left:return{...n,x:n.x-25};case Z.Down:return{...n,y:n.y+25};case Z.Up:return{...n,y:n.y-25}}},bt=class{constructor(e){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=e;let{event:{target:t}}=e;this.props=e,this.listeners=new pt(R(t)),this.windowListeners=new pt(F(t)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(X.Resize,this.handleCancel),this.windowListeners.add(X.VisibilityChange,this.handleCancel),setTimeout(()=>this.listeners.add(X.Keydown,this.handleKeyDown))}handleStart(){let{activeNode:e,onStart:t}=this.props,n=e.node.current;n&&ut(n),t(J)}handleKeyDown(e){if(G(e)){let{active:t,context:n,options:r}=this.props,{keyboardCodes:i=vt,coordinateGetter:a=yt,scrollBehavior:o=`smooth`}=r,{code:s}=e;if(i.end.includes(s)){this.handleEnd(e);return}if(i.cancel.includes(s)){this.handleCancel(e);return}let{collisionRect:c}=n.current,l=c?{x:c.left,y:c.top}:J;this.referenceCoordinates||=l;let u=a(e,{active:t,context:n.current,currentCoordinates:l});if(u){let t=ue(u,l),r={x:0,y:0},{scrollableAncestors:i}=n.current;for(let n of i){let i=e.code,{isTop:a,isRight:s,isLeft:c,isBottom:l,maxScroll:d,minScroll:f}=rt(n),p=ot(n),m={x:Math.min(i===Z.Right?p.right-p.width/2:p.right,Math.max(i===Z.Right?p.left:p.left+p.width/2,u.x)),y:Math.min(i===Z.Down?p.bottom-p.height/2:p.bottom,Math.max(i===Z.Down?p.top:p.top+p.height/2,u.y))},h=i===Z.Right&&!s||i===Z.Left&&!c,g=i===Z.Down&&!l||i===Z.Up&&!a;if(h&&m.x!==u.x){let e=n.scrollLeft+t.x,a=i===Z.Right&&e<=d.x||i===Z.Left&&e>=f.x;if(a&&!t.y){n.scrollTo({left:e,behavior:o});return}a?r.x=n.scrollLeft-e:r.x=i===Z.Right?n.scrollLeft-d.x:n.scrollLeft-f.x,r.x&&n.scrollBy({left:-r.x,behavior:o});break}else if(g&&m.y!==u.y){let e=n.scrollTop+t.y,a=i===Z.Down&&e<=d.y||i===Z.Up&&e>=f.y;if(a&&!t.x){n.scrollTo({top:e,behavior:o});return}a?r.y=n.scrollTop-e:r.y=i===Z.Down?n.scrollTop-d.y:n.scrollTop-f.y,r.y&&n.scrollBy({top:-r.y,behavior:o});break}}this.handleMove(e,le(ue(u,this.referenceCoordinates),r))}}}handleMove(e,t){let{onMove:n}=this.props;e.preventDefault(),n(t)}handleEnd(e){let{onEnd:t}=this.props;e.preventDefault(),this.detach(),t()}handleCancel(e){let{onCancel:t}=this.props;e.preventDefault(),this.detach(),t()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}};bt.activators=[{eventName:`onKeyDown`,handler:(e,t,n)=>{let{keyboardCodes:r=vt,onActivation:i}=t,{active:a}=n,{code:o}=e.nativeEvent;if(r.start.includes(o)){let t=a.activatorNode.current;return t&&e.target!==t?!1:(e.preventDefault(),i?.({event:e.nativeEvent}),!0)}return!1}}];function xt(e){return!!(e&&`distance`in e)}function St(e){return!!(e&&`delay`in e)}var Ct=class{constructor(e,t,n){n===void 0&&(n=mt(e.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=e,this.events=t;let{event:r}=e,{target:i}=r;this.props=e,this.events=t,this.document=R(i),this.documentListeners=new pt(this.document),this.listeners=new pt(n),this.windowListeners=new pt(F(i)),this.initialCoordinates=pe(r)??J,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){let{events:e,props:{options:{activationConstraint:t,bypassActivationConstraint:n}}}=this;if(this.listeners.add(e.move.name,this.handleMove,{passive:!1}),this.listeners.add(e.end.name,this.handleEnd),e.cancel&&this.listeners.add(e.cancel.name,this.handleCancel),this.windowListeners.add(X.Resize,this.handleCancel),this.windowListeners.add(X.DragStart,gt),this.windowListeners.add(X.VisibilityChange,this.handleCancel),this.windowListeners.add(X.ContextMenu,gt),this.documentListeners.add(X.Keydown,this.handleKeydown),t){if(n!=null&&n({event:this.props.event,activeNode:this.props.activeNode,options:this.props.options}))return this.handleStart();if(St(t)){this.timeoutId=setTimeout(this.handleStart,t.delay),this.handlePending(t);return}if(xt(t)){this.handlePending(t);return}}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handlePending(e,t){let{active:n,onPending:r}=this.props;r(n,e,this.initialCoordinates,t)}handleStart(){let{initialCoordinates:e}=this,{onStart:t}=this.props;e&&(this.activated=!0,this.documentListeners.add(X.Click,_t,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(X.SelectionChange,this.removeTextSelection),t(e))}handleMove(e){let{activated:t,initialCoordinates:n,props:r}=this,{onMove:i,options:{activationConstraint:a}}=r;if(!n)return;let o=pe(e)??J,s=ue(n,o);if(!t&&a){if(xt(a)){if(a.tolerance!=null&&ht(s,a.tolerance))return this.handleCancel();if(ht(s,a.distance))return this.handleStart()}if(St(a)&&ht(s,a.tolerance))return this.handleCancel();this.handlePending(a,s);return}e.cancelable&&e.preventDefault(),i(o)}handleEnd(){let{onAbort:e,onEnd:t}=this.props;this.detach(),this.activated||e(this.props.active),t()}handleCancel(){let{onAbort:e,onCancel:t}=this.props;this.detach(),this.activated||e(this.props.active),t()}handleKeydown(e){e.code===Z.Esc&&this.handleCancel()}removeTextSelection(){var e;(e=this.document.getSelection())==null||e.removeAllRanges()}},wt={cancel:{name:`pointercancel`},move:{name:`pointermove`},end:{name:`pointerup`}},Tt=class extends Ct{constructor(e){let{event:t}=e,n=R(t.target);super(e,wt,n)}};Tt.activators=[{eventName:`onPointerDown`,handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return!n.isPrimary||n.button!==0?!1:(r?.({event:n}),!0)}}];var Et={move:{name:`mousemove`},end:{name:`mouseup`}},Dt;(function(e){e[e.RightClick=2]=`RightClick`})(Dt||={});var Ot=class extends Ct{constructor(e){super(e,Et,R(e.event.target))}};Ot.activators=[{eventName:`onMouseDown`,handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return n.button===Dt.RightClick?!1:(r?.({event:n}),!0)}}];var kt={cancel:{name:`touchcancel`},move:{name:`touchmove`},end:{name:`touchend`}},At=class extends Ct{constructor(e){super(e,kt)}static setup(){return window.addEventListener(kt.move.name,e,{capture:!1,passive:!1}),function(){window.removeEventListener(kt.move.name,e)};function e(){}}};At.activators=[{eventName:`onTouchStart`,handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t,{touches:i}=n;return i.length>1?!1:(r?.({event:n}),!0)}}];var jt;(function(e){e[e.Pointer=0]=`Pointer`,e[e.DraggableRect=1]=`DraggableRect`})(jt||={});var Mt;(function(e){e[e.TreeOrder=0]=`TreeOrder`,e[e.ReversedTreeOrder=1]=`ReversedTreeOrder`})(Mt||={});function Nt(e){let{acceleration:t,activator:n=jt.Pointer,canScroll:r,draggingRect:i,enabled:a,interval:o=5,order:s=Mt.TreeOrder,pointerCoordinates:c,scrollableAncestors:l,scrollableAncestorRects:u,delta:d,threshold:f}=e,p=Ft({delta:d,disabled:!a}),[m,h]=V(),g=(0,A.useRef)({x:0,y:0}),_=(0,A.useRef)({x:0,y:0}),v=(0,A.useMemo)(()=>{switch(n){case jt.Pointer:return c?{top:c.y,bottom:c.y,left:c.x,right:c.x}:null;case jt.DraggableRect:return i}},[n,i,c]),y=(0,A.useRef)(null),b=(0,A.useCallback)(()=>{let e=y.current;if(!e)return;let t=g.current.x*_.current.x,n=g.current.y*_.current.y;e.scrollBy(t,n)},[]),x=(0,A.useMemo)(()=>s===Mt.TreeOrder?[...l].reverse():l,[s,l]);(0,A.useEffect)(()=>{if(!a||!l.length||!v){h();return}for(let e of x){if(r?.(e)===!1)continue;let n=u[l.indexOf(e)];if(!n)continue;let{direction:i,speed:a}=at(e,n,v,t,f);for(let e of[`x`,`y`])p[e][i[e]]||(a[e]=0,i[e]=0);if(a.x>0||a.y>0){h(),y.current=e,m(b,o),g.current=a,_.current=i;return}}g.current={x:0,y:0},_.current={x:0,y:0},h()},[t,b,r,h,a,o,JSON.stringify(v),JSON.stringify(p),m,l,x,u,JSON.stringify(f)])}var Pt={x:{[Y.Backward]:!1,[Y.Forward]:!1},y:{[Y.Backward]:!1,[Y.Forward]:!1}};function Ft(e){let{delta:t,disabled:n}=e,r=W(t);return H(e=>{if(n||!r||!e)return Pt;let i={x:Math.sign(t.x-r.x),y:Math.sign(t.y-r.y)};return{x:{[Y.Backward]:e.x[Y.Backward]||i.x===-1,[Y.Forward]:e.x[Y.Forward]||i.x===1},y:{[Y.Backward]:e.y[Y.Backward]||i.y===-1,[Y.Forward]:e.y[Y.Forward]||i.y===1}}},[n,t,r])}function It(e,t){let n=t==null?void 0:e.get(t),r=n?n.node.current:null;return H(e=>t==null?null:r??e??null,[r,t])}function Lt(e,t){return(0,A.useMemo)(()=>e.reduce((e,n)=>{let{sensor:r}=n,i=r.activators.map(e=>({eventName:e.eventName,handler:t(e.handler,n)}));return[...e,...i]},[]),[e,t])}var Rt;(function(e){e[e.Always=0]=`Always`,e[e.BeforeDragging=1]=`BeforeDragging`,e[e.WhileDragging=2]=`WhileDragging`})(Rt||={});var zt;(function(e){e.Optimized=`optimized`})(zt||={});var Bt=new Map;function Vt(e,t){let{dragging:n,dependencies:r,config:i}=t,[a,o]=(0,A.useState)(null),{frequency:s,measure:c,strategy:l}=i,u=(0,A.useRef)(e),d=g(),f=ae(d),p=(0,A.useCallback)(function(e){e===void 0&&(e=[]),!f.current&&o(t=>t===null?e:t.concat(e.filter(e=>!t.includes(e))))},[f]),m=(0,A.useRef)(null),h=H(t=>{if(d&&!n)return Bt;if(!t||t===Bt||u.current!==e||a!=null){let t=new Map;for(let n of e){if(!n)continue;if(a&&a.length>0&&!a.includes(n.id)&&n.rect.current){t.set(n.id,n.rect.current);continue}let e=n.node.current,r=e?new ft(c(e),e):null;n.rect.current=r,r&&t.set(n.id,r)}return t}return t},[e,a,n,d,c]);return(0,A.useEffect)(()=>{u.current=e},[e]),(0,A.useEffect)(()=>{d||p()},[n,d]),(0,A.useEffect)(()=>{a&&a.length>0&&o(null)},[JSON.stringify(a)]),(0,A.useEffect)(()=>{d||typeof s!=`number`||m.current!==null||(m.current=setTimeout(()=>{p(),m.current=null},s))},[s,d,p,...r]),{droppableRects:h,measureDroppableContainers:p,measuringScheduled:a!=null};function g(){switch(l){case Rt.Always:return!1;case Rt.BeforeDragging:return n;default:return!n}}}function Ht(e,t){return H(n=>e?n||(typeof t==`function`?t(e):e):null,[t,e])}function Ut(e,t){return Ht(e,t)}function Wt(e){let{callback:t,disabled:n}=e,r=B(t),i=(0,A.useMemo)(()=>{if(n||typeof window>`u`||window.MutationObserver===void 0)return;let{MutationObserver:e}=window;return new e(r)},[r,n]);return(0,A.useEffect)(()=>()=>i?.disconnect(),[i]),i}function Gt(e){let{callback:t,disabled:n}=e,r=B(t),i=(0,A.useMemo)(()=>{if(n||typeof window>`u`||window.ResizeObserver===void 0)return;let{ResizeObserver:e}=window;return new e(r)},[n]);return(0,A.useEffect)(()=>()=>i?.disconnect(),[i]),i}function Kt(e){return new ft(Ge(e),e)}function qt(e,t,n){t===void 0&&(t=Kt);let[r,i]=(0,A.useState)(null);function a(){i(r=>{if(!e)return null;if(e.isConnected===!1)return r??n??null;let i=t(e);return JSON.stringify(r)===JSON.stringify(i)?r:i})}let o=Wt({callback(t){if(e)for(let n of t){let{type:t,target:r}=n;if(t===`childList`&&r instanceof HTMLElement&&r.contains(e)){a();break}}}}),s=Gt({callback:a});return z(()=>{a(),e?(s?.observe(e),o?.observe(document.body,{childList:!0,subtree:!0})):(s?.disconnect(),o?.disconnect())},[e]),r}function Jt(e){return ze(e,Ht(e))}var Yt=[];function Xt(e){let t=(0,A.useRef)(e),n=H(n=>e?n&&n!==Yt&&e&&t.current&&e.parentNode===t.current.parentNode?n:Xe(e):Yt,[e]);return(0,A.useEffect)(()=>{t.current=e},[e]),n}function Zt(e){let[t,n]=(0,A.useState)(null),r=(0,A.useRef)(e),i=(0,A.useCallback)(e=>{let t=Qe(e.target);t&&n(e=>e?(e.set(t,tt(t)),new Map(e)):null)},[]);return(0,A.useEffect)(()=>{let t=r.current;if(e!==t){a(t);let o=e.map(e=>{let t=Qe(e);return t?(t.addEventListener(`scroll`,i,{passive:!0}),[t,tt(t)]):null}).filter(e=>e!=null);n(o.length?new Map(o):null),r.current=e}return()=>{a(e),a(t)};function a(e){e.forEach(e=>{Qe(e)?.removeEventListener(`scroll`,i)})}},[i,e]),(0,A.useMemo)(()=>e.length?t?Array.from(t.values()).reduce((e,t)=>le(e,t),J):st(e):J,[e,t])}function Qt(e,t){t===void 0&&(t=[]);let n=(0,A.useRef)(null);return(0,A.useEffect)(()=>{n.current=null},t),(0,A.useEffect)(()=>{let t=e!==J;t&&!n.current&&(n.current=e),!t&&n.current&&(n.current=null)},[e]),n.current?ue(e,n.current):J}function $t(e){(0,A.useEffect)(()=>{if(!M)return;let t=e.map(e=>{let{sensor:t}=e;return t.setup==null?void 0:t.setup()});return()=>{for(let e of t)e?.()}},e.map(e=>{let{sensor:t}=e;return t}))}function en(e,t){return(0,A.useMemo)(()=>e.reduce((e,n)=>{let{eventName:r,handler:i}=n;return e[r]=e=>{i(e,t)},e},{}),[e,t])}function tn(e){return(0,A.useMemo)(()=>e?qe(e):null,[e])}var nn=[];function rn(e,t){t===void 0&&(t=Ge);let[n]=e,r=tn(n?F(n):null),[i,a]=(0,A.useState)(nn);function o(){a(()=>e.length?e.map(e=>nt(e)?r:new ft(t(e),e)):nn)}let s=Gt({callback:o});return z(()=>{s?.disconnect(),o(),e.forEach(e=>s?.observe(e))},[e]),i}function an(e){if(!e)return null;if(e.children.length>1)return e;let t=e.children[0];return L(t)?t:e}function on(e){let{measure:t}=e,[n,r]=(0,A.useState)(null),i=Gt({callback:(0,A.useCallback)(e=>{for(let{target:n}of e)if(L(n)){r(e=>{let r=t(n);return e?{...e,width:r.width,height:r.height}:r});break}},[t])}),[a,o]=U((0,A.useCallback)(e=>{let n=an(e);i?.disconnect(),n&&i?.observe(n),r(n?t(n):null)},[t,i]));return(0,A.useMemo)(()=>({nodeRef:a,rect:n,setRef:o}),[n,a,o])}var sn=[{sensor:Tt,options:{}},{sensor:bt,options:{}}],cn={current:{}},ln={draggable:{measure:Ke},droppable:{measure:Ke,strategy:Rt.WhileDragging,frequency:zt.Optimized},dragOverlay:{measure:Ge}},un=class extends Map{get(e){return e==null?void 0:super.get(e)??void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter(e=>{let{disabled:t}=e;return!t})}getNodeFor(e){return this.get(e)?.node.current??void 0}},dn={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new un,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:Ee},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:ln,measureDroppableContainers:Ee,windowRect:null,measuringScheduled:!1},fn={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:``},dispatch:Ee,draggableNodes:new Map,over:null,measureDroppableContainers:Ee},pn=(0,A.createContext)(fn),mn=(0,A.createContext)(dn);function hn(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new un}}}function gn(e,t){switch(t.type){case q.DragStart:return{...e,draggable:{...e.draggable,initialCoordinates:t.initialCoordinates,active:t.active}};case q.DragMove:return e.draggable.active==null?e:{...e,draggable:{...e.draggable,translate:{x:t.coordinates.x-e.draggable.initialCoordinates.x,y:t.coordinates.y-e.draggable.initialCoordinates.y}}};case q.DragEnd:case q.DragCancel:return{...e,draggable:{...e.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case q.RegisterDroppable:{let{element:n}=t,{id:r}=n,i=new un(e.droppable.containers);return i.set(r,n),{...e,droppable:{...e.droppable,containers:i}}}case q.SetDroppableDisabled:{let{id:n,key:r,disabled:i}=t,a=e.droppable.containers.get(n);if(!a||r!==a.key)return e;let o=new un(e.droppable.containers);return o.set(n,{...a,disabled:i}),{...e,droppable:{...e.droppable,containers:o}}}case q.UnregisterDroppable:{let{id:n,key:r}=t,i=e.droppable.containers.get(n);if(!i||r!==i.key)return e;let a=new un(e.droppable.containers);return a.delete(n),{...e,droppable:{...e.droppable,containers:a}}}default:return e}}function _n(e){let{disabled:t}=e,{active:n,activatorEvent:r,draggableNodes:i}=(0,A.useContext)(pn),a=W(r),o=W(n?.id);return(0,A.useEffect)(()=>{if(!t&&!r&&a&&o!=null){if(!G(a)||document.activeElement===a.target)return;let e=i.get(o);if(!e)return;let{activatorNode:t,node:n}=e;if(!t.current&&!n.current)return;requestAnimationFrame(()=>{for(let e of[t.current,n.current]){if(!e)continue;let t=he(e);if(t){t.focus();break}}})}},[r,t,i,o,a]),null}function vn(e,t){let{transform:n,...r}=t;return e!=null&&e.length?e.reduce((e,t)=>t({transform:e,...r}),n):n}function yn(e){return(0,A.useMemo)(()=>({draggable:{...ln.draggable,...e?.draggable},droppable:{...ln.droppable,...e?.droppable},dragOverlay:{...ln.dragOverlay,...e?.dragOverlay}}),[e?.draggable,e?.droppable,e?.dragOverlay])}function bn(e){let{activeNode:t,measure:n,initialRect:r,config:i=!0}=e,a=(0,A.useRef)(!1),{x:o,y:s}=typeof i==`boolean`?{x:i,y:i}:i;z(()=>{if(!o&&!s||!t){a.current=!1;return}if(a.current||!r)return;let e=t?.node.current;if(!e||e.isConnected===!1)return;let i=ze(n(e),r);if(o||(i.x=0),s||(i.y=0),a.current=!0,Math.abs(i.x)>0||Math.abs(i.y)>0){let t=Ze(e);t&&t.scrollBy({top:i.y,left:i.x})}},[t,o,s,r,n])}var xn=(0,A.createContext)({...J,scaleX:1,scaleY:1}),Sn;(function(e){e[e.Uninitialized=0]=`Uninitialized`,e[e.Initializing=1]=`Initializing`,e[e.Initialized=2]=`Initialized`})(Sn||={});var Cn=(0,A.memo)(function(e){let{id:t,accessibility:n,autoScroll:r=!0,children:i,sensors:a=sn,collisionDetection:o=Le,measuring:s,modifiers:c,...l}=e,[u,d]=(0,A.useReducer)(gn,void 0,hn),[f,p]=Se(),[m,h]=(0,A.useState)(Sn.Uninitialized),g=m===Sn.Initialized,{draggable:{active:_,nodes:v,translate:y},droppable:{containers:b}}=u,x=_==null?null:v.get(_),ee=(0,A.useRef)({initial:null,translated:null}),S=(0,A.useMemo)(()=>_==null?null:{id:_,data:x?.data??cn,rect:ee},[_,x]),C=(0,A.useRef)(null),[w,T]=(0,A.useState)(null),[E,te]=(0,A.useState)(null),D=ae(l,Object.values(l)),ne=se(`DndDescribedBy`,t),re=(0,A.useMemo)(()=>b.getEnabled(),[b]),O=yn(s),{droppableRects:j,measureDroppableContainers:M,measuringScheduled:N}=Vt(re,{dragging:g,dependencies:[y.x,y.y],config:O.droppable}),P=It(v,_),I=(0,A.useMemo)(()=>E?pe(E):null,[E]),L=Me(),ie=Ut(P,O.draggable.measure);bn({activeNode:_==null?null:v.get(_),config:L.layoutShiftCompensation,initialRect:ie,measure:O.draggable.measure});let R=qt(P,O.draggable.measure,ie),B=qt(P?P.parentElement:null),V=(0,A.useRef)({activatorEvent:null,active:null,activeNode:P,collisionRect:null,collisions:null,droppableRects:j,draggableNodes:v,draggingNode:null,draggingNodeRect:null,droppableContainers:b,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),H=b.getNodeFor(V.current.over?.id),U=on({measure:O.dragOverlay.measure}),W=U.nodeRef.current??P,oe=g?U.rect??R:null,ce=!!(U.nodeRef.current&&U.rect),ue=Jt(ce?null:R),de=tn(W?F(W):null),G=Xt(g?H??P:null),fe=rn(G),K=vn(c,{transform:{x:y.x-ue.x,y:y.y-ue.y,scaleX:1,scaleY:1},activatorEvent:E,active:S,activeNodeRect:R,containerNodeRect:B,draggingNodeRect:oe,over:V.current.over,overlayNodeRect:U.rect,scrollableAncestors:G,scrollableAncestorRects:fe,windowRect:de}),me=I?le(I,y):null,he=Zt(G),ge=Qt(he),_e=Qt(he,[R]),ve=le(K,ge),ye=oe?Ve(oe,K):null,xe=S&&ye?o({active:S,collisionRect:ye,droppableRects:j,droppableContainers:re,pointerCoordinates:me}):null,Ce=Pe(xe,`id`),[we,Ee]=(0,A.useState)(null),De=Re(ce?K:le(K,_e),we?.rect??null,R),Oe=(0,A.useRef)(null),J=(0,A.useCallback)((e,t)=>{let{sensor:n,options:r}=t;if(C.current==null)return;let i=v.get(C.current);if(!i)return;let a=e.nativeEvent;Oe.current=new n({active:C.current,activeNode:i,event:a,options:r,context:V,onAbort(e){if(!v.get(e))return;let{onDragAbort:t}=D.current,n={id:e};t?.(n),f({type:`onDragAbort`,event:n})},onPending(e,t,n,r){if(!v.get(e))return;let{onDragPending:i}=D.current,a={id:e,constraint:t,initialCoordinates:n,offset:r};i?.(a),f({type:`onDragPending`,event:a})},onStart(e){let t=C.current;if(t==null)return;let n=v.get(t);if(!n)return;let{onDragStart:r}=D.current,i={activatorEvent:a,active:{id:t,data:n.data,rect:ee}};(0,k.unstable_batchedUpdates)(()=>{r?.(i),h(Sn.Initializing),d({type:q.DragStart,initialCoordinates:e,active:t}),f({type:`onDragStart`,event:i}),T(Oe.current),te(a)})},onMove(e){d({type:q.DragMove,coordinates:e})},onEnd:o(q.DragEnd),onCancel:o(q.DragCancel)});function o(e){return async function(){let{active:t,collisions:n,over:r,scrollAdjustedTranslate:i}=V.current,o=null;if(t&&i){let{cancelDrop:s}=D.current;o={activatorEvent:a,active:t,collisions:n,delta:i,over:r},e===q.DragEnd&&typeof s==`function`&&await Promise.resolve(s(o))&&(e=q.DragCancel)}C.current=null,(0,k.unstable_batchedUpdates)(()=>{d({type:e}),h(Sn.Uninitialized),Ee(null),T(null),te(null),Oe.current=null;let t=e===q.DragEnd?`onDragEnd`:`onDragCancel`;if(o){let e=D.current[t];e?.(o),f({type:t,event:o})}})}}},[v]),ke=Lt(a,(0,A.useCallback)((e,t)=>(n,r)=>{let i=n.nativeEvent,a=v.get(r);if(C.current!==null||!a||i.dndKit||i.defaultPrevented)return;let o={active:a};e(n,t.options,o)===!0&&(i.dndKit={capturedBy:t.sensor},C.current=r,J(n,t))},[v,J]));$t(a),z(()=>{R&&m===Sn.Initializing&&h(Sn.Initialized)},[R,m]),(0,A.useEffect)(()=>{let{onDragMove:e}=D.current,{active:t,activatorEvent:n,collisions:r,over:i}=V.current;if(!t||!n)return;let a={active:t,activatorEvent:n,collisions:r,delta:{x:ve.x,y:ve.y},over:i};(0,k.unstable_batchedUpdates)(()=>{e?.(a),f({type:`onDragMove`,event:a})})},[ve.x,ve.y]),(0,A.useEffect)(()=>{let{active:e,activatorEvent:t,collisions:n,droppableContainers:r,scrollAdjustedTranslate:i}=V.current;if(!e||C.current==null||!t||!i)return;let{onDragOver:a}=D.current,o=r.get(Ce),s=o&&o.rect.current?{id:o.id,rect:o.rect.current,data:o.data,disabled:o.disabled}:null,c={active:e,activatorEvent:t,collisions:n,delta:{x:i.x,y:i.y},over:s};(0,k.unstable_batchedUpdates)(()=>{Ee(s),a?.(c),f({type:`onDragOver`,event:c})})},[Ce]),z(()=>{V.current={activatorEvent:E,active:S,activeNode:P,collisionRect:ye,collisions:xe,droppableRects:j,draggableNodes:v,draggingNode:W,draggingNodeRect:oe,droppableContainers:b,over:we,scrollableAncestors:G,scrollAdjustedTranslate:ve},ee.current={initial:oe,translated:ye}},[S,P,xe,ye,v,W,oe,j,b,we,G,ve]),Nt({...L,delta:y,draggingRect:ye,pointerCoordinates:me,scrollableAncestors:G,scrollableAncestorRects:fe});let Ae=(0,A.useMemo)(()=>({active:S,activeNode:P,activeNodeRect:R,activatorEvent:E,collisions:xe,containerNodeRect:B,dragOverlay:U,draggableNodes:v,droppableContainers:b,droppableRects:j,over:we,measureDroppableContainers:M,scrollableAncestors:G,scrollableAncestorRects:fe,measuringConfiguration:O,measuringScheduled:N,windowRect:de}),[S,P,R,E,xe,B,U,v,b,j,we,M,G,fe,O,N,de]),je=(0,A.useMemo)(()=>({activatorEvent:E,activators:ke,active:S,activeNodeRect:R,ariaDescribedById:{draggable:ne},dispatch:d,draggableNodes:v,over:we,measureDroppableContainers:M}),[E,ke,S,R,d,ne,v,we,M]);return A.createElement(be.Provider,{value:p},A.createElement(pn.Provider,{value:je},A.createElement(mn.Provider,{value:Ae},A.createElement(xn.Provider,{value:De},i)),A.createElement(_n,{disabled:n?.restoreFocus===!1})),A.createElement(Te,{...n,hiddenTextDescribedById:ne}));function Me(){let e=w?.autoScrollEnabled===!1,t=typeof r==`object`?r.enabled===!1:r===!1,n=g&&!e&&!t;return typeof r==`object`?{...r,enabled:n}:{enabled:n}}}),wn=(0,A.createContext)(null),Tn=`button`,En=`Draggable`;function Dn(e){let{id:t,data:n,disabled:r=!1,attributes:i}=e,a=se(En),{activators:o,activatorEvent:s,active:c,activeNodeRect:l,ariaDescribedById:u,draggableNodes:d,over:f}=(0,A.useContext)(pn),{role:p=Tn,roleDescription:m=`draggable`,tabIndex:h=0}=i??{},g=c?.id===t,_=(0,A.useContext)(g?xn:wn),[v,y]=U(),[b,x]=U(),ee=en(o,t),S=ae(n);return z(()=>(d.set(t,{id:t,key:a,node:v,activatorNode:b,data:S}),()=>{let e=d.get(t);e&&e.key===a&&d.delete(t)}),[d,t]),{active:c,activatorEvent:s,activeNodeRect:l,attributes:(0,A.useMemo)(()=>({role:p,tabIndex:h,"aria-disabled":r,"aria-pressed":g&&p===Tn?!0:void 0,"aria-roledescription":m,"aria-describedby":u.draggable}),[r,p,h,g,m,u.draggable]),isDragging:g,listeners:r?void 0:ee,node:v,over:f,setNodeRef:y,setActivatorNodeRef:x,transform:_}}function On(){return(0,A.useContext)(mn)}var kn=`Droppable`,An={timeout:25};function jn(e){let{data:t,disabled:n=!1,id:r,resizeObserverConfig:i}=e,a=se(kn),{active:o,dispatch:s,over:c,measureDroppableContainers:l}=(0,A.useContext)(pn),u=(0,A.useRef)({disabled:n}),d=(0,A.useRef)(!1),f=(0,A.useRef)(null),p=(0,A.useRef)(null),{disabled:m,updateMeasurementsFor:h,timeout:g}={...An,...i},_=ae(h??r),v=Gt({callback:(0,A.useCallback)(()=>{if(!d.current){d.current=!0;return}p.current!=null&&clearTimeout(p.current),p.current=setTimeout(()=>{l(Array.isArray(_.current)?_.current:[_.current]),p.current=null},g)},[g]),disabled:m||!o}),[y,b]=U((0,A.useCallback)((e,t)=>{v&&(t&&(v.unobserve(t),d.current=!1),e&&v.observe(e))},[v])),x=ae(t);return(0,A.useEffect)(()=>{!v||!y.current||(v.disconnect(),d.current=!1,v.observe(y.current))},[y,v]),(0,A.useEffect)(()=>(s({type:q.RegisterDroppable,element:{id:r,key:a,disabled:n,node:y,rect:f,data:x}}),()=>s({type:q.UnregisterDroppable,key:a,id:r})),[r]),(0,A.useEffect)(()=>{n!==u.current.disabled&&(s({type:q.SetDroppableDisabled,id:r,key:a,disabled:n}),u.current.disabled=n)},[r,a,n,s]),{active:o,rect:f,isOver:c?.id===r,node:y,over:c,setNodeRef:b}}function Mn(e){let{animation:t,children:n}=e,[r,i]=(0,A.useState)(null),[a,o]=(0,A.useState)(null),s=W(n);return!n&&!r&&s&&i(s),z(()=>{if(!a)return;let e=r?.key,n=r?.props.id;if(e==null||n==null){i(null);return}Promise.resolve(t(n,a)).then(()=>{i(null)})},[t,r,a]),A.createElement(A.Fragment,null,n,r?(0,A.cloneElement)(r,{ref:o}):null)}var Nn={x:0,y:0,scaleX:1,scaleY:1};function Pn(e){let{children:t}=e;return A.createElement(pn.Provider,{value:fn},A.createElement(xn.Provider,{value:Nn},t))}var Fn={position:`fixed`,touchAction:`none`},In=e=>G(e)?`transform 250ms ease`:void 0,Ln=(0,A.forwardRef)((e,t)=>{let{as:n,activatorEvent:r,adjustScale:i,children:a,className:o,rect:s,style:c,transform:l,transition:u=In}=e;if(!s)return null;let d=i?l:{...l,scaleX:1,scaleY:1},f={...Fn,width:s.width,height:s.height,top:s.top,left:s.left,transform:K.Transform.toString(d),transformOrigin:i&&r?Ae(r,s):void 0,transition:typeof u==`function`?u(r):u,...c};return A.createElement(n,{className:o,style:f,ref:t},a)}),Rn={duration:250,easing:`ease`,keyframes:e=>{let{transform:{initial:t,final:n}}=e;return[{transform:K.Transform.toString(t)},{transform:K.Transform.toString(n)}]},sideEffects:(e=>t=>{let{active:n,dragOverlay:r}=t,i={},{styles:a,className:o}=e;if(a!=null&&a.active)for(let[e,t]of Object.entries(a.active))t!==void 0&&(i[e]=n.node.style.getPropertyValue(e),n.node.style.setProperty(e,t));if(a!=null&&a.dragOverlay)for(let[e,t]of Object.entries(a.dragOverlay))t!==void 0&&r.node.style.setProperty(e,t);return o!=null&&o.active&&n.node.classList.add(o.active),o!=null&&o.dragOverlay&&r.node.classList.add(o.dragOverlay),function(){for(let[e,t]of Object.entries(i))n.node.style.setProperty(e,t);o!=null&&o.active&&n.node.classList.remove(o.active)}})({styles:{active:{opacity:`0`}}})};function zn(e){let{config:t,draggableNodes:n,droppableContainers:r,measuringConfiguration:i}=e;return B((e,a)=>{if(t===null)return;let o=n.get(e);if(!o)return;let s=o.node.current;if(!s)return;let c=an(a);if(!c)return;let{transform:l}=F(a).getComputedStyle(a),u=He(l);if(!u)return;let d=typeof t==`function`?t:Bn(t);return ut(s,i.draggable.measure),d({active:{id:e,data:o.data,node:s,rect:i.draggable.measure(s)},draggableNodes:n,dragOverlay:{node:a,rect:i.dragOverlay.measure(c)},droppableContainers:r,measuringConfiguration:i,transform:u})})}function Bn(e){let{duration:t,easing:n,sideEffects:r,keyframes:i}={...Rn,...e};return e=>{let{active:a,dragOverlay:o,transform:s,...c}=e;if(!t)return;let l={x:o.rect.left-a.rect.left,y:o.rect.top-a.rect.top},u={scaleX:s.scaleX===1?1:a.rect.width*s.scaleX/o.rect.width,scaleY:s.scaleY===1?1:a.rect.height*s.scaleY/o.rect.height},d={x:s.x-l.x,y:s.y-l.y,...u},f=i({...c,active:a,dragOverlay:o,transform:{initial:s,final:d}}),[p]=f,m=f[f.length-1];if(JSON.stringify(p)===JSON.stringify(m))return;let h=r?.({active:a,dragOverlay:o,...c}),g=o.node.animate(f,{duration:t,easing:n,fill:`forwards`});return new Promise(e=>{g.onfinish=()=>{h?.(),e()}})}}var Vn=0;function Hn(e){return(0,A.useMemo)(()=>{if(e!=null)return Vn++,Vn},[e])}var Un=A.memo(e=>{let{adjustScale:t=!1,children:n,dropAnimation:r,style:i,transition:a,modifiers:o,wrapperElement:s=`div`,className:c,zIndex:l=999}=e,{activatorEvent:u,active:d,activeNodeRect:f,containerNodeRect:p,draggableNodes:m,droppableContainers:h,dragOverlay:g,over:_,measuringConfiguration:v,scrollableAncestors:y,scrollableAncestorRects:b,windowRect:x}=On(),ee=(0,A.useContext)(xn),S=Hn(d?.id),C=vn(o,{activatorEvent:u,active:d,activeNodeRect:f,containerNodeRect:p,draggingNodeRect:g.rect,over:_,overlayNodeRect:g.rect,scrollableAncestors:y,scrollableAncestorRects:b,transform:ee,windowRect:x}),w=Ht(f),T=zn({config:r,draggableNodes:m,droppableContainers:h,measuringConfiguration:v}),E=w?g.setRef:void 0;return A.createElement(Pn,null,A.createElement(Mn,{animation:T},d&&S?A.createElement(Ln,{key:S,id:d.id,ref:E,as:s,activatorEvent:u,adjustScale:t,className:c,transition:a,rect:w,style:{zIndex:l,...i},transform:C},n):null))});function Wn(e,t,n){let r=e.slice();return r.splice(n<0?r.length+n:n,0,r.splice(t,1)[0]),r}function Gn(e,t){return e.reduce((e,n,r)=>{let i=t.get(n);return i&&(e[r]=i),e},Array(e.length))}function Kn(e){return e!==null&&e>=0}function qn(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function Jn(e){return typeof e==`boolean`?{draggable:e,droppable:e}:e}var Yn=e=>{let{rects:t,activeIndex:n,overIndex:r,index:i}=e,a=Wn(t,r,n),o=t[i],s=a[i];return!s||!o?null:{x:s.left-o.left,y:s.top-o.top,scaleX:s.width/o.width,scaleY:s.height/o.height}},Xn={scaleX:1,scaleY:1},Zn=e=>{let{activeIndex:t,activeNodeRect:n,index:r,rects:i,overIndex:a}=e,o=i[t]??n;if(!o)return null;if(r===t){let e=i[a];return e?{x:0,y:t<a?e.top+e.height-(o.top+o.height):e.top-o.top,...Xn}:null}let s=Qn(i,r,t);return r>t&&r<=a?{x:0,y:-o.height-s,...Xn}:r<t&&r>=a?{x:0,y:o.height+s,...Xn}:{x:0,y:0,...Xn}};function Qn(e,t,n){let r=e[t],i=e[t-1],a=e[t+1];return r?n<t?i?r.top-(i.top+i.height):a?a.top-(r.top+r.height):0:a?a.top-(r.top+r.height):i?r.top-(i.top+i.height):0:0}var $n=`Sortable`,er=A.createContext({activeIndex:-1,containerId:$n,disableTransforms:!1,items:[],overIndex:-1,useDragOverlay:!1,sortedRects:[],strategy:Yn,disabled:{draggable:!1,droppable:!1}});function tr(e){let{children:t,id:n,items:r,strategy:i=Yn,disabled:a=!1}=e,{active:o,dragOverlay:s,droppableRects:c,over:l,measureDroppableContainers:u}=On(),d=se($n,n),f=s.rect!==null,p=(0,A.useMemo)(()=>r.map(e=>typeof e==`object`&&`id`in e?e.id:e),[r]),m=o!=null,h=o?p.indexOf(o.id):-1,g=l?p.indexOf(l.id):-1,_=(0,A.useRef)(p),v=!qn(p,_.current),y=g!==-1&&h===-1||v,b=Jn(a);z(()=>{v&&m&&u(p)},[v,p,m,u]),(0,A.useEffect)(()=>{_.current=p},[p]);let x=(0,A.useMemo)(()=>({activeIndex:h,containerId:d,disabled:b,disableTransforms:y,items:p,overIndex:g,useDragOverlay:f,sortedRects:Gn(p,c),strategy:i}),[h,d,b.draggable,b.droppable,y,p,g,c,f,i]);return A.createElement(er.Provider,{value:x},t)}var nr=e=>{let{id:t,items:n,activeIndex:r,overIndex:i}=e;return Wn(n,r,i).indexOf(t)},rr=e=>{let{containerId:t,isSorting:n,wasDragging:r,index:i,items:a,newIndex:o,previousItems:s,previousContainerId:c,transition:l}=e;return!l||!r||s!==a&&i===o?!1:n?!0:o!==i&&t===c},ir={duration:200,easing:`ease`},ar=`transform`,or=K.Transition.toString({property:ar,duration:0,easing:`linear`}),sr={roleDescription:`sortable`};function cr(e){let{disabled:t,index:n,node:r,rect:i}=e,[a,o]=(0,A.useState)(null),s=(0,A.useRef)(n);return z(()=>{if(!t&&n!==s.current&&r.current){let e=i.current;if(e){let t=Ge(r.current,{ignoreTransform:!0}),n={x:e.left-t.left,y:e.top-t.top,scaleX:e.width/t.width,scaleY:e.height/t.height};(n.x||n.y)&&o(n)}}n!==s.current&&(s.current=n)},[t,n,r,i]),(0,A.useEffect)(()=>{a&&o(null)},[a]),a}function lr(e){let{animateLayoutChanges:t=rr,attributes:n,disabled:r,data:i,getNewIndex:a=nr,id:o,strategy:s,resizeObserverConfig:c,transition:l=ir}=e,{items:u,containerId:d,activeIndex:f,disabled:p,disableTransforms:m,sortedRects:h,overIndex:g,useDragOverlay:_,strategy:v}=(0,A.useContext)(er),y=ur(r,p),b=u.indexOf(o),x=(0,A.useMemo)(()=>({sortable:{containerId:d,index:b,items:u},...i}),[d,i,b,u]),ee=(0,A.useMemo)(()=>u.slice(u.indexOf(o)),[u,o]),{rect:S,node:C,isOver:w,setNodeRef:T}=jn({id:o,data:x,disabled:y.droppable,resizeObserverConfig:{updateMeasurementsFor:ee,...c}}),{active:E,activatorEvent:te,activeNodeRect:D,attributes:ne,setNodeRef:re,listeners:O,isDragging:k,over:M,setActivatorNodeRef:N,transform:P}=Dn({id:o,data:x,attributes:{...sr,...n},disabled:y.draggable}),F=j(T,re),I=!!E,L=I&&!m&&Kn(f)&&Kn(g),ie=!_&&k,R=L?(ie&&L?P:null)??(s??v)({rects:h,activeNodeRect:D,activeIndex:f,overIndex:g,index:b}):null,z=Kn(f)&&Kn(g)?a({id:o,items:u,activeIndex:f,overIndex:g}):b,B=E?.id,V=(0,A.useRef)({activeId:B,items:u,newIndex:z,containerId:d}),ae=u!==V.current.items,H=t({active:E,containerId:d,isDragging:k,isSorting:I,id:o,index:b,items:u,newIndex:V.current.newIndex,previousItems:V.current.items,previousContainerId:V.current.containerId,transition:l,wasDragging:V.current.activeId!=null}),U=cr({disabled:!H,index:b,node:C,rect:S});return(0,A.useEffect)(()=>{I&&V.current.newIndex!==z&&(V.current.newIndex=z),d!==V.current.containerId&&(V.current.containerId=d),u!==V.current.items&&(V.current.items=u)},[I,z,d,u]),(0,A.useEffect)(()=>{if(B===V.current.activeId)return;if(B!=null&&V.current.activeId==null){V.current.activeId=B;return}let e=setTimeout(()=>{V.current.activeId=B},50);return()=>clearTimeout(e)},[B]),{active:E,activeIndex:f,attributes:ne,data:x,rect:S,index:b,newIndex:z,items:u,isOver:w,isSorting:I,isDragging:k,listeners:O,node:C,overIndex:g,over:M,setNodeRef:F,setActivatorNodeRef:N,setDroppableNodeRef:T,setDraggableNodeRef:re,transform:U??R,transition:W()};function W(){if(U||ae&&V.current.newIndex===b)return or;if(!(ie&&!G(te)||!l)&&(I||H))return K.Transition.toString({...l,property:ar})}}function ur(e,t){return typeof e==`boolean`?{draggable:e,droppable:!1}:{draggable:e?.draggable??t.draggable,droppable:e?.droppable??t.droppable}}Z.Down,Z.Right,Z.Up,Z.Left;var dr=[{key:`backlog`,title:`Backlog`,accent:`text-subtle`,alwaysVisible:!0},{key:`in_progress`,title:`In progress`,accent:`text-kobe-orange`,alwaysVisible:!0},{key:`in_review`,title:`In review`,accent:`text-kobe-blue`,alwaysVisible:!0},{key:`done`,title:`Done`,accent:`text-kobe-green`,alwaysVisible:!0},{key:`error`,title:`Error`,accent:`text-kobe-red`,alwaysVisible:!1},{key:`canceled`,title:`Canceled`,accent:`text-muted`,alwaysVisible:!1}],fr=new Set([`done`,`canceled`,`error`]);function pr(e){return!e.archived&&e.kind!==`main`}var mr=1024;function hr(e){if(typeof e.position==`number`&&Number.isFinite(e.position))return e.position;let t=Date.parse(e.createdAt);return Number.isFinite(t)?-t:0}function gr(e,t){if((e.pinned??!1)!==(t.pinned??!1))return e.pinned?-1:1;let n=hr(e)-hr(t);return n===0?t.id.localeCompare(e.id):n}function _r(e,t){if(!e&&!t)return 0;if(!e&&t)return hr(t)-mr;if(e&&!t)return hr(e)+mr;if(!e||!t)return 0;let n=hr(e),r=hr(t),i=n+(r-n)/2;return i>n&&i<r?i:null}function vr(e){return e.map((e,t)=>({taskId:e.id,position:(t+1)*mr}))}function yr(e){let{fullColumn:t,moving:n,visiblePrev:r,visibleNext:i}=e,a=i?t.findIndex(e=>e.id===i.id):-1,o=r?t.findIndex(e=>e.id===r.id):-1,s=a>=0?a:o>=0?o+1:0,c=t.filter(e=>e.pinned).length;s=n.pinned?Math.min(s,c):Math.max(s,c);let l=[...t.slice(0,s),n,...t.slice(s)],u=_r(t[s-1],t[s]);return u!==null&&[...t,{...n,position:u}].sort(gr).findIndex(e=>e.id===n.id)===s?{kind:`single`,position:u}:{kind:`renormalize`,moves:vr(l)}}function br(e){let t=new Map;for(let n of e){if(!pr(n))continue;let e=n.status||`backlog`,r=t.get(e);r?r.push(n):t.set(e,[n])}for(let e of t.values())e.sort(gr);let n=(e,t)=>!fr.has(e)||t.length<=30?{tasks:t,hiddenCount:0}:{tasks:t.slice(0,30),hiddenCount:t.length-30},r=dr.map(e=>({...e,...n(e.key,t.get(e.key)??[])})).filter(e=>e.alwaysVisible||e.tasks.length+e.hiddenCount>0),i=new Set(dr.map(e=>e.key)),a=[...t.keys()].filter(e=>!i.has(e)).sort().map(e=>({key:e,title:e,accent:`text-muted`,alwaysVisible:!1,tasks:t.get(e)??[],hiddenCount:0}));return[...r,...a]}function xr(e){return e.reduce((e,t)=>e+t.tasks.length,0)}function Sr(e,t){return Object.keys(t).length===0?e:e.map(e=>{let n=t[e.id];if(!n)return e;let r=n.status??e.status,i=n.position??e.position;return r===e.status&&i===e.position?e:{...e,status:r,position:i}})}function Cr(e,t){let n=Object.entries(e);if(n.length===0)return e;let r=new Map(t.map(e=>[e.id,e])),i={},a=!1;for(let[e,t]of n){let n=r.get(e);if(!n){a=!0;continue}let o={};if(t.status!==void 0&&n.status!==t.status&&(o.status=t.status),t.position!==void 0&&n.position!==t.position&&(o.position=t.position),o.status===void 0&&o.position===void 0){a=!0;continue}(o.status!==t.status||o.position!==t.position)&&(a=!0),i[e]=o}return a?i:e}function wr(e){return dr.some(t=>t.key===e)}function Tr(e){let t=e.replace(/\/+$/,``);return t.split(`/`).pop()||t}function Er(e){let t=new Map;for(let n of e)pr(n)&&t.set(n.repo,(t.get(n.repo)??0)+1);let n=[...t.keys()],r=e=>{let t=Tr(e);return n.some(n=>n!==e&&Tr(n)===t)?e.replace(/\/+$/,``).split(`/`).slice(-2).join(`/`):t};return n.map(e=>({repo:e,label:r(e),count:t.get(e)??0})).sort((e,t)=>e.label.localeCompare(t.label))}function Dr(e,t){return e.filter(e=>e.a===t||e.b===t)}function Or(e,t){let n=Dr(e,t);return n.length===0?null:{level:n.some(e=>e.level===`conflict`)?`conflict`:`overlap`,count:n.length}}var kr=[`var(--color-kobe-orange)`,`var(--color-kobe-blue)`,`var(--color-kobe-violet)`,`var(--color-kobe-yellow)`,`var(--color-kobe-green)`,`var(--color-kobe-red)`];function Ar(e){return kr[e%kr.length]}var Q={query:``,repo:null,overrides:{}},jr=new Set;function Mr(e){Q={...Q,...e};for(let e of jr)e()}function Nr(e){return jr.add(e),()=>{jr.delete(e)}}function Pr(){return Q}function Fr(){return(0,A.useSyncExternalStore)(Nr,Pr,Pr)}function Ir(e){e!==Q.query&&Mr({query:e})}function Lr(e){e!==Q.repo&&Mr({repo:e})}function Rr(e,t){Mr({overrides:{...Q.overrides,[e]:{...Q.overrides[e],status:t}}})}function zr(e,t){Mr({overrides:{...Q.overrides,[e]:{...Q.overrides[e],position:t}}})}function Br(e){let t={...Q.overrides};for(let n of e)t[n.taskId]={...t[n.taskId],position:n.position};Mr({overrides:t})}function Vr(e,t,n,r){let i=e[t];if(!i||i[n]!==r)return e;let a={...i};delete a[n];let o={...e};return a.status===void 0&&a.position===void 0?delete o[t]:o[t]=a,o}function Hr(e,t){let n=Vr(Q.overrides,e,`status`,t);n!==Q.overrides&&Mr({overrides:n})}function Ur(e,t){let n=Vr(Q.overrides,e,`position`,t);n!==Q.overrides&&Mr({overrides:n})}function Wr(e){let t=Q.overrides;for(let n of e)t=Vr(t,n.taskId,`position`,n.position);t!==Q.overrides&&Mr({overrides:t})}function Gr(e){let t=Cr(Q.overrides,e);t!==Q.overrides&&Mr({overrides:t})}var $=n(),Kr=(0,A.lazy)(()=>i(()=>import(`./ChatTerminal-DL9kz6iJ.js`).then(e=>({default:e.ChatTerminal})),__vite__mapDeps([0,1,2,3,4,5,6,7])));function qr({task:e,engine:t,onClose:n,onOpenWorkspace:r}){let[i,a]=(0,A.useState)(`engine`),[o]=(0,A.useState)(()=>d(e.id)),s=(0,A.useRef)(null);w(s,!0),(0,A.useEffect)(()=>{let e=e=>{if(e.key!==`Escape`)return;let t=e.target;t?.closest(`.xterm`)||t&&(t.tagName===`TEXTAREA`||t.tagName===`INPUT`)||(e.preventDefault(),n())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n]);let c=_(t?.state),l=e=>`border-b-2 px-2 py-1.5 text-[11px] transition-colors ${e?`border-primary text-fg`:`border-transparent text-muted hover:text-fg`}`;return(0,$.jsxs)(`div`,{className:`fixed inset-0 z-40 flex justify-end`,children:[(0,$.jsx)(`button`,{type:`button`,"aria-label":`Close peek`,onClick:n,className:`absolute inset-0 cursor-default bg-black/40`}),(0,$.jsxs)(`div`,{ref:s,role:`dialog`,"aria-modal":`true`,"aria-label":`Session peek: ${e.title||e.branch||e.id}`,className:`relative flex h-full w-[640px] max-w-[92vw] flex-col border-l border-line bg-bg shadow-2xl`,children:[(0,$.jsxs)(`header`,{className:`flex h-10 shrink-0 items-center gap-2 border-b border-line bg-surface px-3`,children:[(0,$.jsx)(`span`,{className:`h-1.5 w-1.5 shrink-0 rounded-full ${g(t?.state)}`}),(0,$.jsx)(`span`,{className:`min-w-0 truncate text-[13px] text-fg`,children:e.title||e.branch||e.id}),(0,$.jsx)(`span`,{className:`hidden min-w-0 truncate font-mono text-[11px] text-subtle sm:inline`,children:e.branch}),c&&(0,$.jsx)(`span`,{className:`shrink-0 text-[11px] text-muted`,children:c}),(0,$.jsxs)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:[(0,$.jsxs)(`button`,{type:`button`,onClick:r,className:`flex items-center gap-1 text-muted transition-colors hover:text-fg`,title:`Open in workspace`,children:[(0,$.jsx)(D,{size:13,strokeWidth:1.8}),(0,$.jsx)(`span`,{className:`text-[11px]`,children:`Workspace`})]}),(0,$.jsx)(`button`,{type:`button`,onClick:n,className:`flex items-center text-muted transition-colors hover:text-fg`,"aria-label":`Close peek`,title:`Close (Esc)`,children:(0,$.jsx)(v,{size:15,strokeWidth:1.8})})]})]}),(0,$.jsxs)(`nav`,{className:`flex shrink-0 items-center gap-1 border-b border-line bg-surface px-2`,children:[(0,$.jsx)(`button`,{type:`button`,onClick:()=>a(`engine`),className:l(i===`engine`),children:`Engine`}),(0,$.jsx)(`button`,{type:`button`,onClick:()=>a(`transcript`),className:l(i===`transcript`),children:`Transcript`})]}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1`,children:i===`engine`?(0,$.jsx)(A.Suspense,{fallback:(0,$.jsx)(`div`,{className:`flex h-full items-center justify-center text-[12px] text-subtle`,children:`Loading terminal…`}),children:(0,$.jsx)(Kr,{tabId:o,taskId:e.id,mode:`engine`},o)}):(0,$.jsx)(T,{worktreePath:e.worktreePath,vendor:e.vendor??`claude`,title:e.title||e.branch})})]})]})}function Jr({pairs:e,titles:t,containerRef:n}){let[r,i]=(0,A.useState)([]);return(0,A.useEffect)(()=>{let r=n.current,a=e.filter(e=>e.level===`conflict`);if(!r||a.length===0){i(e=>e.length===0?e:[]);return}let o=0,s=()=>{let e=r.getBoundingClientRect(),n=[],c=e=>document.querySelector(`[data-yarn-anchor="${window.CSS.escape(e)}"]`)??r.querySelector(`[data-task-id="${window.CSS.escape(e)}"]`);a.forEach((r,i)=>{let a=c(r.a),o=c(r.b);if(!a||!o)return;let s=a.getBoundingClientRect(),l=o.getBoundingClientRect(),u=s.left+s.width/2-e.left,d=s.bottom-4-e.top,f=l.left+l.width/2-e.left,p=l.bottom-4-e.top,m=Math.min(120,Math.abs(f-u)/4+28),h=`M ${u} ${d} Q ${(u+f)/2} ${Math.max(d,p)+m} ${f} ${p}`,g=`${t.get(r.a)??r.a} ⇄ ${t.get(r.b)??r.b}`,_=r.files.slice(0,6).join(`, `);n.push({id:`${r.a}|${r.b}`,d:h,color:Ar(i),tip:`${g}\nconflicts: ${_}${r.files.length>6?`, …`:``}`})}),i(e=>JSON.stringify(e)===JSON.stringify(n)?e:n),o=requestAnimationFrame(s)};return o=requestAnimationFrame(s),()=>cancelAnimationFrame(o)},[e,t,n]),r.length===0?null:(0,$.jsx)(`svg`,{"aria-hidden":!0,className:`pointer-events-none absolute inset-0 z-10 h-full w-full overflow-visible`,children:r.map(e=>(0,$.jsxs)(`g`,{children:[(0,$.jsx)(`path`,{d:e.d,fill:`none`,stroke:e.color,strokeWidth:2,strokeOpacity:.65,strokeLinecap:`round`}),(0,$.jsx)(`path`,{d:e.d,fill:`none`,stroke:`transparent`,strokeWidth:14,style:{pointerEvents:`stroke`},children:(0,$.jsx)(`title`,{children:e.tip})})]},e.id))})}var Yr=dr.filter(e=>e.alwaysVisible),Xr=`after:pointer-events-none after:absolute after:right-0 after:bottom-full after:z-10 after:mb-1 after:hidden after:whitespace-nowrap after:border after:border-line after:bg-menu after:px-1.5 after:py-0.5 after:text-[10px] after:text-fg after:content-[attr(data-tip)] hover:after:block`,Zr=`after:pointer-events-none after:absolute after:left-full after:top-2 after:z-10 after:ml-1 after:hidden after:whitespace-nowrap after:border after:border-line after:bg-menu after:px-1.5 after:py-0.5 after:text-[10px] after:text-fg after:content-[attr(data-tip)] hover:after:block`,Qr=(e,{context:{active:t,collisionRect:n,droppableContainers:r,droppableRects:i}})=>{if(!t||!n||e.code!==`ArrowUp`&&e.code!==`ArrowDown`&&e.code!==`ArrowLeft`&&e.code!==`ArrowRight`)return;e.preventDefault();let a=n.left+n.width/2,o=[];for(let s of r.getEnabled()){if(s.id===t.id)continue;let r=i.get(s.id);if(!r)continue;let c=s.data.current,l=r.left+r.width/2,u=Math.abs(l-a)<n.width/2;if(e.code===`ArrowUp`||e.code===`ArrowDown`){if(!u||c?.type!==`card`)continue;let t=e.code===`ArrowUp`?n.top-r.top:r.top-n.top;t>1&&o.push({left:r.left,top:r.top,score:t})}else{if(u)continue;let t=e.code===`ArrowLeft`?a-l:l-a;if(t<=1)continue;let i=Math.abs(r.top-n.top);o.push({left:r.left,top:r.top,score:t*1e4+i})}}o.sort((e,t)=>e.score-t.score);let s=o[0];return s?{x:s.left,y:s.top}:void 0};function $r({badge:e}){let t=(0,A.useRef)(null),[n,r]=(0,A.useState)(null);return(0,A.useEffect)(()=>{if(!n)return;let e=()=>r(null);return window.addEventListener(`scroll`,e,!0),()=>window.removeEventListener(`scroll`,e,!0)},[n]),(0,$.jsxs)(`span`,{ref:t,onMouseEnter:()=>{let e=t.current?.getBoundingClientRect();e&&r({top:e.bottom+2,right:Math.max(8,window.innerWidth-e.right)})},onMouseLeave:()=>r(null),className:`-my-1.5 relative shrink-0 cursor-help px-1.5 py-1.5 font-mono text-[10px] ${e.level===`conflict`?`text-kobe-red`:`text-kobe-yellow`}`,children:[`⚠`,e.count,n&&(0,k.createPortal)((0,$.jsx)(`div`,{style:{position:`fixed`,top:n.top,right:n.right,maxWidth:380,overflowWrap:`anywhere`},className:`pointer-events-none z-50 whitespace-pre-line border border-line bg-menu px-2 py-1 text-left font-mono text-[10px] text-fg`,children:e.tip}),document.body)]})}function ei({task:e,engine:t,changes:n,badge:r}){let i=_(t?.state),a=p(e.updatedAt||e.createdAt);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`h-1.5 w-1.5 shrink-0 rounded-full ${g(t?.state)}`}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[13px] text-fg`,children:e.title||e.branch||e.id}),r&&(0,$.jsx)($r,{badge:r}),(0,$.jsx)(f,{pr:e.prStatus}),e.pinned&&(0,$.jsx)(`span`,{className:`shrink-0 text-[10px] text-subtle`,children:`PIN`}),(0,$.jsx)(h,{counts:n})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] text-subtle`,children:[(0,$.jsx)(`span`,{className:`min-w-0 truncate font-mono`,children:e.branch||e.repo}),(0,$.jsxs)(`span`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:[e.vendor&&(0,$.jsx)(`span`,{className:`font-mono`,children:e.vendor}),i&&(0,$.jsx)(`span`,{className:`text-muted`,children:i}),a&&(0,$.jsx)(`span`,{children:a})]})]})]})}function ti({task:e,columnKey:t,engine:n,changes:r,badge:i,canDrag:a,onMoveTo:o,onReview:s,onCreatePr:c,onOpen:l,onPeek:u}){let{attributes:d,listeners:f,setNodeRef:p,setActivatorNodeRef:m,transform:h,transition:g,isDragging:_}=lr({id:e.id,disabled:!a,data:{type:`card`,columnKey:t}}),{onKeyDown:v,...y}=f??{},b=(0,A.useRef)(0),x=(0,A.useRef)(!1);(0,A.useEffect)(()=>{x.current&&!_&&(b.current=Date.now()),x.current=_},[_]);let ee=()=>{Date.now()-b.current<250||l()};return(0,$.jsxs)(`div`,{ref:p,...y,"data-task-id":e.id,style:{transform:K.Transform.toString(h),transition:g},className:`group/card relative ${_?`opacity-40`:``}`,children:[(0,$.jsx)(`button`,{type:`button`,onClick:ee,className:`flex w-full cursor-pointer flex-col gap-1.5 border border-line bg-surface p-3 pl-6 text-left transition-colors hover:border-primary hover:bg-inset`,children:(0,$.jsx)(ei,{task:e,engine:n,changes:r,badge:i})}),a&&(0,$.jsx)(`button`,{type:`button`,ref:m,...d,...f,"aria-label":`Move ${e.title||e.branch||e.id}`,"data-tip":`Drag to move`,className:`absolute top-0 bottom-0 left-0 flex w-5 cursor-grab items-center justify-center text-subtle opacity-0 transition-opacity hover:text-fg focus-visible:opacity-100 group-hover/card:opacity-100 ${Zr}`,children:(0,$.jsx)(O,{size:12,strokeWidth:1.8})}),(0,$.jsxs)(`div`,{className:`absolute inset-x-0 bottom-0 flex items-center gap-1 border-t border-line bg-surface px-2 py-1 opacity-0 transition-opacity focus-within:opacity-100 group-hover/card:opacity-100`,children:[Yr.map(e=>{let n=e.key===t;return(0,$.jsx)(`button`,{type:`button`,disabled:n||!a,onClick:()=>o(e.key),title:n?`Current column`:`Move to ${e.title}`,className:`px-1 text-[10px] transition-colors ${n?`font-bold ${e.accent}`:`text-subtle hover:text-fg disabled:opacity-40 disabled:hover:text-subtle`}`,children:e.title},e.key)}),(0,$.jsxs)(`div`,{className:`ml-auto flex gap-0.5`,children:[s&&(0,$.jsx)(`button`,{type:`button`,onClick:s,"aria-label":`Send review instruction to ${e.title||e.branch||e.id}`,"data-tip":`Review → done if it passes`,className:`relative flex h-5 w-5 items-center justify-center border border-line bg-surface text-subtle hover:border-primary hover:text-fg ${Xr}`,children:(0,$.jsx)(te,{size:11,strokeWidth:1.8})}),c&&(0,$.jsx)(`button`,{type:`button`,onClick:c,"aria-label":`Open a PR for ${e.title||e.branch||e.id}`,"data-tip":`Open a PR for this branch`,className:`relative flex h-5 w-5 items-center justify-center border border-line bg-surface text-subtle hover:border-primary hover:text-fg ${Xr}`,children:(0,$.jsx)(re,{size:11,strokeWidth:1.8})}),(0,$.jsx)(`button`,{type:`button`,onClick:u,"aria-label":`Peek ${e.title||e.branch||e.id}`,"data-tip":`Peek session`,className:`relative flex h-5 w-5 items-center justify-center border border-line bg-surface text-subtle hover:border-primary hover:text-fg ${Xr}`,children:(0,$.jsx)(ne,{size:11,strokeWidth:1.8})})]})]})]})}function ni({column:e,engineStates:t,worktreeChanges:n,badges:r,canDrag:i,onMoveTo:a,onReview:o,onCreatePr:s,onOpen:c,onPeek:l}){let u=wr(e.key),{setNodeRef:d,isOver:f}=jn({id:e.key,disabled:!u,data:{type:`column`}});return(0,$.jsxs)(`section`,{ref:d,"data-column":e.key,className:`flex h-full w-72 shrink-0 flex-col border border-transparent ${f?`border-line-active bg-inset/40`:``}`,children:[(0,$.jsxs)(`div`,{className:`mb-2 flex items-baseline gap-2`,children:[(0,$.jsx)(`h2`,{className:`text-[11px] font-bold uppercase tracking-[0.12em] ${e.accent}`,children:e.title}),(0,$.jsx)(`span`,{className:`font-mono text-[10px] text-subtle`,children:e.tasks.length+e.hiddenCount})]}),(0,$.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto pb-2`,children:[(0,$.jsx)(tr,{items:e.tasks.map(e=>e.id),strategy:Zn,children:e.tasks.length===0?(0,$.jsx)(`div`,{className:`border border-dashed border-line-subtle p-3 text-center text-[11px] text-subtle`,children:`none`}):e.tasks.map(u=>(0,$.jsx)(ti,{task:u,columnKey:e.key,engine:t[u.id],changes:n[u.worktreePath],badge:r.get(u.id),canDrag:i,onMoveTo:e=>a(u,e),onReview:e.key===`in_review`?()=>o(u):void 0,onCreatePr:e.key===`done`&&(!u.prStatus?.lifecycle||u.prStatus.lifecycle===`unknown`)?()=>s(u):void 0,onOpen:()=>c(u.id),onPeek:()=>l(u.id)},u.id))}),e.hiddenCount>0&&(0,$.jsxs)(`div`,{className:`p-2 text-center text-[10px] text-subtle`,children:[`+`,e.hiddenCount,` more — archive cards to thin this column`]})]})]})}function ri(){let{tasks:e,engineStates:t,worktreeChanges:n,conflicts:i,deliver:a,hydrated:c,daemonConnected:f,streamConnected:h}=u(),{query:_,repo:w,overrides:T}=Fr(),te=r(),D=(0,A.useRef)(null),ne=(0,A.useRef)(null),[re,O]=(0,A.useState)(null),[k,j]=(0,A.useState)(null),M=Oe(De(Tt,{activationConstraint:{distance:4}}),De(At,{activationConstraint:{delay:250,tolerance:8}}),De(bt,{coordinateGetter:Qr})),N=f&&h;(0,A.useEffect)(()=>{Gr(e)},[e]),(0,A.useEffect)(()=>{k&&!e.some(e=>e.id===k)&&j(null)},[e,k]),(0,A.useEffect)(()=>{let e=e=>{if(k||e.metaKey||e.ctrlKey||e.altKey)return;let t=e.target,n=!!t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.tagName===`SELECT`||t.isContentEditable);e.key===`/`&&!n?(e.preventDefault(),ne.current?.focus()):e.key===`Escape`&&t===ne.current&&_&&(e.preventDefault(),Ir(``))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[_,k]);let P=(0,A.useMemo)(()=>Er(e),[e]),F=w??(P.length===1?P[0]?.repo??null:null),I=(0,A.useMemo)(()=>F?e.find(e=>e.kind===`main`&&e.repo===F&&!e.archived):void 0,[e,F]);(0,A.useEffect)(()=>{w&&!P.some(e=>e.repo===w)&&Lr(null)},[P,w]);let L=(0,A.useMemo)(()=>Sr(e,T).filter(e=>(!w||e.repo===w)&&l(e,_)),[e,T,_,w]),ie=(0,A.useMemo)(()=>br(L),[L]),R=xr(ie),z=re?L.find(e=>e.id===re):void 0,B=(0,A.useMemo)(()=>new Map(e.map(e=>[e.id,e.title||e.branch||e.id])),[e]),V=(0,A.useMemo)(()=>{let e=new Map,t=new Set(i.flatMap(e=>[e.a,e.b]));for(let n of t){let t=Or(i,n);if(!t)continue;let r=i.filter(e=>e.a===n||e.b===n).map(e=>{let t=e.a===n?e.b:e.a;return`${e.level===`conflict`?`CONFLICTS with`:`overlaps`} ${B.get(t)??t}: ${e.files.slice(0,4).join(`, `)}${e.files.length>4?`, …`:``}`}).join(`
|
|
7
|
-
`);e.set(n,{...t,tip:r})}return e},[i,B]),ae=e=>{s(e),m(`task.setActive`,{taskId:e}).catch(()=>{}),te({to:`/task/$taskId`,params:{taskId:e}})},H=(t,n,r,i)=>{let a=T[t.id]?.status??t.status,o=n!==a,s=yr({fullColumn:Sr(e,T).filter(e=>e.id!==t.id&&pr(e)&&(e.status||`backlog`)===n).sort(gr),moving:t,visiblePrev:r,visibleNext:i});o&&Rr(t.id,n),s.kind===`single`?zr(t.id,s.position):Br(s.moves);let c=()=>{s.kind===`single`?Ur(t.id,s.position):Wr(s.moves)},l=()=>{m(`task.reorder`,{moves:s.kind===`single`?[{taskId:t.id,position:s.position}]:s.moves}).catch(e=>{c(),C(`reorder task`,e)})};if(!o){l();return}m(`task.status`,{taskId:t.id,status:n}).then(l).catch(e=>{Hr(t.id,n),c(),C(e instanceof Error&&e.name===`IllegalTransitionError`?`move blocked (${a} → ${n})`:`move task`,e)})},U=e=>{let t=d(e.id);ee().then(n=>E(t,e.id,x(e.id,e.vendor,n.review))).then(({spawned:e})=>{b(`success`,e?`review sent — engine starting, peek to watch`:`review sent to the session`)}).catch(e=>C(`send review`,e))},W=e=>{let t=d(e.id);ee().then(n=>E(t,e.id,S(n.pr))).then(({spawned:e})=>{b(`success`,e?`PR instruction sent — engine starting, peek to watch`:`PR instruction sent to the session`)}).catch(e=>C(`open PR`,e))},oe=(e,t)=>{!N||re||t===(T[e.id]?.status??e.status)||!wr(t)||H(e,t,void 0,ie.find(e=>e.key===t)?.tasks[0])};return(0,$.jsxs)(`div`,{className:`flex h-screen flex-col overflow-hidden bg-bg text-fg`,children:[(0,$.jsxs)(`header`,{className:`flex h-10 shrink-0 items-center gap-3 border-b border-line bg-surface px-3`,children:[(0,$.jsxs)(`button`,{type:`button`,onClick:()=>te({to:`/`}),className:`flex items-center gap-1.5 text-muted transition-colors hover:text-fg`,title:`Back to workspace`,children:[(0,$.jsx)(y,{size:15,strokeWidth:1.8}),(0,$.jsx)(`span`,{className:`text-[12px]`,children:`Workspace`})]}),(0,$.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.12em] text-fg`,children:`Board`}),(0,$.jsxs)(`label`,{className:`flex h-7 items-center gap-1.5 border border-line bg-bg px-2 text-muted focus-within:border-line-active`,children:[(0,$.jsx)(o,{size:13,strokeWidth:1.8,className:`shrink-0 text-subtle`}),(0,$.jsx)(`input`,{ref:ne,value:_,onChange:e=>Ir(e.target.value),placeholder:`Filter cards ( / )`,className:`w-44 bg-transparent text-[12px] text-fg placeholder:text-subtle focus:outline-none`}),_&&(0,$.jsx)(`button`,{type:`button`,onClick:()=>Ir(``),className:`shrink-0 text-subtle hover:text-fg`,"aria-label":`clear filter`,title:`Clear filter`,children:(0,$.jsx)(v,{size:13,strokeWidth:2})})]}),P.length>=2&&(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5 overflow-x-auto`,children:[(0,$.jsx)(`button`,{type:`button`,onClick:()=>Lr(null),className:`shrink-0 border px-1.5 py-0.5 font-mono text-[10px] transition-colors ${w===null?`border-line-active bg-inset text-fg`:`border-line text-subtle hover:text-fg`}`,children:`all`}),P.map(e=>(0,$.jsxs)(`button`,{type:`button`,title:e.repo,onClick:()=>Lr(w===e.repo?null:e.repo),className:`shrink-0 border px-1.5 py-0.5 font-mono text-[10px] transition-colors ${w===e.repo?`border-line-active bg-inset text-fg`:`border-line text-subtle hover:text-fg`}`,children:[e.label,(0,$.jsxs)(`span`,{className:w===e.repo?`text-muted`:`text-subtle`,children:[` `,e.count]})]},e.repo))]}),(0,$.jsxs)(`div`,{className:`ml-auto flex items-center gap-3 font-mono text-[11px] text-subtle`,children:[I&&(0,$.jsxs)(`button`,{type:`button`,onClick:()=>j(I.id),title:a?.source===`note`&&a.taskId===I.id?`Dispatcher — last field note ${p(new Date(a.at).toISOString())||`just now`}`:`Dispatcher — this repo's main session (field-note router)`,className:`flex items-center gap-1.5 border border-line px-1.5 py-0.5 text-[10px] text-subtle transition-colors hover:border-primary hover:text-fg`,children:[(0,$.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full ${g(t[I.id]?.state)}`}),`dispatcher`]}),!N&&c&&(0,$.jsx)(`span`,{className:`text-kobe-yellow`,children:`read-only (offline)`}),(0,$.jsxs)(`span`,{children:[R,` card`,R===1?``:`s`]})]})]}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1 overflow-x-auto overflow-y-hidden p-4`,children:c?R===0&&!_?(0,$.jsx)(`p`,{className:`text-[12px] text-subtle`,children:`No worktree tasks yet. Create one from the workspace.`}):(0,$.jsxs)(Cn,{sensors:M,collisionDetection:Fe,onDragStart:e=>{O(String(e.active.id))},onDragEnd:t=>{O(null);let n=String(t.active.id),r=t.over;if(!r)return;let i=e.find(e=>e.id===n);if(!i)return;let a=r.data.current,o=String(r.id),s=T[n]?.status??i.status,c=a?.type===`card`?a.columnKey??s:o;if(!wr(c))return;let l=ie.find(e=>e.key===c);if(!l)return;let u=l.tasks.filter(e=>e.id!==n),d=u.length;if(a?.type===`card`&&o!==n){let e=u.findIndex(e=>e.id===o);if(e>=0&&(d=e,c===s)){let t=l.tasks.findIndex(e=>e.id===n),r=l.tasks.findIndex(e=>e.id===o);t>=0&&r>t&&(d=e+1)}}else if(o===n)return;let f=c!==s;f&&a?.type!==`card`&&l.hiddenCount>0&&(d=0),!(!f&&l.tasks[d]?.id===n)&&H(i,c,u[d-1],u[d])},onDragCancel:()=>O(null),children:[(0,$.jsxs)(`div`,{ref:D,className:`relative flex h-full min-w-max gap-4`,children:[ie.map(e=>(0,$.jsx)(ni,{column:e,engineStates:t,worktreeChanges:n,badges:V,canDrag:N,onMoveTo:oe,onReview:U,onCreatePr:W,onOpen:ae,onPeek:j},e.key)),(0,$.jsx)(Jr,{pairs:i,titles:B,containerRef:D})]}),(0,$.jsx)(Un,{children:z?(0,$.jsx)(`div`,{"data-yarn-anchor":z.id,className:`flex w-72 flex-col gap-1.5 border border-line-active bg-inset p-3 pl-6 shadow-lg`,children:(0,$.jsx)(ei,{task:z,engine:t[z.id],changes:n[z.worktreePath]})}):null})]}):(0,$.jsx)(`p`,{className:`text-[12px] text-subtle`,children:`Loading…`})}),(()=>{let n=k?e.find(e=>e.id===k):void 0;return n?(0,$.jsx)(qr,{task:n,engine:t[n.id],onClose:()=>j(null),onOpenWorkspace:()=>{j(null),ae(n.id)}},n.id):null})()]})}var ii=ri;export{ii as component};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/terminal-D7PGfbSa.js","assets/react-B8IZ02wI.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{i as e,r as t,t as n}from"./react-B8IZ02wI.js";import{a as r,n as i}from"./index-DdSnT7Rv.js";import{t as a}from"./terminal-D7PGfbSa.js";var o=e(n()),s=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),c=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),l=e=>{let t=c(e);return t.charAt(0).toUpperCase()+t.slice(1)},u=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),ee=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0},te={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},ne=(0,o.forwardRef)(({color:e=`currentColor`,size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:s,...c},l)=>(0,o.createElement)(`svg`,{ref:l,...te,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:u(`lucide`,i),...!a&&!ee(c)&&{"aria-hidden":`true`},...c},[...s.map(([e,t])=>(0,o.createElement)(e,t)),...Array.isArray(a)?a:[a]])),d=(e,t)=>{let n=(0,o.forwardRef)(({className:n,...r},i)=>(0,o.createElement)(ne,{ref:i,iconNode:t,className:u(`lucide-${s(l(e))}`,`lucide-${e}`,n),...r}));return n.displayName=l(e),n},re=d(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),ie=d(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),ae=t({addEmptyTab:()=>me,addTab:()=>fe,clearSelectedTask:()=>de,clearSplitTab:()=>ye,closeTab:()=>_e,configureTab:()=>he,consumePendingPrompt:()=>le,ensureEngineTab:()=>pe,migrateStoredTab:()=>h,openFilePreviewTab:()=>ge,pruneMissingTasks:()=>C,resetLayout:()=>ue,selectTask:()=>x,setActiveTab:()=>w,setPendingPrompt:()=>ce,setSplitTab:()=>ve,useTabsState:()=>be,withTaskTab:()=>m}),oe=`kobe-web.tabs`,f={selectedTaskId:null,tabsByTask:{},activeByTask:{},splitByTask:{}};function p(){return{id:b(),kind:`empty`,title:`New tab`}}function m(e,t){let n=e.tabsByTask[t]??[],r=e.activeByTask[t],i=e.splitByTask[t],a=e;if(i&&(!n.some(e=>e.id===i)||i===r)){let{[t]:n,...r}=e.splitByTask;a={...e,splitByTask:r}}if(n.length>0)return r&&n.some(e=>e.id===r)?a:{...a,activeByTask:{...e.activeByTask,[t]:n[0].id}};let o=p();return{...a,tabsByTask:{...e.tabsByTask,[t]:[o]},activeByTask:{...e.activeByTask,[t]:o.id}}}function h(e){let t=e,n=typeof e?.kind==`string`?e.kind:void 0;if(n===`notes`)return p();let r=n===`chat`?`vendor`:n??`vendor`;return{...t,kind:r}}function se(){try{let e=localStorage.getItem(oe);if(e){let t=JSON.parse(e),n=Object.fromEntries(Object.entries(t.tabsByTask??{}).map(([e,t])=>[e,t.map(h)])),r={selectedTaskId:t.selectedTaskId??null,tabsByTask:n,activeByTask:t.activeByTask??{},splitByTask:t.splitByTask??{}};return r.selectedTaskId?m(r,r.selectedTaskId):r}}catch{}return f}var g=typeof localStorage>`u`?f:se(),_=new Set;function v(e){g=e;try{localStorage.setItem(oe,JSON.stringify(g))}catch{}for(let e of _)e()}var y=0;function b(){try{return crypto.randomUUID()}catch{return y+=1,`tab-${Date.now().toString(36)}-${y}`}}function x(e){v(m({...g,selectedTaskId:e},e))}var S=new Map;function ce(e,t){S.set(e,t)}function le(e){let t=S.get(e);return t===void 0?null:(S.delete(e),t)}function ue(){for(let e of Object.values(g.tabsByTask))for(let t of e)(t.kind===`vendor`||t.kind===`terminal`)&&a(t.id);v({...f})}function C(e){let t=Object.keys(g.tabsByTask).filter(t=>!e.has(t)),n=g.selectedTaskId!==null&&!e.has(g.selectedTaskId);if(t.length===0&&!n)return;for(let e of t)for(let t of g.tabsByTask[e]??[])(t.kind===`vendor`||t.kind===`terminal`)&&a(t.id);let r={...g.tabsByTask},i={...g.activeByTask},o={...g.splitByTask};for(let e of t)delete r[e],delete i[e],delete o[e];v({selectedTaskId:n?null:g.selectedTaskId,tabsByTask:r,activeByTask:i,splitByTask:o})}function de(){v({...g,selectedTaskId:null})}function fe(e){let t=g.tabsByTask[e]??[],n=b(),r={id:n,kind:`vendor`,title:`Vendor ${t.filter(e=>e.kind===`vendor`).length+1}`};return v({...g,tabsByTask:{...g.tabsByTask,[e]:[...t,r]},activeByTask:{...g.activeByTask,[e]:n},splitByTask:g.splitByTask}),n}function pe(e){let t=g.tabsByTask[e]??[],n=t.find(e=>e.kind===`vendor`);if(n)return n.id;let r=b(),i={id:r,kind:`vendor`,title:`Vendor ${t.filter(e=>e.kind===`vendor`).length+1}`};return v({...g,tabsByTask:{...g.tabsByTask,[e]:[...t,i]}}),r}function me(e){let t=g.tabsByTask[e]??[],n=p();return v({...g,tabsByTask:{...g.tabsByTask,[e]:[...t,n]},activeByTask:{...g.activeByTask,[e]:n.id},splitByTask:g.splitByTask}),n.id}function he(e,t,n){let r=g.tabsByTask[e]??[],i=r.map(e=>e.id===t?n===`vendor`?{id:t,kind:n,title:`Vendor ${r.filter(e=>e.kind===`vendor`).length+1}`}:n===`transcript`?{id:t,kind:n,title:`Chat`}:{id:t,kind:n,title:`Terminal ${r.filter(e=>e.kind===`terminal`).length+1}`}:e);v({...g,tabsByTask:{...g.tabsByTask,[e]:i},activeByTask:{...g.activeByTask,[e]:t},splitByTask:g.splitByTask})}function ge(e,t){let n=g.tabsByTask[e]??[],r=n.find(e=>e.kind===`file`&&e.path===t);if(r)return w(e,r.id),r.id;let i=b(),a={id:i,kind:`file`,title:t.split(`/`).at(-1)??t,path:t};return v({...g,tabsByTask:{...g.tabsByTask,[e]:[...n,a]},activeByTask:{...g.activeByTask,[e]:i},splitByTask:g.splitByTask}),i}function _e(e,t){let n=g.tabsByTask[e]??[],r=n.findIndex(e=>e.id===t),i=n.filter(e=>e.id!==t);i.length===0&&(i=[p()]);let a=g.activeByTask[e]===t,o={...g.activeByTask},s={...g.splitByTask};if(a){let t=Math.max(0,Math.min(r,i.length-1));o[e]=i[t].id}(s[e]===t||s[e]===o[e])&&delete s[e],v({...g,tabsByTask:{...g.tabsByTask,[e]:i},activeByTask:o,splitByTask:s})}function w(e,t){let n={...g.splitByTask},r={...g.activeByTask},i=r[e];n[e]===t&&i&&i!==t?n[e]=i:n[e]===t&&delete n[e],r[e]=t,v({...g,activeByTask:r,splitByTask:n})}function ve(e,t){let n=g.tabsByTask[e]??[];if(!n.some(e=>e.id===t))return;let r=g.activeByTask[e],i={...g.activeByTask};if(r===t){let r=n.find(e=>e.id!==t);if(!r)return;i[e]=r.id}v({...g,activeByTask:i,splitByTask:{...g.splitByTask,[e]:t}})}function ye(e){let{[e]:t,...n}=g.splitByTask;v({...g,splitByTask:n})}function be(){return(0,o.useSyncExternalStore)(e=>(_.add(e),()=>_.delete(e)),()=>g,()=>g)}var xe=`claude`,T=`kobe-web.theme`,E=null,D=null,O=Se(),k=null,A=!1,j=new Set;function Se(){try{return localStorage.getItem(T)}catch{return null}}function M(){for(let e of j)e()}function Ce(e,t,n=xe){return e??t??n}function N(){return Ce(O,k)}function P(){A||typeof window>`u`||(A=!0,fetch(`/api/themes`).then(async e=>{if(!e.ok)return;let t=await e.json();t.themes&&(E=t.themes,F(),M())}).catch(()=>{}))}function F(){if(P(),!E)return;let e=N();if(D===e)return;let t=E[e]??E[xe];if(!t)return;D=e;let n=document.documentElement;for(let[e,r]of Object.entries(t))n.style.setProperty(`--color-${e}`,r);M()}function I(e){k=e,F()}function we(e){O=e;try{localStorage.setItem(T,e)}catch{}F(),M()}function Te(){O=null;try{localStorage.removeItem(T)}catch{}D=null,F(),M()}function L(){return{names:E?Object.keys(E):[],palettes:E??{},active:N(),overridden:O!==null}}var R=L();function Ee(){let e=L();return(e.active!==R.active||e.overridden!==R.overridden||e.names.length!==R.names.length)&&(R=e),R}function De(){return P(),(0,o.useSyncExternalStore)(e=>(j.add(e),()=>j.delete(e)),Ee,Ee)}F();function Oe(){return E?E[N()]??null:null}function ke(){let e=Oe();return e?{background:e.bg,foreground:e.fg,cursor:e.primary,cursorAccent:e.bg,selectionBackground:e.menu,black:e.bg,red:e[`kobe-red`],green:e[`kobe-green`],yellow:e[`kobe-yellow`],blue:e[`kobe-blue`],magenta:e[`kobe-violet`],cyan:e[`primary-hover`],white:e.muted,brightBlack:e.subtle,brightRed:e[`kobe-red`],brightGreen:e[`kobe-green`],brightYellow:e[`kobe-yellow`],brightBlue:e[`kobe-blue`],brightMagenta:e[`kobe-violet`],brightCyan:e[`primary-hover`],brightWhite:e.fg}:null}function Ae(e){switch(e){case`running`:return`bg-kobe-orange`;case`waiting_permission`:return`bg-kobe-blue`;case`rate_limited`:return`bg-kobe-yellow`;case`error`:return`bg-kobe-red`;case`idle`:return`bg-kobe-green/60`;default:return`bg-subtle`}}function je(e){switch(e){case`running`:return`running`;case`waiting_permission`:return`needs input`;case`rate_limited`:return`rate limited`;case`error`:return`error`;case`idle`:return`idle`;default:return``}}var Me=`kobe.dispatch.deliveredAt.`;function Ne(e){try{let t=localStorage.getItem(Me+e),n=t?Number.parseInt(t,10):0;return Number.isFinite(n)?n:0}catch{return 0}}function Pe(e,t){try{localStorage.setItem(Me+e,String(t))}catch{}}function Fe(e,t){return e.at>t}async function Ie(e,t){if(!Fe(e,Ne(e.taskId)))return!1;Pe(e.taskId,e.at);let n=t?.ensureTab,r=t?.send;if(!n||!r){let e=await i(()=>Promise.resolve().then(()=>ae),void 0),t=await i(()=>import(`./terminal-D7PGfbSa.js`).then(e=>e.i),__vite__mapDeps([0,1]));n??=e.ensureEngineTab,r??=t.sendPtyText}try{let t=n(e.taskId);return await r(t,e.taskId,e.text),!0}catch(t){return Pe(e.taskId,e.at-1),console.warn(`[dispatch-delivery] failed to deliver into session`,e.taskId,t),!1}}function Le(e){return e===`open`||e===`ready_to_merge`}function Re(e,t){return!e||!t?null:t.lifecycle===`merged`?e.lifecycle===`merged`?null:`merged`:t.lifecycle===`ready_to_merge`&&e.lifecycle!==`ready_to_merge`?`ready_to_merge`:Le(t.lifecycle)?t.checkState===`failing`&&e.checkState!==`failing`?`checks_failing`:t.checkState===`passing`&&e.checkState!==`passing`?`checks_passing`:null:null}function ze(e,t){let n=new Map(e.map(e=>[e.id,e])),r=[];for(let e of t){let t=n.get(e.id);if(!t)continue;let i=Re(t.prStatus,e.prStatus);i&&r.push({taskId:e.id,taskLabel:e.title||e.branch||e.id,kind:i,...e.prStatus?.number===void 0?{}:{number:e.prStatus.number}})}return r}function Be(e){let t=e.number===void 0?`PR`:`PR #${e.number}`;switch(e.kind){case`merged`:return`${t} merged.`;case`ready_to_merge`:return`${t} is ready to merge.`;case`checks_failing`:return`${t} checks failing.`;case`checks_passing`:return`${t} checks passing.`}}var Ve=`kobe-web.notify`,He=null,z=Ue(),B=new Set;function Ue(){try{return localStorage.getItem(Ve)===`1`}catch{return!1}}function We(){for(let e of B)e()}function Ge(e){return e===`waiting_permission`||e===`error`}function Ke(e){return!e.enabled||e.permission!==`granted`||!e.hidden?!1:!Ge(e.prev)&&Ge(e.next)}function qe(e){He=e}function V(){return typeof Notification>`u`?`denied`:Notification.permission}function Je(){return{supported:typeof Notification<`u`,permission:V(),enabled:z&&V()===`granted`}}var H=Je();function Ye(){let e=Je();return(e.supported!==H.supported||e.permission!==H.permission||e.enabled!==H.enabled)&&(H=e),H}async function Xe(e){if(e&&typeof Notification<`u`&&Notification.permission==="default")try{await Notification.requestPermission()}catch{}z=e;try{localStorage.setItem(Ve,e?`1`:`0`)}catch{}We()}function Ze(){return(0,o.useSyncExternalStore)(e=>(B.add(e),()=>B.delete(e)),Ye,Ye)}function Qe(e,t,n,r){let i=typeof document>`u`||document.visibilityState!==`visible`;Ke({prev:n,next:r,enabled:z,permission:V(),hidden:i})&&et(e,t,`Task ${r===`error`?`errored`:`needs your input`}.`,`kobe-task-${e}`)}function $e(e){let t=typeof document>`u`||document.visibilityState!==`visible`;if(!(!z||V()!==`granted`||!t))for(let t of e)et(t.taskId,t.taskLabel,Be(t),`kobe-pr-${t.taskId}`)}function et(e,t,n,r){try{let i=new Notification(`kobe: ${t}`,{body:n,tag:r});i.onclick=()=>{window.focus(),He?.(e),i.close()}}catch{}}async function tt(e,t){let n=new URLSearchParams(t),r=await fetch(`${e}?${n.toString()}`),i=await r.json();if(!r.ok||i.error)throw Error(i.error??`${e} failed (${r.status})`);return i}function nt(e,t){return tt(`/api/history/sessions`,{worktreePath:e,vendor:t})}async function rt(e,t){let{messages:n}=await tt(`/api/history/messages`,{vendor:e,sessionId:t});return n}function it(e){let t=0,n=0,r=0;for(let i of e){let e=i.usage;e&&(t+=e.input_tokens,n+=e.output_tokens,r=e.input_tokens+(e.cache_read_input_tokens??0)+(e.cache_creation_input_tokens??0))}return{inputTokens:t,outputTokens:n,contextTokens:r}}function at(e){return e>=1e6?`${(e/1e6).toFixed(1)}m`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function ot(e){let t=e.replace(/\s+/g,` `).trim();return t.length>120?`${t.slice(0,120).trimEnd()}…`:t}function st(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.role!==`user`)continue;let r=ot(n.blocks.map(e=>e.type===`text`?e.text:``).join(` `));if(r)return r}return null}var ct={sessions:nt,messages:rt},U=new Map,W=new Set,G=null,lt={},K=new Set;function ut(){lt=Object.fromEntries([...U].map(([e,t])=>[e,t.preview]));for(let e of K)e()}async function dt(e,t=ct){if(!(!e.worktreePath||W.has(e.id))){W.add(e.id);try{let n=e.vendor??`claude`,{sessions:r,latestMtime:i}=await t.sessions(e.worktreePath,n),a=U.get(e.id);if(a&&i!==0&&a.mtime===i)return;let o=r.at(-1),s=o?st(await t.messages(n,o)):null;if(G&&!G.has(e.id))return;U.set(e.id,{mtime:i,preview:s}),ut()}catch{}finally{W.delete(e.id)}}}function ft(){return lt}function pt(){return(0,o.useSyncExternalStore)(e=>(K.add(e),()=>K.delete(e)),ft,ft)}function mt(e){G=e;let t=!1;for(let n of U.keys())e.has(n)||(U.delete(n),t=!0);t&&ut()}var q={tasks:[],activeTaskId:null,engineStates:{},update:null,jobs:{},worktreeChanges:{},conflicts:[],deliver:null,uiPrefs:null,hydrated:!1,daemonConnected:!1,streamConnected:!1},J=new Set;function Y(e){q={...q,...e};for(let e of J)e()}function X(e,t){let n=Object.entries(e).filter(([e])=>t.has(e));return n.length===Object.keys(e).length?e:Object.fromEntries(n)}function ht(e,t){return!e&&t===`idle`}function gt(e,t){if(t.phase===`running`)return{...e,[t.taskId]:t};let{[t.taskId]:n,...r}=e;return r}function _t(e){$e(ze(q.tasks,e));let t=new Set(e.map(e=>e.id));Y({tasks:e,engineStates:X(q.engineStates,t),jobs:X(q.jobs,t)}),C(t),mt(t)}function vt(e){switch(e.channel){case`task.snapshot`:_t(e.payload.tasks);break;case`active-task`:Y({activeTaskId:e.payload.taskId});break;case`engine-state`:{let t=q.engineStates[e.payload.taskId]?.state,n=q.tasks.find(t=>t.id===e.payload.taskId);if(ht(n,e.payload.state))break;Qe(e.payload.taskId,n?.title||n?.branch||e.payload.taskId,t,e.payload.state),Y({engineStates:{...q.engineStates,[e.payload.taskId]:e.payload}});break}case`update`:Y({update:e.payload.info});break;case`task.jobs`:Y({jobs:gt(q.jobs,e.payload)});break;case`worktree.changes`:Y({worktreeChanges:e.payload.changes});break;case`task.conflicts`:Y({conflicts:e.payload.pairs});break;case`session.deliver`:Y({deliver:e.payload}),Ie(e.payload);break;case`ui-prefs`:Y({uiPrefs:e.payload}),I(e.payload.theme);break}}var Z=null;function yt(){Z||(Z=new EventSource(`/events`),Z.addEventListener(`open`,()=>Y({streamConnected:!0})),Z.addEventListener(`snapshot`,e=>{let t=JSON.parse(e.data);if(Y({tasks:t.tasks,activeTaskId:t.activeTaskId,engineStates:t.engineStates,update:t.update,jobs:t.jobs??{},worktreeChanges:t.worktreeChanges??{},conflicts:t.conflicts??[],deliver:t.deliver??null,uiPrefs:t.uiPrefs??null,hydrated:!0,daemonConnected:t.connected,streamConnected:!0}),t.uiPrefs&&I(t.uiPrefs.theme),t.connected&&t.deliver&&Ie(t.deliver),t.connected){let e=new Set(t.tasks.map(e=>e.id));C(e),mt(e)}}),Z.addEventListener(`channel`,e=>{vt(JSON.parse(e.data)),q.daemonConnected||Y({daemonConnected:!0})}),Z.addEventListener(`error`,()=>Y({streamConnected:!1})))}function bt(e){return yt(),J.add(e),()=>{J.delete(e)}}function xt(){return q}function St(){return(0,o.useSyncExternalStore)(bt,xt,xt)}async function Ct(e,t){let n=await fetch(`/api/rpc`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({name:e,payload:t})}),r=await n.json();if(!n.ok||r.error){let t=Error(r.error??`rpc ${e} failed (${n.status})`);throw r.name&&(t.name=r.name),t}return r.result}function wt(e){let t=Date.parse(e.updatedAt||e.createdAt);return Number.isFinite(t)?t:0}function Q(e,t){let n=wt(t)-wt(e);return n===0?t.id.localeCompare(e.id):n}function Tt(e,t){let n=e.filter(e=>e.kind===`main`),r=e.filter(e=>e.kind!==`main`&&e.pinned),i=e.filter(e=>e.kind!==`main`&&!e.pinned);return t===`recent`&&(n.sort(Q),r.sort(Q),i.sort(Q)),[...n,...r,...i]}function Et(e,t){return t?[e.title,e.branch,e.repo,e.worktreePath,e.vendor,e.status].filter(Boolean).join(` `).toLowerCase().includes(t.toLowerCase()):!0}function Dt(e,t=Date.now()){if(!e)return``;let n=Math.max(0,Math.round((t-e)/1e3));if(n<60)return`just now`;let r=Math.round(n/60);if(r<60)return`${r}m ago`;let i=Math.round(r/60);return i<24?`${i}h ago`:`${Math.round(i/24)}d ago`}function Ot(e,t=Date.now()){let n=Date.parse(e);if(!Number.isFinite(n))return``;let r=Math.max(0,Math.round((t-n)/1e3));if(r<45)return`now`;let i=Math.round(r/60);if(i<60)return`${i}m`;let a=Math.round(i/60);if(a<24)return`${a}h`;let o=Math.round(a/24);if(o<7)return`${o}d`;let s=Math.round(o/7);if(s<5)return`${s}w`;let c=Math.round(o/30);return c<12?`${c}mo`:`${Math.round(o/365)}y`}function kt(e){let t=e?.lifecycle;if(!e||!t||t===`unknown`)return null;let n=e.checkState,r=t===`merged`?`text-kobe-violet`:t===`closed`||n===`failing`?`text-kobe-red`:n===`passing`?`text-kobe-green`:n===`pending`?`text-kobe-yellow`:`text-kobe-blue`;return{label:e.number?`PR #${e.number}`:`PR`,cls:r,title:`${t}${n&&n!==`none`?` · ${n}`:``}`}}var $=r();function At({counts:e}){return!e||e.added===0&&e.deleted===0?null:(0,$.jsxs)(`span`,{className:`shrink-0 font-mono text-[10px]`,children:[(0,$.jsxs)(`span`,{className:`text-kobe-green`,children:[`+`,e.added]}),` `,(0,$.jsxs)(`span`,{className:`text-kobe-red`,children:[`−`,e.deleted]})]})}function jt({pr:e}){let t=kt(e);return t?(0,$.jsx)(`span`,{className:`shrink-0 font-mono text-[10px] ${t.cls}`,title:t.title,children:t.label}):null}export{le as A,re as B,ke as C,ye as D,de as E,w as F,ce as I,ve as L,ge as M,ue as N,_e as O,x as P,be as R,De as S,fe as T,d as V,Ze as _,Et as a,Te as b,St as c,rt as d,nt as f,qe as g,Xe as h,Dt as i,pe as j,he as k,dt as l,it as m,jt as n,Tt as o,at as p,Ot as r,Ct as s,At as t,pt as u,Ae as v,me as w,we as x,je as y,ie as z};
|