9remote 3.0.50 → 3.0.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/dist/cli.cjs +2 -2
  2. package/dist/server.cjs +5 -5
  3. package/dist/ui/assets/index-BgdHbxnD.js +8 -0
  4. package/dist/ui/index.html +1 -1
  5. package/dist/web/404.html +1 -1
  6. package/dist/web/__next.__PAGE__.txt +2 -2
  7. package/dist/web/__next._full.txt +2 -2
  8. package/dist/web/__next._head.txt +1 -1
  9. package/dist/web/__next._index.txt +1 -1
  10. package/dist/web/__next._tree.txt +1 -1
  11. package/dist/web/_next/static/chunks/{8126-a5f1dc08132cc504.js → 8126-f4d44cf6bcc47fd8.js} +1 -1
  12. package/dist/web/_next/static/chunks/app/{page-08396a6df5b1d417.js → page-7214428f117eb5c3.js} +1 -1
  13. package/dist/web/_next/static/chunks/app/workspace/{layout-e8ac8658beed62fe.js → layout-ff89db2ea6f5ca76.js} +1 -1
  14. package/dist/web/_not-found/__next._full.txt +1 -1
  15. package/dist/web/_not-found/__next._head.txt +1 -1
  16. package/dist/web/_not-found/__next._index.txt +1 -1
  17. package/dist/web/_not-found/__next._not-found.__PAGE__.txt +1 -1
  18. package/dist/web/_not-found/__next._not-found.txt +1 -1
  19. package/dist/web/_not-found/__next._tree.txt +1 -1
  20. package/dist/web/_not-found.html +1 -1
  21. package/dist/web/_not-found.txt +1 -1
  22. package/dist/web/admin/__next._full.txt +1 -1
  23. package/dist/web/admin/__next._head.txt +1 -1
  24. package/dist/web/admin/__next._index.txt +1 -1
  25. package/dist/web/admin/__next._tree.txt +1 -1
  26. package/dist/web/admin/__next.admin.__PAGE__.txt +1 -1
  27. package/dist/web/admin/__next.admin.txt +1 -1
  28. package/dist/web/admin/access/__next._full.txt +1 -1
  29. package/dist/web/admin/access/__next._head.txt +1 -1
  30. package/dist/web/admin/access/__next._index.txt +1 -1
  31. package/dist/web/admin/access/__next._tree.txt +1 -1
  32. package/dist/web/admin/access/__next.admin.access.__PAGE__.txt +1 -1
  33. package/dist/web/admin/access/__next.admin.access.txt +1 -1
  34. package/dist/web/admin/access/__next.admin.txt +1 -1
  35. package/dist/web/admin/access.html +1 -1
  36. package/dist/web/admin/access.txt +1 -1
  37. package/dist/web/admin/login/__next._full.txt +1 -1
  38. package/dist/web/admin/login/__next._head.txt +1 -1
  39. package/dist/web/admin/login/__next._index.txt +1 -1
  40. package/dist/web/admin/login/__next._tree.txt +1 -1
  41. package/dist/web/admin/login/__next.admin.login.__PAGE__.txt +1 -1
  42. package/dist/web/admin/login/__next.admin.login.txt +1 -1
  43. package/dist/web/admin/login/__next.admin.txt +1 -1
  44. package/dist/web/admin/login.html +1 -1
  45. package/dist/web/admin/login.txt +1 -1
  46. package/dist/web/admin/ota/__next._full.txt +1 -1
  47. package/dist/web/admin/ota/__next._head.txt +1 -1
  48. package/dist/web/admin/ota/__next._index.txt +1 -1
  49. package/dist/web/admin/ota/__next._tree.txt +1 -1
  50. package/dist/web/admin/ota/__next.admin.ota.__PAGE__.txt +1 -1
  51. package/dist/web/admin/ota/__next.admin.ota.txt +1 -1
  52. package/dist/web/admin/ota/__next.admin.txt +1 -1
  53. package/dist/web/admin/ota.html +1 -1
  54. package/dist/web/admin/ota.txt +1 -1
  55. package/dist/web/admin/turn/__next._full.txt +1 -1
  56. package/dist/web/admin/turn/__next._head.txt +1 -1
  57. package/dist/web/admin/turn/__next._index.txt +1 -1
  58. package/dist/web/admin/turn/__next._tree.txt +1 -1
  59. package/dist/web/admin/turn/__next.admin.turn.__PAGE__.txt +1 -1
  60. package/dist/web/admin/turn/__next.admin.turn.txt +1 -1
  61. package/dist/web/admin/turn/__next.admin.txt +1 -1
  62. package/dist/web/admin/turn.html +1 -1
  63. package/dist/web/admin/turn.txt +1 -1
  64. package/dist/web/admin.html +1 -1
  65. package/dist/web/admin.txt +1 -1
  66. package/dist/web/download/__next._full.txt +1 -1
  67. package/dist/web/download/__next._head.txt +1 -1
  68. package/dist/web/download/__next._index.txt +1 -1
  69. package/dist/web/download/__next._tree.txt +1 -1
  70. package/dist/web/download/__next.download.__PAGE__.txt +1 -1
  71. package/dist/web/download/__next.download.txt +1 -1
  72. package/dist/web/download.html +1 -1
  73. package/dist/web/download.txt +1 -1
  74. package/dist/web/index.html +1 -1
  75. package/dist/web/index.txt +2 -2
  76. package/dist/web/login/__next._full.txt +2 -2
  77. package/dist/web/login/__next._head.txt +1 -1
  78. package/dist/web/login/__next._index.txt +1 -1
  79. package/dist/web/login/__next._tree.txt +1 -1
  80. package/dist/web/login/__next.login.__PAGE__.txt +2 -2
  81. package/dist/web/login/__next.login.txt +1 -1
  82. package/dist/web/login.html +1 -1
  83. package/dist/web/login.txt +2 -2
  84. package/dist/web/workspace/__next._full.txt +2 -2
  85. package/dist/web/workspace/__next._head.txt +1 -1
  86. package/dist/web/workspace/__next._index.txt +1 -1
  87. package/dist/web/workspace/__next._tree.txt +1 -1
  88. package/dist/web/workspace/__next.workspace.__PAGE__.txt +1 -1
  89. package/dist/web/workspace/__next.workspace.txt +2 -2
  90. package/dist/web/workspace/browse/__next._full.txt +2 -2
  91. package/dist/web/workspace/browse/__next._head.txt +1 -1
  92. package/dist/web/workspace/browse/__next._index.txt +1 -1
  93. package/dist/web/workspace/browse/__next._tree.txt +1 -1
  94. package/dist/web/workspace/browse/__next.workspace.browse.__PAGE__.txt +1 -1
  95. package/dist/web/workspace/browse/__next.workspace.browse.txt +1 -1
  96. package/dist/web/workspace/browse/__next.workspace.txt +2 -2
  97. package/dist/web/workspace/browse.html +1 -1
  98. package/dist/web/workspace/browse.txt +2 -2
  99. package/dist/web/workspace/editor/__next._full.txt +2 -2
  100. package/dist/web/workspace/editor/__next._head.txt +1 -1
  101. package/dist/web/workspace/editor/__next._index.txt +1 -1
  102. package/dist/web/workspace/editor/__next._tree.txt +1 -1
  103. package/dist/web/workspace/editor/__next.workspace.editor.__PAGE__.txt +1 -1
  104. package/dist/web/workspace/editor/__next.workspace.editor.txt +1 -1
  105. package/dist/web/workspace/editor/__next.workspace.txt +2 -2
  106. package/dist/web/workspace/editor.html +1 -1
  107. package/dist/web/workspace/editor.txt +2 -2
  108. package/dist/web/workspace/files/__next._full.txt +2 -2
  109. package/dist/web/workspace/files/__next._head.txt +1 -1
  110. package/dist/web/workspace/files/__next._index.txt +1 -1
  111. package/dist/web/workspace/files/__next._tree.txt +1 -1
  112. package/dist/web/workspace/files/__next.workspace.files.__PAGE__.txt +1 -1
  113. package/dist/web/workspace/files/__next.workspace.files.txt +1 -1
  114. package/dist/web/workspace/files/__next.workspace.txt +2 -2
  115. package/dist/web/workspace/files.html +1 -1
  116. package/dist/web/workspace/files.txt +2 -2
  117. package/dist/web/workspace/git/__next._full.txt +2 -2
  118. package/dist/web/workspace/git/__next._head.txt +1 -1
  119. package/dist/web/workspace/git/__next._index.txt +1 -1
  120. package/dist/web/workspace/git/__next._tree.txt +1 -1
  121. package/dist/web/workspace/git/__next.workspace.git.__PAGE__.txt +1 -1
  122. package/dist/web/workspace/git/__next.workspace.git.txt +1 -1
  123. package/dist/web/workspace/git/__next.workspace.txt +2 -2
  124. package/dist/web/workspace/git.html +1 -1
  125. package/dist/web/workspace/git.txt +2 -2
  126. package/dist/web/workspace/mobile/__next._full.txt +2 -2
  127. package/dist/web/workspace/mobile/__next._head.txt +1 -1
  128. package/dist/web/workspace/mobile/__next._index.txt +1 -1
  129. package/dist/web/workspace/mobile/__next._tree.txt +1 -1
  130. package/dist/web/workspace/mobile/__next.workspace.mobile.__PAGE__.txt +1 -1
  131. package/dist/web/workspace/mobile/__next.workspace.mobile.txt +1 -1
  132. package/dist/web/workspace/mobile/__next.workspace.txt +2 -2
  133. package/dist/web/workspace/mobile.html +1 -1
  134. package/dist/web/workspace/mobile.txt +2 -2
  135. package/dist/web/workspace/pair/__next._full.txt +2 -2
  136. package/dist/web/workspace/pair/__next._head.txt +1 -1
  137. package/dist/web/workspace/pair/__next._index.txt +1 -1
  138. package/dist/web/workspace/pair/__next._tree.txt +1 -1
  139. package/dist/web/workspace/pair/__next.workspace.pair.__PAGE__.txt +1 -1
  140. package/dist/web/workspace/pair/__next.workspace.pair.txt +1 -1
  141. package/dist/web/workspace/pair/__next.workspace.txt +2 -2
  142. package/dist/web/workspace/pair.html +1 -1
  143. package/dist/web/workspace/pair.txt +2 -2
  144. package/dist/web/workspace/remote/__next._full.txt +2 -2
  145. package/dist/web/workspace/remote/__next._head.txt +1 -1
  146. package/dist/web/workspace/remote/__next._index.txt +1 -1
  147. package/dist/web/workspace/remote/__next._tree.txt +1 -1
  148. package/dist/web/workspace/remote/__next.workspace.remote.__PAGE__.txt +1 -1
  149. package/dist/web/workspace/remote/__next.workspace.remote.txt +1 -1
  150. package/dist/web/workspace/remote/__next.workspace.txt +2 -2
  151. package/dist/web/workspace/remote.html +1 -1
  152. package/dist/web/workspace/remote.txt +2 -2
  153. package/dist/web/workspace/settings/__next._full.txt +2 -2
  154. package/dist/web/workspace/settings/__next._head.txt +1 -1
  155. package/dist/web/workspace/settings/__next._index.txt +1 -1
  156. package/dist/web/workspace/settings/__next._tree.txt +1 -1
  157. package/dist/web/workspace/settings/__next.workspace.settings.__PAGE__.txt +1 -1
  158. package/dist/web/workspace/settings/__next.workspace.settings.txt +1 -1
  159. package/dist/web/workspace/settings/__next.workspace.txt +2 -2
  160. package/dist/web/workspace/settings.html +1 -1
  161. package/dist/web/workspace/settings.txt +2 -2
  162. package/dist/web/workspace/terminal/default/__next._full.txt +2 -2
  163. package/dist/web/workspace/terminal/default/__next._head.txt +1 -1
  164. package/dist/web/workspace/terminal/default/__next._index.txt +1 -1
  165. package/dist/web/workspace/terminal/default/__next._tree.txt +1 -1
  166. package/dist/web/workspace/terminal/default/__next.workspace.terminal.$d$sessionId.__PAGE__.txt +1 -1
  167. package/dist/web/workspace/terminal/default/__next.workspace.terminal.$d$sessionId.txt +1 -1
  168. package/dist/web/workspace/terminal/default/__next.workspace.terminal.txt +1 -1
  169. package/dist/web/workspace/terminal/default/__next.workspace.txt +2 -2
  170. package/dist/web/workspace/terminal/default.html +1 -1
  171. package/dist/web/workspace/terminal/default.txt +2 -2
  172. package/dist/web/workspace/welcome/__next._full.txt +2 -2
  173. package/dist/web/workspace/welcome/__next._head.txt +1 -1
  174. package/dist/web/workspace/welcome/__next._index.txt +1 -1
  175. package/dist/web/workspace/welcome/__next._tree.txt +1 -1
  176. package/dist/web/workspace/welcome/__next.workspace.txt +2 -2
  177. package/dist/web/workspace/welcome/__next.workspace.welcome.__PAGE__.txt +1 -1
  178. package/dist/web/workspace/welcome/__next.workspace.welcome.txt +1 -1
  179. package/dist/web/workspace/welcome.html +1 -1
  180. package/dist/web/workspace/welcome.txt +2 -2
  181. package/dist/web/workspace/workspaces/__next._full.txt +2 -2
  182. package/dist/web/workspace/workspaces/__next._head.txt +1 -1
  183. package/dist/web/workspace/workspaces/__next._index.txt +1 -1
  184. package/dist/web/workspace/workspaces/__next._tree.txt +1 -1
  185. package/dist/web/workspace/workspaces/__next.workspace.txt +2 -2
  186. package/dist/web/workspace/workspaces/__next.workspace.workspaces.__PAGE__.txt +1 -1
  187. package/dist/web/workspace/workspaces/__next.workspace.workspaces.txt +1 -1
  188. package/dist/web/workspace/workspaces.html +1 -1
  189. package/dist/web/workspace/workspaces.txt +2 -2
  190. package/dist/web/workspace.html +1 -1
  191. package/dist/web/workspace.txt +2 -2
  192. package/package.json +1 -1
  193. package/dist/ui/assets/index-R8IobJlQ.js +0 -8
  194. /package/dist/web/_next/static/{Ra2kXiDp5RGbGMB-iKw0v → Sbm6VmM9scgfPUKCTCQc1}/_buildManifest.js +0 -0
  195. /package/dist/web/_next/static/{Ra2kXiDp5RGbGMB-iKw0v → Sbm6VmM9scgfPUKCTCQc1}/_ssgManifest.js +0 -0
@@ -14,7 +14,7 @@ ${s}`:s;return{bySession:{...e.bySession,[t]:{...i,promptError:{text:d,reason:n,
14
14
  `:`${i}
15
15
  ${l}
16
16
  `:`${l}
17
- `;return await e.writeFile(r,d)}let oS="application/x-file-paths",oT=()=>"u">typeof document&&"webkitdirectory"in document.createElement("input"),oE=e=>{let t=e.dataTransfer.getData(oS);if(!t)return null;try{return JSON.parse(t)}catch{return null}},oR=e=>[...e.dataTransfer?.types||[]].includes("Files");function oM(e){let{workspace:t,fileBus:s,onOpenFile:l,activeFile:a,onSwitchWorkspace:i,onNewTerminal:o,onSearchFolder:c,compact:d=!1,onlyChanged:u=!1,onActions:m}=e,{t:x}=(0,eC.s)(),[p,h]=(0,r.useState)(null),f=(0,r.useRef)(null),b=n2(f,p?.x??0,p?.y??0),[g,v]=(0,r.useState)(null),[y,w]=(0,r.useState)(""),[j,k]=(0,r.useState)(null),[N,C]=(0,r.useState)(""),[S,T]=(0,r.useState)(null),[E,R]=(0,r.useState)(()=>new Set),M=(0,r.useRef)(E);(0,r.useEffect)(()=>{M.current=E},[E]);let $=(0,r.useRef)(y);(0,r.useEffect)(()=>{$.current=y},[y]);let z=(0,r.useRef)(g);(0,r.useEffect)(()=>{z.current=g},[g]);let[P,A]=(0,r.useState)(null),[I,D]=(0,r.useState)(!1),[L,B]=(0,r.useState)(null),[F,O]=(0,r.useState)(null),[_,K]=(0,r.useState)(null),[W,H]=(0,r.useState)(null),q=(0,r.useRef)(null),U=(0,r.useRef)(null),X=(0,r.useRef)(null),V=(0,r.useRef)(null),[G]=(0,r.useState)(oT),J=(0,r.useRef)(null),Y=(0,r.useRef)(null),Z=(0,r.useRef)(null),Q=(0,r.useCallback)(e=>e&&t?e.replace(`${t}/`,""):e,[t]),{tree:ee,expanded:es,loading:en,truncatedDirs:er,gitStatusMap:el,showHidden:ea,setShowHidden:ei,loadDir:eo,loadGitStatus:ec,toggleFolder:ed,expandDir:eu,collapseAll:em,refreshAll:ex}=function(e){let{workspace:t,fileBus:s}=e,[n,l]=(0,r.useState)(()=>new Map),[a,i]=(0,r.useState)(()=>new Set),[o,c]=(0,r.useState)(null),[d,u]=(0,r.useState)(()=>new Set),[m,x]=(0,r.useState)(()=>new Set),[p,h]=(0,r.useState)({}),[f,b]=(0,r.useState)(i6),g=(0,r.useCallback)(async e=>{u(t=>{let s=new Set(t);return s.add(e),s});let t=await s.getFiles(e,f);return(u(t=>{let s=new Set(t);return s.delete(e),s}),t?.success)?(l(s=>{let n=new Map(s);return n.set(e,t.files||[]),n}),x(s=>{let n=!!t.truncated;if(n===s.has(e))return s;let r=new Set(s);return n?r.add(e):r.delete(e),r}),t.files||[]):null},[s,f]),v=(0,r.useRef)(0),y=(0,r.useCallback)(async()=>{if(!t)return;let e=++v.current,{map:n}=await i3(s,t);e===v.current&&h(n)},[s,t]);(0,r.useEffect)(()=>{let e,s;if(!t)return;let n=!0,r=null,l=1e3,a=Array.isArray(s=(e=i4())[t])?s:Array.isArray(e.legacy)?e.legacy:[],o=new Set([t]),d=a.filter(e=>"string"==typeof e&&e.startsWith(t));for(let e of d)o.add(e);let u=async()=>{let[e]=await Promise.all([g(t),...d.map(e=>g(e))]);if(n){if(null==e&&l<=16e3){let e=l;l*=2,r=setTimeout(u,e);return}i(o),c(t),y()}};return u(),()=>{n=!1,clearTimeout(r)}},[t]),(0,r.useEffect)(()=>{let e=null,t=()=>{clearTimeout(e),e=setTimeout(y,et.HF)},s=["fileExplorer:fileSaved","fileExplorer:fileCreated","fileExplorer:fileDeleted","fileExplorer:fileRenamed",et.GW];return s.forEach(e=>window.addEventListener(e,t)),()=>{clearTimeout(e),s.forEach(e=>window.removeEventListener(e,t))}},[y]),(0,r.useEffect)(()=>{if(o===t&&t)try{let e=i4();delete e.legacy,e[t]=[...a],window.localStorage.setItem(et.d5.expandedFolders,JSON.stringify(e))}catch{}},[t,o,a]),(0,r.useEffect)(()=>{window.localStorage.setItem(et.d5.showHidden,JSON.stringify(f)),n.size>0&&Promise.all([...n.keys()].map(e=>g(e))).catch(()=>{})},[f]);let w=(0,r.useCallback)(async e=>{(0,eN.e)();let t=e.path;a.has(t)?i(e=>{let s=new Set(e);return s.delete(t),s}):(n.has(t)||await g(t),i(e=>{let s=new Set(e);return s.add(t),s}))},[a,n,g]),j=(0,r.useCallback)(e=>{i(t=>{let s=new Set(t);return s.add(e),s})},[]),k=(0,r.useCallback)(()=>{(0,eN.e)(),i(new Set)},[]),N=i2(),C=(0,r.useMemo)(()=>[...n.keys()].filter(e=>e===t||a.has(e)),[n,a,t]),S=(0,r.useCallback)(e=>{Promise.all(e.map(e=>g(e))).catch(()=>{}),window.dispatchEvent(new Event(et.GW))},[g]);i1({dirs:C,fileBus:s,onDirsChanged:S,enabled:N});let T=(0,r.useRef)(!0);(0,r.useEffect)(()=>{let e=N&&!T.current;T.current=N,e&&n.size&&S([...n.keys()])},[N]);let E=(0,r.useCallback)(async()=>{(0,eN.e)();let e=[...n.keys()];await Promise.all(e.map(e=>g(e))),y()},[n,g,y]);return{tree:n,expanded:a,loading:d,truncatedDirs:m,gitStatusMap:p,showHidden:f,setShowHidden:b,loadDir:g,loadGitStatus:y,toggleFolder:w,expandDir:j,collapseAll:k,refreshAll:E}}({workspace:t,fileBus:s}),ep=(0,r.useMemo)(()=>{if(1!==E.size)return null;let[e]=E;return ee.has(e)?e:null},[E,ee]),{createItem:eh,renameItem:ef,deleteItem:eb,deleteMany:eg,duplicateItem:ey,moveTo:ew,pasteInto:ej}=function(e){let{fileBus:t,loadDir:s,loadGitStatus:n,expandDir:l,onOpenFile:a,onMoved:i}=e,o=(0,r.useCallback)(async(e,n,r)=>{let i=iZ(e,n),o=await t.createItem(i,r);o?.success&&(i9("created"),await s(e),"folder"===r?l(e):a?.(i))},[t,s,l,a]),c=(0,r.useCallback)(async(e,n)=>{let r=iQ(e.path),l=iZ(r,n),a=await t.renameItem(e.path,l);a?.success&&(i9("renamed"),await s(r))},[t,s]),d=(0,r.useCallback)(async e=>{let n=iQ(e.path),r=await t.deleteItem(e.path);r?.success&&(i9("deleted"),await s(n))},[t,s]),u=(0,r.useCallback)(async e=>{if(!e?.length)return;let r=new Set;for(let s of e){let e=await t.deleteItem(s.path);e?.success&&r.add(iQ(s.path))}if(r.size){for(let e of(i9("deleted"),r))await s(e);n(),i?.()}},[t,s,n,i]),m=(0,r.useCallback)(async(e,s)=>{let n=i0(e),r=new Set(((await t.getFiles(s,!0))?.files||[]).map(e=>e.name)),l=n;if(r.has(l)){let e=n.lastIndexOf("."),t=e>0?n.slice(0,e):n,s=e>0?n.slice(e):"";l=`${t} copy${s}`;for(let e=2;r.has(l);e++)l=`${t} copy ${e}${s}`}return t.copyItem(e,iZ(s,l))},[t]),x=(0,r.useCallback)(async e=>{let t=iQ(e.path),r=await m(e.path,t);r?.success&&(i9("created"),await s(t),n())},[m,s,n]),p=(0,r.useCallback)(async(e,r)=>{if(e?.length&&r){for(let s of e){let e=iZ(r,s.split("/").pop());s===e||e.startsWith(s+"/")||await t.renameItem(s,e)}for(let t of new Set([r,...e.map(e=>iQ(e))]))await s(t);i9("renamed"),n(),i?.()}},[t,s,n,i]),h=(0,r.useCallback)(async(e,t,r)=>{if(!e?.length||!t)return;if("cut"===r)return p(e,t);let a=0;for(let s of e){if(t===s||t.startsWith(s+"/"))continue;let e=await m(s,t);e?.success&&a++}a&&(i9("created"),await s(t),l(t),n())},[m,p,s,l,n]);return{createItem:o,renameItem:c,deleteItem:d,deleteMany:u,duplicateItem:x,moveTo:p,pasteInto:h}}({fileBus:s,loadDir:eo,loadGitStatus:ec,expandDir:eu,onOpenFile:l,onMoved:()=>R(new Set)});(0,r.useEffect)(()=>{if(!p)return;let e=()=>h(null);return window.addEventListener("click",e),window.addEventListener("scroll",e,!0),()=>{window.removeEventListener("click",e),window.removeEventListener("scroll",e,!0)}},[p]),(0,r.useEffect)(()=>{if(g&&Y.current){Y.current.focus();let e=Y.current.value.length;Y.current.setSelectionRange(e,e)}},[g]),(0,r.useEffect)(()=>{j&&Z.current&&Z.current.focus()},[j]);let eS=(0,r.useCallback)(()=>ep&&ee.has(ep)?ep:t,[ep,ee,t]),eT=(0,r.useCallback)(async e=>{let t=N.trim();if(!t)return;let s=j?.dir||eS();await eh(s,t,e),k(null),C("")},[N,j,eS,eh]),eE=(0,r.useCallback)(async()=>{let e=z.current;if(!e)return;let t=$.current.trim();t&&t!==e.name&&await ef(e,t),v(null)},[ef]),eR=(0,r.useCallback)(async e=>{try{await navigator.clipboard.writeText(e)}catch{}},[]),eM=(0,r.useCallback)((e,t)=>{e.preventDefault(),e.stopPropagation(),(0,eN.e)(),R(e=>e.has(t.path)?e:new Set([t.path])),H(t.path),h({file:t,x:e.clientX,y:e.clientY})},[]),e$=(0,r.useCallback)((e,t)=>{let s=e.touches?.[0];if(!s)return;let n=s.clientX,r=s.clientY;J.current=setTimeout(()=>{(0,eN.e)(),h({file:t,x:n,y:r})},500)},[]),ez=(0,r.useCallback)(()=>{J.current&&(clearTimeout(J.current),J.current=null)},[]),eP=(0,r.useMemo)(()=>{if(!a)return null;if(!(0,et.pA)(a))return a;let{repoPath:e,filePath:s}=(0,et.qu)(a);return s?`${e||t}/${s}`:null},[a,t]),eA=e=>!u||!!el[Q(e.path)],eI=(0,r.useMemo)(()=>{let e=[],s=(t,n)=>{for(let r of ee.get(t)||[])(!u||el[Q(r.path)])&&(e.push({file:r,depth:n}),"folder"===r.type&&es.has(r.path)&&s(r.path,n+1))};return s(t,0),e},[ee,es,el,u,t,Q]),eD=(0,r.useCallback)(e=>eI.find(t=>t.file.path===e)?.file||null,[eI]),eL=(0,r.useCallback)(e=>{let t=eI.filter(e=>E.has(e.file.path)).map(e=>e.file);return t.length?t:e?[e]:[]},[eI,E]),eB=(0,r.useCallback)((e,t)=>{let s=eI.findIndex(t=>t.file.path===e),n=eI.findIndex(e=>e.file.path===t);if(-1===s||-1===n)return new Set([t]);let[r,l]=s<=n?[s,n]:[n,s];return new Set(eI.slice(r,l+1).map(e=>e.file.path))},[eI]),eF=(0,r.useCallback)((e,t)=>{if((0,eN.e)(),q.current?.focus({preventScroll:!0}),t?.metaKey||t?.ctrlKey){R(t=>{let s=new Set(t);return s.has(e.path)?s.delete(e.path):s.add(e.path),s}),H(e.path),U.current=e.path;return}if(t?.shiftKey&&U.current){R(eB(U.current,e.path)),H(e.path);return}R(new Set([e.path])),H(e.path),U.current=e.path,"folder"===e.type?ed(e):l?.(e.path)},[ed,l,eB]),eO=(0,r.useCallback)(e=>e?"folder"===e.type?e.path:iQ(e.path):t,[t]),e_=(0,r.useCallback)(e=>{let t=eL(e);t.length&&T({files:t})},[eL]),eK=(0,r.useCallback)(async()=>{let e=S?.files||[];T(null),1===e.length?await eb(e[0]):await eg(e),R(new Set)},[S,eb,eg]),eW=(0,r.useCallback)((e,t)=>{let s=eL(e).map(e=>e.path);s.length&&B({paths:s,mode:t})},[eL]),eH=(0,r.useCallback)(async e=>{L?.paths?.length&&(await ej(L.paths,eO(e),L.mode),"cut"===L.mode&&B(null))},[L,ej,eO]),eq=(0,r.useCallback)(async(e,t)=>{if(!e.length)return;let n=0;O({total:e.length,done:0,failed:0}),await s.uploadFiles(t,e,{onConflict:(e,t)=>new Promise(s=>K({name:t||e?.name,resolve:s})),onFileDone:()=>O(e=>e?{...e,done:e.done+1}:e),onError:()=>{n+=1,O(e=>e?{...e,done:e.done+1,failed:n}:e)}}),O(e=>e&&n?e:null),K(null),await eo(t),eu(t),ec()},[s,eo,eu,ec]),eU=(0,r.useCallback)(async(e,t)=>{eq(await oh(e),t)},[eq]),eX=(0,r.useCallback)(()=>v(null),[]),eV=(0,r.useCallback)((e,t)=>{let s=M.current,n=s.has(t.path)?[...s]:[t.path];e.dataTransfer.setData(oS,JSON.stringify(n)),e.dataTransfer.effectAllowed="move"},[]),eG=(0,r.useCallback)((e,t)=>{let s=oR(e);("folder"===t.type||s)&&(e.preventDefault(),e.dataTransfer.dropEffect=s?"copy":"move","folder"===t.type&&A(t.path))},[]),eJ=(0,r.useCallback)(e=>{A(t=>t===e.path?null:t)},[]),eY=(0,r.useCallback)((e,t)=>{let s=oR(e);if("folder"!==t.type&&!s)return;if(e.preventDefault(),e.stopPropagation(),A(null),D(!1),s)return void eU(e.dataTransfer,eO(t));let n=oE(e);n&&ew(n,t.path)},[eU,eO,ew]),eZ=(0,r.useCallback)(e=>{let t=j?.dir||eS(),s=[...e.target.files].map(e=>({file:e,relativePath:e.webkitRelativePath||e.name}));e.target.value="",k(null),eq(s,t)},[j,eS,eq]),eQ=(0,r.useCallback)((e,t)=>{if(!eI.length)return;let s=eI.findIndex(e=>e.file.path===W),n=eI[Math.min(eI.length-1,Math.max(0,-1===s?0:s+e))];if(!n)return;let r=n.file.path;t&&U.current?R(eB(U.current,r)):(R(new Set([r])),U.current=r),H(r),q.current?.querySelector(`[data-path="${CSS.escape(r)}"]`)?.scrollIntoView({block:"nearest"})},[eI,W,eB]),e0=(0,r.useCallback)(e=>{if(g||j||S)return;let t=eD(W),s=e.metaKey||e.ctrlKey;if(s&&"a"===e.key.toLowerCase()){e.preventDefault(),R(new Set(eI.map(e=>e.file.path))),U.current=eI[0]?.file.path||null;return}if(s&&"c"===e.key.toLowerCase()){e.preventDefault(),eW(t,"copy");return}if(s&&"x"===e.key.toLowerCase()){e.preventDefault(),eW(t,"cut");return}if(s&&"v"===e.key.toLowerCase()){e.preventDefault(),eH(t);return}switch(e.key){case"ArrowDown":e.preventDefault(),eQ(1,e.shiftKey);return;case"ArrowUp":e.preventDefault(),eQ(-1,e.shiftKey);return;case"ArrowRight":if(!t)return;e.preventDefault(),"folder"!==t.type||es.has(t.path)?eQ(1,!1):ed(t);return;case"ArrowLeft":if(!t)return;e.preventDefault(),"folder"===t.type&&es.has(t.path)?ed(t):eQ(-1,!1);return;case"Enter":if(!t)return;e.preventDefault(),tE()?(v(t),w(t.name)):"folder"===t.type?ed(t):l?.(t.path);return;case"F2":if(!t)return;e.preventDefault(),v(t),w(t.name);return;case"Delete":case"Backspace":if(!t)return;e.preventDefault(),e_(t);return;case"Escape":R(new Set),B(null);return}},[g,j,S,W,eD,eI,es,ed,l,eQ,eW,eH,e_]),e1=(e,t)=>{if(!eA(e))return null;let s="folder"===e.type,r=s&&es.has(e.path),l=E.has(e.path);return(0,n.jsx)(ox,{file:e,depth:t,isFolder:s,isExpanded:r,isLoading:s&&en.has(e.path),isActive:eP===e.path,isSelected:l,isRenaming:g?.path===e.path,isDragOver:P===e.path&&s,isCut:L?.mode==="cut"&&L.paths.includes(e.path),gitStatus:el[Q(e.path)],renameValue:g?.path===e.path?y:"",renameInputRef:Y,onRenameChange:w,onRenameSubmit:eE,onRenameCancel:eX,onToggleFolder:ed,onClick:eF,onContextMenu:eM,onTouchStart:e$,onTouchEnd:ez,onDragStart:eV,onDragOver:eG,onDragLeave:eJ,onDrop:eY,compact:d,children:s&&r&&(0,n.jsxs)("div",{children:[(ee.get(e.path)||[]).map(e=>e1(e,t+1)),er.has(e.path)&&(0,n.jsx)(om,{depth:t+1,compact:d})]})},e.path)},e2=(0,r.useMemo)(()=>ee.get(t)||[],[ee,t]);(0,r.useEffect)(()=>{if(!u)return;let e=!0;return(async()=>{for(let s of Object.keys(el)){if("folder-changed"!==el[s])continue;let n=`${t}/${s}`;if(!ee.has(n)&&(await eo(n),!e))return;eu(n)}})(),()=>{e=!1}},[u,el,t]),(0,r.useEffect)(()=>{if(!eP||!q.current)return;let e=setTimeout(()=>{let e=q.current?.querySelector(`[data-path="${CSS.escape(eP)}"]`);e?.scrollIntoView({block:"nearest"})},0);return()=>clearTimeout(e)},[eP,ee]);let e5=(0,r.useMemo)(()=>i0(t),[t]),e3=(e,t)=>{(0,eN.e)(),k({type:e,dir:t}),C("")};(0,r.useEffect)(()=>{if(m)return m({newFile:()=>e3("file",eS()),newFolder:()=>e3("folder",eS()),refresh:ex,collapseAll:em,hasExpanded:es.size>0,showHidden:ea,toggleHidden:()=>ei(e=>!e)}),()=>m(null)},[m,ea,ex,em,es.size,t]);let e4=(0,r.useCallback)(async e=>{if(!t||!s||!e?.path)return;let n=Q(e.path),r=await oC(s,t,n,"folder"===e.type);r?.success&&(ec(),window.dispatchEvent(new CustomEvent(et.GW)))},[t,s,Q,ec]),e6="text-text-muted hover:text-text p-1 rounded hover:bg-surface-2";return(0,n.jsxs)("div",{className:"relative flex flex-col flex-1 min-h-0 text-text overflow-hidden",children:[!d&&(0,n.jsxs)("div",{style:{height:32},className:"bg-surface border-b border-border flex items-center gap-2 sticky top-0 z-10 flex-shrink-0 px-3",children:[(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),i?.()},className:"flex items-center gap-1 flex-1 min-w-0 hover:text-text",children:[(0,n.jsx)("span",{className:"text-xs uppercase tracking-wider text-text-muted font-medium truncate",children:e5||"No Workspace"}),(0,n.jsx)(ev.Ay,{name:"ChevronDown",size:12,className:"text-text-muted shrink-0"})]}),(0,n.jsx)("button",{onClick:()=>e3("file",eS()),className:e6,title:"New File",children:(0,n.jsx)(ev.Ay,{name:"Plus",size:14})}),(0,n.jsx)("button",{onClick:()=>e3("folder",eS()),className:e6,title:"New Folder",children:(0,n.jsx)(ev.Ay,{name:"FolderOpen",size:14})}),(0,n.jsx)("button",{onClick:ex,className:e6,title:"Refresh",children:(0,n.jsx)(ev.Ay,{name:"RefreshCw",size:14})}),es.size>0&&(0,n.jsx)("button",{onClick:em,className:e6,title:x("fileExplorer.collapseAll"),children:(0,n.jsx)(ev.Ay,{name:"ChevronsDownUp",size:14})}),(0,n.jsx)("button",{onClick:()=>ei(e=>!e),className:`p-1 rounded hover:bg-surface-2 ${ea?"text-text":"text-text-muted hover:text-text"}`,title:ea?"Hide hidden files":"Show hidden files",children:(0,n.jsx)(ev.Ay,{name:ea?"Eye":"EyeOff",size:14})})]}),(0,n.jsx)("div",{ref:q,tabIndex:0,onKeyDown:e0,className:`flex-1 overflow-auto py-1 outline-none ${I?"ring-2 ring-inset ring-brand-500/40 bg-brand-500/5":""}`,onDragOver:e=>{e.preventDefault();let t=oR(e);e.dataTransfer.dropEffect=t?"copy":"move",t&&D(!0)},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||D(!1)},onClick:e=>{e.target===e.currentTarget&&R(new Set)},onDrop:e=>{if(e.preventDefault(),D(!1),oR(e))return void eU(e.dataTransfer,t);let s=oE(e);s&&ew(s,t)},children:u&&!e2.some(eA)?(0,n.jsx)("div",{className:"text-text-subtle text-xs px-3 py-4 text-center",children:x("git.noChanges")}):0!==e2.length||en.has(t)?(0,n.jsxs)(n.Fragment,{children:[e2.map(e=>e1(e,0)),er.has(t)&&(0,n.jsx)("div",{className:"text-[11px] text-text-muted italic py-0.5 px-3",children:"Showing first 300 entries — use search for the rest."})]}):(0,n.jsx)("div",{className:"text-text-subtle text-xs px-3 py-4 text-center",children:"Empty workspace"})}),p&&(0,n.jsx)("div",{ref:f,className:"fixed z-50 menu-popover p-1 min-w-[150px] pop-in",style:{left:b.left,top:b.top},onClick:e=>e.stopPropagation(),children:(e=>{if(!e)return[];let t="folder"===e.type,n=eL(e),r=n.length>1,a=[];return!r&&t?(o&&a.push({label:x("workspaces.openHere"),icon:"Terminal",action:()=>o(e.path)}),c&&a.push({label:"Search in Folder",icon:"Search",action:()=>c(e.path)}),a.push({label:"New File",icon:"Plus",action:()=>e3("file",e.path)}),a.push({label:"New Folder",icon:"FolderOpen",action:()=>e3("folder",e.path)})):!r&&(a.push({label:"Open",icon:"File",action:()=>l?.(e.path)}),(0,et.YO)(e.path)&&a.push({label:x("editor.preview"),icon:"Eye",action:()=>l?.(e.path,{preview:!0})})),a.push({label:"Cut",icon:"Scissors",action:()=>eW(e,"cut")}),a.push({label:"Copy",icon:"Copy",action:()=>eW(e,"copy")}),L?.paths?.length&&a.push({label:"Paste",icon:"ClipboardPaste",action:()=>eH(e)}),r||(a.push({label:"Reveal in OS",icon:"FolderOpen",action:()=>s.revealInOS(e.path)}),a.push({label:"Rename",icon:"Pencil",action:()=>{v(e),w(e.name)}}),a.push({label:"Duplicate",icon:"Copy",action:()=>ey(e)}),a.push({label:"Copy Path",icon:"Copy",action:()=>eR(e.path)}),a.push({label:"Copy Relative Path",icon:"Copy",action:()=>eR(Q(e.path))}),a.push({label:x("git.addToGitignore",{defaultValue:"Add to .gitignore"}),icon:"EyeOff",action:()=>e4(e)})),a.push({label:r?`Delete ${n.length} items`:"Delete",icon:"Trash2",danger:!0,action:()=>e_(e)}),a})(p.file).map((e,t)=>(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),e.action(),h(null)},className:`w-full flex items-center gap-1.5 px-2 py-1.5 text-xs text-left hover:bg-surface-2/80 rounded-[6px] transition-colors ${e.danger?"text-red-400":"text-text"}`,children:[(0,n.jsx)(ev.Ay,{name:e.icon,size:13,className:"shrink-0"}),(0,n.jsx)("span",{className:"truncate",children:e.label})]},t))}),j&&(0,sp.createPortal)((0,n.jsxs)("div",{className:"modal-overlay z-50",children:[(0,n.jsx)("div",{className:"absolute inset-0 scrim fade-in",onClick:()=>k(null)}),(0,n.jsxs)("div",{className:"relative card-elev p-4 w-full max-w-sm my-auto pop-in",children:[(0,n.jsx)("h3",{className:"text-sm font-semibold text-text mb-2",children:"folder"===j.type?"New Folder":"New File"}),(0,n.jsxs)("p",{className:"text-xs text-text-muted mb-2 truncate",children:["in ",Q(j.dir)||e5||"/"]}),(0,n.jsx)("input",{ref:Z,value:N,onChange:e=>C(e.target.value),onKeyDown:e=>{"Enter"===e.key?eT(j.type):"Escape"===e.key&&k(null)},placeholder:"folder"===j.type?"folder name":"file name",className:"w-full bg-surface-3 text-text text-sm px-2 py-1.5 rounded outline-none border border-border focus:border-brand-500"}),(0,n.jsxs)("div",{className:"flex items-center gap-2 mt-3",children:[(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),("folder"===j.type&&G?V:X).current?.click()},className:"flex items-center gap-1.5 px-2 py-1.5 text-xs text-text-muted hover:text-text rounded-brand hover:bg-surface-3",title:"folder"===j.type&&G?"Upload a folder from this computer":"Upload files from this computer",children:[(0,n.jsx)(ev.Ay,{name:"Upload",size:13}),"Upload"]}),(0,n.jsx)("div",{className:"flex-1"}),(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),k(null)},className:"px-3 py-1.5 text-sm bg-surface-3 hover:bg-surface text-text rounded-brand",children:"Cancel"}),(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),eT(j.type)},className:"px-3 py-1.5 text-sm bg-brand-500 hover:bg-brand-500/80 text-white rounded-brand",children:"Create"})]})]}),(0,n.jsx)("input",{ref:X,type:"file",multiple:!0,className:"hidden",onChange:eZ}),(0,n.jsx)("input",{ref:V,type:"file",webkitdirectory:"",className:"hidden",onChange:eZ})]}),document.body),F&&(0,n.jsx)("div",{className:"absolute bottom-0 inset-x-0 bg-surface-2 border-t border-border px-3 py-1.5 pb-safe text-[11px] text-text-muted flex items-center gap-2",children:F.failed?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"text-danger",children:x("fileExplorer.uploadFailedCount",{n:F.failed,total:F.total})}),(0,n.jsx)("button",{type:"button",onClick:()=>O(null),className:"ml-auto underline hover:text-text",children:x("common.close")})]}):(0,n.jsx)("span",{children:x("fileExplorer.uploadingCount",{n:Math.min(F.done+1,F.total),total:F.total})})}),_&&(0,n.jsx)(oN,{name:_.name,onResolve:e=>{_.resolve(e),K(null)}}),(0,n.jsx)(ek.A,{isOpen:!!S,onClose:()=>T(null),onConfirm:eK,title:"Delete",message:(S?.files?.length||0)>1?`Are you sure you want to delete these ${S.files.length} items?`:`Are you sure you want to delete "${S?.files?.[0]?.name}"?`,confirmText:"Delete",cancelText:"Cancel"})]})}function o$(e){let{x:t,y:s,items:l,onClose:a}=e,i=(0,r.useRef)(null);return(0,r.useEffect)(()=>{if(!i.current)return;let e=i.current.getBoundingClientRect(),n=Math.min(t,window.innerWidth-e.width-8),r=Math.min(s,window.innerHeight-e.height-8);i.current.style.left=`${Math.max(8,n)}px`,i.current.style.top=`${Math.max(8,r)}px`},[t,s]),(0,r.useEffect)(()=>{let e=e=>{i.current&&!i.current.contains(e.target)&&a()},t=e=>{"Escape"===e.key&&a()},s=setTimeout(()=>{document.addEventListener("mousedown",e),document.addEventListener("contextmenu",e,!0),document.addEventListener("keydown",t)},0);return()=>{clearTimeout(s),document.removeEventListener("mousedown",e),document.removeEventListener("contextmenu",e,!0),document.removeEventListener("keydown",t)}},[a]),(0,n.jsx)("div",{ref:i,className:"fixed z-50 min-w-[180px] py-1 rounded-lg border border-border bg-surface shadow-elev pop-in",style:{left:t,top:s},onContextMenu:e=>e.preventDefault(),children:l.filter(Boolean).map((e,t)=>(0,n.jsxs)("button",{type:"button",disabled:e.disabled,onClick:t=>{t.stopPropagation(),e.onClick?.(),a()},className:`w-full flex items-center gap-2.5 px-3 py-1.5 text-sm text-left transition-colors ${e.disabled?"text-text-subtle cursor-not-allowed":e.danger?"text-danger hover:bg-[rgba(var(--danger-rgb),0.12)]":"text-text hover:bg-surface-2"}`,children:[e.icon&&(0,n.jsx)(e.icon,{size:14,className:"flex-shrink-0"}),(0,n.jsx)("span",{className:"flex-1 truncate",children:e.label})]},e.key+t))})}let oz={Copy:ev.QR,FileText:ev.iU,ExternalLink:ev.Gr,Undo2:ev.bE,X:ev.X,EyeOff:ev.X_},oP=(e,t)=>(e||"").split("\n").map(e=>e.trim()).find(t)||"",oA=(e,t)=>{let s=oP(t,e=>/files? changed/.test(e));return e("git.commitSuccess")+(s?` \xb7 ${s}`:"")},oI=(e,t)=>{if(/up.to.date/i.test(t||""))return e("git.upToDate");let s=oP(t,e=>e.includes("->"));return e("git.pushSuccess")+(s?` \xb7 ${s}`:"")},oD="changes",oL="untracked";function oB(e){if(!e)return"";let t=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return t>=0?e.slice(t+1):e}function oF(e){if(!e)return"";let t=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return t>=0?e.slice(0,t):""}function oO(e,t){if(!e)return t;let s=e.endsWith("/")||e.endsWith("\\")?"":"/";return`${e}${s}${t}`}let o_=(0,r.memo)(function(e){let{file:t,workspace:s,isUntracked:r,t:l,isTouch:a,openDiff:i,onCtxMenu:o,onDiscard:c,onStage:d}=e,u=et.vs[t.status]||"text-text-muted";return oO(s,t.path),(0,n.jsxs)("div",{className:"group relative flex items-center gap-1.5 px-2 py-1 hover:bg-surface-2 cursor-pointer",onContextMenu:e=>o(t,e),onClick:()=>{(0,eN.e)(),i(t)},children:[(0,n.jsx)("span",{className:"flex-shrink-0 flex items-center",children:oo({name:oB(t.path),path:t.path,type:"file"},16)}),(0,n.jsx)("span",{className:"truncate text-xs text-text",title:t.path,children:oB(t.path)}),(0,n.jsx)("span",{className:"truncate text-[11px] text-text-muted flex-1",title:oF(t.path),children:oF(t.path)}),(0,n.jsxs)("div",{className:`absolute right-[22px] top-1/2 -translate-y-1/2 flex items-center gap-0.5 pl-2 pr-1 bg-surface-2 transition-opacity ${a?"opacity-100":"opacity-0 group-hover:opacity-100"}`,children:[(0,n.jsx)("button",{type:"button",title:l(r?"common.delete":"git.discard"),onClick:e=>{e.stopPropagation(),(0,eN.e)(),c(t)},className:"p-0.5 text-text-muted hover:text-text",children:(0,n.jsx)(ev.X,{size:12})}),(0,n.jsx)("button",{type:"button",title:l("git.stage"),onClick:e=>{e.stopPropagation(),(0,eN.e)(),d(t)},className:"p-0.5 text-text-muted hover:text-text",children:(0,n.jsx)(ev.FW,{size:12})})]}),(0,n.jsx)("span",{className:`flex-shrink-0 w-4 h-4 flex items-center justify-center text-[10px] font-mono rounded bg-surface-2 ${u}`,children:t.status})]})},(e,t)=>e.file.path===t.file.path&&e.file.status===t.file.status&&e.workspace===t.workspace&&e.isUntracked===t.isUntracked&&e.isTouch===t.isTouch&&e.t===t.t);function oK(e){let{workspace:t,fileBus:s,onOpenFile:l,tagDiffWithRepo:a=!1}=e,{t:i}=(0,eC.s)(),o=aD(),[c,d]=(0,r.useState)(""),[u,m]=(0,r.useState)(null),[x,p]=(0,r.useState)(null),[h,f]=(0,r.useState)([]),[b,g]=(0,r.useState)(""),[v,y]=(0,r.useState)(!1),[w,j]=(0,r.useState)(null),[k,N]=(0,r.useState)(new Set([oD,oL])),[C,S]=(0,r.useState)({}),[T,E]=(0,r.useState)(!1),[R,M]=(0,r.useState)(!1),[$,z]=(0,r.useState)(null),[P,A]=(0,r.useState)(!1),[I,D]=(0,r.useState)(null),[L,B]=(0,r.useState)(null),F=(0,r.useCallback)(async()=>{if(!t||!s)return;y(!0);let[e,n]=await Promise.all([s.gitStatus?.(t),s.gitBranch?.(t)]);y(!1),e?.success&&f(e.files||[]),n?.success&&(d(n.branch||""),m(n.ahead??null),p(n.behind??null))},[t,s]);(0,r.useEffect)(()=>{F()},[F]),(0,r.useEffect)(()=>{let e=null,t=()=>{clearTimeout(e),e=setTimeout(F,et.HF)};return et.vb.forEach(e=>window.addEventListener(e,t)),()=>{clearTimeout(e),et.vb.forEach(e=>window.removeEventListener(e,t))}},[F]);let{changes:O,untracked:_}=(0,r.useMemo)(()=>{let e=[],t=[];for(let s of h)"?"===s.status?t.push(s):e.push(s);return{changes:e,untracked:t}},[h]),K=(0,r.useCallback)(e=>{N(t=>{let s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s})},[]),W=(0,r.useCallback)(async e=>{t&&(await s.gitAdd?.(t,[e.path]),F())},[t,s,F]),H=(0,r.useCallback)(async()=>{t&&(await s.gitAdd?.(t,["."]),F())},[t,s,F]),q=(0,r.useCallback)(async e=>{t&&(await s.gitDiscard?.(t,e.path,e.status),F())},[t,s,F]),U=(0,r.useCallback)(e=>{z(e),M(!0)},[]),X=(0,r.useCallback)(e=>{l?.(a?(0,et.n2)(e.status,t,e.path):(0,et.Dk)(e.status,e.path))},[l,a,t]),V=(0,r.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];!b.trim()||h.length&&(A(e),E(!0))},[b,h]),G=(0,r.useCallback)(async()=>{if(!t)return;j(null);let e=await s.gitAdd?.(t,["."]);if(e&&!e.success)return void j({ok:!1,text:e.error||i("git.stageFailed")});let n=await s.gitCommit?.(t,b.trim());if(!n?.success){j({ok:!1,text:n?.output||n?.error||i("git.commitFailed")}),F();return}if(g(""),!P){j({ok:!0,text:oA(i,n.output)}),F();return}let r=await s.gitPush?.(t);j(r?.success?{ok:!0,text:`${oA(i,n.output)} \xb7 ${oI(i,r.output)}`}:{ok:!1,text:r?.output||r?.error||i("git.pushFailed")}),F()},[t,s,b,P,F,i]),J=(0,r.useCallback)(async()=>{if(!t)return;y(!0),j(null);let e=await s.gitPush?.(t);y(!1),j(e?.success?{ok:!0,text:oI(i,e.output)}:{ok:!1,text:e?.output||e?.error||i("git.pushFailed")}),F()},[t,s,F,i]),Y=(0,r.useCallback)(async()=>{if(!t)return;y(!0),j(null);let e=await s.gitPull?.(t);y(!1),j(e?.success?{ok:!0,text:((e,t)=>{if(/already up to date|up.to.date/i.test(t||""))return e("git.upToDate");let s=oP(t,e=>/files? changed|fast-forward/i.test(e));return e("git.pullSuccess")+(s?` \xb7 ${s}`:"")})(i,e.output)}:{ok:!1,text:e?.output||e?.error||i("git.pullFailed")}),F()},[t,s,F,i]),Z=(0,r.useCallback)((e,t)=>{e.stopPropagation(),(0,eN.e)();let s=e.currentTarget.getBoundingClientRect();t({x:s.right,y:s.bottom+4})},[]),[Q,ee]=(0,r.useState)(null),es=(0,r.useCallback)(async e=>{try{await navigator.clipboard.writeText(e)}catch{}},[]),en=(0,r.useCallback)((e,t)=>{t.preventDefault(),t.stopPropagation(),(0,eN.e)(),ee({file:e,x:t.clientX,y:t.clientY})},[]),er=(0,r.useCallback)(async e=>{if(!t||!s||!e?.path)return;let n=await oC(s,t,e.path);n?.success&&(window.dispatchEvent(new CustomEvent(et.GW)),F())},[t,s,F]),el=(0,r.useCallback)(e=>{let s=oO(t,e.path);return[{key:"open",label:i("git.openFile"),icon:ev.Gr,disabled:"D"===e.status,onClick:()=>l?.(s)},{key:"copyPath",label:i("files.copyPath",{defaultValue:"Copy Path"}),icon:ev.Gr,onClick:()=>es(s)},{key:"copyRel",label:i("files.copyRelPath",{defaultValue:"Copy Relative Path"}),icon:ev.Gr,onClick:()=>es(e.path)},{key:"copyName",label:i("files.copyName",{defaultValue:"Copy Filename"}),icon:ev.Gr,onClick:()=>es(oB(e.path))},{key:"addToGitignore",label:i("git.addToGitignore",{defaultValue:"Add to .gitignore"}),icon:ev.X_,onClick:()=>er(e)}]},[t,l,es,er,i]),ea=(0,r.useCallback)(e=>{S(t=>({...t,[e]:(t[e]??et.Tf)+et.aB}))},[]),ei=(e,s,r,l)=>{let a=k.has(e),c=r.slice(0,C[e]??et.Tf),d=r.length-c.length;return(0,n.jsxs)("div",{className:"border-t border-border",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),K(e)},className:"w-full flex items-center gap-1 px-2 py-1 hover:bg-surface-2 text-left",children:[a?(0,n.jsx)(ev.yQ,{size:12,className:"text-text-subtle"}):(0,n.jsx)(ev.c_,{size:12,className:"text-text-subtle"}),(0,n.jsx)("span",{className:"text-[11px] uppercase tracking-wider text-text-muted",children:s}),(0,n.jsx)("span",{className:"text-[10px] px-1.5 ml-auto rounded-brand bg-surface-3 text-text-muted",children:r.length})]}),a&&(0,n.jsxs)(n.Fragment,{children:[c.map(e=>(0,n.jsx)(o_,{file:e,workspace:t,isUntracked:l,t:i,isTouch:o,openDiff:X,onCtxMenu:en,onDiscard:U,onStage:W},`${e.status}-${e.path}`)),d>0&&(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),ea(e)},className:"w-full px-2 py-1 text-[11px] text-brand-500 hover:bg-surface-2 text-left",children:i("git.showMore",{count:d})})]})]})};return(0,n.jsxs)("div",{className:"flex flex-col h-full text-sm text-text",children:[(0,n.jsxs)("div",{className:"px-3 pt-3 pb-2 space-y-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(ev.Zr,{size:14,className:"text-text-muted"}),(0,n.jsx)("span",{className:"text-xs text-text truncate flex-1",children:c||"—"}),u>0&&(0,n.jsxs)("span",{className:"text-[10px] font-medium px-1.5 rounded-brand bg-brand-500/15 text-brand-500",children:["↑",u]}),x>0&&(0,n.jsxs)("span",{className:"text-[10px] font-medium px-1.5 rounded-brand bg-surface-3 text-text-muted",children:["↓",x]}),(0,n.jsx)("button",{type:"button",title:i("common.refresh"),onClick:()=>{(0,eN.e)(),window.dispatchEvent(new Event(et.GW))},className:"p-1 text-text-muted hover:text-text",children:(0,n.jsx)(ev.e9,{size:12,className:v?"animate-spin":""})}),(0,n.jsx)("button",{type:"button",title:i("git.gitActions"),onClick:e=>Z(e,B),className:"p-1 text-text-muted hover:text-text",children:(0,n.jsx)(ev.a4,{size:12})})]}),(0,n.jsx)("textarea",{value:b,onChange:e=>g(e.target.value),rows:2,placeholder:i("git.commitPlaceholder"),className:"w-full bg-surface-2 border border-border rounded-brand px-2 py-1 text-xs text-text placeholder-text-subtle focus:outline-none focus:border-brand-500 resize-none"}),(0,n.jsxs)("div",{className:`flex items-stretch h-7 rounded-brand overflow-hidden bg-brand-500 text-white transition-opacity ${!b.trim()||!h.length?"opacity-40":""}`,children:[(0,n.jsx)("button",{type:"button",disabled:!b.trim()||!h.length,onClick:()=>{(0,eN.e)(),V(!1)},className:"flex-1 text-xs hover:bg-black/10 disabled:cursor-not-allowed transition-colors",children:i("git.commit")}),(0,n.jsx)("span",{className:"w-px my-1.5 bg-white/25"}),(0,n.jsx)("button",{type:"button",title:i("git.gitActions"),disabled:!b.trim()||!h.length,onClick:e=>Z(e,D),className:"px-1.5 flex items-center hover:bg-black/10 disabled:cursor-not-allowed transition-colors",children:(0,n.jsx)(ev.yQ,{size:12})})]}),w&&(0,n.jsx)("div",{className:`text-[11px] leading-snug break-words rounded-brand px-2 py-1 ${w.ok?"text-[var(--success)] bg-[rgba(var(--success-rgb),0.1)]":"text-[var(--danger)] bg-[rgba(var(--danger-rgb),0.1)]"}`,children:w.text})]}),(0,n.jsxs)("div",{className:"flex-1 overflow-auto",children:[ei(oD,i("git.changes"),O,!1),ei(oL,i("git.untracked"),_,!0)]}),(0,n.jsx)(ek.A,{isOpen:T,onClose:()=>E(!1),onConfirm:G,title:i("git.stageAllConfirmTitle"),message:i("git.stageAllConfirmMessage"),confirmText:i("git.stageAndCommit"),cancelText:i("common.cancel")}),(0,n.jsx)(ek.A,{isOpen:R,onClose:()=>{M(!1),z(null)},onConfirm:()=>{$&&q($),z(null)},title:i("git.discardConfirmTitle"),message:$?"?"===$.status?i("git.discardConfirmDelete",{name:oB($.path)}):i("git.discardConfirmDiscard",{name:oB($.path)}):"",confirmText:i("git.discard"),cancelText:i("common.cancel")}),Q&&(0,n.jsx)(o$,{x:Q.x,y:Q.y,items:el(Q.file),onClose:()=>ee(null)}),I&&(0,n.jsx)(o$,{x:I.x,y:I.y,items:[{key:"commitPush",label:i("git.commitAndPush"),icon:ev.Do,disabled:!b.trim()||!h.length,onClick:()=>V(!0)}],onClose:()=>D(null)}),L&&(0,n.jsx)(o$,{x:L.x,y:L.y,items:[{key:"push",label:i("git.push"),icon:ev.Do,onClick:J},{key:"pull",label:i("git.pull"),icon:ev.yd,onClick:Y},{key:"stageAll",label:i("git.stageAll"),icon:ev.FW,disabled:!h.length,onClick:H}],onClose:()=>B(null)})]})}let oW=[{key:"files",icon:ev.sv,labelKey:"workspaces.tabFiles"},{key:"git",icon:ev.Zr,labelKey:"workspaces.tabGit"},{key:"trees",icon:ev.dx,labelKey:"workspaces.tabTrees"}].filter(e=>"trees"!==e.key);function oH(e){let{results:t,loading:s,query:l,searchDir:a,workspace:i,onOpen:o}=e,{t:c}=(0,eC.s)(),[d,u]=(0,r.useState)(()=>new Set);if(!l||l.length<2){let e=a?a.split("/").pop():"";return(0,n.jsxs)("div",{className:"p-6 text-xs text-text-subtle text-center flex flex-col items-center gap-2",children:[(0,n.jsx)(ev.vj,{size:20,className:"opacity-40"}),(0,n.jsx)("span",{children:e?`Type at least 2 characters to search in ${e}`:c("files.searchPlaceholder")})]})}if(s)return(0,n.jsx)("p",{className:"p-4 text-xs text-text-subtle text-center",children:c("files.searching")});if(!t.length)return(0,n.jsx)("p",{className:"p-4 text-xs text-text-subtle text-center",children:c("files.noFilesFound")});let m=t.reduce((e,t)=>e+t.matches.length,0);return(0,n.jsxs)("div",{className:"flex-1 min-h-0 overflow-y-auto modal-scrollable",children:[(0,n.jsxs)("p",{className:"px-2 py-1 text-[10px] text-text-muted sticky top-0 bg-surface/80 backdrop-blur-md z-[1]",children:[m," results in ",t.length," files"]}),t.map(e=>{let t=e.path.split("/").pop(),s=e.path.slice(0,e.path.length-t.length).replace(i,"").replace(/^\//,""),r=!d.has(e.path);return(0,n.jsxs)("div",{className:"border-b border-border-subtle",children:[(0,n.jsxs)("button",{onClick:()=>{let t;(0,eN.e)(),t=e.path,u(e=>{let s=new Set(e);return s.has(t)?s.delete(t):s.add(t),s})},className:"w-full px-2 py-1 flex items-center gap-1.5 hover:bg-surface-2 transition-colors text-left",title:e.path,children:[(0,n.jsx)(ev.c_,{size:11,className:`flex-shrink-0 text-text-subtle transition-transform duration-150 ${r?"rotate-90":""}`}),(0,n.jsx)(ev.ZH,{size:12,className:"text-text-subtle flex-shrink-0"}),(0,n.jsx)("span",{className:"truncate text-xs text-text",children:t}),(0,n.jsx)("span",{className:"truncate text-[10px] text-text-subtle flex-1",children:s}),(0,n.jsx)("span",{className:"text-[9px] px-1 rounded-brand bg-surface-3 text-text-muted flex-shrink-0",children:e.matches.length})]}),r&&e.matches.map((t,s)=>{let r=Math.max(0,Math.min(t.column-1-(t.contextStart||0),t.lineText.length)),l=Math.min(t.lineText.length,r+(t.matchLength||0));return(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),o(e.path,t)},className:"w-full px-2 pl-6 pr-2 py-0.5 flex items-baseline gap-2 hover:bg-surface-2 transition-colors text-left",title:t.lineText,children:[(0,n.jsx)("span",{className:"text-[10px] text-text-subtle font-mono flex-shrink-0",children:t.line}),(0,n.jsxs)("span",{className:"text-[11px] font-mono text-text-muted truncate",children:[t.lineText.slice(0,r),(0,n.jsx)("span",{className:"bg-brand-500/30 text-text rounded-sm",children:t.lineText.slice(r,l)}),t.lineText.slice(l)]})]},`${e.path}-${s}`)})]},e.path)})]})}function oq(e){let{root:t,multiple:s,isOpen:r,onToggle:l,onRemove:a=null,removeLabel:i="",children:o}=e;return s?(0,n.jsxs)("div",{className:`flex flex-col min-h-0 ${r?"flex-1":"flex-shrink-0"}`,children:[(0,n.jsxs)("div",{className:"group px-2 py-1 flex items-center gap-1.5 text-[10px] uppercase tracking-wider text-text-muted bg-surface-2/40 hover:bg-surface-2 transition-colors",children:[(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),l()},className:"flex-1 min-w-0 flex items-center gap-1.5 hover:text-text transition-colors",title:t.path,children:[(0,n.jsx)(ev.c_,{size:11,className:`flex-shrink-0 transition-transform duration-150 ${r?"rotate-90":""}`}),(0,n.jsx)("span",{className:"truncate flex-1 text-left",children:t.branch||t.name||t.path.split("/").pop()}),!t.isMain&&(0,n.jsx)(ev.dx,{size:10,className:"flex-shrink-0 opacity-60"})]}),a&&(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),a()},title:i,className:"p-0.5 shrink-0 hover:text-red-500 transition-colors",children:(0,n.jsx)(ev.TB,{size:11})})]}),r&&(0,n.jsx)("div",{className:"flex-1 min-h-0 flex flex-col",children:o})]}):(0,n.jsx)("div",{className:"flex-1 min-h-0 flex flex-col",children:o})}function oU(e){let{icon:t,label:s,onClick:r,active:l,disabled:a,spinning:i}=e;return(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),r?.()},disabled:a,title:s,className:`p-2 sm:p-1 rounded-[3px] hover:bg-surface-2 transition-colors disabled:opacity-40 ${l?"text-brand-500":"text-text-muted hover:text-text"}`,children:(0,n.jsx)(t,{size:16,className:`sm:w-[13px] sm:h-[13px] ${i?"animate-spin":""}`})})}function oX(e){let{active:t,onClick:s,title:r,children:l}=e;return(0,n.jsx)("button",{type:"button",title:r,onClick:()=>{(0,eN.e)(),s()},className:`px-1 h-5 text-[10px] font-medium rounded-[3px] border transition-colors shrink-0 ${t?"bg-brand-500 text-white border-brand-500":"bg-transparent text-text-muted border-transparent hover:bg-surface-2"}`,children:l})}function oV(e){let{onClick:t,children:s}=e;return(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),t()},className:"w-full px-3 py-1.5 text-[11px] text-text-subtle hover:text-text hover:bg-surface-2 transition-colors text-left",children:s})}function oG(e){let{repo:t,changedCount:s=0,isOpen:r,onToggle:l,onHide:a,children:i}=e,{t:o}=(0,eC.s)();return(0,n.jsxs)("div",{className:"border-b border-border-subtle last:border-0",children:[(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),l()},className:"group/repo w-full sticky top-0 z-10 px-2 py-1 flex items-center gap-1.5 text-[10px] uppercase tracking-wider text-text-muted hover:text-text bg-surface-3/80 backdrop-blur-md transition-colors",children:[(0,n.jsx)(ev.c_,{size:11,className:`flex-shrink-0 transition-transform duration-150 ${r?"rotate-90":""}`}),(0,n.jsx)("span",{className:"truncate flex-1 text-left",title:t.relPath||t.name,children:t.relPath||t.name}),t.branch&&(0,n.jsx)("span",{className:"text-text-subtle normal-case tracking-normal truncate max-w-[45%]",title:t.branch,children:t.branch}),s>0&&(0,n.jsx)("span",{className:"px-1 rounded-[2px] bg-brand-500/15 text-brand-500 normal-case tracking-normal flex-shrink-0",children:s}),a&&(0,n.jsx)("span",{role:"button",tabIndex:-1,onClick:e=>{e.stopPropagation(),(0,eN.e)(),a()},className:"p-0.5 text-text-subtle hover:text-text flex-shrink-0 opacity-100 sm:opacity-0 sm:group-hover/repo:opacity-100 transition-opacity",title:o("workspaces.hideRepo"),children:(0,n.jsx)(ev.X_,{size:11})})]}),r&&i]})}let oJ=(0,r.memo)(function(e){let{workspacePath:t,filesRoot:s=null,cwdHint:l=null,fileBus:a,activeFile:i,tab:o,onTabChange:c,width:d,onResize:u,onClose:m,onOpenFile:x,onNewTerminal:p,onAddWorkspace:h,onOpenFiles:f,homeDir:b,changedPerRepo:g={},hiddenRepos:v=[],onHiddenReposChange:y,isDesktop:w=!0}=e,{t:j}=(0,eC.s)(),k=a||eb.getState(),N="trees"===o?"git":o,{repos:C,refresh:S,scanning:T,deep:E,scanDeeper:R}=function(e,t){let[s,n]=(0,r.useState)([]),[l,a]=(0,r.useState)(!1),i=t||eb.getState(),[o,c]=(0,r.useState)(!1),d=(0,r.useRef)(0),u=(0,r.useCallback)(async(t,s)=>{if(!e||!i?.gitScanRepos)return;let r=++d.current;a(!0),t&&await i.gitRefreshRepos?.(e);let l=s?ez.Tk.deepMaxDepth:ez.Tk.maxDepth,o=await iJ(()=>i.gitScanRepos(e,l,t),()=>d.current===r);d.current===r&&(a(!1),n(o?.success&&o.repos||[]))},[e,i]);return(0,r.useEffect)(()=>{let e=setTimeout(()=>void u(!1,o),0);return()=>{clearTimeout(e),d.current++}},[u,o]),{repos:s,refresh:(0,r.useCallback)(()=>u(!0,o),[u,o]),scanning:l,deep:o,scanDeeper:(0,r.useCallback)(()=>c(!0),[])}}(t,k),M=s||t,{roots:$,refresh:z}=function(e,t){let[s,n]=(0,r.useState)([]),l=t||eb.getState(),a=(0,r.useRef)(0),i=(0,r.useCallback)(async()=>{if(!e||!l?.gitWorktreeList)return n([]);let t=++a.current,s=await iJ(()=>l.gitWorktreeList(e),()=>a.current===t);if(a.current===t){if(!s?.success||!s.worktrees?.length)return n([{path:e,branch:null,name:iY(e)}]);n(s.worktrees.map(e=>({path:e.path,branch:e.branch,name:iY(e.path),isMain:e.isMain})))}},[e,l]);return(0,r.useEffect)(()=>{let e=setTimeout(()=>void i(),0);return()=>{clearTimeout(e),a.current++}},[i]),{roots:s,refresh:i}}(M,k),P=()=>{S(),z()},{branch:A}=lx(t,k),I=(0,r.useRef)({path:null,branch:null});(0,r.useEffect)(()=>{let e=I.current;I.current={path:t,branch:A},e.path===t&&null!==e.branch&&e.branch!==A&&(S(),z(),window.dispatchEvent(new Event(et.GW)))},[A,t]);let[D,L]=(0,r.useState)({forWorkspace:t,showClean:!1,openRepo:null}),B=D.forWorkspace===t?D:{showClean:!1,openRepo:null},F=B.showClean,O=B.openRepo,_=e=>L({...B,forWorkspace:t,openRepo:e}),K=new Set(v),W=e=>g[e.path]??e.changedCount??0,H=e=>!e.relPath||e.path===t,q=C.filter(e=>!K.has(e.path)),U=q.filter(e=>W(e)>0).reduce((e,t)=>e+W(t),0),X=F?q:q.filter(e=>W(e)>0||H(e)),V=X.filter(H),G=X.filter(e=>!H(e)).sort((e,t)=>(W(t)>0)-(W(e)>0)||(e.relPath||e.path).localeCompare(t.relPath||t.path)),J=F?0:q.length-X.length,Y=C.length-q.length,Z=ez.G.map(e=>X.find(t=>t.branch===e)).find(Boolean),Q=(Z||X.find(H)||X[0])?.path||null,ee=(X.some(e=>e.path===O)?O:void 0)??(""===O?null:Q),es=e=>y?.([...v,e]),en=e=>!!y&&!H(e),er=!w||d>=ez.Ds.min,[el,ea]=(0,r.useState)(null),[ei,eo]=(0,r.useState)(null),[ec,ed]=(0,r.useState)(null),[eu,em]=(0,r.useState)(null),ex=$.find(e=>e.isMain)?.path||t,ep=async e=>{ed(null);let t=await k.gitWorktreeRemove(ex,e.path,{probe:!0,deleteBranch:e.branch||void 0});if(!t?.success)return ed(t?.error||"Probe failed");eo({root:e,sessions:t.sessions||[],branchMerged:t.branchMerged})},eh=async function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];ed(null),em(null);let s=await k.gitWorktreeRemove(ex,e.path,{confirmed:!0,force:t,deleteBranch:e.branch||void 0});return!s?.success&&/use --force/i.test(s?.error||"")?eo({root:e,dirty:!0}):(eo(null),s?.success)?void(s.branchKept&&em(e.branch),P()):ed(s?.error||"Remove failed")},ef=l||M,eg=(0,r.useMemo)(()=>{let e=$.filter(e=>ef===e.path||ef?.startsWith(`${e.path}/`));return e.length?e.sort((e,t)=>t.path.length-e.path.length)[0].path:($.find(e=>e.isMain)||$[0])?.path||M},[$,ef,M]),[ey,ew]=(0,r.useState)({forProbe:null,path:null}),ej=ey.forProbe===ef?ey.path:eg,[eS,eT]=(0,r.useState)({forRoot:null,searchDir:null,show:!1,query:"",results:[],loading:!1}),[eE,eR]=(0,r.useState)({caseSensitive:!1,wholeWord:!1,regex:!1}),eM=eS.forRoot===M?eS:{show:!1,searchDir:null,query:"",results:[],loading:!1},e$=(0,r.useRef)(null),eP=(0,r.useCallback)(()=>{eT({forRoot:null,searchDir:null,show:!1,query:"",results:[],loading:!1})},[]),eA=(0,r.useCallback)(e=>{eT({forRoot:M,searchDir:e,show:!0,query:"",results:[],loading:!1})},[M]),eI=(0,r.useCallback)(()=>{eT(e=>{let t={...e,searchDir:null};return e.query&&e.query.length>=2&&(t.loading=!0,k.searchInFiles(M,e.query,eE).then(e=>{eT(t=>t.loading?{...t,results:e.success?e.results:[],loading:!1}:t)})),t})},[k,M,eE]),eD=(0,r.useCallback)(e=>{if(eT(t=>({...t,query:e})),e$.current&&clearTimeout(e$.current),!e||e.length<2)return void eT(e=>({...e,results:[],loading:!1}));eT(e=>({...e,loading:!0}));let t=eM.searchDir||M;e$.current=setTimeout(async()=>{let s=await k.searchInFiles(t,e,eE);eT(t=>t.query===e&&t.loading?{...t,results:s.success?s.results:[],loading:!1}:t)},300)},[k,M,eM.searchDir,eE]),eL=(0,r.useCallback)(e=>{eT(t=>{if(!t.query||t.query.length<2)return t;let s={...t,loading:!0};return k.searchInFiles(t.searchDir||M,t.query,e).then(e=>{eT(t=>t.loading?{...t,results:e.success?e.results:[],loading:!1}:t)}),s})},[k,M]),eB=e=>{let t={...eE,[e]:!eE[e]};eR(t),eL(t)};return(0,r.useEffect)(()=>()=>{e$.current&&clearTimeout(e$.current)},[]),(0,n.jsxs)("div",{className:`h-full flex flex-col terminal-sidebar-bg border-l border-border-subtle relative shrink ${w?"":"pb-safe"}`,style:w?{width:d,flexBasis:d,minWidth:ez.Ds.min}:void 0,children:[(0,n.jsxs)("div",{className:`h-11 ${rt} pl-1 pr-0.5 flex items-stretch gap-0 border-b border-border-subtle flex-shrink-0`,children:[oW.map(e=>{let{key:t,icon:s,labelKey:r}=e;return(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),c(t)},className:`px-3 sm:px-2 flex items-center justify-center gap-1 text-[11px] border-b-2 -mb-px transition-colors ${N===t?"text-text border-brand-500":"text-text-muted border-transparent hover:text-text"}`,title:j(r),children:[(0,n.jsx)(s,{size:18,className:"sm:w-[15px] sm:h-[15px]"}),er&&(0,n.jsx)("span",{children:j(r)}),"git"===t&&U>0&&(0,n.jsx)("span",{className:"min-w-[14px] h-[14px] px-[4px] rounded-full bg-brand-500 text-white text-[9px] font-semibold flex items-center justify-center leading-none",children:U>99?"99+":U})]},t)}),(0,n.jsx)("div",{className:"flex-1"}),(0,n.jsxs)("div",{className:"flex items-center gap-1 sm:gap-0.5",children:[(0,n.jsx)(oU,{icon:ev.e9,label:j("workspaces.refreshRepos"),onClick:()=>{let e;P(),el?.refresh?.(),(e=rA.get(k)?.get(t))&&rL(e,t,!0),window.dispatchEvent(new Event(et.GW))},disabled:T,spinning:T}),m&&(0,n.jsx)(oU,{icon:ev.X,label:j("common.close"),onClick:m})]})]}),"files"===N&&t&&(0,n.jsx)("div",{className:`${eM.show?"py-1":`h-11 ${rt}`} px-2 flex items-center gap-1.5 flex-shrink-0`,children:eM.show?(0,n.jsxs)("div",{className:"flex-1 flex flex-col min-w-0 gap-1 py-1",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,n.jsx)(ev.vj,{size:14,className:"text-text-subtle shrink-0"}),(0,n.jsx)("input",{type:"text",value:eM.query,onChange:e=>eD(e.target.value),onKeyDown:e=>{"Escape"===e.key&&eP()},placeholder:eM.searchDir?`Search in ${eM.searchDir.split("/").pop()}…`:j("files.searchPlaceholder"),className:"flex-1 min-w-0 w-0 bg-transparent text-xs text-text placeholder-text-subtle focus:outline-none",autoFocus:!0}),eM.loading?(0,n.jsx)(ev.kr,{size:13,className:"animate-spin text-brand-500 shrink-0"}):eM.query?(0,n.jsx)("button",{type:"button",onClick:()=>eD(""),className:"p-1 text-text-subtle hover:text-text",children:(0,n.jsx)(ev.X,{size:12})}):null,(0,n.jsx)(oU,{icon:ev.X,label:j("common.close"),onClick:eP})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1 pl-0.5",children:[(0,n.jsx)(oX,{active:eE.caseSensitive,onClick:()=>eB("caseSensitive"),title:"Match Case",children:"Aa"}),(0,n.jsx)(oX,{active:eE.wholeWord,onClick:()=>eB("wholeWord"),title:"Whole Word",children:"ab"}),(0,n.jsx)(oX,{active:eE.regex,onClick:()=>eB("regex"),title:"Regex",children:".*"})]})]}):(0,n.jsxs)(n.Fragment,{children:[el&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(oU,{icon:ev.FW,label:j("files.newFile"),onClick:el.newFile}),(0,n.jsx)(oU,{icon:ev.JU,label:j("files.newFolder"),onClick:el.newFolder})]}),(0,n.jsx)(oU,{icon:ev.vj,label:j("files.searchFiles"),onClick:()=>{if(eM.show)return eP();eT({forRoot:M,searchDir:null,show:!0,query:"",results:[],loading:!1})},active:eM.show}),(0,n.jsx)("div",{className:"flex-1"}),el?.hasExpanded&&(0,n.jsx)(oU,{icon:ev.WE,label:j("fileExplorer.collapseAll"),onClick:el.collapseAll}),el&&(0,n.jsx)(oU,{icon:el.showHidden?ev.kU:ev.X_,label:j("files.toggleHidden"),onClick:el.toggleHidden,active:el.showHidden}),f&&(0,n.jsx)(oU,{icon:ev.Gr,label:j("workspaces.openFullFiles"),onClick:f})]})}),"files"===N&&t&&eM.show&&eM.searchDir&&(0,n.jsxs)("div",{className:"px-3 py-1 bg-surface-3/40 flex items-center justify-between text-[11px] text-text-muted flex-shrink-0",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,n.jsx)(ev.vd,{size:12,className:"text-yellow-500/80 shrink-0"}),(0,n.jsx)("span",{className:"text-text-subtle shrink-0",children:"Folder:"}),(0,n.jsx)("span",{className:"font-medium text-text truncate max-w-[150px]",title:eM.searchDir,children:eM.searchDir.split("/").pop()})]}),(0,n.jsx)("button",{type:"button",onClick:eI,className:"text-brand-500 hover:text-brand-400 hover:underline shrink-0 text-[11px] ml-2",children:"Search all"})]}),(0,n.jsx)("div",{className:"flex-1 min-h-0 flex flex-col overflow-hidden",children:t?"files"===N?eM.show?(0,n.jsx)(oH,{results:eM.results,loading:eM.loading,query:eM.query,searchDir:eM.searchDir,workspace:M,onOpen:(e,t)=>x?.(e,{line:t?.line,column:t?.column})}):(0,n.jsxs)("div",{className:"flex-1 min-h-0 flex flex-col",children:[(ec||eu)&&(0,n.jsxs)("div",{className:"px-3 py-1.5 border-b border-border-subtle text-[11px]",children:[ec&&(0,n.jsx)("p",{className:"text-red-500 break-words whitespace-pre-wrap",children:ec}),eu&&(0,n.jsx)("p",{className:"text-text-muted break-words",children:j("workspaces.worktreeBranchKept",{branch:eu})})]}),$.map(e=>(0,n.jsx)(oq,{root:e,multiple:$.length>1,isOpen:1===$.length||ej===e.path,onToggle:()=>ew({forProbe:ef,path:ej===e.path?null:e.path}),onRemove:e.isMain?null:()=>{(0,eN.e)(),ep(e)},removeLabel:j("workspaces.removeWorktree"),children:(0,n.jsx)(oM,{workspace:e.path,fileBus:k,activeFile:i,onOpenFile:x,onNewTerminal:p,onSearchFolder:eA,compact:!0,onActions:e.path===ej||1===$.length?ea:void 0})},e.path))]}):"git"===N?(0,n.jsxs)("div",{className:"flex-1 min-h-0 flex flex-col",children:[(0,n.jsxs)("div",{className:"flex-1 min-h-0 overflow-y-auto modal-scrollable",children:[V.map(e=>(0,n.jsx)(oG,{repo:e,changedCount:W(e),isOpen:ee===e.path,onToggle:()=>_(ee===e.path?"":e.path),onHide:en(e)?()=>es(e.path):null,children:(0,n.jsx)(oK,{workspace:e.path,fileBus:k,onOpenFile:x,tagDiffWithRepo:!0})},e.path)),!X.length&&!T&&(0,n.jsx)("p",{className:"p-4 text-xs text-text-subtle italic",children:F?j("workspaces.emptyWorkspace"):j("git.noChanges")})]}),(G.length>0||J>0||Y>0||!E)&&(0,n.jsxs)("div",{className:"flex-shrink-0 max-h-[45%] overflow-y-auto modal-scrollable border-t border-border-subtle bg-surface/40",children:[G.length>0&&(0,n.jsx)("p",{className:"px-3 py-1 text-[10px] uppercase tracking-wider text-text-subtle",children:j("workspaces.nestedRepos",{count:G.length})}),G.map(e=>(0,n.jsx)(oG,{repo:e,changedCount:W(e),isOpen:ee===e.path,onToggle:()=>_(ee===e.path?"":e.path),onHide:en(e)?()=>es(e.path):null,children:(0,n.jsx)(oK,{workspace:e.path,fileBus:k,onOpenFile:x,tagDiffWithRepo:!0})},e.path)),(J>0||Y>0||!E)&&(0,n.jsxs)("div",{className:G.length>0?"border-t border-border-subtle":"",children:[J>0&&(0,n.jsx)(oV,{onClick:()=>L({...B,forWorkspace:t,showClean:!0}),children:j("workspaces.showCleanRepos",{count:J})}),Y>0&&(0,n.jsx)(oV,{onClick:()=>y?.([]),children:j("workspaces.showHiddenRepos",{count:Y})}),!E&&(0,n.jsx)(oV,{onClick:R,children:j("workspaces.scanDeeper")})]})]})]}):null:(0,n.jsxs)("div",{className:"p-4 flex flex-col items-center gap-2 text-center",children:[(0,n.jsx)(ev.vd,{size:22,className:"text-text-subtle"}),(0,n.jsx)("p",{className:"text-xs text-text-subtle",children:j("workspaces.emptyWorkspace")}),h&&(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),h()},className:"mt-1 px-2 py-1 text-[11px] text-brand-500 bg-brand-500/10 hover:bg-brand-500/20 rounded-[3px] transition-colors",children:j("workspaces.selectFolder")})]})}),(0,n.jsx)(ek.A,{isOpen:!!ei,onClose:()=>eo(null),onConfirm:()=>{(0,eN.e)(),eh(ei.root,!!ei.dirty)},title:j("workspaces.removeWorktree"),message:ei?ei.dirty?j("workspaces.worktreeDirty"):[j("workspaces.removeWorktreeFolder",{path:ei.root.path}),ei.root.branch&&j(!0===ei.branchMerged?"workspaces.removeWorktreeBranchDelete":!1===ei.branchMerged?"workspaces.removeWorktreeBranchKeep":"workspaces.removeWorktreeBranch",{branch:ei.root.branch}),ei.sessions?.length?j("workspaces.removeWorktreeSessions",{count:ei.sessions.length,names:ei.sessions.map(e=>e.name).join(", ")}):null].filter(Boolean).join("\n"):""}),w&&(0,n.jsx)("div",{onPointerDown:e=>ts(e,{startWidth:d,axis:-1,onWidth:e=>u?.(e)}),className:"absolute top-0 left-0 bottom-0 w-1 cursor-col-resize hover:bg-brand-500/40 transition-colors z-20"})]})});function oY(e){return e?e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`:""}function oZ(e){let{filePath:t,fileBus:s}=e,[l,a]=(0,r.useState)(""),[i,o]=(0,r.useState)(null),[c,d]=(0,r.useState)(""),[u,m]=(0,r.useState)(!0),[x,p]=(0,r.useState)(1),[h,f]=(0,r.useState)({x:0,y:0}),[b,g]=(0,r.useState)(0),v=(0,r.useRef)(null),y=(0,r.useRef)(null),w=(0,r.useRef)(null),j=(0,r.useRef)(null),k=(0,r.useRef)(null),N=(0,r.useRef)(null),C=(0,r.useRef)(null),S=(0,r.useRef)(0);(0,r.useEffect)(()=>{let e=!1,n=[],r="";m(!0),d(""),a(""),o(null),p(1),f({x:0,y:0}),g(0),w.current=null,j.current&&(URL.revokeObjectURL(j.current),j.current=null);let l=t.toLowerCase();if(l.endsWith(".tif")||l.endsWith(".tiff"))return s.readMedia(t).then(t=>{e||(t.success?(a(t.dataUrl),o({size:t.originalSize||t.size,width:t.width,height:t.height,scaled:t.scaled,originalWidth:t.originalWidth,originalHeight:t.originalHeight})):d(t.error||"Failed to load image"),m(!1))}),()=>{e=!0};let i=s.streamMedia(t,{onMeta:t=>{e||(r=t.mime||"image/*",o({size:t.size,width:t.width,height:t.height,scaled:t.scaled,originalWidth:t.originalWidth,originalHeight:t.originalHeight}))},onChunk:t=>{e||n.push(t)},onDone:()=>{if(e)return;let t=new Blob(n,{type:r});if(t.size>et.W5){w.current=t,g(t.size),m(!1);return}j.current=URL.createObjectURL(t),a(j.current),m(!1)},onError:t=>{e||(d(t.message||"Failed to load image"),m(!1))}});return()=>{e=!0,i?.()}},[t,s]),(0,r.useEffect)(()=>()=>{j.current&&URL.revokeObjectURL(j.current)},[]);let T=(0,r.useCallback)((e,t,s)=>{let n=y.current,r=v.current;if(!n||!r)return{x:e,y:t};let l=r.clientWidth,a=r.clientHeight,i=n.clientWidth*s,o=n.clientHeight*s,c=Math.max(0,(i-l)/2),d=Math.max(0,(o-a)/2);return{x:Math.max(-c,Math.min(c,e)),y:Math.max(-d,Math.min(d,t))}},[]),E=(0,r.useCallback)(()=>{p(1),f({x:0,y:0})},[]),R=(0,r.useCallback)((e,t,s)=>{p(n=>{let r=Math.max(.2,Math.min(8,n*e));if(r===n)return n;if(null!=t&&null!=s){let e=v.current;if(e){let l=e.clientWidth/2,a=e.clientHeight/2,i=t-l,o=s-a;f(e=>T((e.x-i)*(r/n)+i,(e.y-o)*(r/n)+o,r))}}else f(e=>T(e.x,e.y,r));return r})},[T]),M=(e,t)=>Math.hypot(e.clientX-t.clientX,e.clientY-t.clientY),$=(0,r.useCallback)(e=>{if(2===e.touches.length)N.current=null,k.current={dist:M(e.touches[0],e.touches[1]),scale:x,pos:h};else if(1===e.touches.length){let t=Date.now();if(t-S.current<300){x>1.01?E():(p(2),f({x:0,y:0})),S.current=0,N.current=null;return}S.current=t,x>1.01&&(N.current={x:e.touches[0].clientX,y:e.touches[0].clientY,pos:h})}},[x,h,E]),z=(0,r.useCallback)(e=>{if(2===e.touches.length&&k.current){e.preventDefault();let t=M(e.touches[0],e.touches[1]),s=Math.max(.2,Math.min(8,k.current.scale*(t/k.current.dist)));p(s),f(e=>T(e.x,e.y,s))}else if(1===e.touches.length&&N.current){e.preventDefault();let t=e.touches[0],s=t.clientX-N.current.x,n=t.clientY-N.current.y;f(T(N.current.pos.x+s,N.current.pos.y+n,x))}},[x,T]),P=(0,r.useCallback)(e=>{e.touches.length<2&&(k.current=null),0===e.touches.length&&(N.current=null)},[]),A=(0,r.useCallback)(e=>{"mouse"!==e.pointerType||0!==e.button||x<=1.01||(C.current={x:e.clientX,y:e.clientY,pos:h})},[x,h]),I=(0,r.useCallback)(e=>{let t=C.current;if(t){if(!(1&e.buttons)){C.current=null;return}f(T(t.pos.x+(e.clientX-t.x),t.pos.y+(e.clientY-t.y),x))}},[x,T]),D=(0,r.useCallback)(()=>{C.current=null},[]),L=(0,r.useCallback)(e=>{e.preventDefault();let t=e.deltaY<0?1.1:1/1.1,s=v.current?.getBoundingClientRect();R(t,s?e.clientX-s.left:null,s?e.clientY-s.top:null)},[R]);if(u)return(0,n.jsxs)("div",{className:"h-full flex items-center justify-center text-text-muted gap-2",children:[(0,n.jsx)(ev.kr,{className:"animate-spin",size:20}),(0,n.jsx)("span",{children:"Loading image..."})]});if(c)return(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-red-400 text-sm",children:c});if(b)return(0,n.jsxs)("div",{className:"h-full flex flex-col items-center justify-center gap-3 text-text-muted px-6 text-center",children:[(0,n.jsx)("span",{className:"text-sm font-medium text-text truncate max-w-full",title:t,children:t.split("/").pop()}),(0,n.jsxs)("span",{className:"text-xs",children:[oY(b)," — decoding an image this large can crash mobile Safari."]}),(0,n.jsx)("button",{onClick:()=>{let e=w.current;e&&(j.current=URL.createObjectURL(e),a(j.current),g(0))},className:"px-3 py-1.5 rounded bg-surface-2 hover:bg-surface-3 text-text text-sm",children:"Open anyway"})]});let B=i?.width&&i?.height?`${i.width}\xd7${i.height}`:"",F=i?.scaled&&i?.originalWidth&&i?.originalWidth!==i?.width;return(0,n.jsxs)("div",{className:"h-full flex flex-col bg-bg",children:[(0,n.jsxs)("div",{className:"bg-surface border-b border-border px-3 py-1.5 flex items-center gap-2 text-xs text-text-muted",children:[(0,n.jsx)("span",{className:"truncate flex-1",title:t,children:t.split("/").pop()}),i?.size?(0,n.jsx)("span",{className:"text-text-subtle",children:oY(i.size)}):null,B?(0,n.jsxs)("span",{className:"text-text-subtle",children:[B,F?" ↓":""]}):null,(0,n.jsx)("button",{onClick:()=>R(1/1.2),className:"px-2 hover:bg-surface-2 rounded",children:"−"}),(0,n.jsxs)("span",{className:"w-12 text-center",children:[Math.round(100*x),"%"]}),(0,n.jsx)("button",{onClick:()=>R(1.2),className:"px-2 hover:bg-surface-2 rounded",children:"+"}),(0,n.jsx)("button",{onClick:E,className:"px-2 hover:bg-surface-2 rounded",children:"Reset"})]}),(0,n.jsx)("div",{ref:v,className:`flex-1 min-h-0 overflow-hidden flex items-center justify-center bg-[repeating-conic-gradient(#0001_0%_25%,transparent_0%_50%)] bg-[length:20px_20px] touch-none ${x>1.01?"cursor-grab active:cursor-grabbing":""}`,onTouchStart:$,onTouchMove:z,onTouchEnd:P,onPointerDown:A,onPointerMove:I,onPointerUp:D,onPointerCancel:D,onWheel:L,children:(0,n.jsx)("img",{ref:y,src:l,alt:t,draggable:!1,onLoad:e=>o(t=>({...t,width:e.target.naturalWidth,height:e.target.naturalHeight})),style:{transform:`translate(${h.x}px, ${h.y}px) scale(${x})`,transformOrigin:"center",willChange:"transform"},className:"max-w-full max-h-full object-contain select-none"})})]})}function oQ(e){let{filePath:t,fileBus:s}=e,[l,a]=(0,r.useState)(""),[i,o]=(0,r.useState)(""),[c,d]=(0,r.useState)(0),[u,m]=(0,r.useState)(""),[x,p]=(0,r.useState)(!0);if((0,r.useEffect)(()=>{let e=!1,n=null,r=null,l=null,i=null,c=[],u=!1;p(!0),m(""),a(""),o(""),d(0);let x=!1,h="",f=()=>{if(!e&&!x&&i&&!i.updating){if(c.length)return void i.appendBuffer(c.shift());if(u&&r&&"open"===r.readyState)try{r.endOfStream()}catch{}}};return n=s.streamMedia(t,{onMeta:t=>{let{mime:s,size:n}=t;if(!e){if(o(s),d(n),!("u">typeof MediaSource&&MediaSource.isTypeSupported(s))){x=!0,h=s;return}r=new MediaSource,a(l=URL.createObjectURL(r)),p(!1),r.addEventListener("sourceopen",()=>{e||((i=r.addSourceBuffer(s)).addEventListener("updateend",f),f())})}},onChunk:t=>{!e&&(c.push(t),x||f())},onDone:()=>{if(!e)if(x){let e=new Blob(c,{type:h||"application/octet-stream"});a(l=URL.createObjectURL(e)),p(!1)}else u=!0,f()},onError:t=>{e||(m(t.message||"Stream error"),p(!1))}}),()=>{e=!0,n?.(),l&&URL.revokeObjectURL(l);try{r&&"open"===r.readyState&&r.endOfStream()}catch{}}},[t,s]),x)return(0,n.jsxs)("div",{className:"h-full flex items-center justify-center text-text-muted gap-2",children:[(0,n.jsx)(ev.kr,{className:"animate-spin",size:20}),(0,n.jsx)("span",{children:"Loading media..."})]});if(u)return(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-red-400 text-sm",children:u});let h=i.startsWith("video/"),f=t.split("/").pop();return(0,n.jsxs)("div",{className:"h-full flex flex-col bg-bg",children:[(0,n.jsxs)("div",{className:"bg-surface border-b border-border px-3 py-1.5 flex items-center gap-2 text-xs text-text-muted",children:[(0,n.jsx)("span",{className:"truncate flex-1",title:t,children:f}),c?(0,n.jsx)("span",{className:"text-text-subtle",children:c?c<1024?`${c}B`:c<1048576?`${(c/1024).toFixed(1)}KB`:`${(c/1048576).toFixed(1)}MB`:""}):null]}),(0,n.jsx)("div",{className:"flex-1 min-h-0 overflow-auto flex items-center justify-center bg-black/30",children:h?(0,n.jsx)("video",{src:l,controls:!0,className:"max-h-full max-w-full"}):(0,n.jsx)("audio",{src:l,controls:!0,className:"w-full max-w-md"})})]})}function o0(e){let{filePath:t,fileBus:l}=e,[a,i]=(0,r.useState)(!0),[o,c]=(0,r.useState)(""),[d,u]=(0,r.useState)([]),[m,x]=(0,r.useState)(0),[p,h]=(0,r.useState)([]),f=(0,r.useRef)(null),b=(0,r.useRef)(null),g=(0,r.useRef)(null);if((0,r.useEffect)(()=>{let e=!1,n=null,r=[],a=(0,et.$b)(t);i(!0),c(""),u([]),x(0),h([]),b.current=null,f.current&&(f.current.innerHTML="");let o=async t=>{try{if(a){let{renderAsync:n}=await s.e(5421).then(s.bind(s,25421));if(e||!f.current){e||i(!1);return}for(let e of(await n(new Blob([t]),f.current,void 0,{inWrapper:!0,renderAltChunks:!1}),f.current.querySelectorAll("a[href]"))){let t=e.getAttribute("href")||"";/^(https?:|mailto:|#)/i.test(t.trim())||e.removeAttribute("href")}e||i(!1)}else{let n=await Promise.all([s.e(2571),s.e(5198)]).then(s.bind(s,83390));if(e)return;g.current=n,b.current=n.read(t,{type:"array"}),u(b.current.SheetNames),x(0),(e=>{let t=b.current,s=g.current;if(!t||!s)return;let n=t.SheetNames[e];n&&(h(s.utils.sheet_to_json(t.Sheets[n],{header:1,defval:"",raw:!1})),i(!1))})(0)}}catch(t){e||(c(t.message||"Failed to render"),i(!1))}};return n=l.streamMedia(t,{onChunk:t=>{e||r.push(t)},onDone:()=>{if(e)return;let t=new Uint8Array(r.reduce((e,t)=>e+t.byteLength,0)),s=0;for(let e of r)t.set(e,s),s+=e.byteLength;o(t)},onError:t=>{e||(c(t.message||"Failed to load"),i(!1))}}),()=>{e=!0,n?.()}},[t,l]),(0,r.useEffect)(()=>{let e=b.current,t=g.current;if(!e||!t)return;let s=e.SheetNames[m];s&&h(t.utils.sheet_to_json(e.Sheets[s],{header:1,defval:"",raw:!1}))},[m]),o)return(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-red-400 text-sm",children:o});let v=(0,et.$b)(t);return(0,n.jsxs)("div",{className:"h-full flex flex-col relative",children:[a&&(0,n.jsxs)("div",{className:"absolute inset-0 z-10 flex items-center justify-center gap-2 bg-surface text-text-muted",children:[(0,n.jsx)(ev.kr,{className:"animate-spin",size:20}),(0,n.jsx)("span",{children:"Loading document..."})]}),!v&&d.length>1&&(0,n.jsx)("div",{className:"flex gap-1 overflow-x-auto bg-surface border-b border-border px-2 py-1 flex-shrink-0",children:d.map((e,t)=>(0,n.jsx)("button",{onClick:()=>x(t),className:`px-2 py-1 text-xs rounded whitespace-nowrap transition-colors ${t===m?"bg-brand-500 text-white":"bg-surface-2 text-text-muted hover:text-text"}`,children:e},t))}),(0,n.jsx)("div",{className:"flex-1 min-h-0 overflow-auto bg-white text-black",children:v?(0,n.jsx)("div",{ref:f,className:"p-4"}):(0,n.jsx)("div",{className:"p-2",children:(0,n.jsx)("table",{className:"border-collapse",children:(0,n.jsx)("tbody",{children:p.map((e,t)=>(0,n.jsx)("tr",{children:e.map((e,t)=>(0,n.jsx)("td",{className:"border border-gray-300 px-2 py-1 whitespace-pre-wrap align-top",children:e},t))},t))})})})})]})}function o1(e){let{filePath:t,fileBus:s}=e,[l,a]=(0,r.useState)(""),[i,o]=(0,r.useState)(""),[c,d]=(0,r.useState)(!0);return((0,r.useEffect)(()=>{let e=!1,n=null,r=[],l="application/pdf";d(!0),o(""),a("");let i=s.streamMedia(t,{onMeta:t=>{let{mime:s}=t;!e&&s&&(l=s)},onChunk:t=>{e||r.push(t)},onDone:()=>{if(e)return;let t=new Blob(r,{type:l}),s=URL.createObjectURL(t);n=s,a(s),d(!1)},onError:t=>{e||(o(t.message||"Failed to load PDF"),d(!1))}});return()=>{e=!0,i(),n&&URL.revokeObjectURL(n)}},[t,s]),c)?(0,n.jsxs)("div",{className:"h-full flex items-center justify-center text-text-muted gap-2",children:[(0,n.jsx)(ev.kr,{className:"animate-spin",size:20}),(0,n.jsx)("span",{children:"Loading PDF..."})]}):i?(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-red-400 text-sm",children:i}):(0,n.jsx)("iframe",{src:l,title:"PDF preview",className:"h-full w-full bg-bg"})}let o2=e=>(0,et.u)(e)||(0,et.AE)(e)||(0,et.L8)(e)||(0,et.ZH)(e)||(0,et.$b)(e)||(0,et.iB)(e);function o5(e){let{filePath:t,fileBus:s}=e;return(0,et.ZH)(t)?(0,n.jsx)(o1,{filePath:t,fileBus:s},t):(0,et.$b)(t)||(0,et.iB)(t)?(0,n.jsx)(o0,{filePath:t,fileBus:s},t):(0,et.AE)(t)||(0,et.L8)(t)?(0,n.jsx)(oQ,{filePath:t,fileBus:s},t):(0,n.jsx)(oZ,{filePath:t,fileBus:s},t)}function o3(e){let{filePath:t,fileBus:s}=e,[n,l]=(0,r.useState)(!0),[a,i]=(0,r.useState)(null),[o,c]=(0,r.useState)(""),[d,u]=(0,r.useState)(!1),[m,x]=(0,r.useState)(!1),[p,h]=(0,r.useState)(!1),f=(0,r.useRef)(""),b=(0,r.useRef)(null),g=(0,r.useRef)(null),[v,y]=(0,r.useState)(!1),w=(0,r.useCallback)(e=>{b.current=e},[]),j=(0,r.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!1,n=await s.readFile(t);if(e())return{cancelled:!0};if(!n?.success)return{error:n?.error||""};let r=n.content;if(n.streamInstead)try{let n=[];if(await new Promise((e,r)=>{s.streamMedia(t,{onMeta:()=>{},onChunk:e=>n.push(e),onDone:e,onError:r})}),e())return{cancelled:!0};r=await new Blob(n).text()}catch(t){if(e())return{cancelled:!0};return{error:t?.message||""}}return{text:r}},[t,s]),k=(0,r.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!1;l(!0),c(""),u(!1),y(!1);let{text:t,error:s}=await j(e);if(void 0===t){void 0!==s&&(c(s),l(!1));return}f.current=t,i(t),l(!1)},[j]);(0,r.useEffect)(()=>{let e=!1;if(!t){l(!1),i(null),u(!1),c(""),y(!1);return}return k(()=>e),()=>{e=!0}},[t,k]);let N=(0,r.useCallback)(async()=>{let{text:e}=await j();if(void 0===e||e===f.current)return;let t=b.current?.();null!=t&&t!==f.current?y(!0):(f.current=e,i(e))},[j]),C=(0,r.useCallback)(()=>{d?y(!0):N()},[d,N]);(0,r.useEffect)(()=>()=>clearTimeout(g.current),[]);let S=(0,r.useCallback)(e=>{u(e!==f.current)},[]),T=(0,r.useCallback)(async()=>{let e=b.current?.();if(null==e||m||e===f.current)return!0;x(!0);let n=await s.writeFile(t,e);return(x(!1),n?.success)?(f.current=e,u(!1),c(""),h(!0),clearTimeout(g.current),g.current=setTimeout(()=>h(!1),2e3),window.dispatchEvent(new CustomEvent("fileExplorer:fileSaved",{detail:{filePath:t}})),!0):(c(n?.error||""),!1)},[t,s,m]);return{loading:n,content:a,error:o,dirty:d,saving:m,justSaved:p,staleOnDisk:v,register:w,onTextChanged:S,save:T,discard:(0,r.useCallback)(()=>{u(!1),i(f.current)},[]),setError:c,reload:k,onChangedOnDisk:C}}function o4(e){let{dirty:t,onSave:s}=e,[n,l]=(0,r.useState)(null);(0,r.useEffect)(()=>{if(!t)return;let e=e=>(e.preventDefault(),e.returnValue="","");return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[t]);let a=(0,r.useCallback)(e=>{if(!t)return e();l(()=>e)},[t]),i=(0,r.useCallback)(async()=>{await s()&&(l(null),n?.())},[s,n]),o=(0,r.useCallback)(()=>{l(null),n?.()},[n]);return{guard:a,asking:!!n,saveThenLeave:i,discardAndLeave:o,cancel:(0,r.useCallback)(()=>l(null),[])}}function o6(e){let{isOpen:t,fileName:s,onSave:l,onDiscard:a,onCancel:i}=e,{t:o}=(0,eC.s)(),c=(0,r.useRef)(null);return((0,r.useEffect)(()=>{if(!t)return;let e=requestAnimationFrame(()=>{c.current?.focus()});return()=>cancelAnimationFrame(e)},[t]),(0,r.useEffect)(()=>{if(!t)return;let e=e=>{if("Escape"===e.key)e.preventDefault(),e.stopPropagation(),i?.();else if("Enter"===e.key){if(document.activeElement?.tagName==="BUTTON"&&document.activeElement!==c.current)return;e.preventDefault(),e.stopPropagation(),(0,eN.e)(),l?.()}else"d"!==e.key&&"D"!==e.key||e.metaKey||e.ctrlKey||e.altKey||(e.preventDefault(),e.stopPropagation(),(0,eN.e)(),a?.())};return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)},[t,i,l,a]),t)?(0,n.jsxs)("div",{className:"fixed inset-0 z-[90] flex items-center justify-center px-4",style:{paddingTop:"max(1rem, env(safe-area-inset-top))",paddingBottom:"max(1rem, env(safe-area-inset-bottom))"},onClick:i,children:[(0,n.jsx)("div",{className:"absolute inset-0 scrim fade-in"}),(0,n.jsxs)("div",{role:"dialog","aria-modal":"true",className:"relative card-elev w-full max-w-sm p-5 pop-in",onClick:e=>e.stopPropagation(),onKeyDown:e=>e.stopPropagation(),children:[(0,n.jsx)("h3",{className:"text-[15px] font-semibold text-text mb-1.5",children:o("editor.unsavedTitle",{name:s||""})}),(0,n.jsx)("p",{className:"text-[13px] text-text-muted leading-snug mb-5",children:o("editor.unsavedBody")}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),a?.()},className:"px-3 py-2 text-[13px] text-text-muted hover:text-red-500 transition-colors flex items-center gap-1",children:[(0,n.jsx)("span",{children:o("editor.discard")}),(0,n.jsx)("kbd",{className:"hidden sm:inline-flex items-center text-[10px] font-mono px-1 py-0.5 rounded bg-surface-3 text-text-muted leading-none",children:"D"})]}),(0,n.jsx)("div",{className:"flex-1"}),(0,n.jsxs)("button",{onClick:i,className:"px-4 py-2 text-[13px] text-text bg-surface-2 hover:bg-surface-3 rounded-brand transition-colors flex items-center gap-1.5",children:[(0,n.jsx)("span",{children:o("common.cancel")}),(0,n.jsx)("kbd",{className:"hidden sm:inline-flex items-center text-[10px] font-mono px-1 py-0.5 rounded bg-surface-3 text-text-muted leading-none",children:"Esc"})]}),(0,n.jsxs)("button",{ref:c,onClick:()=>{(0,eN.e)(),l?.()},autoFocus:!0,className:"px-4 py-2 text-[13px] font-semibold text-white bg-brand-500 hover:bg-brand-600 rounded-brand transition-colors flex items-center gap-1.5",children:[(0,n.jsx)("span",{children:o("editor.save")}),(0,n.jsx)("kbd",{className:"hidden sm:inline-flex items-center justify-center w-4 h-4 rounded bg-white/20 text-white",children:(0,n.jsx)(ev.Lt,{size:10,strokeWidth:2.5})})]})]})]})]}):null}var o8=s(7557),o9=s(80714),o7=s(35144),ce=s(69992),ct=s(26795),cs=s(67363),cn=s(13831),cr=s(75910),cl=s(71532),ca=s(94001),ci=s(85293),co=s(74975);let cc={javascript:(0,ce.Q2)(),html:(0,ct.qy)(),css:(0,cs.AH)(),json:(0,cn.Pq)(),markdown:(0,cr.wD)()};function cd(e){let t,s,{filePath:l,content:a,onTextChanged:i,onRegisterView:o,onSave:c,onCursorChange:d,line:u,column:m,compact:x=!1,className:p=""}=e,{theme:h}=(0,sx.D)(),f=(0,r.useRef)(null),b=(0,r.useRef)(null),g=(0,r.useRef)(i),v=(0,r.useRef)(d),y=(0,r.useRef)(c);(0,r.useEffect)(()=>{g.current=i},[i]),(0,r.useEffect)(()=>{v.current=d},[d]),(0,r.useEffect)(()=>{y.current=c},[c]);let[w]=sB(et.d5.editorFontSize,et.A0),[j]=sB(et.d5.wordWrap,!0),k=window.innerWidth<ez.jK,N=x?Math.max(et.rL,w-et.xl):w+ +!!k,{extension:C}=(t="."+l.split(".").pop()?.toLowerCase(),{lang:s=et.so[t]||"plaintext",extension:cc[s]||[]});return(0,r.useEffect)(()=>{if(null==a||!f.current)return;let e=o7.$t.create({doc:a,extensions:[o8.oQ,..."dark"===h?[cl.bM]:[],C,...j?[o9.Lz.lineWrapping]:[],(0,ca.$P)(),(0,ci.yU)(),(0,ci.wm)(),o9.w4.of([{key:"Mod-s",preventDefault:!0,run:()=>(y.current?.(),!0)},...ci.Bc,...ci.OO,co.Yc]),o9.Lz.updateListener.of(e=>{if(e.docChanged&&g.current?.(e.state.doc.toString()),e.selectionSet||e.docChanged){let t=e.state.selection.main.head,s=e.state.doc.lineAt(t);v.current?.({line:s.number,column:t-s.from+1})}}),o9.Lz.theme({"&":{height:"100%",fontSize:`${N}px`},".cm-scroller":{overflow:"auto",lineHeight:x?"1.35":""},".cm-content":{minHeight:"100%"},".cm-gutters":x?{fontSize:`${Math.max(8,N-1)}px`}:{}})]});return b.current?.destroy(),b.current=new o9.Lz({state:e,parent:f.current}),o?.(()=>b.current?.state.doc.toString()??null,b.current),()=>{b.current?.destroy(),b.current=null}},[a,l,h,j,N,x]),(0,r.useEffect)(()=>{let e=b.current;if(!e||!u)return;let t=e.state.doc,s=Math.max(1,Math.min(u,t.lines)),n=t.line(s),r=Math.min(n.from+Math.max(0,(m||1)-1),n.to);e.dispatch({selection:{anchor:r},effects:o9.Lz.scrollIntoView(r,{y:"center"})}),e.focus()},[u,m,a]),(0,n.jsx)("div",{ref:f,className:`h-full w-full overflow-hidden ${p}`})}let cu=null,cm=0;function cx(e){let t,l,{content:a,reloadKey:i=0}=e,{t:o}=(0,eC.s)(),{theme:c}=(0,sx.D)(),[d,u]=(0,r.useState)(""),[m,x]=(0,r.useState)(""),p=(0,r.useRef)(null),h=(l=(t=String(a||"").trim()).match(/^```(?:mermaid)?\s*([\s\S]*?)\s*```$/i))?l[1].trim():t,[f,b]=(0,r.useState)(h);return(f!==h&&(b(h),u(""),x("")),(0,r.useEffect)(()=>{let e=!1;if(h)return(!cu&&(cu=Promise.all([s.e(515),s.e(2269),s.e(8390)]).then(s.bind(s,74811)).then(e=>e.default)),cu).then(async t=>{if(!e){t.initialize({startOnLoad:!1,theme:"dark"===c?"dark":"default",securityLevel:A.Ic});try{let{svg:s}=await t.render(`mmd-${++cm}`,h);if(e)return;u(s),x("")}catch(t){if(e)return;u(""),x(t?.message||String(t))}}}).catch(t=>{e||x(t?.message||String(t))}),()=>{e=!0}},[h,c,i]),m)?(0,n.jsxs)("div",{className:"h-full overflow-auto p-3",children:[(0,n.jsx)("p",{className:"text-[11px] text-red-500 mb-2 break-words",children:m}),(0,n.jsx)("pre",{className:"text-[11px] text-text-muted whitespace-pre-wrap break-words",children:h})]}):h?d?(0,n.jsx)("div",{ref:p,className:"h-full overflow-auto p-3 flex items-start justify-center [&_svg]:max-w-full [&_svg]:h-auto",dangerouslySetInnerHTML:{__html:d}}):(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-xs",children:o("common.loading")}):(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-xs",children:o("editor.mermaidEmpty")})}function cp(e){let{content:t}=e,{t:s}=(0,eC.s)();return t?.trim()?(0,n.jsx)("div",{className:"h-full overflow-auto p-4 sm:p-6 bg-bg select-text",children:(0,n.jsx)("div",{className:"max-w-4xl mx-auto",children:(0,n.jsx)(a6,{content:t})})}):(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-xs",children:s("common.empty",{defaultValue:"Empty file"})})}function ch(e){let{kind:t,content:s,reloadKey:r=0}=e;return"mermaid"===t?(0,n.jsx)(cx,{content:s,reloadKey:r}):"markdown"===t?(0,n.jsx)(cp,{content:s}):null}var cf=s(17261);s(56649);let cb=["diff --git","index ","new file","deleted file","--- ","+++ "];function cg(e){let{diff:t,compact:s=!1,className:l=""}=e,[a,i]=(0,r.useState)(!1);(0,r.useEffect)(()=>{if(s)return;let e=window.matchMedia(`(min-width: ${et.gh}px)`),t=()=>i(e.matches);return t(),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[s]);let o=!s&&a,c=(0,r.useCallback)(e=>{if(e&&t&&o)try{new cf.LU(e,t,{drawFileList:!1,matching:"words",outputFormat:"side-by-side",renderNothingWhenEmpty:!1}).draw()}catch{e.replaceChildren(Object.assign(document.createElement("pre"),{className:"text-text-muted p-4",textContent:t}))}},[t,o]),d=(0,r.useMemo)(()=>o||!t?[]:function(e){let t=[],s=0,n=0;for(let r of e.split("\n")){if(cb.some(e=>r.startsWith(e))){r.startsWith("diff --git")&&t.push({type:"file",text:r.replace("diff --git a/","").split(" b/")[0]});continue}if(r.startsWith("@@")){let e=r.match(/@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/);e&&(s=parseInt(e[1],10),n=parseInt(e[2],10)),t.push({type:"hunk",text:r});continue}r.startsWith("+")?t.push({type:"add",text:r.slice(1),newLn:n++}):r.startsWith("-")?t.push({type:"del",text:r.slice(1),oldLn:s++}):t.push({type:"ctx",text:r.slice(1),oldLn:s++,newLn:n++})}return t}(t),[o,t]);return o?(0,n.jsx)("div",{ref:c,className:`diff-themed select-text ${s?"diff-themed-compact":"bg-surface rounded"} overflow-hidden text-sm ${l}`}):(0,n.jsx)("div",{className:`w-full max-w-full select-text overflow-hidden font-mono leading-[1.6] ${s?"text-[10px] leading-[1.45]":"rounded-lg border border-border bg-surface text-[12.5px]"} ${l}`,children:d.map((e,t)=>{if("file"===e.type)return(0,n.jsx)("div",{className:"px-3 py-2 bg-surface-2 text-text font-semibold break-all",children:e.text},t);if("hunk"===e.type)return(0,n.jsx)("div",{className:"px-3 py-1 bg-surface-2/60 text-text-muted select-none break-all",children:e.text},t);let s="add"===e.type?e.newLn:"del"===e.type?e.oldLn:e.newLn,r="add"===e.type?"bg-[rgba(var(--success-rgb),0.14)]":"del"===e.type?"bg-[rgba(var(--danger-rgb),0.14)]":"",l="add"===e.type?"text-[var(--success)]":"del"===e.type?"text-[var(--danger)]":"text-text-subtle",a="add"===e.type?"+":"del"===e.type?"-":" ";return(0,n.jsxs)("div",{className:`flex ${r}`,children:[(0,n.jsx)("span",{className:"shrink-0 w-9 px-1 text-right text-text-subtle bg-black/5 select-none",children:s}),(0,n.jsx)("span",{className:`shrink-0 w-4 text-center font-bold ${l} select-none`,children:a}),(0,n.jsx)("span",{className:"flex-1 min-w-0 pr-2 whitespace-pre-wrap break-words text-text",children:e.text||"\xa0"})]},t)})})}function cv(e){var t;let s,r,{title:l,badge:a,badgeColor:i,img:o,loading:c,error:d,t:u}=e,m=[(s=o?.originalWidth||o?.width,r=o?.originalHeight||o?.height,s&&r?`${s} \xd7 ${r}`:""),!(t=o?.size||o?.originalSize)?"":t<1024?`${t} B`:t<1048576?`${(t/1024).toFixed(1)} KB`:`${(t/1048576).toFixed(1)} MB`].filter(Boolean).join(" \xb7 ");return(0,n.jsxs)("div",{className:"flex-1 flex flex-col rounded-brand border border-border-subtle bg-surface overflow-hidden min-h-[220px]",children:[(0,n.jsxs)("div",{className:"px-3 py-2 border-b border-border-subtle flex items-center justify-between bg-surface-2/60 shrink-0",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"text-xs font-medium text-text",children:l}),a&&(0,n.jsx)("span",{className:`text-[10px] font-semibold px-1.5 py-0.5 rounded-[3px] ${i}`,children:a})]}),m&&(0,n.jsx)("span",{className:"text-[11px] text-text-muted font-mono",children:m})]}),(0,n.jsx)("div",{className:"flex-1 p-3 flex items-center justify-center bg-surface-2/20 min-h-[160px] overflow-hidden relative",children:c?(0,n.jsxs)("div",{className:"flex items-center gap-2 text-text-muted text-xs",children:[(0,n.jsx)(ev.kr,{size:16,className:"animate-spin"}),(0,n.jsx)("span",{children:u("common.loading")})]}):d?(0,n.jsx)("div",{className:"text-xs text-text-muted text-center px-4 py-6",children:d}):o?.dataUrl?(0,n.jsx)("img",{src:o.dataUrl,alt:l,className:"max-h-[320px] max-w-full object-contain rounded drop-shadow-sm select-none"}):(0,n.jsx)("div",{className:"text-xs text-text-muted",children:u("git.noChanges")})})]})}function cy(e){let{filePath:t,status:s,workspace:l,fileBus:a,compact:i=!1}=e,{t:o}=(0,eC.s)(),c="A"===s||"?"===s,d="D"===s,u=!c,m=!d,[x,p]=(0,r.useState)(null),[h,f]=(0,r.useState)(u),[b,g]=(0,r.useState)(""),[v,y]=(0,r.useState)(null),[w,j]=(0,r.useState)(m),[k,N]=(0,r.useState)(""),[C,S]=(0,r.useState)(t);C!==t&&(S(t),p(null),f(u),g(""),y(null),j(m),N("")),(0,r.useEffect)(()=>{let e=!1;if(!t||!a)return;let s=l&&!t.startsWith("/")?`${l}/${t}`:t,n=l&&t.startsWith(l)?t.slice(l.length).replace(/^\//,""):t,r=setTimeout(()=>{u&&(f(!0),g(""),a.gitShowMedia?.(l,n,"HEAD").then(t=>{e||(f(!1),t?.success?p(t):g(t?.error||o("git.noOldVersion",{defaultValue:"No previous version in HEAD"})))}).catch(t=>{e||(f(!1),g(t?.message||"Failed to load old version"))})),m&&(j(!0),N(""),a.readMedia?.(s).then(t=>{e||(j(!1),t?.success?y(t):N(t?.error||o("git.noNewVersion",{defaultValue:"Failed to load working image"})))}).catch(t=>{e||(j(!1),N(t?.message||"Failed to load new version"))}))},0);return()=>{e=!0,clearTimeout(r)}},[t,l,a,u,m,o]);let T=t?t.split("/").pop():"",E=d||u&&!b&&(h||!!x?.dataUrl),R=E&&m;return(0,n.jsx)("div",{className:"h-full overflow-y-auto p-2 sm:p-3 flex flex-col gap-3",children:(0,n.jsxs)("div",{className:`flex-1 ${!i&&R?"grid grid-cols-1 md:grid-cols-2 gap-3":"flex flex-col gap-3"}`,children:[E&&(0,n.jsx)(cv,{title:d?`${T} (Deleted)`:"Old (HEAD)",badge:d?"DELETED":"ORIGINAL",badgeColor:"bg-red-500/15 text-red-400",img:x,loading:h,error:b,t:o}),m&&(0,n.jsx)(cv,{title:c?`${T} (Added)`:"New (Working Tree)",badge:c?"NEW":"MODIFIED",badgeColor:"bg-green-500/15 text-green-400",img:v,loading:w,error:k,t:o})]})})}function cw(e){let{diffPath:t,workspace:s,fileBus:l,compact:a=!1}=e,{t:i}=(0,eC.s)(),{status:o,repoPath:c,filePath:d}=(0,et.qu)(t),u=c||s,m=(0,et.u)(d),[x,p]=(0,r.useState)(!m),[h,f]=(0,r.useState)(""),[b,g]=(0,r.useState)(""),v=(0,r.useRef)(0),y=(0,r.useCallback)(async()=>{let e=++v.current;p(!0),g("");let t=await l.gitDiff?.(u,d,o);e===v.current&&(t?.success?f(t.diff||""):g(t?.error||""),p(!1))},[l,u,d,o]);return((0,r.useEffect)(()=>{if(m)return;let e=setTimeout(y,0);return()=>clearTimeout(e)},[y,m]),(0,r.useEffect)(()=>{if(m)return;let e=()=>y();return et.vb.forEach(t=>window.addEventListener(t,e)),()=>et.vb.forEach(t=>window.removeEventListener(t,e))},[y,m]),m)?(0,n.jsx)(cy,{filePath:d,status:o,workspace:u,fileBus:l,compact:a}):(0,n.jsxs)("div",{className:`h-full overflow-auto ${a?"p-0":"p-2 sm:p-3"}`,children:[b&&(0,n.jsx)("div",{className:"bg-red-500/20 border border-red-500/50 rounded px-4 py-2 text-red-400 text-sm mb-3",children:b}),x?(0,n.jsx)("div",{className:"flex items-center justify-center h-32 text-text-muted text-sm",children:i("common.loading")}):h?(0,n.jsx)(cg,{diff:h,compact:a}):(0,n.jsx)("div",{className:"flex items-center justify-center h-32 text-text-muted text-sm",children:i("git.noChanges")})]})}let cj="browser:openUrl";async function ck(e,t){let s=await e.previewStart(t);return s?.success&&s?.localUrl?(window.dispatchEvent(new CustomEvent(cj,{detail:{url:s.localUrl}})),{ok:!0}):{ok:!1,error:s?.error||null}}function cN(e){let{filePath:t,workspace:s,fileBus:l,width:a,onResize:i,onClose:o,onOpenFull:c,onOpenFile:d,isDesktop:u=!0,previewSeq:m=0,artifactTitle:x=null,jump:p=null}=e,{t:h}=(0,eC.s)(),f=(0,et.pA)(t),b=f?(0,et.qu)(t):null,g=b?.repoPath||s,v=f?b.filePath:t,y=b?(0,et.Ez)(t,s):"",w=!!t&&!f&&!o2(t),j=o3({filePath:w?t:"",fileBus:l}),[k,N]=sB(et.d5.editorFontSize,et.A0),C=e=>N(t=>Math.max(et.xr,Math.min(et.bd,(t||et.A0)+e))),S=(0,r.useRef)(j);(0,r.useEffect)(()=>{S.current=j},[j]);let T=o4({dirty:w&&j.dirty,onSave:j.save}),E=w?(0,et.YO)(t):null,R="html"===E,M=f&&"D"!==b.status&&"html"===(0,et.YO)(b.filePath),$=m>0,[z,P]=(0,r.useState)($),[A,I]=(0,r.useState)(""),[D,L]=(0,r.useState)(0),[B,F]=(0,r.useState)(t),[O,_]=(0,r.useState)(!1),[K,W]=(0,r.useState)(m);(B!==t||K!==m)&&(F(t),W(m),P($),I("")),j.justSaved!==O&&(_(j.justSaved),j.justSaved&&L(e=>e+1));let H=(0,r.useRef)(null);(0,r.useEffect)(()=>{let e=e=>{"Escape"!==e.key||H.current?.contains(e.target)&&T.guard(o)};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[T,o]);let q=t&&!f?t.slice(0,t.lastIndexOf("/")):"",U=(0,r.useMemo)(()=>q?[q]:[],[q]),X=i2(),V=(0,r.useCallback)(()=>{L(e=>e+1),S.current?.onChangedOnDisk(),window.dispatchEvent(new Event(et.GW))},[]);i1({dirs:U,fileBus:l,enabled:!!q&&X,debounceMs:et.Jl.PREVIEW_DEBOUNCE_MS,onDirsChanged:V});let G=(0,r.useCallback)(e=>{ck(l,e).then(e=>{e.ok||I(e.error||h("editor.previewFailed"))})},[l,h]);if((0,r.useEffect)(()=>{if(!R||m<=0)return;let e=!1;return ck(l,t).then(t=>{e||t.ok||I(t.error||h("editor.previewFailed"))}),()=>{e=!0}},[R,m,l,t]),!t)return null;let J=v.split("/").pop(),Y=s&&v.startsWith(s)?v.slice(s.length).replace(/^\//,""):v;return(0,n.jsxs)("div",{ref:H,className:"h-full flex flex-col bg-bg border-l border-border-subtle relative shrink min-w-0",style:u?{width:a,flexBasis:a,minWidth:ez.Ao.min}:void 0,children:[(0,n.jsxs)("div",{style:{height:32},className:"px-2 flex items-center gap-1.5 border-b border-border-subtle flex-shrink-0",children:[(0,n.jsx)("span",{className:"flex-shrink-0",children:oo({name:J,type:"file"},14)}),(0,n.jsx)("span",{className:"flex-1 min-w-0 truncate text-[12px] text-text",title:Y,children:J}),x&&(0,n.jsx)("span",{className:"flex-shrink-0 px-1.5 py-px rounded-[3px] text-[9px] font-medium uppercase tracking-wide bg-brand-500/15 text-brand-500",children:h("editor.artifact")}),f&&(0,n.jsx)("span",{className:`text-[10px] font-bold flex-shrink-0 ${et.vs[b.status]||"text-text-muted"}`,children:b.status}),M&&(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),G(y)},title:h("editor.previewInBrowser"),className:"p-1 text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:(0,n.jsx)(ev.qz,{size:13})}),E&&(R?(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),G(t)},title:h("editor.previewInBrowser"),className:"p-1 text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:(0,n.jsx)(ev.qz,{size:13})}):(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),P(e=>!e)},title:z?h("editor.editCode"):h("editor.preview"),className:"p-1 text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:z?(0,n.jsx)(ev.GD,{size:13}):(0,n.jsx)(ev.kU,{size:13})})),w&&(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),j.save()},disabled:!j.dirty||j.saving,title:h("editor.save"),className:`p-1 rounded-[3px] transition-colors disabled:opacity-30 ${j.dirty?"text-brand-500 hover:bg-surface-2":"text-text-muted"}`,children:(0,n.jsx)(ev.eM,{size:13})}),(f?!!d:c&&u)&&(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),f?d(y):T.guard(()=>c(t))},title:f?h("git.openFile"):h("editor.openFull"),className:"p-1 text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:f?(0,n.jsx)(ev.GD,{size:13}):(0,n.jsx)(ev.Gr,{size:13})}),(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),T.guard(o)},className:"p-1 text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:(0,n.jsx)(ev.X,{size:13})})]}),j.error&&w&&(0,n.jsx)("div",{className:"px-3 py-1.5 text-[11px] text-red-500 bg-red-500/10 border-b border-border-subtle break-words",children:j.error}),A&&(0,n.jsx)("div",{className:"px-3 py-1.5 text-[11px] text-red-500 bg-red-500/10 border-b border-border-subtle break-words",children:A}),j.staleOnDisk&&(0,n.jsxs)("div",{className:"px-3 py-1.5 flex items-center gap-2 text-[11px] text-amber-500 bg-amber-500/10 border-b border-border-subtle",children:[(0,n.jsx)("span",{className:"flex-1 min-w-0 truncate",children:h("editor.changedOnDisk")}),(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),j.reload()},className:"shrink-0 px-1.5 py-0.5 rounded-[3px] hover:bg-amber-500/20 font-medium transition-colors",children:h("editor.reloadFromDisk")})]}),(0,n.jsx)("div",{className:"flex-1 min-h-0 overflow-hidden",children:f?(0,n.jsx)(cw,{diffPath:(0,et.Dk)(b.status,b.filePath),workspace:g,fileBus:l,compact:!0}):o2(t)?(0,n.jsx)(o5,{filePath:t,fileBus:l}):z&&E&&!R?(0,n.jsx)(ch,{kind:E,filePath:t,fileBus:l,content:j.content,reloadKey:D}):j.loading?(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-xs",children:h("common.loading")}):(0,n.jsx)(cd,{filePath:t,content:j.content,onTextChanged:j.onTextChanged,onRegisterView:j.register,onSave:j.save,line:p?.line,column:p?.column,compact:!0})}),w&&(!z||R)&&(0,n.jsxs)("div",{className:"h-7 px-1.5 flex items-center justify-end gap-0.5 border-t border-border-subtle flex-shrink-0",children:[(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),C(-1)},className:"w-6 h-6 flex items-center justify-center text-[14px] leading-none text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:"−"}),(0,n.jsx)("span",{className:"min-w-[26px] text-center text-[10px] tabular-nums text-text-subtle",title:h("fileExplorer.fontSize"),children:k}),(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),C(1)},className:"w-6 h-6 flex items-center justify-center text-[14px] leading-none text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:"+"})]}),(0,n.jsx)(o6,{isOpen:T.asking,fileName:J,onSave:T.saveThenLeave,onDiscard:T.discardAndLeave,onCancel:T.cancel}),u&&(0,n.jsx)("div",{onPointerDown:e=>ts(e,{startWidth:a,axis:-1,onWidth:e=>i?.(e)}),className:"absolute top-0 left-0 bottom-0 w-1 cursor-col-resize hover:bg-brand-500/40 transition-colors z-20"})]})}function cC(){let[e,t]=(0,r.useState)(null),s="mouse"!==sD();return((0,r.useEffect)(()=>{if(s)return;let e=null,n=null,r=()=>{clearTimeout(e),n=null,t(null)},l=s=>{let r=s.target?.closest?.("[data-tip]");if(r!==n){if(clearTimeout(e),n=r,!r)return t(null);e=setTimeout(()=>{let e;(e=r.getAttribute("data-tip"))&&function(e){let t=e.getBoundingClientRect();if(e.scrollHeight>e.clientHeight+ez.de.SLACK_PX)return!0;let s=document.createRange();s.selectNodeContents(e);let n=s.getBoundingClientRect().width;s.detach();let r=getComputedStyle(e),l=parseFloat(r.paddingLeft)+parseFloat(r.paddingRight);return n>t.width-l+ez.de.SLACK_PX}(r)&&t({text:e,...function(e){let{GAP_PX:t,EDGE_PX:s,MAX_WIDTH_PX:n,EST_HEIGHT_PX:r}=ez.de,l=e.bottom+t,a=l+r>window.innerHeight-s;return{left:Math.min(Math.max(e.left,s),Math.max(s,window.innerWidth-n-s)),top:a?void 0:l,bottom:a?window.innerHeight-e.top+t:void 0}}(r.getBoundingClientRect())})},"focusin"===s.type?0:ez.de.DELAY_MS)}},a=e=>{"Escape"===e.key&&r()};return document.addEventListener("mouseover",l,!0),document.addEventListener("focusin",l,!0),document.addEventListener("focusout",r,!0),document.documentElement.addEventListener("mouseleave",r),document.addEventListener("mousedown",r,!0),document.addEventListener("keydown",a,!0),window.addEventListener("scroll",r,!0),window.addEventListener("resize",r),()=>{clearTimeout(e),document.removeEventListener("mouseover",l,!0),document.removeEventListener("focusin",l,!0),document.removeEventListener("focusout",r,!0),document.documentElement.removeEventListener("mouseleave",r),document.removeEventListener("mousedown",r,!0),document.removeEventListener("keydown",a,!0),window.removeEventListener("scroll",r,!0),window.removeEventListener("resize",r)}},[s]),e)?(0,sp.createPortal)((0,n.jsx)("div",{role:"tooltip",className:"fixed z-[90] pointer-events-none px-2 py-1 rounded-[3px] bg-surface-2 border border-border-subtle shadow-lg text-[11px] text-text break-words fade-in",style:{left:e.left,top:e.top,bottom:e.bottom,maxWidth:ez.de.MAX_WIDTH_PX},children:e.text}),document.body):null}let cS=(0,r.memo)(function(e){let{height:t=1,className:s=""}=e,l=(0,r.useRef)(null),[a,i]=(0,r.useState)(0);(0,r.useEffect)(()=>{let e=l.current;if(!e)return;let t=new ResizeObserver(t=>{let[s]=t,n=s?.contentRect?.width||e.offsetWidth;n>0&&i(Math.round(n))});return t.observe(e),()=>t.disconnect()},[]);let o=a||600,c=Math.max(1.8,(o+140)/250);return(0,n.jsx)("div",{ref:l,"aria-hidden":"true",className:`absolute inset-x-0 top-0 overflow-hidden pointer-events-none ${s}`,style:{height:t,"--pane-w":`${o}px`,"--beam-w":"140px","--beam-dur":`${c.toFixed(2)}s`,"--beam-delay":`${(c/2).toFixed(2)}s`},children:(0,n.jsxs)("div",{className:"relative w-full h-full bg-blue-500/10",children:[(0,n.jsx)("div",{className:"pane-light-beam"}),(0,n.jsx)("div",{className:"pane-light-beam pane-light-beam-2"})]})})});function cT(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,s=String(e).replace(/\/+$/,"").split("/");return s.length<=t?s.join("/"):`…/${s.slice(-t).join("/")}`}function cE(){let e=[{icon:ev.BK,label:"Terminal"},{icon:ev.VA,label:"Screen"},{icon:ev.vd,label:"Files"},{icon:ev.Zr,label:"Git"},{icon:ev.wO,label:"Android"},{icon:ev.qz,label:"Sites"}];return(0,n.jsx)("span",{className:"inline-flex flex-wrap items-center gap-x-3.5 gap-y-1.5",children:e.map(e=>{let{icon:t,label:s}=e;return(0,n.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,n.jsx)(t,{size:13,className:"shrink-0"}),s]},s)})})}let cR=["newTerminal","palette","help"];function cM(e){let{onAddWorkspace:t,onOpenRemote:s,recent:l=[],homeDir:a,onOpenRecent:i}=e,{t:o}=(0,eC.s)();(0,f.B)(e=>e.pushView);let[c,d]=(0,r.useState)(!1),u=[...cR.map(e=>tk.find(t=>t.id===e)).filter(Boolean),tN];return(0,n.jsxs)("div",{className:"h-full w-full empty-stage empty-stage-h",children:[(0,n.jsx)("div",{className:"empty-icons"}),(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),t?.()},disabled:!t,className:"empty-half text-left transition-all duration-150 enabled:hover:opacity-90 enabled:active:scale-[0.99] disabled:opacity-40 disabled:saturate-50",children:[(0,n.jsxs)("span",{className:"empty-idx",children:[(0,n.jsx)("b",{children:"01"})," / ",o("workspaces.emptyTagVibe")]}),(0,n.jsx)("span",{className:"empty-word login-hero-grad",children:o("workspaces.emptyWordVibe")}),(0,n.jsx)("span",{className:"empty-meta",dangerouslySetInnerHTML:{__html:o("workspaces.emptyMetaVibe")}}),(0,n.jsxs)("span",{className:"empty-go",children:[o("workspaces.emptyGoVibe"),(0,n.jsx)(ev.Qp,{size:14,className:"text-brand-500",strokeWidth:2.2})]}),!!l.length&&(0,n.jsx)("span",{className:"flex flex-wrap gap-1.5 mt-4 max-w-full",children:l.slice(0,4).map(e=>(0,n.jsx)("span",{role:"button",title:e.path,onClick:t=>{t.stopPropagation(),(0,eN.e)(),i?.(e.path)},className:"welcome-chip path-tail px-2 py-1 text-[11px] font-mono text-text-muted rounded-full truncate max-w-[180px]",children:cT(e.path)},e.path))})]}),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"empty-hairline","aria-hidden":!0}),(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),d(!0)},className:"empty-half text-left transition-all duration-150 enabled:hover:opacity-90 enabled:active:scale-[0.99] disabled:opacity-40 disabled:saturate-50",children:[(0,n.jsxs)("span",{className:"empty-idx",children:[(0,n.jsx)("b",{children:"02"})," / ",o("workspaces.emptyTagPair")]}),(0,n.jsx)("span",{className:"empty-word login-hero-grad",children:o("workspaces.emptyWordPair")}),(0,n.jsx)("span",{className:"empty-meta",children:(0,n.jsx)(cE,{})}),(0,n.jsxs)("span",{className:"empty-go",children:[o("workspaces.emptyGoPair"),(0,n.jsx)(ev.Qp,{size:14,className:"text-brand-500",strokeWidth:2.2})]})]})]}),c&&(0,n.jsx)(lr,{onClose:()=>d(!1)}),(0,n.jsx)("div",{className:"hidden lg:flex absolute bottom-0 inset-x-0 z-[2] flex-wrap items-center justify-center gap-x-5 gap-y-1.5 px-8 pb-6 font-mono text-[11px] text-text-subtle",children:u.map(e=>(0,n.jsxs)("span",{className:"flex items-center gap-1.5",children:[o(`shortcuts.${e.id}`),(0,n.jsx)("kbd",{className:"px-1.5 py-0.5 rounded-[4px] bg-surface-2/60 text-text-muted whitespace-nowrap",children:tR(e)})]},e.id))})]})}let c$=[],cz=(e,t)=>{if(!e||!t)return null;let s=e.getBoundingClientRect();return{scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,clientHeight:e.clientHeight,nodeTop:t.getBoundingClientRect().top-s.top+e.scrollTop}},cP=e=>String(e).padStart(2,"0");function cA(e){let t=Math.max(0,Math.floor(e/1e3)),s=Math.floor(t/3600),n=Math.floor(t%3600/60),r=t%60;return s>0?`${s}h ${n}m ${cP(r)}s`:n>0?`${n}m ${cP(r)}s`:`${r}s`}function cI(e){return e?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"text-text-muted/60",children:" \xb7 "}),lE(e)," tokens"]}):null}let cD=(0,r.memo)(function(e){let{engine:t="claude",failed:s=!1,onRetry:r}=e,l=sa[t]||sa.claude;return s?(0,n.jsxs)("div",{className:"h-full flex flex-col items-center justify-center gap-3 text-center p-6 select-none",children:[(0,n.jsx)("span",{className:"font-mono text-[12px] text-danger",children:"Couldn't load this conversation"}),(0,n.jsx)("span",{className:"text-[11px] font-mono text-text-muted/70",children:l.label}),(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),r?.()},className:"px-3 py-1.5 rounded-brand text-[11px] font-mono text-text bg-surface-2 hover:bg-surface-3 transition-colors",children:"Retry"})]}):(0,n.jsxs)("div",{className:"h-full flex flex-col items-center justify-center gap-3 text-center p-6 select-none",children:[(0,n.jsx)(ev.kr,{size:20,className:"animate-spin text-brand-500"}),(0,n.jsx)("span",{className:"ai-sheen-text font-mono text-[12px] text-text-muted",children:"Syncing…"}),(0,n.jsx)("span",{className:"text-[11px] font-mono text-text-muted/70",children:l.label})]})}),cL=(0,r.memo)(function(e){let{sessionId:t,engine:s="",hydrating:l=!1}=e,a=l4(e=>e.bySession[t]?.isTurnRunning),i=l4(e=>e.bySession[t]?.turnStartedAt),o=l4(e=>e.bySession[t]?.lastTurnMs),c=l4(e=>e.bySession[t]?.stats),d=l4(e=>e.bySession[t]?.turnBaseline),m=(0,u.d)(e=>e.connected),x=(0,u.d)(e=>e.retryStatus),p=l4(e=>e.bySession[t]?.messages)||c$,h=p[p.length-1]||null,f=Math.max(0,(c?.outputTokens||0)-(d?.outputTokens||0)),[b,g]=(0,r.useState)(Date.now());(0,r.useEffect)(()=>{if(!a)return;g(Date.now());let e=setInterval(()=>g(Date.now()),1e3);return()=>clearInterval(e)},[a]);let[v,y]=(0,r.useState)(null),w=(0,r.useRef)(a);(0,r.useEffect)(()=>{w.current&&!a&&i&&y({ms:o||Date.now()-i,outputTokens:f,changes:l$(p)}),a&&y(null),w.current=a},[a,i,o,f,p]);let j=(0,r.useMemo)(()=>v||a||!o?null:{ms:o,outputTokens:0,changes:l$(p)},[v,a,o,p]),k=v||j;if(!a&&!k)return null;if(!a)return(0,n.jsxs)("div",{className:"flex items-center gap-2 py-1 select-none text-xs text-text-muted",children:[(0,n.jsx)(ev.aJ,{size:14,className:"text-emerald-400 shrink-0"}),(0,n.jsxs)("span",{className:"flex items-center min-w-0 font-mono text-[11px]",children:[(0,n.jsxs)("span",{className:"truncate",children:["Worked for ",(0,n.jsx)("span",{className:"text-text",children:cA(k.ms)})]}),(0,n.jsxs)("span",{className:"shrink-0",children:[function(e){let{added:t,removed:s}=e;return t||s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"text-text-muted/60",children:" \xb7 "}),t>0&&(0,n.jsxs)("span",{className:"text-success",children:["+",t]}),t>0&&s>0&&" ",s>0&&(0,n.jsxs)("span",{className:"text-danger",children:["−",s]})]}):null}(k.changes),cI(k.outputTokens)]})]})]});let N=h?.tools?.find(e=>"running"===e.status),C=f+function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=0;for(let s=e.length-1;s>=0;s--){let n=e[s];if("user"===n.role)break;t+=(n.content?.length||0)+(n.thinking?.length||0)}return Math.round(t/4)}(p),S=function(){let{connected:e=!0,hydrating:t=!1,retryStatus:s=null,activeTool:n=null,engine:r="",lastMsg:l=null}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!e){let e=s||{};return{verb:"Reconnecting",detail:e.isRetrying?`attempt ${e.attempt}/${e.maxAttempts}${e.failed?" \xb7 gave up":""}`:"",tone:"alert"}}if(t)return{verb:"Syncing",detail:"from host",tone:"wait"};if(n?.name){let{name:e,input:t={}}=n,s=sn(r,e),l=lk(t.file_path||t.path);switch(s){case"bash":return{verb:"Running",detail:lC(t.command||"",60),tone:"wait"};case"file":{let s=/^(list|list_dir|ls)$/i.test(e),n=t.offset?`:L${t.offset}`:"";return{verb:s?"Listing":"Reading",detail:lC(`${l}${n}`,60),tone:"wait"}}case"search":{let e=t.pattern?`"${t.pattern}"`:t.query||t.url||"",s=lk(t.path);return{verb:"Searching",detail:lC([e,s?`in ${s}`:""].filter(Boolean).join(" "),60),tone:"wait"}}case"diff":return{verb:/^(Write|write_to_file)$/i.test(e)?"Writing":"Editing",detail:lC(lk(t.file_path||t.filePath||t.file||t.path)||lT(t),60),tone:"wait"};case"agent":{let e=n.children?.length||0;return{verb:"Delegating",detail:lC([t.description||lT(t),e?`${e} steps`:""].filter(Boolean).join(" \xb7 "),60),tone:"wait"}}case"task":return{verb:"Updating tasks",detail:lC(t.activeForm||t.subject||"",60),tone:"wait"};case"plan":return{verb:"Planning",detail:lC(lk(t.path)||e,60),tone:"wait"};default:return{verb:"Calling",detail:lC([lS(e),lT(t)].filter(Boolean).join(" "),60),tone:"wait"}}}return l?.thinking?{verb:"Thinking",detail:lC(lN(l.thinking),60),tone:"wait"}:l?.content?{verb:"Writing",detail:lC(lN(l.content),60),tone:"wait"}:{verb:"Working",detail:"",tone:"wait"}}({connected:m,hydrating:l,retryStatus:x,activeTool:N,engine:s,lastMsg:h});return(0,n.jsxs)("div",{className:"flex items-center gap-2 py-1 select-none text-xs text-text-muted",children:["alert"===S.tone?(0,n.jsx)("span",{className:"w-2 h-2 rounded-full bg-danger animate-pulse shrink-0"}):(0,n.jsx)(ev.kr,{size:13,className:"animate-spin text-brand-500 shrink-0"}),(0,n.jsxs)("span",{className:"flex items-center min-w-0 font-mono text-[11px]",children:[(0,n.jsxs)("span",{className:"truncate",children:[(0,n.jsxs)("span",{className:`ai-sheen-text${"alert"===S.tone?" !text-danger":""}`,children:[S.verb,"…"]}),S.detail&&(0,n.jsxs)("span",{className:"text-text-subtle",children:[" ",S.detail]}),(0,n.jsx)("span",{className:"text-text-muted/60",children:" \xb7 "}),cA(b-(i||b))]}),(0,n.jsx)("span",{className:"shrink-0",children:cI(C)})]})]})}),cB=(0,r.memo)(function(e){let{engine:t,engineMeta:s,workspacePath:l,bus:a=null,fileBus:i,onSendPrompt:o,onOpenResume:c}=e,{t:d}=(0,eC.s)(),[u,m]=(0,r.useState)([]),[x,p]=(0,r.useState)(null),h=eJ(),f=lx(l,i,{enabled:!!l});(0,r.useEffect)(()=>{if(!l)return;let e=!0;return i?.getSystemInfo?.().then(t=>{e&&t?.success&&p(t.homedir||null)}).catch(()=>{}),()=>{e=!1}},[i,l]),(0,r.useEffect)(()=>{if(!l)return;let e=!0;if(a?.emit)return a.emit("getAgentSessions",{cwd:l},s=>{e&&m((Array.isArray(s?.sessions)?s.sessions:[]).filter(e=>!t||e.agent===t).slice(0,8))}),()=>{e=!1}},[l,t]);let b=l?nC(l,x):"";return(0,n.jsxs)("div",{className:"h-full flex flex-col items-center justify-center text-center p-6 select-none overflow-y-auto custom-scrollbar",children:[(0,n.jsx)("div",{className:"w-12 h-12 rounded-2xl flex items-center justify-center mb-3 shadow-md border border-border-subtle/40 backdrop-blur-sm shrink-0",style:{backgroundColor:`${s.color}15`},children:(0,n.jsx)("img",{src:tu(`${t}-ui`),alt:s.label,className:`w-7 h-7 object-contain ${td}`})}),(0,n.jsx)("h3",{className:"text-base font-semibold text-text mb-1",children:s.label}),b&&(0,n.jsxs)("div",{className:"flex items-center justify-center gap-2 mb-3 text-[11px] font-mono text-text-muted",title:l,children:[(0,n.jsx)("span",{className:"truncate max-w-[220px]",children:b}),f.branch&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"text-text-muted/50",children:"\xb7"}),(0,n.jsx)("span",{className:"truncate max-w-[140px]",children:f.branch}),f.dirty&&(0,n.jsxs)("span",{className:"text-amber-400",title:`${f.changedCount} changed`,children:["●",f.changedCount]})]})]}),u.length>0&&(0,n.jsxs)("div",{className:"w-full max-w-md mb-4 text-left",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5 px-1 text-[10px] uppercase tracking-wide text-text-muted",children:[(0,n.jsx)(ev.BZ,{size:11}),(0,n.jsx)("span",{children:"Recent in this project"})]}),(0,n.jsx)("div",{className:"max-h-[38vh] overflow-y-auto custom-scrollbar rounded-brand border border-border-subtle bg-surface-2/30",children:u.map(e=>{let t=!!e.openSessionId&&h.has(e.openSessionId);return(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),t?window.dispatchEvent(new CustomEvent(ez.vP,{detail:{sessionId:e.openSessionId}})):c?.(e)},className:"w-full flex items-center gap-2 px-2.5 py-1.5 text-left border-b border-border-subtle/50 last:border-b-0 hover:bg-surface-2 transition-colors",title:t?d("agentHistory.openNow"):void 0,children:[(0,n.jsx)("span",{className:`flex-1 min-w-0 truncate text-[11px] ${t?"text-text font-medium":"text-text-muted"}`,children:e.title||"Untitled conversation"}),(0,n.jsx)("span",{className:"shrink-0 text-[10px] font-mono text-text-muted",children:function(e){if(!e)return"";let t=Math.round((Date.now()-e)/6e4);if(t<60)return`${Math.max(1,t)}m`;let s=Math.round(t/60);return s<24?`${s}h`:`${Math.round(s/24)}d`}(e.updatedAt)})]},`${e.agent}:${e.sessionId}`)})}),u.length>=8&&(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),c?.()},className:"mt-1.5 px-1 text-[10px] font-mono text-text-muted hover:text-text transition-colors",children:"All conversations →"})]}),(0,n.jsx)("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-md shrink-0",children:sd.map(e=>(0,n.jsx)("button",{type:"button",onClick:()=>o?.(e),className:"px-2.5 py-1 rounded-full bg-surface-2 hover:bg-surface-3 text-[11px] text-text font-mono border border-border-subtle transition-colors",children:e},e))})]})}),cF=(0,r.memo)(function(e){let{sessionId:t,engine:s="claude",workspacePath:l="",bus:a=null,fileBus:i=null,onSendPrompt:o,onResolvePermission:c,hasOlder:d=!1,onLoadOlder:u,onRewind:m,onPreviewRewind:x,onCutLocal:p,onListRewindPoints:h,onOpenResume:f,hydrating:b=!1,synced:g=!0,hydrateFailed:v=!1,onReload:y}=e,w=(0,r.useRef)(null),j=(0,r.useRef)(null),k=(0,r.useRef)(!0),N=(0,r.useRef)(null),C=(0,r.useRef)(null),S=(0,r.useRef)(null),T=(0,r.useRef)(null),E=(0,r.useRef)(0),R=(0,r.useRef)({top:0,atBottom:!0,key:""}),M=(0,r.useRef)(""),$=(0,r.useRef)(!1),[z,P]=(0,r.useState)(!1),[A,I]=(0,r.useState)(131072),[D,L]=(0,r.useState)(null),B=(0,r.useRef)({sessionId:null,n:0}),F=l4(e=>e.bySession[t]?.messages)||c$,O=sa[s]||sa.claude;(0,r.useEffect)(()=>{I(131072),L(null),T.current=null},[t]);let{id:_,index:K}=(0,r.useMemo)(()=>(function(e,t,s){if(!t?.length)return{id:null,index:0};let n=l8(t,s,void 0),r=null!=e?t.findIndex(t=>t.id===e):-1,l=l8(t,Math.max(524288,s),void 0),a=r<0?n:Math.max(r,l);return{id:t[a].id,index:a}})(D,F,A),[D,F,A]);(0,r.useEffect)(()=>{L(_)},[_]);let W=K>0?F.slice(K):F,[H,q]=(0,r.useState)(null),U=(0,r.useRef)(0);(0,r.useEffect)(()=>{q(null),U.current=0},[t]);let X=(0,r.useMemo)(()=>F.filter(e=>"user"===e.role).length,[F]);(0,r.useEffect)(()=>{if(H?.ok||H?.supported===!1||U.current>=6)return;let e=!0;return h?.().then(t=>{e&&(U.current+=1,q(t))}).catch(()=>{}),()=>{e=!1}},[h,s,t,X,H?.ok,H?.supported]);let V=!!H?.ok,G=(0,r.useMemo)(()=>{let e=new Map,t=0;for(let s=F.length-1;s>=0;s--)"user"===F[s].role&&e.set(F[s].id,t++);return e},[F]),J=(0,r.useMemo)(()=>{let e=[];for(let t of W)"user"===t.role||0===e.length?e.push({key:t.id,messages:[t]}):e[e.length-1].messages.push(t);return e},[W]),Z=Math.max(0,J.length-5),Q=(0,r.useCallback)(async function(){let{auto:e=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=w.current,s=Date.now();if(!e&&s-E.current<300)return;E.current=s;let n=S.current,r=n?function(){let{scrollTop:e=0,scrollHeight:t=0,clientHeight:s=0,nodeTop:n=0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{nodeTop:n,scrollTop:e,atBottom:t-e-s<8}}(cz(t,n)):null,l=r?{...r,atBottom:e&&k.current,node:n}:null,a={hiddenCount:K,hasOlder:d,scrollTop:t?.scrollTop??0,scrollHeight:t?.scrollHeight??0},i=null;0===K&&d&&(i=await u?.()),(0,Y.Lq)("ai-page","loadMore",{...a,fetched:i}),T.current=l,L(null),I(e=>e+131072)},[K,d,u]);(0,r.useLayoutEffect)(()=>{let e=w.current,t=T.current;if(!e||!t)return;T.current=null;let s=function(e){let{scrollHeight:t=0,clientHeight:s=0,nodeTop:n=0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e?e.atBottom?t:n<=e.nodeTop?null:Math.max(0,n-(e.nodeTop-e.scrollTop)):null}(t,cz(e,t.node)||{});null!=s&&(e.scrollTop=s);let n=e.scrollHeight-e.scrollTop-e.clientHeight;k.current=n<8,P(n>140)},[A,D]),(0,r.useEffect)(()=>{let e=B.current;if(e.sessionId!==t&&(e.sessionId=t,e.n=0),e.n>=40||b||!g||!k.current||!(d&&F?.length)||F[K]?.role==="user")return;let s=setTimeout(()=>{e.n+=1,Q({auto:!0})},0);return()=>clearTimeout(s)},[t,F,K,d,b,g,Q]);let ee=(0,r.useCallback)(()=>{N.current||(N.current=requestAnimationFrame(()=>{N.current=null;let e=w.current;if(!e||0===e.clientHeight||$.current)return;let t=e.scrollHeight-e.scrollTop-e.clientHeight,s=t<80;k.current=s,P(!s&&t>140),R.current={top:e.scrollTop,atBottom:s,key:M.current},e.scrollTop<120&&(K>0||d)&&Q()}))},[Q,K,d]);(0,r.useEffect)(()=>{let e=w.current,t=j.current;if(!e||!t)return;let s=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&!k.current&&Q()},{root:e,rootMargin:"120px"});return s.observe(t),()=>s.disconnect()},[Q]);let et=(0,r.useMemo)(()=>F.map(e=>`${e.id}:${+!!e.thinking}:${+!!e.content}:${e.tools?.length||0}:${e.diffs?.length||0}:${+!!e.permission}`).join("|"),[F]);(0,r.useLayoutEffect)(()=>{M.current=et},[et]);let es=(0,r.useCallback)(e=>{S.current=e},[]),en=(0,r.useRef)({id:null,pinned:!0});(0,r.useEffect)(()=>{let e=w.current,t=en.current,s=et?et.split("|").pop().split(":")[0]:null;if(!s){en.current={id:null,pinned:t.pinned};return}let n=t.pinned&&(null==t.id||!et.includes(`${t.id}:`));en.current={id:s,pinned:n||k.current},!e||(n||k.current)&&(e.scrollTop=e.scrollHeight,n&&(k.current=!0,P(!1)))},[et]);let er=(0,r.useMemo)(()=>F.reduce((e,t)=>e+(t.content?.length||0),0),[F]);(0,r.useEffect)(()=>{!k.current||C.current||(C.current=setTimeout(()=>{C.current=null;let e=w.current;e&&k.current&&(e.scrollTop=e.scrollHeight)},150))},[er]),(0,r.useEffect)(()=>()=>{C.current&&clearTimeout(C.current)},[]),(0,r.useEffect)(()=>{let e=w.current;if(!e)return;let t=new ResizeObserver(()=>{if(0===e.clientHeight){$.current=!0;return}let t=R.current;if(t.top>8&&!t.atBottom&&0===e.scrollTop&&t.key===M.current){e.scrollTop=Math.min(t.top,e.scrollHeight-e.clientHeight);let s=e.scrollHeight-e.scrollTop-e.clientHeight;k.current=s<8,P(s>140)}$.current=!1,k.current&&(e.scrollTop=e.scrollHeight)});return t.observe(e),()=>t.disconnect()},[]);let el=(0,r.useCallback)(()=>{(0,eN.e)();let e=w.current;e&&(e.scrollTo({top:e.scrollHeight,behavior:"smooth"}),k.current=!0,P(!1))},[]),ea=(0,r.useCallback)(e=>e.messages.some(e=>e.isLive),[]);return(0,n.jsxs)("div",{className:"flex-1 min-h-0 relative flex flex-col overflow-hidden @container",children:[(0,n.jsxs)("div",{ref:w,onScroll:ee,className:"ai-conversation flex-1 min-h-0 overflow-y-auto px-3 @2xl:px-6 py-4 space-y-4 custom-scrollbar relative",children:[(K>0||d)&&(0,n.jsx)("div",{ref:j,"aria-hidden":"true",className:"h-px"}),0===F.length?g?(0,n.jsx)(cB,{engine:s,engineMeta:O,workspacePath:l,bus:a,fileBus:i,onSendPrompt:o,onOpenResume:f}):(0,n.jsx)(cD,{engine:s,failed:v,onRetry:y}):(0,n.jsxs)(n.Fragment,{children:[(K>0||d)&&(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),Q()},className:"w-full py-1.5 text-[11px] font-mono text-text-muted hover:text-text bg-surface-2/50 hover:bg-surface-2 border border-border-subtle/60 rounded-brand transition-colors",children:K>0?`Load older \xb7 ${K} more`:"Load older turns"}),J.map((e,t)=>{let[r,...a]=e.messages;return"user"!==r.role?(0,n.jsx)("div",{ref:0===t?es:void 0,children:(0,n.jsx)(ir,{messages:e.messages,engine:s,workspacePath:l,onResolvePermission:c,isLive:ea(e),fileBus:i,showImages:t>=Z})},e.key):(0,n.jsxs)("div",{ref:0===t?es:void 0,children:[(0,n.jsx)(ay,{message:r,engine:s,workspacePath:l,onResolvePermission:c,onRewind:m,onPreviewRewind:x,onCutLocal:p,rewindIndex:G.get(r.id),canRewind:V}),(0,n.jsx)(ir,{messages:a,engine:s,workspacePath:l,onResolvePermission:c,isLive:ea(e),fileBus:i,showImages:t>=Z})]},e.key)}),(0,n.jsx)(cL,{sessionId:t,engine:s,hydrating:b})]})]}),z&&(0,n.jsx)("button",{type:"button",onClick:el,className:"absolute bottom-4 right-6 p-2 rounded-full bg-surface-2 border border-border-subtle shadow-lg hover:bg-surface-3 text-text transition-all duration-150 z-30",title:"Scroll to bottom",children:(0,n.jsx)(ev.yd,{size:16})})]})});function cO(e){return e.provider?e.provider:e.id&&e.id.includes("/")?e.id.split("/")[0]:""}function c_(e,t,s,n){let r=n?t:e,l=[],a=r.filter(e=>e.recent||e.id===s).sort((e,t)=>(e.recentRank??999)-(t.recentRank??999));a.length>0&&l.push({key:"recent",title:"Recent",items:a});let i=new Set(a.map(e=>e.id)),o=r.filter(e=>!i.has(e.id)),c=new Map;for(let e of o){let t=cO(e)||"other";c.has(t)||c.set(t,[]),c.get(t).push(e)}for(let e of[...c.keys()].sort((e,t)=>"profiles"===e||"codex-profiles"===e?-1:"profiles"===t||"codex-profiles"===t?1:"opencode-go"===e?-1:"opencode-go"===t?1:"opencode"===e?-1:"opencode"===t?1:e.localeCompare(t))){let t=c.get(e)||[];0!==t.length&&(t.sort((e,t)=>(e.label||e.id).localeCompare(t.label||t.id)),l.push({key:e,title:e?"profiles"===e||"codex-profiles"===e?"Custom Profiles":"opencode-go"===e?"OpenCode Go":"opencode"===e?"OpenCode Zen":"9router"===e?"9Router":"google-antigravity"===e?"Google Antigravity":"ollama-cloud"===e?"Ollama Cloud":"anthropic"===e?"Anthropic":"openai"===e?"OpenAI":"google"===e?"Google":e.split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"Other Models",items:t}))}return l}let cK=new Map,cW=new Map,cH=(e,t)=>new Promise(s=>{e.emit("ai:files",t,e=>s(e?.ok?e:null))});function cq(e){if(!e)return null;let t=new Set(e.modified||[]);return{files:(e.paths||[]).map((e,s)=>({path:e,isModified:t.has(s)})),dirs:e.dirs||[],truncated:!!e.truncated}}let cU=(0,r.memo)(function(e){let{item:t}=e,s=t.label.lastIndexOf("/"),r=-1===s?"":t.label.slice(0,s+1),l=-1===s?t.label:t.label.slice(s+1),a=new Set(t.positions||[]),i=(e,t)=>[...e].map((e,s)=>a.has(t+s)?(0,n.jsx)("span",{className:"text-accent font-semibold",children:e},t+s):(0,n.jsx)("span",{children:e},t+s));return(0,n.jsxs)("span",{className:"font-mono text-xs min-w-0 flex flex-1 items-baseline",children:[(0,n.jsx)("span",{className:"min-w-0 truncate text-text-muted",style:{direction:"rtl",unicodeBidi:"plaintext"},children:i(r,0)}),(0,n.jsxs)("span",{className:`shrink-0 ${t.isDir?"text-brand-500":"text-text"}`,children:[i(l,r.length),t.isDir?"/":""]})]})}),cX=[],cV=(0,r.memo)(function(e){let{sessionId:t="",engine:s="claude",bus:l=null,isTurnRunning:a=!1,isFocused:i=!1,onSend:o,onRemoveQueueItem:c,onClearQueue:d,onStop:u,onRunShell:m,onResolvePermission:x,onSelectModel:p,onModeChange:h,onOpenModal:f,onOptionChange:b,onActivate:g,workspacePath:v="",model:y="",modalOpen:w=!1}=e,{t:j,locale:k}=(0,eC.s)(),N="mouse"===sD(),C=tE()?"Opt ←/→ \xb7 Opt 1…9 to switch tab":"Ctrl+Shift+←/→ \xb7 1…9 to switch tab",S=ss(s),T=S.permissionModes,E=S.slashCommands,R=l4(e=>e.bySession[t]?.isTurnRunning),M=l4(e=>e.bySession[t]?.metadata?.model),$=l4(e=>e.bySession[t]?.metadata?.modelOptions),z=$?.length?$:S.models,P=l4(e=>e.bySession[t]?.metadata?.skills)||cX,A=l4(e=>e.bySession[t]?.metadata?.commands)||cX,I=l4(e=>e.bySession[t]?.permissionMode),D=l4(e=>e.bySession[t]?.metadata?.effort||e.bySession[t]?.metadata?.variant),L=I||S.defaultMode,B=void 0!==R?R:a,F=void 0!==M?M:y,[O,_]=(0,r.useState)(""),K=l4(e=>e.bySession[t]?.queue)||cX,W=l4(e=>e.bySession[t]?.promptError)||null,H=l4(e=>e.bySession[t]?.promptSending)||null,[q,U]=(0,r.useState)(!1);(0,r.useEffect)(()=>{if(U(!1),!H)return;let e=setTimeout(()=>U(!0),1500);return()=>clearTimeout(e)},[H]);let[X,V]=(0,r.useState)(-1),G=(0,r.useRef)(""),[J,Y]=(0,r.useState)(!1),[Z,Q]=(0,r.useState)(null),[ee,et]=(0,r.useState)([]),[es,en]=(0,r.useState)(0),[er,el]=(0,r.useState)(null),[ea,ei]=(0,r.useState)(-1),[eo,ec]=(0,r.useState)(0),ed=sy(e=>e.addCommand),eu=sy(e=>e.resolveAlias),em=sy(e=>e.history),ex=sy(e=>e.pinned),ep=(0,r.useMemo)(()=>J?[]:sS(O,em,ex,[],!N),[O,em,ex,N,J]),[eh,ef]=(0,r.useState)(!1),[eb,eg]=(0,r.useState)(""),[ey,ew]=(0,r.useState)(()=>new Set),[ej,ek]=(0,r.useState)(!1),[eS,eT]=(0,r.useState)(!1),eE=(0,r.useRef)(null),{attachments:eR,setAttachments:eM,removeAttachment:e$,handleFileUpload:ez,handleAttachPaste:eP}=sq({bus:l,sessionId:t}),[eA]=s$(k),eI=sA({lang:sR(eA),onText:e=>{_(e),eO.current&&(eO.current.value=e,eO.current.style.height="auto",eO.current.style.height=`${Math.min(eO.current.scrollHeight,120)}px`,eO.current.focus())}}),eD=(0,r.useCallback)(()=>{(0,eN.e)(),eI.stop()},[eI]),eL=(0,r.useCallback)(()=>{eI.cancel()},[eI]),eB=(0,r.useCallback)(()=>{eI.listening?eI.stop():(document.activeElement?.blur(),eI.start(O))},[eI,O]),eF=(0,r.useCallback)(()=>{(0,eN.e)(),_(""),eO.current&&(eO.current.value="",eO.current.style.height="26px");try{localStorage.removeItem(`9remote_draft_${t}`)}catch{}eO.current?.focus()},[t]),eO=(0,r.useRef)(null),e_=(0,r.useRef)(eR);(0,r.useEffect)(()=>{e_.current=eR},[eR]);let eK=(0,r.useRef)(null),eW=(0,r.useRef)(!1),eH=(0,r.useRef)(0),eq=(0,r.useRef)(0),eU=(0,r.useRef)(0),eX=(0,r.useRef)("");sa[s]||sa.claude,(0,r.useEffect)(()=>{i&&!w&&N&&eO.current?.focus({preventScroll:!0})},[i,w,N]),(0,r.useEffect)(()=>{let e=e=>{if(e.detail?.sessionId!==t)return;let s=String(e.detail.text||"");if(s&&(_(e=>e===s||e.includes(s)?e:e?`${e}
17
+ `;return await e.writeFile(r,d)}let oS="application/x-file-paths",oT=()=>"u">typeof document&&"webkitdirectory"in document.createElement("input"),oE=e=>{let t=e.dataTransfer.getData(oS);if(!t)return null;try{return JSON.parse(t)}catch{return null}},oR=e=>[...e.dataTransfer?.types||[]].includes("Files");function oM(e){let{workspace:t,fileBus:s,onOpenFile:l,activeFile:a,onSwitchWorkspace:i,onNewTerminal:o,onSearchFolder:c,compact:d=!1,onlyChanged:u=!1,onActions:m}=e,{t:x}=(0,eC.s)(),[p,h]=(0,r.useState)(null),f=(0,r.useRef)(null),b=n2(f,p?.x??0,p?.y??0),[g,v]=(0,r.useState)(null),[y,w]=(0,r.useState)(""),[j,k]=(0,r.useState)(null),[N,C]=(0,r.useState)(""),[S,T]=(0,r.useState)(null),[E,R]=(0,r.useState)(()=>new Set),M=(0,r.useRef)(E);(0,r.useEffect)(()=>{M.current=E},[E]);let $=(0,r.useRef)(y);(0,r.useEffect)(()=>{$.current=y},[y]);let z=(0,r.useRef)(g);(0,r.useEffect)(()=>{z.current=g},[g]);let[P,A]=(0,r.useState)(null),[I,D]=(0,r.useState)(!1),[L,B]=(0,r.useState)(null),[F,O]=(0,r.useState)(null),[_,K]=(0,r.useState)(null),[W,H]=(0,r.useState)(null),q=(0,r.useRef)(null),U=(0,r.useRef)(null),X=(0,r.useRef)(null),V=(0,r.useRef)(null),[G]=(0,r.useState)(oT),J=(0,r.useRef)(null),Y=(0,r.useRef)(null),Z=(0,r.useRef)(null),Q=(0,r.useCallback)(e=>e&&t?e.replace(`${t}/`,""):e,[t]),{tree:ee,expanded:es,loading:en,truncatedDirs:er,gitStatusMap:el,showHidden:ea,setShowHidden:ei,loadDir:eo,loadGitStatus:ec,toggleFolder:ed,expandDir:eu,collapseAll:em,refreshAll:ex}=function(e){let{workspace:t,fileBus:s}=e,[n,l]=(0,r.useState)(()=>new Map),[a,i]=(0,r.useState)(()=>new Set),[o,c]=(0,r.useState)(null),[d,u]=(0,r.useState)(()=>new Set),[m,x]=(0,r.useState)(()=>new Set),[p,h]=(0,r.useState)({}),[f,b]=(0,r.useState)(i6),g=(0,r.useCallback)(async e=>{u(t=>{let s=new Set(t);return s.add(e),s});let t=await s.getFiles(e,f);return(u(t=>{let s=new Set(t);return s.delete(e),s}),t?.success)?(l(s=>{let n=new Map(s);return n.set(e,t.files||[]),n}),x(s=>{let n=!!t.truncated;if(n===s.has(e))return s;let r=new Set(s);return n?r.add(e):r.delete(e),r}),t.files||[]):null},[s,f]),v=(0,r.useRef)(0),y=(0,r.useCallback)(async()=>{if(!t)return;let e=++v.current,{map:n}=await i3(s,t);e===v.current&&h(n)},[s,t]);(0,r.useEffect)(()=>{let e,s;if(!t)return;let n=!0,r=null,l=1e3,a=Array.isArray(s=(e=i4())[t])?s:Array.isArray(e.legacy)?e.legacy:[],o=new Set([t]),d=a.filter(e=>"string"==typeof e&&e.startsWith(t));for(let e of d)o.add(e);let u=async()=>{let[e]=await Promise.all([g(t),...d.map(e=>g(e))]);if(n){if(null==e&&l<=16e3){let e=l;l*=2,r=setTimeout(u,e);return}i(o),c(t),y()}};return u(),()=>{n=!1,clearTimeout(r)}},[t]),(0,r.useEffect)(()=>{let e=null,t=()=>{clearTimeout(e),e=setTimeout(y,et.HF)},s=["fileExplorer:fileSaved","fileExplorer:fileCreated","fileExplorer:fileDeleted","fileExplorer:fileRenamed",et.GW];return s.forEach(e=>window.addEventListener(e,t)),()=>{clearTimeout(e),s.forEach(e=>window.removeEventListener(e,t))}},[y]),(0,r.useEffect)(()=>{if(o===t&&t)try{let e=i4();delete e.legacy,e[t]=[...a],window.localStorage.setItem(et.d5.expandedFolders,JSON.stringify(e))}catch{}},[t,o,a]),(0,r.useEffect)(()=>{window.localStorage.setItem(et.d5.showHidden,JSON.stringify(f)),n.size>0&&Promise.all([...n.keys()].map(e=>g(e))).catch(()=>{})},[f]);let w=(0,r.useCallback)(async e=>{(0,eN.e)();let t=e.path;a.has(t)?i(e=>{let s=new Set(e);return s.delete(t),s}):(n.has(t)||await g(t),i(e=>{let s=new Set(e);return s.add(t),s}))},[a,n,g]),j=(0,r.useCallback)(e=>{i(t=>{let s=new Set(t);return s.add(e),s})},[]),k=(0,r.useCallback)(()=>{(0,eN.e)(),i(new Set)},[]),N=i2(),C=(0,r.useMemo)(()=>[...n.keys()].filter(e=>e===t||a.has(e)),[n,a,t]),S=(0,r.useCallback)(e=>{Promise.all(e.map(e=>g(e))).catch(()=>{}),window.dispatchEvent(new Event(et.GW))},[g]);i1({dirs:C,fileBus:s,onDirsChanged:S,enabled:N});let T=(0,r.useRef)(!0);(0,r.useEffect)(()=>{let e=N&&!T.current;T.current=N,e&&n.size&&S([...n.keys()])},[N]);let E=(0,r.useCallback)(async()=>{(0,eN.e)();let e=[...n.keys()];await Promise.all(e.map(e=>g(e))),y()},[n,g,y]);return{tree:n,expanded:a,loading:d,truncatedDirs:m,gitStatusMap:p,showHidden:f,setShowHidden:b,loadDir:g,loadGitStatus:y,toggleFolder:w,expandDir:j,collapseAll:k,refreshAll:E}}({workspace:t,fileBus:s}),ep=(0,r.useMemo)(()=>{if(1!==E.size)return null;let[e]=E;return ee.has(e)?e:null},[E,ee]),{createItem:eh,renameItem:ef,deleteItem:eb,deleteMany:eg,duplicateItem:ey,moveTo:ew,pasteInto:ej}=function(e){let{fileBus:t,loadDir:s,loadGitStatus:n,expandDir:l,onOpenFile:a,onMoved:i}=e,o=(0,r.useCallback)(async(e,n,r)=>{let i=iZ(e,n),o=await t.createItem(i,r);o?.success&&(i9("created"),await s(e),"folder"===r?l(e):a?.(i))},[t,s,l,a]),c=(0,r.useCallback)(async(e,n)=>{let r=iQ(e.path),l=iZ(r,n),a=await t.renameItem(e.path,l);a?.success&&(i9("renamed"),await s(r))},[t,s]),d=(0,r.useCallback)(async e=>{let n=iQ(e.path),r=await t.deleteItem(e.path);r?.success&&(i9("deleted"),await s(n))},[t,s]),u=(0,r.useCallback)(async e=>{if(!e?.length)return;let r=new Set;for(let s of e){let e=await t.deleteItem(s.path);e?.success&&r.add(iQ(s.path))}if(r.size){for(let e of(i9("deleted"),r))await s(e);n(),i?.()}},[t,s,n,i]),m=(0,r.useCallback)(async(e,s)=>{let n=i0(e),r=new Set(((await t.getFiles(s,!0))?.files||[]).map(e=>e.name)),l=n;if(r.has(l)){let e=n.lastIndexOf("."),t=e>0?n.slice(0,e):n,s=e>0?n.slice(e):"";l=`${t} copy${s}`;for(let e=2;r.has(l);e++)l=`${t} copy ${e}${s}`}return t.copyItem(e,iZ(s,l))},[t]),x=(0,r.useCallback)(async e=>{let t=iQ(e.path),r=await m(e.path,t);r?.success&&(i9("created"),await s(t),n())},[m,s,n]),p=(0,r.useCallback)(async(e,r)=>{if(e?.length&&r){for(let s of e){let e=iZ(r,s.split("/").pop());s===e||e.startsWith(s+"/")||await t.renameItem(s,e)}for(let t of new Set([r,...e.map(e=>iQ(e))]))await s(t);i9("renamed"),n(),i?.()}},[t,s,n,i]),h=(0,r.useCallback)(async(e,t,r)=>{if(!e?.length||!t)return;if("cut"===r)return p(e,t);let a=0;for(let s of e){if(t===s||t.startsWith(s+"/"))continue;let e=await m(s,t);e?.success&&a++}a&&(i9("created"),await s(t),l(t),n())},[m,p,s,l,n]);return{createItem:o,renameItem:c,deleteItem:d,deleteMany:u,duplicateItem:x,moveTo:p,pasteInto:h}}({fileBus:s,loadDir:eo,loadGitStatus:ec,expandDir:eu,onOpenFile:l,onMoved:()=>R(new Set)});(0,r.useEffect)(()=>{if(!p)return;let e=()=>h(null);return window.addEventListener("click",e),window.addEventListener("scroll",e,!0),()=>{window.removeEventListener("click",e),window.removeEventListener("scroll",e,!0)}},[p]),(0,r.useEffect)(()=>{if(g&&Y.current){Y.current.focus();let e=Y.current.value.length;Y.current.setSelectionRange(e,e)}},[g]),(0,r.useEffect)(()=>{j&&Z.current&&Z.current.focus()},[j]);let eS=(0,r.useCallback)(()=>ep&&ee.has(ep)?ep:t,[ep,ee,t]),eT=(0,r.useCallback)(async e=>{let t=N.trim();if(!t)return;let s=j?.dir||eS();await eh(s,t,e),k(null),C("")},[N,j,eS,eh]),eE=(0,r.useCallback)(async()=>{let e=z.current;if(!e)return;let t=$.current.trim();t&&t!==e.name&&await ef(e,t),v(null)},[ef]),eR=(0,r.useCallback)(async e=>{try{await navigator.clipboard.writeText(e)}catch{}},[]),eM=(0,r.useCallback)((e,t)=>{e.preventDefault(),e.stopPropagation(),(0,eN.e)(),R(e=>e.has(t.path)?e:new Set([t.path])),H(t.path),h({file:t,x:e.clientX,y:e.clientY})},[]),e$=(0,r.useCallback)((e,t)=>{let s=e.touches?.[0];if(!s)return;let n=s.clientX,r=s.clientY;J.current=setTimeout(()=>{(0,eN.e)(),h({file:t,x:n,y:r})},500)},[]),ez=(0,r.useCallback)(()=>{J.current&&(clearTimeout(J.current),J.current=null)},[]),eP=(0,r.useMemo)(()=>{if(!a)return null;if(!(0,et.pA)(a))return a;let{repoPath:e,filePath:s}=(0,et.qu)(a);return s?`${e||t}/${s}`:null},[a,t]),eA=e=>!u||!!el[Q(e.path)],eI=(0,r.useMemo)(()=>{let e=[],s=(t,n)=>{for(let r of ee.get(t)||[])(!u||el[Q(r.path)])&&(e.push({file:r,depth:n}),"folder"===r.type&&es.has(r.path)&&s(r.path,n+1))};return s(t,0),e},[ee,es,el,u,t,Q]),eD=(0,r.useCallback)(e=>eI.find(t=>t.file.path===e)?.file||null,[eI]),eL=(0,r.useCallback)(e=>{let t=eI.filter(e=>E.has(e.file.path)).map(e=>e.file);return t.length?t:e?[e]:[]},[eI,E]),eB=(0,r.useCallback)((e,t)=>{let s=eI.findIndex(t=>t.file.path===e),n=eI.findIndex(e=>e.file.path===t);if(-1===s||-1===n)return new Set([t]);let[r,l]=s<=n?[s,n]:[n,s];return new Set(eI.slice(r,l+1).map(e=>e.file.path))},[eI]),eF=(0,r.useCallback)((e,t)=>{if((0,eN.e)(),q.current?.focus({preventScroll:!0}),t?.metaKey||t?.ctrlKey){R(t=>{let s=new Set(t);return s.has(e.path)?s.delete(e.path):s.add(e.path),s}),H(e.path),U.current=e.path;return}if(t?.shiftKey&&U.current){R(eB(U.current,e.path)),H(e.path);return}R(new Set([e.path])),H(e.path),U.current=e.path,"folder"===e.type?ed(e):l?.(e.path)},[ed,l,eB]),eO=(0,r.useCallback)(e=>e?"folder"===e.type?e.path:iQ(e.path):t,[t]),e_=(0,r.useCallback)(e=>{let t=eL(e);t.length&&T({files:t})},[eL]),eK=(0,r.useCallback)(async()=>{let e=S?.files||[];T(null),1===e.length?await eb(e[0]):await eg(e),R(new Set)},[S,eb,eg]),eW=(0,r.useCallback)((e,t)=>{let s=eL(e).map(e=>e.path);s.length&&B({paths:s,mode:t})},[eL]),eH=(0,r.useCallback)(async e=>{L?.paths?.length&&(await ej(L.paths,eO(e),L.mode),"cut"===L.mode&&B(null))},[L,ej,eO]),eq=(0,r.useCallback)(async(e,t)=>{if(!e.length)return;let n=0;O({total:e.length,done:0,failed:0}),await s.uploadFiles(t,e,{onConflict:(e,t)=>new Promise(s=>K({name:t||e?.name,resolve:s})),onFileDone:()=>O(e=>e?{...e,done:e.done+1}:e),onError:()=>{n+=1,O(e=>e?{...e,done:e.done+1,failed:n}:e)}}),O(e=>e&&n?e:null),K(null),await eo(t),eu(t),ec()},[s,eo,eu,ec]),eU=(0,r.useCallback)(async(e,t)=>{eq(await oh(e),t)},[eq]),eX=(0,r.useCallback)(()=>v(null),[]),eV=(0,r.useCallback)((e,t)=>{let s=M.current,n=s.has(t.path)?[...s]:[t.path];e.dataTransfer.setData(oS,JSON.stringify(n)),e.dataTransfer.effectAllowed="move"},[]),eG=(0,r.useCallback)((e,t)=>{let s=oR(e);("folder"===t.type||s)&&(e.preventDefault(),e.dataTransfer.dropEffect=s?"copy":"move","folder"===t.type&&A(t.path))},[]),eJ=(0,r.useCallback)(e=>{A(t=>t===e.path?null:t)},[]),eY=(0,r.useCallback)((e,t)=>{let s=oR(e);if("folder"!==t.type&&!s)return;if(e.preventDefault(),e.stopPropagation(),A(null),D(!1),s)return void eU(e.dataTransfer,eO(t));let n=oE(e);n&&ew(n,t.path)},[eU,eO,ew]),eZ=(0,r.useCallback)(e=>{let t=j?.dir||eS(),s=[...e.target.files].map(e=>({file:e,relativePath:e.webkitRelativePath||e.name}));e.target.value="",k(null),eq(s,t)},[j,eS,eq]),eQ=(0,r.useCallback)((e,t)=>{if(!eI.length)return;let s=eI.findIndex(e=>e.file.path===W),n=eI[Math.min(eI.length-1,Math.max(0,-1===s?0:s+e))];if(!n)return;let r=n.file.path;t&&U.current?R(eB(U.current,r)):(R(new Set([r])),U.current=r),H(r),q.current?.querySelector(`[data-path="${CSS.escape(r)}"]`)?.scrollIntoView({block:"nearest"})},[eI,W,eB]),e0=(0,r.useCallback)(e=>{if(g||j||S)return;let t=eD(W),s=e.metaKey||e.ctrlKey;if(s&&"a"===e.key.toLowerCase()){e.preventDefault(),R(new Set(eI.map(e=>e.file.path))),U.current=eI[0]?.file.path||null;return}if(s&&"c"===e.key.toLowerCase()){e.preventDefault(),eW(t,"copy");return}if(s&&"x"===e.key.toLowerCase()){e.preventDefault(),eW(t,"cut");return}if(s&&"v"===e.key.toLowerCase()){e.preventDefault(),eH(t);return}switch(e.key){case"ArrowDown":e.preventDefault(),eQ(1,e.shiftKey);return;case"ArrowUp":e.preventDefault(),eQ(-1,e.shiftKey);return;case"ArrowRight":if(!t)return;e.preventDefault(),"folder"!==t.type||es.has(t.path)?eQ(1,!1):ed(t);return;case"ArrowLeft":if(!t)return;e.preventDefault(),"folder"===t.type&&es.has(t.path)?ed(t):eQ(-1,!1);return;case"Enter":if(!t)return;e.preventDefault(),tE()?(v(t),w(t.name)):"folder"===t.type?ed(t):l?.(t.path);return;case"F2":if(!t)return;e.preventDefault(),v(t),w(t.name);return;case"Delete":case"Backspace":if(!t)return;e.preventDefault(),e_(t);return;case"Escape":R(new Set),B(null);return}},[g,j,S,W,eD,eI,es,ed,l,eQ,eW,eH,e_]),e1=(e,t)=>{if(!eA(e))return null;let s="folder"===e.type,r=s&&es.has(e.path),l=E.has(e.path);return(0,n.jsx)(ox,{file:e,depth:t,isFolder:s,isExpanded:r,isLoading:s&&en.has(e.path),isActive:eP===e.path,isSelected:l,isRenaming:g?.path===e.path,isDragOver:P===e.path&&s,isCut:L?.mode==="cut"&&L.paths.includes(e.path),gitStatus:el[Q(e.path)],renameValue:g?.path===e.path?y:"",renameInputRef:Y,onRenameChange:w,onRenameSubmit:eE,onRenameCancel:eX,onToggleFolder:ed,onClick:eF,onContextMenu:eM,onTouchStart:e$,onTouchEnd:ez,onDragStart:eV,onDragOver:eG,onDragLeave:eJ,onDrop:eY,compact:d,children:s&&r&&(0,n.jsxs)("div",{children:[(ee.get(e.path)||[]).map(e=>e1(e,t+1)),er.has(e.path)&&(0,n.jsx)(om,{depth:t+1,compact:d})]})},e.path)},e2=(0,r.useMemo)(()=>ee.get(t)||[],[ee,t]);(0,r.useEffect)(()=>{if(!u)return;let e=!0;return(async()=>{for(let s of Object.keys(el)){if("folder-changed"!==el[s])continue;let n=`${t}/${s}`;if(!ee.has(n)&&(await eo(n),!e))return;eu(n)}})(),()=>{e=!1}},[u,el,t]),(0,r.useEffect)(()=>{if(!eP||!q.current)return;let e=setTimeout(()=>{let e=q.current?.querySelector(`[data-path="${CSS.escape(eP)}"]`);e?.scrollIntoView({block:"nearest"})},0);return()=>clearTimeout(e)},[eP,ee]);let e5=(0,r.useMemo)(()=>i0(t),[t]),e3=(e,t)=>{(0,eN.e)(),k({type:e,dir:t}),C("")};(0,r.useEffect)(()=>{if(m)return m({newFile:()=>e3("file",eS()),newFolder:()=>e3("folder",eS()),refresh:ex,collapseAll:em,hasExpanded:es.size>0,showHidden:ea,toggleHidden:()=>ei(e=>!e)}),()=>m(null)},[m,ea,ex,em,es.size,t]);let e4=(0,r.useCallback)(async e=>{if(!t||!s||!e?.path)return;let n=Q(e.path),r=await oC(s,t,n,"folder"===e.type);r?.success&&(ec(),window.dispatchEvent(new CustomEvent(et.GW)))},[t,s,Q,ec]),e6="text-text-muted hover:text-text p-1 rounded hover:bg-surface-2";return(0,n.jsxs)("div",{className:"relative flex flex-col flex-1 min-h-0 text-text overflow-hidden",children:[!d&&(0,n.jsxs)("div",{style:{height:32},className:"bg-surface border-b border-border flex items-center gap-2 sticky top-0 z-10 flex-shrink-0 px-3",children:[(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),i?.()},className:"flex items-center gap-1 flex-1 min-w-0 hover:text-text",children:[(0,n.jsx)("span",{className:"text-xs uppercase tracking-wider text-text-muted font-medium truncate",children:e5||"No Workspace"}),(0,n.jsx)(ev.Ay,{name:"ChevronDown",size:12,className:"text-text-muted shrink-0"})]}),(0,n.jsx)("button",{onClick:()=>e3("file",eS()),className:e6,title:"New File",children:(0,n.jsx)(ev.Ay,{name:"Plus",size:14})}),(0,n.jsx)("button",{onClick:()=>e3("folder",eS()),className:e6,title:"New Folder",children:(0,n.jsx)(ev.Ay,{name:"FolderOpen",size:14})}),(0,n.jsx)("button",{onClick:ex,className:e6,title:"Refresh",children:(0,n.jsx)(ev.Ay,{name:"RefreshCw",size:14})}),es.size>0&&(0,n.jsx)("button",{onClick:em,className:e6,title:x("fileExplorer.collapseAll"),children:(0,n.jsx)(ev.Ay,{name:"ChevronsDownUp",size:14})}),(0,n.jsx)("button",{onClick:()=>ei(e=>!e),className:`p-1 rounded hover:bg-surface-2 ${ea?"text-text":"text-text-muted hover:text-text"}`,title:ea?"Hide hidden files":"Show hidden files",children:(0,n.jsx)(ev.Ay,{name:ea?"Eye":"EyeOff",size:14})})]}),(0,n.jsx)("div",{ref:q,tabIndex:0,onKeyDown:e0,className:`flex-1 overflow-auto py-1 outline-none ${I?"ring-2 ring-inset ring-brand-500/40 bg-brand-500/5":""}`,onDragOver:e=>{e.preventDefault();let t=oR(e);e.dataTransfer.dropEffect=t?"copy":"move",t&&D(!0)},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||D(!1)},onClick:e=>{e.target===e.currentTarget&&R(new Set)},onDrop:e=>{if(e.preventDefault(),D(!1),oR(e))return void eU(e.dataTransfer,t);let s=oE(e);s&&ew(s,t)},children:u&&!e2.some(eA)?(0,n.jsx)("div",{className:"text-text-subtle text-xs px-3 py-4 text-center",children:x("git.noChanges")}):0!==e2.length||en.has(t)?(0,n.jsxs)(n.Fragment,{children:[e2.map(e=>e1(e,0)),er.has(t)&&(0,n.jsx)("div",{className:"text-[11px] text-text-muted italic py-0.5 px-3",children:"Showing first 300 entries — use search for the rest."})]}):(0,n.jsx)("div",{className:"text-text-subtle text-xs px-3 py-4 text-center",children:"Empty workspace"})}),p&&(0,n.jsx)("div",{ref:f,className:"fixed z-50 menu-popover p-1 min-w-[150px] pop-in",style:{left:b.left,top:b.top},onClick:e=>e.stopPropagation(),children:(e=>{if(!e)return[];let t="folder"===e.type,n=eL(e),r=n.length>1,a=[];return!r&&t?(o&&a.push({label:x("workspaces.openHere"),icon:"Terminal",action:()=>o(e.path)}),c&&a.push({label:"Search in Folder",icon:"Search",action:()=>c(e.path)}),a.push({label:"New File",icon:"Plus",action:()=>e3("file",e.path)}),a.push({label:"New Folder",icon:"FolderOpen",action:()=>e3("folder",e.path)})):!r&&(a.push({label:"Open",icon:"File",action:()=>l?.(e.path)}),(0,et.YO)(e.path)&&a.push({label:x("editor.preview"),icon:"Eye",action:()=>l?.(e.path,{preview:!0})})),a.push({label:"Cut",icon:"Scissors",action:()=>eW(e,"cut")}),a.push({label:"Copy",icon:"Copy",action:()=>eW(e,"copy")}),L?.paths?.length&&a.push({label:"Paste",icon:"ClipboardPaste",action:()=>eH(e)}),r||(a.push({label:"Reveal in OS",icon:"FolderOpen",action:()=>s.revealInOS(e.path)}),a.push({label:"Rename",icon:"Pencil",action:()=>{v(e),w(e.name)}}),a.push({label:"Duplicate",icon:"Copy",action:()=>ey(e)}),a.push({label:"Copy Path",icon:"Copy",action:()=>eR(e.path)}),a.push({label:"Copy Relative Path",icon:"Copy",action:()=>eR(Q(e.path))}),a.push({label:x("git.addToGitignore",{defaultValue:"Add to .gitignore"}),icon:"EyeOff",action:()=>e4(e)})),a.push({label:r?`Delete ${n.length} items`:"Delete",icon:"Trash2",danger:!0,action:()=>e_(e)}),a})(p.file).map((e,t)=>(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),e.action(),h(null)},className:`w-full flex items-center gap-1.5 px-2 py-1.5 text-xs text-left hover:bg-surface-2/80 rounded-[6px] transition-colors ${e.danger?"text-red-400":"text-text"}`,children:[(0,n.jsx)(ev.Ay,{name:e.icon,size:13,className:"shrink-0"}),(0,n.jsx)("span",{className:"truncate",children:e.label})]},t))}),j&&(0,sp.createPortal)((0,n.jsxs)("div",{className:"modal-overlay z-50",children:[(0,n.jsx)("div",{className:"absolute inset-0 scrim fade-in",onClick:()=>k(null)}),(0,n.jsxs)("div",{className:"relative card-elev p-4 w-full max-w-sm my-auto pop-in",children:[(0,n.jsx)("h3",{className:"text-sm font-semibold text-text mb-2",children:"folder"===j.type?"New Folder":"New File"}),(0,n.jsxs)("p",{className:"text-xs text-text-muted mb-2 truncate",children:["in ",Q(j.dir)||e5||"/"]}),(0,n.jsx)("input",{ref:Z,value:N,onChange:e=>C(e.target.value),onKeyDown:e=>{"Enter"===e.key?eT(j.type):"Escape"===e.key&&k(null)},placeholder:"folder"===j.type?"folder name":"file name",className:"w-full bg-surface-3 text-text text-sm px-2 py-1.5 rounded outline-none border border-border focus:border-brand-500"}),(0,n.jsxs)("div",{className:"flex items-center gap-2 mt-3",children:[(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),("folder"===j.type&&G?V:X).current?.click()},className:"flex items-center gap-1.5 px-2 py-1.5 text-xs text-text-muted hover:text-text rounded-brand hover:bg-surface-3",title:"folder"===j.type&&G?"Upload a folder from this computer":"Upload files from this computer",children:[(0,n.jsx)(ev.Ay,{name:"Upload",size:13}),"Upload"]}),(0,n.jsx)("div",{className:"flex-1"}),(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),k(null)},className:"px-3 py-1.5 text-sm bg-surface-3 hover:bg-surface text-text rounded-brand",children:"Cancel"}),(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),eT(j.type)},className:"px-3 py-1.5 text-sm bg-brand-500 hover:bg-brand-500/80 text-white rounded-brand",children:"Create"})]})]}),(0,n.jsx)("input",{ref:X,type:"file",multiple:!0,className:"hidden",onChange:eZ}),(0,n.jsx)("input",{ref:V,type:"file",webkitdirectory:"",className:"hidden",onChange:eZ})]}),document.body),F&&(0,n.jsx)("div",{className:"absolute bottom-0 inset-x-0 bg-surface-2 border-t border-border px-3 py-1.5 pb-safe text-[11px] text-text-muted flex items-center gap-2",children:F.failed?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"text-danger",children:x("fileExplorer.uploadFailedCount",{n:F.failed,total:F.total})}),(0,n.jsx)("button",{type:"button",onClick:()=>O(null),className:"ml-auto underline hover:text-text",children:x("common.close")})]}):(0,n.jsx)("span",{children:x("fileExplorer.uploadingCount",{n:Math.min(F.done+1,F.total),total:F.total})})}),_&&(0,n.jsx)(oN,{name:_.name,onResolve:e=>{_.resolve(e),K(null)}}),(0,n.jsx)(ek.A,{isOpen:!!S,onClose:()=>T(null),onConfirm:eK,title:"Delete",message:(S?.files?.length||0)>1?`Are you sure you want to delete these ${S.files.length} items?`:`Are you sure you want to delete "${S?.files?.[0]?.name}"?`,confirmText:"Delete",cancelText:"Cancel"})]})}function o$(e){let{x:t,y:s,items:l,onClose:a}=e,i=(0,r.useRef)(null);return(0,r.useEffect)(()=>{if(!i.current)return;let e=i.current.getBoundingClientRect(),n=Math.min(t,window.innerWidth-e.width-8),r=Math.min(s,window.innerHeight-e.height-8);i.current.style.left=`${Math.max(8,n)}px`,i.current.style.top=`${Math.max(8,r)}px`},[t,s]),(0,r.useEffect)(()=>{let e=e=>{i.current&&!i.current.contains(e.target)&&a()},t=e=>{"Escape"===e.key&&a()},s=setTimeout(()=>{document.addEventListener("mousedown",e),document.addEventListener("contextmenu",e,!0),document.addEventListener("keydown",t)},0);return()=>{clearTimeout(s),document.removeEventListener("mousedown",e),document.removeEventListener("contextmenu",e,!0),document.removeEventListener("keydown",t)}},[a]),(0,n.jsx)("div",{ref:i,className:"fixed z-50 min-w-[180px] py-1 rounded-lg border border-border bg-surface shadow-elev pop-in",style:{left:t,top:s},onContextMenu:e=>e.preventDefault(),children:l.filter(Boolean).map((e,t)=>(0,n.jsxs)("button",{type:"button",disabled:e.disabled,onClick:t=>{t.stopPropagation(),e.onClick?.(),a()},className:`w-full flex items-center gap-2.5 px-3 py-1.5 text-sm text-left transition-colors ${e.disabled?"text-text-subtle cursor-not-allowed":e.danger?"text-danger hover:bg-[rgba(var(--danger-rgb),0.12)]":"text-text hover:bg-surface-2"}`,children:[e.icon&&(0,n.jsx)(e.icon,{size:14,className:"flex-shrink-0"}),(0,n.jsx)("span",{className:"flex-1 truncate",children:e.label})]},e.key+t))})}let oz={Copy:ev.QR,FileText:ev.iU,ExternalLink:ev.Gr,Undo2:ev.bE,X:ev.X,EyeOff:ev.X_},oP=(e,t)=>(e||"").split("\n").map(e=>e.trim()).find(t)||"",oA=(e,t)=>{let s=oP(t,e=>/files? changed/.test(e));return e("git.commitSuccess")+(s?` \xb7 ${s}`:"")},oI=(e,t)=>{if(/up.to.date/i.test(t||""))return e("git.upToDate");let s=oP(t,e=>e.includes("->"));return e("git.pushSuccess")+(s?` \xb7 ${s}`:"")},oD="changes",oL="untracked";function oB(e){if(!e)return"";let t=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return t>=0?e.slice(t+1):e}function oF(e){if(!e)return"";let t=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return t>=0?e.slice(0,t):""}function oO(e,t){if(!e)return t;let s=e.endsWith("/")||e.endsWith("\\")?"":"/";return`${e}${s}${t}`}let o_=(0,r.memo)(function(e){let{file:t,workspace:s,isUntracked:r,t:l,isTouch:a,openDiff:i,onCtxMenu:o,onDiscard:c,onStage:d}=e,u=et.vs[t.status]||"text-text-muted";return oO(s,t.path),(0,n.jsxs)("div",{className:"group relative flex items-center gap-1.5 px-2 py-1 hover:bg-surface-2 cursor-pointer",onContextMenu:e=>o(t,e),onClick:()=>{(0,eN.e)(),i(t)},children:[(0,n.jsx)("span",{className:"flex-shrink-0 flex items-center",children:oo({name:oB(t.path),path:t.path,type:"file"},16)}),(0,n.jsx)("span",{className:"truncate text-xs text-text",title:t.path,children:oB(t.path)}),(0,n.jsx)("span",{className:"truncate text-[11px] text-text-muted flex-1",title:oF(t.path),children:oF(t.path)}),(0,n.jsxs)("div",{className:`absolute right-[22px] top-1/2 -translate-y-1/2 flex items-center gap-0.5 pl-2 pr-1 bg-surface-2 transition-opacity ${a?"opacity-100":"opacity-0 group-hover:opacity-100"}`,children:[(0,n.jsx)("button",{type:"button",title:l(r?"common.delete":"git.discard"),onClick:e=>{e.stopPropagation(),(0,eN.e)(),c(t)},className:"p-0.5 text-text-muted hover:text-text",children:(0,n.jsx)(ev.X,{size:12})}),(0,n.jsx)("button",{type:"button",title:l("git.stage"),onClick:e=>{e.stopPropagation(),(0,eN.e)(),d(t)},className:"p-0.5 text-text-muted hover:text-text",children:(0,n.jsx)(ev.FW,{size:12})})]}),(0,n.jsx)("span",{className:`flex-shrink-0 w-4 h-4 flex items-center justify-center text-[10px] font-mono rounded bg-surface-2 ${u}`,children:t.status})]})},(e,t)=>e.file.path===t.file.path&&e.file.status===t.file.status&&e.workspace===t.workspace&&e.isUntracked===t.isUntracked&&e.isTouch===t.isTouch&&e.t===t.t);function oK(e){let{workspace:t,fileBus:s,onOpenFile:l,tagDiffWithRepo:a=!1}=e,{t:i}=(0,eC.s)(),o=aD(),[c,d]=(0,r.useState)(""),[u,m]=(0,r.useState)(null),[x,p]=(0,r.useState)(null),[h,f]=(0,r.useState)([]),[b,g]=(0,r.useState)(""),[v,y]=(0,r.useState)(!1),[w,j]=(0,r.useState)(null),[k,N]=(0,r.useState)(new Set([oD,oL])),[C,S]=(0,r.useState)({}),[T,E]=(0,r.useState)(!1),[R,M]=(0,r.useState)(!1),[$,z]=(0,r.useState)(null),[P,A]=(0,r.useState)(!1),[I,D]=(0,r.useState)(null),[L,B]=(0,r.useState)(null),F=(0,r.useCallback)(async()=>{if(!t||!s)return;y(!0);let[e,n]=await Promise.all([s.gitStatus?.(t),s.gitBranch?.(t)]);y(!1),e?.success&&f(e.files||[]),n?.success&&(d(n.branch||""),m(n.ahead??null),p(n.behind??null))},[t,s]);(0,r.useEffect)(()=>{F()},[F]),(0,r.useEffect)(()=>{let e=null,t=()=>{clearTimeout(e),e=setTimeout(F,et.HF)};return et.vb.forEach(e=>window.addEventListener(e,t)),()=>{clearTimeout(e),et.vb.forEach(e=>window.removeEventListener(e,t))}},[F]);let{changes:O,untracked:_}=(0,r.useMemo)(()=>{let e=[],t=[];for(let s of h)"?"===s.status?t.push(s):e.push(s);return{changes:e,untracked:t}},[h]),K=(0,r.useCallback)(e=>{N(t=>{let s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s})},[]),W=(0,r.useCallback)(async e=>{t&&(await s.gitAdd?.(t,[e.path]),F())},[t,s,F]),H=(0,r.useCallback)(async()=>{t&&(await s.gitAdd?.(t,["."]),F())},[t,s,F]),q=(0,r.useCallback)(async e=>{t&&(await s.gitDiscard?.(t,e.path,e.status),F())},[t,s,F]),U=(0,r.useCallback)(e=>{z(e),M(!0)},[]),X=(0,r.useCallback)(e=>{l?.(a?(0,et.n2)(e.status,t,e.path):(0,et.Dk)(e.status,e.path))},[l,a,t]),V=(0,r.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];!b.trim()||h.length&&(A(e),E(!0))},[b,h]),G=(0,r.useCallback)(async()=>{if(!t)return;j(null);let e=await s.gitAdd?.(t,["."]);if(e&&!e.success)return void j({ok:!1,text:e.error||i("git.stageFailed")});let n=await s.gitCommit?.(t,b.trim());if(!n?.success){j({ok:!1,text:n?.output||n?.error||i("git.commitFailed")}),F();return}if(g(""),!P){j({ok:!0,text:oA(i,n.output)}),F();return}let r=await s.gitPush?.(t);j(r?.success?{ok:!0,text:`${oA(i,n.output)} \xb7 ${oI(i,r.output)}`}:{ok:!1,text:r?.output||r?.error||i("git.pushFailed")}),F()},[t,s,b,P,F,i]),J=(0,r.useCallback)(async()=>{if(!t)return;y(!0),j(null);let e=await s.gitPush?.(t);y(!1),j(e?.success?{ok:!0,text:oI(i,e.output)}:{ok:!1,text:e?.output||e?.error||i("git.pushFailed")}),F()},[t,s,F,i]),Y=(0,r.useCallback)(async()=>{if(!t)return;y(!0),j(null);let e=await s.gitPull?.(t);y(!1),j(e?.success?{ok:!0,text:((e,t)=>{if(/already up to date|up.to.date/i.test(t||""))return e("git.upToDate");let s=oP(t,e=>/files? changed|fast-forward/i.test(e));return e("git.pullSuccess")+(s?` \xb7 ${s}`:"")})(i,e.output)}:{ok:!1,text:e?.output||e?.error||i("git.pullFailed")}),F()},[t,s,F,i]),Z=(0,r.useCallback)((e,t)=>{e.stopPropagation(),(0,eN.e)();let s=e.currentTarget.getBoundingClientRect();t({x:s.right,y:s.bottom+4})},[]),[Q,ee]=(0,r.useState)(null),es=(0,r.useCallback)(async e=>{try{await navigator.clipboard.writeText(e)}catch{}},[]),en=(0,r.useCallback)((e,t)=>{t.preventDefault(),t.stopPropagation(),(0,eN.e)(),ee({file:e,x:t.clientX,y:t.clientY})},[]),er=(0,r.useCallback)(async e=>{if(!t||!s||!e?.path)return;let n=await oC(s,t,e.path);n?.success&&(window.dispatchEvent(new CustomEvent(et.GW)),F())},[t,s,F]),el=(0,r.useCallback)(e=>{let s=oO(t,e.path);return[{key:"open",label:i("git.openFile"),icon:ev.Gr,disabled:"D"===e.status,onClick:()=>l?.(s)},{key:"copyPath",label:i("files.copyPath",{defaultValue:"Copy Path"}),icon:ev.Gr,onClick:()=>es(s)},{key:"copyRel",label:i("files.copyRelPath",{defaultValue:"Copy Relative Path"}),icon:ev.Gr,onClick:()=>es(e.path)},{key:"copyName",label:i("files.copyName",{defaultValue:"Copy Filename"}),icon:ev.Gr,onClick:()=>es(oB(e.path))},{key:"addToGitignore",label:i("git.addToGitignore",{defaultValue:"Add to .gitignore"}),icon:ev.X_,onClick:()=>er(e)}]},[t,l,es,er,i]),ea=(0,r.useCallback)(e=>{S(t=>({...t,[e]:(t[e]??et.Tf)+et.aB}))},[]),ei=(e,s,r,l)=>{let a=k.has(e),c=r.slice(0,C[e]??et.Tf),d=r.length-c.length;return(0,n.jsxs)("div",{className:"border-t border-border",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),K(e)},className:"w-full flex items-center gap-1 px-2 py-1 hover:bg-surface-2 text-left",children:[a?(0,n.jsx)(ev.yQ,{size:12,className:"text-text-subtle"}):(0,n.jsx)(ev.c_,{size:12,className:"text-text-subtle"}),(0,n.jsx)("span",{className:"text-[11px] uppercase tracking-wider text-text-muted",children:s}),(0,n.jsx)("span",{className:"text-[10px] px-1.5 ml-auto rounded-brand bg-surface-3 text-text-muted",children:r.length})]}),a&&(0,n.jsxs)(n.Fragment,{children:[c.map(e=>(0,n.jsx)(o_,{file:e,workspace:t,isUntracked:l,t:i,isTouch:o,openDiff:X,onCtxMenu:en,onDiscard:U,onStage:W},`${e.status}-${e.path}`)),d>0&&(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),ea(e)},className:"w-full px-2 py-1 text-[11px] text-brand-500 hover:bg-surface-2 text-left",children:i("git.showMore",{count:d})})]})]})};return(0,n.jsxs)("div",{className:"flex flex-col h-full text-sm text-text",children:[(0,n.jsxs)("div",{className:"px-3 pt-3 pb-2 space-y-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(ev.Zr,{size:14,className:"text-text-muted"}),(0,n.jsx)("span",{className:"text-xs text-text truncate flex-1",children:c||"—"}),u>0&&(0,n.jsxs)("span",{className:"text-[10px] font-medium px-1.5 rounded-brand bg-brand-500/15 text-brand-500",children:["↑",u]}),x>0&&(0,n.jsxs)("span",{className:"text-[10px] font-medium px-1.5 rounded-brand bg-surface-3 text-text-muted",children:["↓",x]}),(0,n.jsx)("button",{type:"button",title:i("common.refresh"),onClick:()=>{(0,eN.e)(),window.dispatchEvent(new Event(et.GW))},className:"p-1 text-text-muted hover:text-text",children:(0,n.jsx)(ev.e9,{size:12,className:v?"animate-spin":""})}),(0,n.jsx)("button",{type:"button",title:i("git.gitActions"),onClick:e=>Z(e,B),className:"p-1 text-text-muted hover:text-text",children:(0,n.jsx)(ev.a4,{size:12})})]}),(0,n.jsx)("textarea",{value:b,onChange:e=>g(e.target.value),rows:2,placeholder:i("git.commitPlaceholder"),className:"w-full bg-surface-2 border border-border rounded-brand px-2 py-1 text-xs text-text placeholder-text-subtle focus:outline-none focus:border-brand-500 resize-none"}),(0,n.jsxs)("div",{className:`flex items-stretch h-7 rounded-brand overflow-hidden bg-brand-500 text-white transition-opacity ${!b.trim()||!h.length?"opacity-40":""}`,children:[(0,n.jsx)("button",{type:"button",disabled:!b.trim()||!h.length,onClick:()=>{(0,eN.e)(),V(!1)},className:"flex-1 text-xs hover:bg-black/10 disabled:cursor-not-allowed transition-colors",children:i("git.commit")}),(0,n.jsx)("span",{className:"w-px my-1.5 bg-white/25"}),(0,n.jsx)("button",{type:"button",title:i("git.gitActions"),disabled:!b.trim()||!h.length,onClick:e=>Z(e,D),className:"px-1.5 flex items-center hover:bg-black/10 disabled:cursor-not-allowed transition-colors",children:(0,n.jsx)(ev.yQ,{size:12})})]}),w&&(0,n.jsx)("div",{className:`text-[11px] leading-snug break-words rounded-brand px-2 py-1 ${w.ok?"text-[var(--success)] bg-[rgba(var(--success-rgb),0.1)]":"text-[var(--danger)] bg-[rgba(var(--danger-rgb),0.1)]"}`,children:w.text})]}),(0,n.jsxs)("div",{className:"flex-1 overflow-auto",children:[ei(oD,i("git.changes"),O,!1),ei(oL,i("git.untracked"),_,!0)]}),(0,n.jsx)(ek.A,{isOpen:T,onClose:()=>E(!1),onConfirm:G,title:i("git.stageAllConfirmTitle"),message:i("git.stageAllConfirmMessage"),confirmText:i("git.stageAndCommit"),cancelText:i("common.cancel")}),(0,n.jsx)(ek.A,{isOpen:R,onClose:()=>{M(!1),z(null)},onConfirm:()=>{$&&q($),z(null)},title:i("git.discardConfirmTitle"),message:$?"?"===$.status?i("git.discardConfirmDelete",{name:oB($.path)}):i("git.discardConfirmDiscard",{name:oB($.path)}):"",confirmText:i("git.discard"),cancelText:i("common.cancel")}),Q&&(0,n.jsx)(o$,{x:Q.x,y:Q.y,items:el(Q.file),onClose:()=>ee(null)}),I&&(0,n.jsx)(o$,{x:I.x,y:I.y,items:[{key:"commitPush",label:i("git.commitAndPush"),icon:ev.Do,disabled:!b.trim()||!h.length,onClick:()=>V(!0)}],onClose:()=>D(null)}),L&&(0,n.jsx)(o$,{x:L.x,y:L.y,items:[{key:"push",label:i("git.push"),icon:ev.Do,onClick:J},{key:"pull",label:i("git.pull"),icon:ev.yd,onClick:Y},{key:"stageAll",label:i("git.stageAll"),icon:ev.FW,disabled:!h.length,onClick:H}],onClose:()=>B(null)})]})}let oW=[{key:"files",icon:ev.sv,labelKey:"workspaces.tabFiles"},{key:"git",icon:ev.Zr,labelKey:"workspaces.tabGit"},{key:"trees",icon:ev.dx,labelKey:"workspaces.tabTrees"}].filter(e=>"trees"!==e.key);function oH(e){let{results:t,loading:s,query:l,searchDir:a,workspace:i,onOpen:o}=e,{t:c}=(0,eC.s)(),[d,u]=(0,r.useState)(()=>new Set);if(!l||l.length<2){let e=a?a.split("/").pop():"";return(0,n.jsxs)("div",{className:"p-6 text-xs text-text-subtle text-center flex flex-col items-center gap-2",children:[(0,n.jsx)(ev.vj,{size:20,className:"opacity-40"}),(0,n.jsx)("span",{children:e?`Type at least 2 characters to search in ${e}`:c("files.searchPlaceholder")})]})}if(s)return(0,n.jsx)("p",{className:"p-4 text-xs text-text-subtle text-center",children:c("files.searching")});if(!t.length)return(0,n.jsx)("p",{className:"p-4 text-xs text-text-subtle text-center",children:c("files.noFilesFound")});let m=t.reduce((e,t)=>e+t.matches.length,0);return(0,n.jsxs)("div",{className:"flex-1 min-h-0 overflow-y-auto modal-scrollable",children:[(0,n.jsxs)("p",{className:"px-2 py-1 text-[10px] text-text-muted sticky top-0 bg-surface/80 backdrop-blur-md z-[1]",children:[m," results in ",t.length," files"]}),t.map(e=>{let t=e.path.split("/").pop(),s=e.path.slice(0,e.path.length-t.length).replace(i,"").replace(/^\//,""),r=!d.has(e.path);return(0,n.jsxs)("div",{className:"border-b border-border-subtle",children:[(0,n.jsxs)("button",{onClick:()=>{let t;(0,eN.e)(),t=e.path,u(e=>{let s=new Set(e);return s.has(t)?s.delete(t):s.add(t),s})},className:"w-full px-2 py-1 flex items-center gap-1.5 hover:bg-surface-2 transition-colors text-left",title:e.path,children:[(0,n.jsx)(ev.c_,{size:11,className:`flex-shrink-0 text-text-subtle transition-transform duration-150 ${r?"rotate-90":""}`}),(0,n.jsx)(ev.ZH,{size:12,className:"text-text-subtle flex-shrink-0"}),(0,n.jsx)("span",{className:"truncate text-xs text-text",children:t}),(0,n.jsx)("span",{className:"truncate text-[10px] text-text-subtle flex-1",children:s}),(0,n.jsx)("span",{className:"text-[9px] px-1 rounded-brand bg-surface-3 text-text-muted flex-shrink-0",children:e.matches.length})]}),r&&e.matches.map((t,s)=>{let r=Math.max(0,Math.min(t.column-1-(t.contextStart||0),t.lineText.length)),l=Math.min(t.lineText.length,r+(t.matchLength||0));return(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),o(e.path,t)},className:"w-full px-2 pl-6 pr-2 py-0.5 flex items-baseline gap-2 hover:bg-surface-2 transition-colors text-left",title:t.lineText,children:[(0,n.jsx)("span",{className:"text-[10px] text-text-subtle font-mono flex-shrink-0",children:t.line}),(0,n.jsxs)("span",{className:"text-[11px] font-mono text-text-muted truncate",children:[t.lineText.slice(0,r),(0,n.jsx)("span",{className:"bg-brand-500/30 text-text rounded-sm",children:t.lineText.slice(r,l)}),t.lineText.slice(l)]})]},`${e.path}-${s}`)})]},e.path)})]})}function oq(e){let{root:t,multiple:s,isOpen:r,onToggle:l,onRemove:a=null,removeLabel:i="",children:o}=e;return s?(0,n.jsxs)("div",{className:`flex flex-col min-h-0 ${r?"flex-1":"flex-shrink-0"}`,children:[(0,n.jsxs)("div",{className:"group px-2 py-1 flex items-center gap-1.5 text-[10px] uppercase tracking-wider text-text-muted bg-surface-2/40 hover:bg-surface-2 transition-colors",children:[(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),l()},className:"flex-1 min-w-0 flex items-center gap-1.5 hover:text-text transition-colors",title:t.path,children:[(0,n.jsx)(ev.c_,{size:11,className:`flex-shrink-0 transition-transform duration-150 ${r?"rotate-90":""}`}),(0,n.jsx)("span",{className:"truncate flex-1 text-left",children:t.branch||t.name||t.path.split("/").pop()}),!t.isMain&&(0,n.jsx)(ev.dx,{size:10,className:"flex-shrink-0 opacity-60"})]}),a&&(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),a()},title:i,className:"p-0.5 shrink-0 hover:text-red-500 transition-colors",children:(0,n.jsx)(ev.TB,{size:11})})]}),r&&(0,n.jsx)("div",{className:"flex-1 min-h-0 flex flex-col",children:o})]}):(0,n.jsx)("div",{className:"flex-1 min-h-0 flex flex-col",children:o})}function oU(e){let{icon:t,label:s,onClick:r,active:l,disabled:a,spinning:i}=e;return(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),r?.()},disabled:a,title:s,className:`p-2 sm:p-1 rounded-[3px] hover:bg-surface-2 transition-colors disabled:opacity-40 ${l?"text-brand-500":"text-text-muted hover:text-text"}`,children:(0,n.jsx)(t,{size:16,className:`sm:w-[13px] sm:h-[13px] ${i?"animate-spin":""}`})})}function oX(e){let{active:t,onClick:s,title:r,children:l}=e;return(0,n.jsx)("button",{type:"button",title:r,onClick:()=>{(0,eN.e)(),s()},className:`px-1 h-5 text-[10px] font-medium rounded-[3px] border transition-colors shrink-0 ${t?"bg-brand-500 text-white border-brand-500":"bg-transparent text-text-muted border-transparent hover:bg-surface-2"}`,children:l})}function oV(e){let{onClick:t,children:s}=e;return(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),t()},className:"w-full px-3 py-1.5 text-[11px] text-text-subtle hover:text-text hover:bg-surface-2 transition-colors text-left",children:s})}function oG(e){let{repo:t,changedCount:s=0,isOpen:r,onToggle:l,onHide:a,children:i}=e,{t:o}=(0,eC.s)();return(0,n.jsxs)("div",{className:"border-b border-border-subtle last:border-0",children:[(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),l()},className:"group/repo w-full sticky top-0 z-10 px-2 py-1 flex items-center gap-1.5 text-[10px] uppercase tracking-wider text-text-muted hover:text-text bg-surface-3/80 backdrop-blur-md transition-colors",children:[(0,n.jsx)(ev.c_,{size:11,className:`flex-shrink-0 transition-transform duration-150 ${r?"rotate-90":""}`}),(0,n.jsx)("span",{className:"truncate flex-1 text-left",title:t.relPath||t.name,children:t.relPath||t.name}),t.branch&&(0,n.jsx)("span",{className:"text-text-subtle normal-case tracking-normal truncate max-w-[45%]",title:t.branch,children:t.branch}),s>0&&(0,n.jsx)("span",{className:"px-1 rounded-[2px] bg-brand-500/15 text-brand-500 normal-case tracking-normal flex-shrink-0",children:s}),a&&(0,n.jsx)("span",{role:"button",tabIndex:-1,onClick:e=>{e.stopPropagation(),(0,eN.e)(),a()},className:"p-0.5 text-text-subtle hover:text-text flex-shrink-0 opacity-100 sm:opacity-0 sm:group-hover/repo:opacity-100 transition-opacity",title:o("workspaces.hideRepo"),children:(0,n.jsx)(ev.X_,{size:11})})]}),r&&i]})}let oJ=(0,r.memo)(function(e){let{workspacePath:t,filesRoot:s=null,cwdHint:l=null,fileBus:a,activeFile:i,tab:o,onTabChange:c,width:d,onResize:u,onClose:m,onOpenFile:x,onNewTerminal:p,onAddWorkspace:h,onOpenFiles:f,homeDir:b,changedPerRepo:g={},hiddenRepos:v=[],onHiddenReposChange:y,isDesktop:w=!0}=e,{t:j}=(0,eC.s)(),k=a||eb.getState(),N="trees"===o?"git":o,{repos:C,refresh:S,scanning:T,deep:E,scanDeeper:R}=function(e,t){let[s,n]=(0,r.useState)([]),[l,a]=(0,r.useState)(!1),i=t||eb.getState(),[o,c]=(0,r.useState)(!1),d=(0,r.useRef)(0),u=(0,r.useCallback)(async(t,s)=>{if(!e||!i?.gitScanRepos)return;let r=++d.current;a(!0),t&&await i.gitRefreshRepos?.(e);let l=s?ez.Tk.deepMaxDepth:ez.Tk.maxDepth,o=await iJ(()=>i.gitScanRepos(e,l,t),()=>d.current===r);d.current===r&&(a(!1),n(o?.success&&o.repos||[]))},[e,i]);return(0,r.useEffect)(()=>{let e=setTimeout(()=>void u(!1,o),0);return()=>{clearTimeout(e),d.current++}},[u,o]),{repos:s,refresh:(0,r.useCallback)(()=>u(!0,o),[u,o]),scanning:l,deep:o,scanDeeper:(0,r.useCallback)(()=>c(!0),[])}}(t,k),M=s||t,{roots:$,refresh:z}=function(e,t){let[s,n]=(0,r.useState)([]),l=t||eb.getState(),a=(0,r.useRef)(0),i=(0,r.useCallback)(async()=>{if(!e||!l?.gitWorktreeList)return n([]);let t=++a.current,s=await iJ(()=>l.gitWorktreeList(e),()=>a.current===t);if(a.current===t){if(!s?.success||!s.worktrees?.length)return n([{path:e,branch:null,name:iY(e)}]);n(s.worktrees.map(e=>({path:e.path,branch:e.branch,name:iY(e.path),isMain:e.isMain})))}},[e,l]);return(0,r.useEffect)(()=>{let e=setTimeout(()=>void i(),0);return()=>{clearTimeout(e),a.current++}},[i]),{roots:s,refresh:i}}(M,k),P=()=>{S(),z()},{branch:A}=lx(t,k),I=(0,r.useRef)({path:null,branch:null});(0,r.useEffect)(()=>{let e=I.current;I.current={path:t,branch:A},e.path===t&&null!==e.branch&&e.branch!==A&&(S(),z(),window.dispatchEvent(new Event(et.GW)))},[A,t]);let[D,L]=(0,r.useState)({forWorkspace:t,showClean:!1,openRepo:null}),B=D.forWorkspace===t?D:{showClean:!1,openRepo:null},F=B.showClean,O=B.openRepo,_=e=>L({...B,forWorkspace:t,openRepo:e}),K=new Set(v),W=e=>g[e.path]??e.changedCount??0,H=e=>!e.relPath||e.path===t,q=C.filter(e=>!K.has(e.path)),U=q.filter(e=>W(e)>0).reduce((e,t)=>e+W(t),0),X=F?q:q.filter(e=>W(e)>0||H(e)),V=X.filter(H),G=X.filter(e=>!H(e)).sort((e,t)=>(W(t)>0)-(W(e)>0)||(e.relPath||e.path).localeCompare(t.relPath||t.path)),J=F?0:q.length-X.length,Y=C.length-q.length,Z=ez.G.map(e=>X.find(t=>t.branch===e)).find(Boolean),Q=(Z||X.find(H)||X[0])?.path||null,ee=(X.some(e=>e.path===O)?O:void 0)??(""===O?null:Q),es=e=>y?.([...v,e]),en=e=>!!y&&!H(e),er=!w||d>=ez.Ds.min,[el,ea]=(0,r.useState)(null),[ei,eo]=(0,r.useState)(null),[ec,ed]=(0,r.useState)(null),[eu,em]=(0,r.useState)(null),ex=$.find(e=>e.isMain)?.path||t,ep=async e=>{ed(null);let t=await k.gitWorktreeRemove(ex,e.path,{probe:!0,deleteBranch:e.branch||void 0});if(!t?.success)return ed(t?.error||"Probe failed");eo({root:e,sessions:t.sessions||[],branchMerged:t.branchMerged})},eh=async function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];ed(null),em(null);let s=await k.gitWorktreeRemove(ex,e.path,{confirmed:!0,force:t,deleteBranch:e.branch||void 0});return!s?.success&&/use --force/i.test(s?.error||"")?eo({root:e,dirty:!0}):(eo(null),s?.success)?void(s.branchKept&&em(e.branch),P()):ed(s?.error||"Remove failed")},ef=l||M,eg=(0,r.useMemo)(()=>{let e=$.filter(e=>ef===e.path||ef?.startsWith(`${e.path}/`));return e.length?e.sort((e,t)=>t.path.length-e.path.length)[0].path:($.find(e=>e.isMain)||$[0])?.path||M},[$,ef,M]),[ey,ew]=(0,r.useState)({forProbe:null,path:null}),ej=ey.forProbe===ef?ey.path:eg,[eS,eT]=(0,r.useState)({forRoot:null,searchDir:null,show:!1,query:"",results:[],loading:!1}),[eE,eR]=(0,r.useState)({caseSensitive:!1,wholeWord:!1,regex:!1}),eM=eS.forRoot===M?eS:{show:!1,searchDir:null,query:"",results:[],loading:!1},e$=(0,r.useRef)(null),eP=(0,r.useCallback)(()=>{eT({forRoot:null,searchDir:null,show:!1,query:"",results:[],loading:!1})},[]),eA=(0,r.useCallback)(e=>{eT({forRoot:M,searchDir:e,show:!0,query:"",results:[],loading:!1})},[M]),eI=(0,r.useCallback)(()=>{eT(e=>{let t={...e,searchDir:null};return e.query&&e.query.length>=2&&(t.loading=!0,k.searchInFiles(M,e.query,eE).then(e=>{eT(t=>t.loading?{...t,results:e.success?e.results:[],loading:!1}:t)})),t})},[k,M,eE]),eD=(0,r.useCallback)(e=>{if(eT(t=>({...t,query:e})),e$.current&&clearTimeout(e$.current),!e||e.length<2)return void eT(e=>({...e,results:[],loading:!1}));eT(e=>({...e,loading:!0}));let t=eM.searchDir||M;e$.current=setTimeout(async()=>{let s=await k.searchInFiles(t,e,eE);eT(t=>t.query===e&&t.loading?{...t,results:s.success?s.results:[],loading:!1}:t)},300)},[k,M,eM.searchDir,eE]),eL=(0,r.useCallback)(e=>{eT(t=>{if(!t.query||t.query.length<2)return t;let s={...t,loading:!0};return k.searchInFiles(t.searchDir||M,t.query,e).then(e=>{eT(t=>t.loading?{...t,results:e.success?e.results:[],loading:!1}:t)}),s})},[k,M]),eB=e=>{let t={...eE,[e]:!eE[e]};eR(t),eL(t)};return(0,r.useEffect)(()=>()=>{e$.current&&clearTimeout(e$.current)},[]),(0,n.jsxs)("div",{className:`h-full flex flex-col terminal-sidebar-bg border-l border-border-subtle relative shrink ${w?"":"pb-safe"}`,style:w?{width:d,flexBasis:d,minWidth:ez.Ds.min}:void 0,children:[(0,n.jsxs)("div",{className:`h-11 ${rt} pl-1 pr-0.5 flex items-stretch gap-0 border-b border-border-subtle flex-shrink-0`,children:[oW.map(e=>{let{key:t,icon:s,labelKey:r}=e;return(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),c(t)},className:`px-3 sm:px-2 flex items-center justify-center gap-1 text-[11px] border-b-2 -mb-px transition-colors ${N===t?"text-text border-brand-500":"text-text-muted border-transparent hover:text-text"}`,title:j(r),children:[(0,n.jsx)(s,{size:18,className:"sm:w-[15px] sm:h-[15px]"}),er&&(0,n.jsx)("span",{children:j(r)}),"git"===t&&U>0&&(0,n.jsx)("span",{className:"min-w-[14px] h-[14px] px-[4px] rounded-full bg-brand-500 text-white text-[9px] font-semibold flex items-center justify-center leading-none",children:U>99?"99+":U})]},t)}),(0,n.jsx)("div",{className:"flex-1"}),(0,n.jsxs)("div",{className:"flex items-center gap-1 sm:gap-0.5",children:[(0,n.jsx)(oU,{icon:ev.e9,label:j("workspaces.refreshRepos"),onClick:()=>{let e;P(),el?.refresh?.(),(e=rA.get(k)?.get(t))&&rL(e,t,!0),window.dispatchEvent(new Event(et.GW))},disabled:T,spinning:T}),m&&(0,n.jsx)(oU,{icon:ev.X,label:j("common.close"),onClick:m})]})]}),"files"===N&&t&&(0,n.jsx)("div",{className:`${eM.show?"py-1":`h-11 ${rt}`} px-2 flex items-center gap-1.5 flex-shrink-0`,children:eM.show?(0,n.jsxs)("div",{className:"flex-1 flex flex-col min-w-0 gap-1 py-1",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,n.jsx)(ev.vj,{size:14,className:"text-text-subtle shrink-0"}),(0,n.jsx)("input",{type:"text",value:eM.query,onChange:e=>eD(e.target.value),onKeyDown:e=>{"Escape"===e.key&&eP()},placeholder:eM.searchDir?`Search in ${eM.searchDir.split("/").pop()}…`:j("files.searchPlaceholder"),className:"flex-1 min-w-0 w-0 bg-transparent text-xs text-text placeholder-text-subtle focus:outline-none",autoFocus:!0}),eM.loading?(0,n.jsx)(ev.kr,{size:13,className:"animate-spin text-brand-500 shrink-0"}):eM.query?(0,n.jsx)("button",{type:"button",onClick:()=>eD(""),className:"p-1 text-text-subtle hover:text-text",children:(0,n.jsx)(ev.X,{size:12})}):null,(0,n.jsx)(oU,{icon:ev.X,label:j("common.close"),onClick:eP})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1 pl-0.5",children:[(0,n.jsx)(oX,{active:eE.caseSensitive,onClick:()=>eB("caseSensitive"),title:"Match Case",children:"Aa"}),(0,n.jsx)(oX,{active:eE.wholeWord,onClick:()=>eB("wholeWord"),title:"Whole Word",children:"ab"}),(0,n.jsx)(oX,{active:eE.regex,onClick:()=>eB("regex"),title:"Regex",children:".*"})]})]}):(0,n.jsxs)(n.Fragment,{children:[el&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(oU,{icon:ev.FW,label:j("files.newFile"),onClick:el.newFile}),(0,n.jsx)(oU,{icon:ev.JU,label:j("files.newFolder"),onClick:el.newFolder})]}),(0,n.jsx)(oU,{icon:ev.vj,label:j("files.searchFiles"),onClick:()=>{if(eM.show)return eP();eT({forRoot:M,searchDir:null,show:!0,query:"",results:[],loading:!1})},active:eM.show}),(0,n.jsx)("div",{className:"flex-1"}),el?.hasExpanded&&(0,n.jsx)(oU,{icon:ev.WE,label:j("fileExplorer.collapseAll"),onClick:el.collapseAll}),el&&(0,n.jsx)(oU,{icon:el.showHidden?ev.kU:ev.X_,label:j("files.toggleHidden"),onClick:el.toggleHidden,active:el.showHidden}),f&&(0,n.jsx)(oU,{icon:ev.Gr,label:j("workspaces.openFullFiles"),onClick:f})]})}),"files"===N&&t&&eM.show&&eM.searchDir&&(0,n.jsxs)("div",{className:"px-3 py-1 bg-surface-3/40 flex items-center justify-between text-[11px] text-text-muted flex-shrink-0",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,n.jsx)(ev.vd,{size:12,className:"text-yellow-500/80 shrink-0"}),(0,n.jsx)("span",{className:"text-text-subtle shrink-0",children:"Folder:"}),(0,n.jsx)("span",{className:"font-medium text-text truncate max-w-[150px]",title:eM.searchDir,children:eM.searchDir.split("/").pop()})]}),(0,n.jsx)("button",{type:"button",onClick:eI,className:"text-brand-500 hover:text-brand-400 hover:underline shrink-0 text-[11px] ml-2",children:"Search all"})]}),(0,n.jsx)("div",{className:"flex-1 min-h-0 flex flex-col overflow-hidden",children:t?"files"===N?eM.show?(0,n.jsx)(oH,{results:eM.results,loading:eM.loading,query:eM.query,searchDir:eM.searchDir,workspace:M,onOpen:(e,t)=>x?.(e,{line:t?.line,column:t?.column})}):(0,n.jsxs)("div",{className:"flex-1 min-h-0 flex flex-col",children:[(ec||eu)&&(0,n.jsxs)("div",{className:"px-3 py-1.5 border-b border-border-subtle text-[11px]",children:[ec&&(0,n.jsx)("p",{className:"text-red-500 break-words whitespace-pre-wrap",children:ec}),eu&&(0,n.jsx)("p",{className:"text-text-muted break-words",children:j("workspaces.worktreeBranchKept",{branch:eu})})]}),$.map(e=>(0,n.jsx)(oq,{root:e,multiple:$.length>1,isOpen:1===$.length||ej===e.path,onToggle:()=>ew({forProbe:ef,path:ej===e.path?null:e.path}),onRemove:e.isMain?null:()=>{(0,eN.e)(),ep(e)},removeLabel:j("workspaces.removeWorktree"),children:(0,n.jsx)(oM,{workspace:e.path,fileBus:k,activeFile:i,onOpenFile:x,onNewTerminal:p,onSearchFolder:eA,compact:!0,onActions:e.path===ej||1===$.length?ea:void 0})},e.path))]}):"git"===N?(0,n.jsxs)("div",{className:"flex-1 min-h-0 flex flex-col",children:[(0,n.jsxs)("div",{className:"flex-1 min-h-0 overflow-y-auto modal-scrollable",children:[V.map(e=>(0,n.jsx)(oG,{repo:e,changedCount:W(e),isOpen:ee===e.path,onToggle:()=>_(ee===e.path?"":e.path),onHide:en(e)?()=>es(e.path):null,children:(0,n.jsx)(oK,{workspace:e.path,fileBus:k,onOpenFile:x,tagDiffWithRepo:!0})},e.path)),!X.length&&!T&&(0,n.jsx)("p",{className:"p-4 text-xs text-text-subtle italic",children:F?j("workspaces.emptyWorkspace"):j("git.noChanges")})]}),(G.length>0||J>0||Y>0||!E)&&(0,n.jsxs)("div",{className:"flex-shrink-0 max-h-[45%] overflow-y-auto modal-scrollable border-t border-border-subtle bg-surface/40",children:[G.length>0&&(0,n.jsx)("p",{className:"px-3 py-1 text-[10px] uppercase tracking-wider text-text-subtle",children:j("workspaces.nestedRepos",{count:G.length})}),G.map(e=>(0,n.jsx)(oG,{repo:e,changedCount:W(e),isOpen:ee===e.path,onToggle:()=>_(ee===e.path?"":e.path),onHide:en(e)?()=>es(e.path):null,children:(0,n.jsx)(oK,{workspace:e.path,fileBus:k,onOpenFile:x,tagDiffWithRepo:!0})},e.path)),(J>0||Y>0||!E)&&(0,n.jsxs)("div",{className:G.length>0?"border-t border-border-subtle":"",children:[J>0&&(0,n.jsx)(oV,{onClick:()=>L({...B,forWorkspace:t,showClean:!0}),children:j("workspaces.showCleanRepos",{count:J})}),Y>0&&(0,n.jsx)(oV,{onClick:()=>y?.([]),children:j("workspaces.showHiddenRepos",{count:Y})}),!E&&(0,n.jsx)(oV,{onClick:R,children:j("workspaces.scanDeeper")})]})]})]}):null:(0,n.jsxs)("div",{className:"p-4 flex flex-col items-center gap-2 text-center",children:[(0,n.jsx)(ev.vd,{size:22,className:"text-text-subtle"}),(0,n.jsx)("p",{className:"text-xs text-text-subtle",children:j("workspaces.emptyWorkspace")}),h&&(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),h()},className:"mt-1 px-2 py-1 text-[11px] text-brand-500 bg-brand-500/10 hover:bg-brand-500/20 rounded-[3px] transition-colors",children:j("workspaces.selectFolder")})]})}),(0,n.jsx)(ek.A,{isOpen:!!ei,onClose:()=>eo(null),onConfirm:()=>{(0,eN.e)(),eh(ei.root,!!ei.dirty)},title:j("workspaces.removeWorktree"),message:ei?ei.dirty?j("workspaces.worktreeDirty"):[j("workspaces.removeWorktreeFolder",{path:ei.root.path}),ei.root.branch&&j(!0===ei.branchMerged?"workspaces.removeWorktreeBranchDelete":!1===ei.branchMerged?"workspaces.removeWorktreeBranchKeep":"workspaces.removeWorktreeBranch",{branch:ei.root.branch}),ei.sessions?.length?j("workspaces.removeWorktreeSessions",{count:ei.sessions.length,names:ei.sessions.map(e=>e.name).join(", ")}):null].filter(Boolean).join("\n"):""}),w&&(0,n.jsx)("div",{onPointerDown:e=>ts(e,{startWidth:d,axis:-1,onWidth:e=>u?.(e)}),className:"absolute top-0 left-0 bottom-0 w-1 cursor-col-resize hover:bg-brand-500/40 transition-colors z-20"})]})});function oY(e){return e?e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`:""}function oZ(e){let{filePath:t,fileBus:s}=e,[l,a]=(0,r.useState)(""),[i,o]=(0,r.useState)(null),[c,d]=(0,r.useState)(""),[u,m]=(0,r.useState)(!0),[x,p]=(0,r.useState)(1),[h,f]=(0,r.useState)({x:0,y:0}),[b,g]=(0,r.useState)(0),v=(0,r.useRef)(null),y=(0,r.useRef)(null),w=(0,r.useRef)(null),j=(0,r.useRef)(null),k=(0,r.useRef)(null),N=(0,r.useRef)(null),C=(0,r.useRef)(null),S=(0,r.useRef)(0);(0,r.useEffect)(()=>{let e=!1,n=[],r="";m(!0),d(""),a(""),o(null),p(1),f({x:0,y:0}),g(0),w.current=null,j.current&&(URL.revokeObjectURL(j.current),j.current=null);let l=t.toLowerCase();if(l.endsWith(".tif")||l.endsWith(".tiff"))return s.readMedia(t).then(t=>{e||(t.success?(a(t.dataUrl),o({size:t.originalSize||t.size,width:t.width,height:t.height,scaled:t.scaled,originalWidth:t.originalWidth,originalHeight:t.originalHeight})):d(t.error||"Failed to load image"),m(!1))}),()=>{e=!0};let i=s.streamMedia(t,{onMeta:t=>{e||(r=t.mime||"image/*",o({size:t.size,width:t.width,height:t.height,scaled:t.scaled,originalWidth:t.originalWidth,originalHeight:t.originalHeight}))},onChunk:t=>{e||n.push(t)},onDone:()=>{if(e)return;let t=new Blob(n,{type:r});if(t.size>et.W5){w.current=t,g(t.size),m(!1);return}j.current=URL.createObjectURL(t),a(j.current),m(!1)},onError:t=>{e||(d(t.message||"Failed to load image"),m(!1))}});return()=>{e=!0,i?.()}},[t,s]),(0,r.useEffect)(()=>()=>{j.current&&URL.revokeObjectURL(j.current)},[]);let T=(0,r.useCallback)((e,t,s)=>{let n=y.current,r=v.current;if(!n||!r)return{x:e,y:t};let l=r.clientWidth,a=r.clientHeight,i=n.clientWidth*s,o=n.clientHeight*s,c=Math.max(0,(i-l)/2),d=Math.max(0,(o-a)/2);return{x:Math.max(-c,Math.min(c,e)),y:Math.max(-d,Math.min(d,t))}},[]),E=(0,r.useCallback)(()=>{p(1),f({x:0,y:0})},[]),R=(0,r.useCallback)((e,t,s)=>{p(n=>{let r=Math.max(.2,Math.min(8,n*e));if(r===n)return n;if(null!=t&&null!=s){let e=v.current;if(e){let l=e.clientWidth/2,a=e.clientHeight/2,i=t-l,o=s-a;f(e=>T((e.x-i)*(r/n)+i,(e.y-o)*(r/n)+o,r))}}else f(e=>T(e.x,e.y,r));return r})},[T]),M=(e,t)=>Math.hypot(e.clientX-t.clientX,e.clientY-t.clientY),$=(0,r.useCallback)(e=>{if(2===e.touches.length)N.current=null,k.current={dist:M(e.touches[0],e.touches[1]),scale:x,pos:h};else if(1===e.touches.length){let t=Date.now();if(t-S.current<300){x>1.01?E():(p(2),f({x:0,y:0})),S.current=0,N.current=null;return}S.current=t,x>1.01&&(N.current={x:e.touches[0].clientX,y:e.touches[0].clientY,pos:h})}},[x,h,E]),z=(0,r.useCallback)(e=>{if(2===e.touches.length&&k.current){e.preventDefault();let t=M(e.touches[0],e.touches[1]),s=Math.max(.2,Math.min(8,k.current.scale*(t/k.current.dist)));p(s),f(e=>T(e.x,e.y,s))}else if(1===e.touches.length&&N.current){e.preventDefault();let t=e.touches[0],s=t.clientX-N.current.x,n=t.clientY-N.current.y;f(T(N.current.pos.x+s,N.current.pos.y+n,x))}},[x,T]),P=(0,r.useCallback)(e=>{e.touches.length<2&&(k.current=null),0===e.touches.length&&(N.current=null)},[]),A=(0,r.useCallback)(e=>{"mouse"!==e.pointerType||0!==e.button||x<=1.01||(C.current={x:e.clientX,y:e.clientY,pos:h})},[x,h]),I=(0,r.useCallback)(e=>{let t=C.current;if(t){if(!(1&e.buttons)){C.current=null;return}f(T(t.pos.x+(e.clientX-t.x),t.pos.y+(e.clientY-t.y),x))}},[x,T]),D=(0,r.useCallback)(()=>{C.current=null},[]),L=(0,r.useCallback)(e=>{e.preventDefault();let t=e.deltaY<0?1.1:1/1.1,s=v.current?.getBoundingClientRect();R(t,s?e.clientX-s.left:null,s?e.clientY-s.top:null)},[R]);if(u)return(0,n.jsxs)("div",{className:"h-full flex items-center justify-center text-text-muted gap-2",children:[(0,n.jsx)(ev.kr,{className:"animate-spin",size:20}),(0,n.jsx)("span",{children:"Loading image..."})]});if(c)return(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-red-400 text-sm",children:c});if(b)return(0,n.jsxs)("div",{className:"h-full flex flex-col items-center justify-center gap-3 text-text-muted px-6 text-center",children:[(0,n.jsx)("span",{className:"text-sm font-medium text-text truncate max-w-full",title:t,children:t.split("/").pop()}),(0,n.jsxs)("span",{className:"text-xs",children:[oY(b)," — decoding an image this large can crash mobile Safari."]}),(0,n.jsx)("button",{onClick:()=>{let e=w.current;e&&(j.current=URL.createObjectURL(e),a(j.current),g(0))},className:"px-3 py-1.5 rounded bg-surface-2 hover:bg-surface-3 text-text text-sm",children:"Open anyway"})]});let B=i?.width&&i?.height?`${i.width}\xd7${i.height}`:"",F=i?.scaled&&i?.originalWidth&&i?.originalWidth!==i?.width;return(0,n.jsxs)("div",{className:"h-full flex flex-col bg-bg",children:[(0,n.jsxs)("div",{className:"bg-surface border-b border-border px-3 py-1.5 flex items-center gap-2 text-xs text-text-muted",children:[(0,n.jsx)("span",{className:"truncate flex-1",title:t,children:t.split("/").pop()}),i?.size?(0,n.jsx)("span",{className:"text-text-subtle",children:oY(i.size)}):null,B?(0,n.jsxs)("span",{className:"text-text-subtle",children:[B,F?" ↓":""]}):null,(0,n.jsx)("button",{onClick:()=>R(1/1.2),className:"px-2 hover:bg-surface-2 rounded",children:"−"}),(0,n.jsxs)("span",{className:"w-12 text-center",children:[Math.round(100*x),"%"]}),(0,n.jsx)("button",{onClick:()=>R(1.2),className:"px-2 hover:bg-surface-2 rounded",children:"+"}),(0,n.jsx)("button",{onClick:E,className:"px-2 hover:bg-surface-2 rounded",children:"Reset"})]}),(0,n.jsx)("div",{ref:v,className:`flex-1 min-h-0 overflow-hidden flex items-center justify-center bg-[repeating-conic-gradient(#0001_0%_25%,transparent_0%_50%)] bg-[length:20px_20px] touch-none ${x>1.01?"cursor-grab active:cursor-grabbing":""}`,onTouchStart:$,onTouchMove:z,onTouchEnd:P,onPointerDown:A,onPointerMove:I,onPointerUp:D,onPointerCancel:D,onWheel:L,children:(0,n.jsx)("img",{ref:y,src:l,alt:t,draggable:!1,onLoad:e=>o(t=>({...t,width:e.target.naturalWidth,height:e.target.naturalHeight})),style:{transform:`translate(${h.x}px, ${h.y}px) scale(${x})`,transformOrigin:"center",willChange:"transform"},className:"max-w-full max-h-full object-contain select-none"})})]})}function oQ(e){let{filePath:t,fileBus:s}=e,[l,a]=(0,r.useState)(""),[i,o]=(0,r.useState)(""),[c,d]=(0,r.useState)(0),[u,m]=(0,r.useState)(""),[x,p]=(0,r.useState)(!0);if((0,r.useEffect)(()=>{let e=!1,n=null,r=null,l=null,i=null,c=[],u=!1;p(!0),m(""),a(""),o(""),d(0);let x=!1,h="",f=()=>{if(!e&&!x&&i&&!i.updating){if(c.length)return void i.appendBuffer(c.shift());if(u&&r&&"open"===r.readyState)try{r.endOfStream()}catch{}}};return n=s.streamMedia(t,{onMeta:t=>{let{mime:s,size:n}=t;if(!e){if(o(s),d(n),!("u">typeof MediaSource&&MediaSource.isTypeSupported(s))){x=!0,h=s;return}r=new MediaSource,a(l=URL.createObjectURL(r)),p(!1),r.addEventListener("sourceopen",()=>{e||((i=r.addSourceBuffer(s)).addEventListener("updateend",f),f())})}},onChunk:t=>{!e&&(c.push(t),x||f())},onDone:()=>{if(!e)if(x){let e=new Blob(c,{type:h||"application/octet-stream"});a(l=URL.createObjectURL(e)),p(!1)}else u=!0,f()},onError:t=>{e||(m(t.message||"Stream error"),p(!1))}}),()=>{e=!0,n?.(),l&&URL.revokeObjectURL(l);try{r&&"open"===r.readyState&&r.endOfStream()}catch{}}},[t,s]),x)return(0,n.jsxs)("div",{className:"h-full flex items-center justify-center text-text-muted gap-2",children:[(0,n.jsx)(ev.kr,{className:"animate-spin",size:20}),(0,n.jsx)("span",{children:"Loading media..."})]});if(u)return(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-red-400 text-sm",children:u});let h=i.startsWith("video/"),f=t.split("/").pop();return(0,n.jsxs)("div",{className:"h-full flex flex-col bg-bg",children:[(0,n.jsxs)("div",{className:"bg-surface border-b border-border px-3 py-1.5 flex items-center gap-2 text-xs text-text-muted",children:[(0,n.jsx)("span",{className:"truncate flex-1",title:t,children:f}),c?(0,n.jsx)("span",{className:"text-text-subtle",children:c?c<1024?`${c}B`:c<1048576?`${(c/1024).toFixed(1)}KB`:`${(c/1048576).toFixed(1)}MB`:""}):null]}),(0,n.jsx)("div",{className:"flex-1 min-h-0 overflow-auto flex items-center justify-center bg-black/30",children:h?(0,n.jsx)("video",{src:l,controls:!0,className:"max-h-full max-w-full"}):(0,n.jsx)("audio",{src:l,controls:!0,className:"w-full max-w-md"})})]})}function o0(e){let{filePath:t,fileBus:l}=e,[a,i]=(0,r.useState)(!0),[o,c]=(0,r.useState)(""),[d,u]=(0,r.useState)([]),[m,x]=(0,r.useState)(0),[p,h]=(0,r.useState)([]),f=(0,r.useRef)(null),b=(0,r.useRef)(null),g=(0,r.useRef)(null);if((0,r.useEffect)(()=>{let e=!1,n=null,r=[],a=(0,et.$b)(t);i(!0),c(""),u([]),x(0),h([]),b.current=null,f.current&&(f.current.innerHTML="");let o=async t=>{try{if(a){let{renderAsync:n}=await s.e(5421).then(s.bind(s,25421));if(e||!f.current){e||i(!1);return}for(let e of(await n(new Blob([t]),f.current,void 0,{inWrapper:!0,renderAltChunks:!1}),f.current.querySelectorAll("a[href]"))){let t=e.getAttribute("href")||"";/^(https?:|mailto:|#)/i.test(t.trim())||e.removeAttribute("href")}e||i(!1)}else{let n=await Promise.all([s.e(2571),s.e(5198)]).then(s.bind(s,83390));if(e)return;g.current=n,b.current=n.read(t,{type:"array"}),u(b.current.SheetNames),x(0),(e=>{let t=b.current,s=g.current;if(!t||!s)return;let n=t.SheetNames[e];n&&(h(s.utils.sheet_to_json(t.Sheets[n],{header:1,defval:"",raw:!1})),i(!1))})(0)}}catch(t){e||(c(t.message||"Failed to render"),i(!1))}};return n=l.streamMedia(t,{onChunk:t=>{e||r.push(t)},onDone:()=>{if(e)return;let t=new Uint8Array(r.reduce((e,t)=>e+t.byteLength,0)),s=0;for(let e of r)t.set(e,s),s+=e.byteLength;o(t)},onError:t=>{e||(c(t.message||"Failed to load"),i(!1))}}),()=>{e=!0,n?.()}},[t,l]),(0,r.useEffect)(()=>{let e=b.current,t=g.current;if(!e||!t)return;let s=e.SheetNames[m];s&&h(t.utils.sheet_to_json(e.Sheets[s],{header:1,defval:"",raw:!1}))},[m]),o)return(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-red-400 text-sm",children:o});let v=(0,et.$b)(t);return(0,n.jsxs)("div",{className:"h-full flex flex-col relative",children:[a&&(0,n.jsxs)("div",{className:"absolute inset-0 z-10 flex items-center justify-center gap-2 bg-surface text-text-muted",children:[(0,n.jsx)(ev.kr,{className:"animate-spin",size:20}),(0,n.jsx)("span",{children:"Loading document..."})]}),!v&&d.length>1&&(0,n.jsx)("div",{className:"flex gap-1 overflow-x-auto bg-surface border-b border-border px-2 py-1 flex-shrink-0",children:d.map((e,t)=>(0,n.jsx)("button",{onClick:()=>x(t),className:`px-2 py-1 text-xs rounded whitespace-nowrap transition-colors ${t===m?"bg-brand-500 text-white":"bg-surface-2 text-text-muted hover:text-text"}`,children:e},t))}),(0,n.jsx)("div",{className:"flex-1 min-h-0 overflow-auto bg-white text-black",children:v?(0,n.jsx)("div",{ref:f,className:"p-4"}):(0,n.jsx)("div",{className:"p-2",children:(0,n.jsx)("table",{className:"border-collapse",children:(0,n.jsx)("tbody",{children:p.map((e,t)=>(0,n.jsx)("tr",{children:e.map((e,t)=>(0,n.jsx)("td",{className:"border border-gray-300 px-2 py-1 whitespace-pre-wrap align-top",children:e},t))},t))})})})})]})}function o1(e){let{filePath:t,fileBus:s}=e,[l,a]=(0,r.useState)(""),[i,o]=(0,r.useState)(""),[c,d]=(0,r.useState)(!0);return((0,r.useEffect)(()=>{let e=!1,n=null,r=[],l="application/pdf";d(!0),o(""),a("");let i=s.streamMedia(t,{onMeta:t=>{let{mime:s}=t;!e&&s&&(l=s)},onChunk:t=>{e||r.push(t)},onDone:()=>{if(e)return;let t=new Blob(r,{type:l}),s=URL.createObjectURL(t);n=s,a(s),d(!1)},onError:t=>{e||(o(t.message||"Failed to load PDF"),d(!1))}});return()=>{e=!0,i(),n&&URL.revokeObjectURL(n)}},[t,s]),c)?(0,n.jsxs)("div",{className:"h-full flex items-center justify-center text-text-muted gap-2",children:[(0,n.jsx)(ev.kr,{className:"animate-spin",size:20}),(0,n.jsx)("span",{children:"Loading PDF..."})]}):i?(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-red-400 text-sm",children:i}):(0,n.jsx)("iframe",{src:l,title:"PDF preview",className:"h-full w-full bg-bg"})}let o2=e=>(0,et.u)(e)||(0,et.AE)(e)||(0,et.L8)(e)||(0,et.ZH)(e)||(0,et.$b)(e)||(0,et.iB)(e);function o5(e){let{filePath:t,fileBus:s}=e;return(0,et.ZH)(t)?(0,n.jsx)(o1,{filePath:t,fileBus:s},t):(0,et.$b)(t)||(0,et.iB)(t)?(0,n.jsx)(o0,{filePath:t,fileBus:s},t):(0,et.AE)(t)||(0,et.L8)(t)?(0,n.jsx)(oQ,{filePath:t,fileBus:s},t):(0,n.jsx)(oZ,{filePath:t,fileBus:s},t)}function o3(e){let{filePath:t,fileBus:s}=e,[n,l]=(0,r.useState)(!0),[a,i]=(0,r.useState)(null),[o,c]=(0,r.useState)(""),[d,u]=(0,r.useState)(!1),[m,x]=(0,r.useState)(!1),[p,h]=(0,r.useState)(!1),f=(0,r.useRef)(""),b=(0,r.useRef)(null),g=(0,r.useRef)(null),[v,y]=(0,r.useState)(!1),w=(0,r.useCallback)(e=>{b.current=e},[]),j=(0,r.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!1,n=await s.readFile(t);if(e())return{cancelled:!0};if(!n?.success)return{error:n?.error||""};let r=n.content;if(n.streamInstead)try{let n=[];if(await new Promise((e,r)=>{s.streamMedia(t,{onMeta:()=>{},onChunk:e=>n.push(e),onDone:e,onError:r})}),e())return{cancelled:!0};r=await new Blob(n).text()}catch(t){if(e())return{cancelled:!0};return{error:t?.message||""}}return{text:r}},[t,s]),k=(0,r.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!1;l(!0),c(""),u(!1),y(!1);let{text:t,error:s}=await j(e);if(void 0===t){void 0!==s&&(c(s),l(!1));return}f.current=t,i(t),l(!1)},[j]);(0,r.useEffect)(()=>{let e=!1;if(!t){l(!1),i(null),u(!1),c(""),y(!1);return}return k(()=>e),()=>{e=!0}},[t,k]);let N=(0,r.useCallback)(async()=>{let{text:e}=await j();if(void 0===e||e===f.current)return;let t=b.current?.();null!=t&&t!==f.current?y(!0):(f.current=e,i(e))},[j]),C=(0,r.useCallback)(()=>{d?y(!0):N()},[d,N]);(0,r.useEffect)(()=>()=>clearTimeout(g.current),[]);let S=(0,r.useCallback)(e=>{u(e!==f.current)},[]),T=(0,r.useCallback)(async()=>{let e=b.current?.();if(null==e||m||e===f.current)return!0;x(!0);let n=await s.writeFile(t,e);return(x(!1),n?.success)?(f.current=e,u(!1),c(""),h(!0),clearTimeout(g.current),g.current=setTimeout(()=>h(!1),2e3),window.dispatchEvent(new CustomEvent("fileExplorer:fileSaved",{detail:{filePath:t}})),!0):(c(n?.error||""),!1)},[t,s,m]);return{loading:n,content:a,error:o,dirty:d,saving:m,justSaved:p,staleOnDisk:v,register:w,onTextChanged:S,save:T,discard:(0,r.useCallback)(()=>{u(!1),i(f.current)},[]),setError:c,reload:k,onChangedOnDisk:C}}function o4(e){let{dirty:t,onSave:s}=e,[n,l]=(0,r.useState)(null);(0,r.useEffect)(()=>{if(!t)return;let e=e=>(e.preventDefault(),e.returnValue="","");return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[t]);let a=(0,r.useCallback)(e=>{if(!t)return e();l(()=>e)},[t]),i=(0,r.useCallback)(async()=>{await s()&&(l(null),n?.())},[s,n]),o=(0,r.useCallback)(()=>{l(null),n?.()},[n]);return{guard:a,asking:!!n,saveThenLeave:i,discardAndLeave:o,cancel:(0,r.useCallback)(()=>l(null),[])}}function o6(e){let{isOpen:t,fileName:s,onSave:l,onDiscard:a,onCancel:i}=e,{t:o}=(0,eC.s)(),c=(0,r.useRef)(null);return((0,r.useEffect)(()=>{if(!t)return;let e=requestAnimationFrame(()=>{c.current?.focus()});return()=>cancelAnimationFrame(e)},[t]),(0,r.useEffect)(()=>{if(!t)return;let e=e=>{if("Escape"===e.key)e.preventDefault(),e.stopPropagation(),i?.();else if("Enter"===e.key){if(document.activeElement?.tagName==="BUTTON"&&document.activeElement!==c.current)return;e.preventDefault(),e.stopPropagation(),(0,eN.e)(),l?.()}else"d"!==e.key&&"D"!==e.key||e.metaKey||e.ctrlKey||e.altKey||(e.preventDefault(),e.stopPropagation(),(0,eN.e)(),a?.())};return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)},[t,i,l,a]),t)?(0,n.jsxs)("div",{className:"fixed inset-0 z-[90] flex items-center justify-center px-4",style:{paddingTop:"max(1rem, env(safe-area-inset-top))",paddingBottom:"max(1rem, env(safe-area-inset-bottom))"},onClick:i,children:[(0,n.jsx)("div",{className:"absolute inset-0 scrim fade-in"}),(0,n.jsxs)("div",{role:"dialog","aria-modal":"true",className:"relative card-elev w-full max-w-sm p-5 pop-in",onClick:e=>e.stopPropagation(),onKeyDown:e=>e.stopPropagation(),children:[(0,n.jsx)("h3",{className:"text-[15px] font-semibold text-text mb-1.5",children:o("editor.unsavedTitle",{name:s||""})}),(0,n.jsx)("p",{className:"text-[13px] text-text-muted leading-snug mb-5",children:o("editor.unsavedBody")}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),a?.()},className:"px-3 py-2 text-[13px] text-text-muted hover:text-red-500 transition-colors flex items-center gap-1",children:[(0,n.jsx)("span",{children:o("editor.discard")}),(0,n.jsx)("kbd",{className:"hidden sm:inline-flex items-center text-[10px] font-mono px-1 py-0.5 rounded bg-surface-3 text-text-muted leading-none",children:"D"})]}),(0,n.jsx)("div",{className:"flex-1"}),(0,n.jsxs)("button",{onClick:i,className:"px-4 py-2 text-[13px] text-text bg-surface-2 hover:bg-surface-3 rounded-brand transition-colors flex items-center gap-1.5",children:[(0,n.jsx)("span",{children:o("common.cancel")}),(0,n.jsx)("kbd",{className:"hidden sm:inline-flex items-center text-[10px] font-mono px-1 py-0.5 rounded bg-surface-3 text-text-muted leading-none",children:"Esc"})]}),(0,n.jsxs)("button",{ref:c,onClick:()=>{(0,eN.e)(),l?.()},autoFocus:!0,className:"px-4 py-2 text-[13px] font-semibold text-white bg-brand-500 hover:bg-brand-600 rounded-brand transition-colors flex items-center gap-1.5",children:[(0,n.jsx)("span",{children:o("editor.save")}),(0,n.jsx)("kbd",{className:"hidden sm:inline-flex items-center justify-center w-4 h-4 rounded bg-white/20 text-white",children:(0,n.jsx)(ev.Lt,{size:10,strokeWidth:2.5})})]})]})]})]}):null}var o8=s(7557),o9=s(80714),o7=s(35144),ce=s(69992),ct=s(26795),cs=s(67363),cn=s(13831),cr=s(75910),cl=s(71532),ca=s(94001),ci=s(85293),co=s(74975);let cc={javascript:(0,ce.Q2)(),html:(0,ct.qy)(),css:(0,cs.AH)(),json:(0,cn.Pq)(),markdown:(0,cr.wD)()};function cd(e){let t,s,{filePath:l,content:a,onTextChanged:i,onRegisterView:o,onSave:c,onCursorChange:d,line:u,column:m,compact:x=!1,className:p=""}=e,{theme:h}=(0,sx.D)(),f=(0,r.useRef)(null),b=(0,r.useRef)(null),g=(0,r.useRef)(i),v=(0,r.useRef)(d),y=(0,r.useRef)(c);(0,r.useEffect)(()=>{g.current=i},[i]),(0,r.useEffect)(()=>{v.current=d},[d]),(0,r.useEffect)(()=>{y.current=c},[c]);let[w]=sB(et.d5.editorFontSize,et.A0),[j]=sB(et.d5.wordWrap,!0),k=window.innerWidth<ez.jK,N=x?Math.max(et.rL,w-et.xl):w+ +!!k,{extension:C}=(t="."+l.split(".").pop()?.toLowerCase(),{lang:s=et.so[t]||"plaintext",extension:cc[s]||[]});return(0,r.useEffect)(()=>{if(null==a||!f.current)return;let e=o7.$t.create({doc:a,extensions:[o8.oQ,..."dark"===h?[cl.bM]:[],C,...j?[o9.Lz.lineWrapping]:[],(0,ca.$P)(),(0,ci.yU)(),(0,ci.wm)(),o9.w4.of([{key:"Mod-s",preventDefault:!0,run:()=>(y.current?.(),!0)},...ci.Bc,...ci.OO,co.Yc]),o9.Lz.updateListener.of(e=>{if(e.docChanged&&g.current?.(e.state.doc.toString()),e.selectionSet||e.docChanged){let t=e.state.selection.main.head,s=e.state.doc.lineAt(t);v.current?.({line:s.number,column:t-s.from+1})}}),o9.Lz.theme({"&":{height:"100%",fontSize:`${N}px`},".cm-scroller":{overflow:"auto",lineHeight:x?"1.35":""},".cm-content":{minHeight:"100%"},".cm-gutters":x?{fontSize:`${Math.max(8,N-1)}px`}:{}})]});return b.current?.destroy(),b.current=new o9.Lz({state:e,parent:f.current}),o?.(()=>b.current?.state.doc.toString()??null,b.current),()=>{b.current?.destroy(),b.current=null}},[a,l,h,j,N,x]),(0,r.useEffect)(()=>{let e=b.current;if(!e||!u)return;let t=e.state.doc,s=Math.max(1,Math.min(u,t.lines)),n=t.line(s),r=Math.min(n.from+Math.max(0,(m||1)-1),n.to);e.dispatch({selection:{anchor:r},effects:o9.Lz.scrollIntoView(r,{y:"center"})}),e.focus()},[u,m,a]),(0,n.jsx)("div",{ref:f,className:`h-full w-full overflow-hidden ${p}`})}let cu=null,cm=0;function cx(e){let t,l,{content:a,reloadKey:i=0}=e,{t:o}=(0,eC.s)(),{theme:c}=(0,sx.D)(),[d,u]=(0,r.useState)(""),[m,x]=(0,r.useState)(""),p=(0,r.useRef)(null),h=(l=(t=String(a||"").trim()).match(/^```(?:mermaid)?\s*([\s\S]*?)\s*```$/i))?l[1].trim():t,[f,b]=(0,r.useState)(h);return(f!==h&&(b(h),u(""),x("")),(0,r.useEffect)(()=>{let e=!1;if(h)return(!cu&&(cu=Promise.all([s.e(515),s.e(2269),s.e(8390)]).then(s.bind(s,74811)).then(e=>e.default)),cu).then(async t=>{if(!e){t.initialize({startOnLoad:!1,theme:"dark"===c?"dark":"default",securityLevel:A.Ic});try{let{svg:s}=await t.render(`mmd-${++cm}`,h);if(e)return;u(s),x("")}catch(t){if(e)return;u(""),x(t?.message||String(t))}}}).catch(t=>{e||x(t?.message||String(t))}),()=>{e=!0}},[h,c,i]),m)?(0,n.jsxs)("div",{className:"h-full overflow-auto p-3",children:[(0,n.jsx)("p",{className:"text-[11px] text-red-500 mb-2 break-words",children:m}),(0,n.jsx)("pre",{className:"text-[11px] text-text-muted whitespace-pre-wrap break-words",children:h})]}):h?d?(0,n.jsx)("div",{ref:p,className:"h-full overflow-auto p-3 flex items-start justify-center [&_svg]:max-w-full [&_svg]:h-auto",dangerouslySetInnerHTML:{__html:d}}):(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-xs",children:o("common.loading")}):(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-xs",children:o("editor.mermaidEmpty")})}function cp(e){let{content:t}=e,{t:s}=(0,eC.s)();return t?.trim()?(0,n.jsx)("div",{className:"h-full overflow-auto p-4 sm:p-6 bg-bg select-text",children:(0,n.jsx)("div",{className:"max-w-4xl mx-auto",children:(0,n.jsx)(a6,{content:t})})}):(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-xs",children:s("common.empty",{defaultValue:"Empty file"})})}function ch(e){let{kind:t,content:s,reloadKey:r=0}=e;return"mermaid"===t?(0,n.jsx)(cx,{content:s,reloadKey:r}):"markdown"===t?(0,n.jsx)(cp,{content:s}):null}var cf=s(17261);s(56649);let cb=["diff --git","index ","new file","deleted file","--- ","+++ "];function cg(e){let{diff:t,compact:s=!1,className:l=""}=e,[a,i]=(0,r.useState)(!1);(0,r.useEffect)(()=>{if(s)return;let e=window.matchMedia(`(min-width: ${et.gh}px)`),t=()=>i(e.matches);return t(),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[s]);let o=!s&&a,c=(0,r.useCallback)(e=>{if(e&&t&&o)try{new cf.LU(e,t,{drawFileList:!1,matching:"words",outputFormat:"side-by-side",renderNothingWhenEmpty:!1}).draw()}catch{e.replaceChildren(Object.assign(document.createElement("pre"),{className:"text-text-muted p-4",textContent:t}))}},[t,o]),d=(0,r.useMemo)(()=>o||!t?[]:function(e){let t=[],s=0,n=0;for(let r of e.split("\n")){if(cb.some(e=>r.startsWith(e))){r.startsWith("diff --git")&&t.push({type:"file",text:r.replace("diff --git a/","").split(" b/")[0]});continue}if(r.startsWith("@@")){let e=r.match(/@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/);e&&(s=parseInt(e[1],10),n=parseInt(e[2],10)),t.push({type:"hunk",text:r});continue}r.startsWith("+")?t.push({type:"add",text:r.slice(1),newLn:n++}):r.startsWith("-")?t.push({type:"del",text:r.slice(1),oldLn:s++}):t.push({type:"ctx",text:r.slice(1),oldLn:s++,newLn:n++})}return t}(t),[o,t]);return o?(0,n.jsx)("div",{ref:c,className:`diff-themed select-text ${s?"diff-themed-compact":"bg-surface rounded"} overflow-hidden text-sm ${l}`}):(0,n.jsx)("div",{className:`w-full max-w-full select-text overflow-hidden font-mono leading-[1.6] ${s?"text-[10px] leading-[1.45]":"rounded-lg border border-border bg-surface text-[12.5px]"} ${l}`,children:d.map((e,t)=>{if("file"===e.type)return(0,n.jsx)("div",{className:"px-3 py-2 bg-surface-2 text-text font-semibold break-all",children:e.text},t);if("hunk"===e.type)return(0,n.jsx)("div",{className:"px-3 py-1 bg-surface-2/60 text-text-muted select-none break-all",children:e.text},t);let s="add"===e.type?e.newLn:"del"===e.type?e.oldLn:e.newLn,r="add"===e.type?"bg-[rgba(var(--success-rgb),0.14)]":"del"===e.type?"bg-[rgba(var(--danger-rgb),0.14)]":"",l="add"===e.type?"text-[var(--success)]":"del"===e.type?"text-[var(--danger)]":"text-text-subtle",a="add"===e.type?"+":"del"===e.type?"-":" ";return(0,n.jsxs)("div",{className:`flex ${r}`,children:[(0,n.jsx)("span",{className:"shrink-0 w-9 px-1 text-right text-text-subtle bg-black/5 select-none",children:s}),(0,n.jsx)("span",{className:`shrink-0 w-4 text-center font-bold ${l} select-none`,children:a}),(0,n.jsx)("span",{className:"flex-1 min-w-0 pr-2 whitespace-pre-wrap break-words text-text",children:e.text||"\xa0"})]},t)})})}function cv(e){var t;let s,r,{title:l,badge:a,badgeColor:i,img:o,loading:c,error:d,t:u}=e,m=[(s=o?.originalWidth||o?.width,r=o?.originalHeight||o?.height,s&&r?`${s} \xd7 ${r}`:""),!(t=o?.size||o?.originalSize)?"":t<1024?`${t} B`:t<1048576?`${(t/1024).toFixed(1)} KB`:`${(t/1048576).toFixed(1)} MB`].filter(Boolean).join(" \xb7 ");return(0,n.jsxs)("div",{className:"flex-1 flex flex-col rounded-brand border border-border-subtle bg-surface overflow-hidden min-h-[220px]",children:[(0,n.jsxs)("div",{className:"px-3 py-2 border-b border-border-subtle flex items-center justify-between bg-surface-2/60 shrink-0",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"text-xs font-medium text-text",children:l}),a&&(0,n.jsx)("span",{className:`text-[10px] font-semibold px-1.5 py-0.5 rounded-[3px] ${i}`,children:a})]}),m&&(0,n.jsx)("span",{className:"text-[11px] text-text-muted font-mono",children:m})]}),(0,n.jsx)("div",{className:"flex-1 p-3 flex items-center justify-center bg-surface-2/20 min-h-[160px] overflow-hidden relative",children:c?(0,n.jsxs)("div",{className:"flex items-center gap-2 text-text-muted text-xs",children:[(0,n.jsx)(ev.kr,{size:16,className:"animate-spin"}),(0,n.jsx)("span",{children:u("common.loading")})]}):d?(0,n.jsx)("div",{className:"text-xs text-text-muted text-center px-4 py-6",children:d}):o?.dataUrl?(0,n.jsx)("img",{src:o.dataUrl,alt:l,className:"max-h-[320px] max-w-full object-contain rounded drop-shadow-sm select-none"}):(0,n.jsx)("div",{className:"text-xs text-text-muted",children:u("git.noChanges")})})]})}function cy(e){let{filePath:t,status:s,workspace:l,fileBus:a,compact:i=!1}=e,{t:o}=(0,eC.s)(),c="A"===s||"?"===s,d="D"===s,u=!c,m=!d,[x,p]=(0,r.useState)(null),[h,f]=(0,r.useState)(u),[b,g]=(0,r.useState)(""),[v,y]=(0,r.useState)(null),[w,j]=(0,r.useState)(m),[k,N]=(0,r.useState)(""),[C,S]=(0,r.useState)(t);C!==t&&(S(t),p(null),f(u),g(""),y(null),j(m),N("")),(0,r.useEffect)(()=>{let e=!1;if(!t||!a)return;let s=l&&!t.startsWith("/")?`${l}/${t}`:t,n=l&&t.startsWith(l)?t.slice(l.length).replace(/^\//,""):t,r=setTimeout(()=>{u&&(f(!0),g(""),a.gitShowMedia?.(l,n,"HEAD").then(t=>{e||(f(!1),t?.success?p(t):g(t?.error||o("git.noOldVersion",{defaultValue:"No previous version in HEAD"})))}).catch(t=>{e||(f(!1),g(t?.message||"Failed to load old version"))})),m&&(j(!0),N(""),a.readMedia?.(s).then(t=>{e||(j(!1),t?.success?y(t):N(t?.error||o("git.noNewVersion",{defaultValue:"Failed to load working image"})))}).catch(t=>{e||(j(!1),N(t?.message||"Failed to load new version"))}))},0);return()=>{e=!0,clearTimeout(r)}},[t,l,a,u,m,o]);let T=t?t.split("/").pop():"",E=d||u&&!b&&(h||!!x?.dataUrl),R=E&&m;return(0,n.jsx)("div",{className:"h-full overflow-y-auto p-2 sm:p-3 flex flex-col gap-3",children:(0,n.jsxs)("div",{className:`flex-1 ${!i&&R?"grid grid-cols-1 md:grid-cols-2 gap-3":"flex flex-col gap-3"}`,children:[E&&(0,n.jsx)(cv,{title:d?`${T} (Deleted)`:"Old (HEAD)",badge:d?"DELETED":"ORIGINAL",badgeColor:"bg-red-500/15 text-red-400",img:x,loading:h,error:b,t:o}),m&&(0,n.jsx)(cv,{title:c?`${T} (Added)`:"New (Working Tree)",badge:c?"NEW":"MODIFIED",badgeColor:"bg-green-500/15 text-green-400",img:v,loading:w,error:k,t:o})]})})}function cw(e){let{diffPath:t,workspace:s,fileBus:l,compact:a=!1}=e,{t:i}=(0,eC.s)(),{status:o,repoPath:c,filePath:d}=(0,et.qu)(t),u=c||s,m=(0,et.u)(d),[x,p]=(0,r.useState)(!m),[h,f]=(0,r.useState)(""),[b,g]=(0,r.useState)(""),v=(0,r.useRef)(0),y=(0,r.useCallback)(async()=>{let e=++v.current;p(!0),g("");let t=await l.gitDiff?.(u,d,o);e===v.current&&(t?.success?f(t.diff||""):g(t?.error||""),p(!1))},[l,u,d,o]);return((0,r.useEffect)(()=>{if(m)return;let e=setTimeout(y,0);return()=>clearTimeout(e)},[y,m]),(0,r.useEffect)(()=>{if(m)return;let e=()=>y();return et.vb.forEach(t=>window.addEventListener(t,e)),()=>et.vb.forEach(t=>window.removeEventListener(t,e))},[y,m]),m)?(0,n.jsx)(cy,{filePath:d,status:o,workspace:u,fileBus:l,compact:a}):(0,n.jsxs)("div",{className:`h-full overflow-auto ${a?"p-0":"p-2 sm:p-3"}`,children:[b&&(0,n.jsx)("div",{className:"bg-red-500/20 border border-red-500/50 rounded px-4 py-2 text-red-400 text-sm mb-3",children:b}),x?(0,n.jsx)("div",{className:"flex items-center justify-center h-32 text-text-muted text-sm",children:i("common.loading")}):h?(0,n.jsx)(cg,{diff:h,compact:a}):(0,n.jsx)("div",{className:"flex items-center justify-center h-32 text-text-muted text-sm",children:i("git.noChanges")})]})}let cj="browser:openUrl";async function ck(e,t){let s=await e.previewStart(t);return s?.success&&s?.localUrl?(window.dispatchEvent(new CustomEvent(cj,{detail:{url:s.localUrl}})),{ok:!0}):{ok:!1,error:s?.error||null}}function cN(e){let{filePath:t,workspace:s,fileBus:l,width:a,onResize:i,onClose:o,onOpenFull:c,onOpenFile:d,isDesktop:u=!0,previewSeq:m=0,artifactTitle:x=null,jump:p=null}=e,{t:h}=(0,eC.s)(),f=(0,et.pA)(t),b=f?(0,et.qu)(t):null,g=b?.repoPath||s,v=f?b.filePath:t,y=b?(0,et.Ez)(t,s):"",w=!!t&&!f&&!o2(t),j=o3({filePath:w?t:"",fileBus:l}),[k,N]=sB(et.d5.editorFontSize,et.A0),C=e=>N(t=>Math.max(et.xr,Math.min(et.bd,(t||et.A0)+e))),S=(0,r.useRef)(j);(0,r.useEffect)(()=>{S.current=j},[j]);let T=o4({dirty:w&&j.dirty,onSave:j.save}),E=w?(0,et.YO)(t):null,R="html"===E,M=f&&"D"!==b.status&&"html"===(0,et.YO)(b.filePath),$=m>0,[z,P]=(0,r.useState)($),[A,I]=(0,r.useState)(""),[D,L]=(0,r.useState)(0),[B,F]=(0,r.useState)(t),[O,_]=(0,r.useState)(!1),[K,W]=(0,r.useState)(m);(B!==t||K!==m)&&(F(t),W(m),P($),I("")),j.justSaved!==O&&(_(j.justSaved),j.justSaved&&L(e=>e+1));let H=(0,r.useRef)(null);(0,r.useEffect)(()=>{let e=e=>{"Escape"!==e.key||H.current?.contains(e.target)&&T.guard(o)};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[T,o]);let q=t&&!f?t.slice(0,t.lastIndexOf("/")):"",U=(0,r.useMemo)(()=>q?[q]:[],[q]),X=i2(),V=(0,r.useCallback)(()=>{L(e=>e+1),S.current?.onChangedOnDisk(),window.dispatchEvent(new Event(et.GW))},[]);i1({dirs:U,fileBus:l,enabled:!!q&&X,debounceMs:et.Jl.PREVIEW_DEBOUNCE_MS,onDirsChanged:V});let G=(0,r.useCallback)(e=>{ck(l,e).then(e=>{e.ok||I(e.error||h("editor.previewFailed"))})},[l,h]);if((0,r.useEffect)(()=>{if(!R||m<=0)return;let e=!1;return ck(l,t).then(t=>{e||t.ok||I(t.error||h("editor.previewFailed"))}),()=>{e=!0}},[R,m,l,t]),!t)return null;let J=v.split("/").pop(),Y=s&&v.startsWith(s)?v.slice(s.length).replace(/^\//,""):v;return(0,n.jsxs)("div",{ref:H,className:"h-full flex flex-col bg-bg border-l border-border-subtle relative shrink min-w-0",style:u?{width:a,flexBasis:a,minWidth:ez.Ao.min}:void 0,children:[(0,n.jsxs)("div",{style:{height:32},className:"px-2 flex items-center gap-1.5 border-b border-border-subtle flex-shrink-0",children:[(0,n.jsx)("span",{className:"flex-shrink-0",children:oo({name:J,type:"file"},14)}),(0,n.jsx)("span",{className:"flex-1 min-w-0 truncate text-[12px] text-text",title:Y,children:J}),x&&(0,n.jsx)("span",{className:"flex-shrink-0 px-1.5 py-px rounded-[3px] text-[9px] font-medium uppercase tracking-wide bg-brand-500/15 text-brand-500",children:h("editor.artifact")}),f&&(0,n.jsx)("span",{className:`text-[10px] font-bold flex-shrink-0 ${et.vs[b.status]||"text-text-muted"}`,children:b.status}),M&&(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),G(y)},title:h("editor.previewInBrowser"),className:"p-1 text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:(0,n.jsx)(ev.qz,{size:13})}),E&&(R?(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),G(t)},title:h("editor.previewInBrowser"),className:"p-1 text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:(0,n.jsx)(ev.qz,{size:13})}):(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),P(e=>!e)},title:z?h("editor.editCode"):h("editor.preview"),className:"p-1 text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:z?(0,n.jsx)(ev.GD,{size:13}):(0,n.jsx)(ev.kU,{size:13})})),w&&(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),j.save()},disabled:!j.dirty||j.saving,title:h("editor.save"),className:`p-1 rounded-[3px] transition-colors disabled:opacity-30 ${j.dirty?"text-brand-500 hover:bg-surface-2":"text-text-muted"}`,children:(0,n.jsx)(ev.eM,{size:13})}),(f?!!d:c&&u)&&(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),f?d(y):T.guard(()=>c(t))},title:f?h("git.openFile"):h("editor.openFull"),className:"p-1 text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:f?(0,n.jsx)(ev.GD,{size:13}):(0,n.jsx)(ev.Gr,{size:13})}),(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),T.guard(o)},className:"p-1 text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:(0,n.jsx)(ev.X,{size:13})})]}),j.error&&w&&(0,n.jsx)("div",{className:"px-3 py-1.5 text-[11px] text-red-500 bg-red-500/10 border-b border-border-subtle break-words",children:j.error}),A&&(0,n.jsx)("div",{className:"px-3 py-1.5 text-[11px] text-red-500 bg-red-500/10 border-b border-border-subtle break-words",children:A}),j.staleOnDisk&&(0,n.jsxs)("div",{className:"px-3 py-1.5 flex items-center gap-2 text-[11px] text-amber-500 bg-amber-500/10 border-b border-border-subtle",children:[(0,n.jsx)("span",{className:"flex-1 min-w-0 truncate",children:h("editor.changedOnDisk")}),(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),j.reload()},className:"shrink-0 px-1.5 py-0.5 rounded-[3px] hover:bg-amber-500/20 font-medium transition-colors",children:h("editor.reloadFromDisk")})]}),(0,n.jsx)("div",{className:"flex-1 min-h-0 overflow-hidden",children:f?(0,n.jsx)(cw,{diffPath:(0,et.Dk)(b.status,b.filePath),workspace:g,fileBus:l,compact:!0}):o2(t)?(0,n.jsx)(o5,{filePath:t,fileBus:l}):z&&E&&!R?(0,n.jsx)(ch,{kind:E,filePath:t,fileBus:l,content:j.content,reloadKey:D}):j.loading?(0,n.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-xs",children:h("common.loading")}):(0,n.jsx)(cd,{filePath:t,content:j.content,onTextChanged:j.onTextChanged,onRegisterView:j.register,onSave:j.save,line:p?.line,column:p?.column,compact:!0})}),w&&(!z||R)&&(0,n.jsxs)("div",{className:"h-7 px-1.5 flex items-center justify-end gap-0.5 border-t border-border-subtle flex-shrink-0",children:[(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),C(-1)},className:"w-6 h-6 flex items-center justify-center text-[14px] leading-none text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:"−"}),(0,n.jsx)("span",{className:"min-w-[26px] text-center text-[10px] tabular-nums text-text-subtle",title:h("fileExplorer.fontSize"),children:k}),(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),C(1)},className:"w-6 h-6 flex items-center justify-center text-[14px] leading-none text-text-muted hover:text-text rounded-[3px] hover:bg-surface-2 transition-colors",children:"+"})]}),(0,n.jsx)(o6,{isOpen:T.asking,fileName:J,onSave:T.saveThenLeave,onDiscard:T.discardAndLeave,onCancel:T.cancel}),u&&(0,n.jsx)("div",{onPointerDown:e=>ts(e,{startWidth:a,axis:-1,onWidth:e=>i?.(e)}),className:"absolute top-0 left-0 bottom-0 w-1 cursor-col-resize hover:bg-brand-500/40 transition-colors z-20"})]})}function cC(){let[e,t]=(0,r.useState)(null),s="mouse"!==sD();return((0,r.useEffect)(()=>{if(s)return;let e=null,n=null,r=()=>{clearTimeout(e),n=null,t(null)},l=s=>{let r=s.target?.closest?.("[data-tip]");if(r!==n){if(clearTimeout(e),n=r,!r)return t(null);e=setTimeout(()=>{let e;(e=r.getAttribute("data-tip"))&&function(e){let t=e.getBoundingClientRect();if(e.scrollHeight>e.clientHeight+ez.de.SLACK_PX)return!0;let s=document.createRange();s.selectNodeContents(e);let n=s.getBoundingClientRect().width;s.detach();let r=getComputedStyle(e),l=parseFloat(r.paddingLeft)+parseFloat(r.paddingRight);return n>t.width-l+ez.de.SLACK_PX}(r)&&t({text:e,...function(e){let{GAP_PX:t,EDGE_PX:s,MAX_WIDTH_PX:n,EST_HEIGHT_PX:r}=ez.de,l=e.bottom+t,a=l+r>window.innerHeight-s;return{left:Math.min(Math.max(e.left,s),Math.max(s,window.innerWidth-n-s)),top:a?void 0:l,bottom:a?window.innerHeight-e.top+t:void 0}}(r.getBoundingClientRect())})},"focusin"===s.type?0:ez.de.DELAY_MS)}},a=e=>{"Escape"===e.key&&r()};return document.addEventListener("mouseover",l,!0),document.addEventListener("focusin",l,!0),document.addEventListener("focusout",r,!0),document.documentElement.addEventListener("mouseleave",r),document.addEventListener("mousedown",r,!0),document.addEventListener("keydown",a,!0),window.addEventListener("scroll",r,!0),window.addEventListener("resize",r),()=>{clearTimeout(e),document.removeEventListener("mouseover",l,!0),document.removeEventListener("focusin",l,!0),document.removeEventListener("focusout",r,!0),document.documentElement.removeEventListener("mouseleave",r),document.removeEventListener("mousedown",r,!0),document.removeEventListener("keydown",a,!0),window.removeEventListener("scroll",r,!0),window.removeEventListener("resize",r)}},[s]),e)?(0,sp.createPortal)((0,n.jsx)("div",{role:"tooltip",className:"fixed z-[90] pointer-events-none px-2 py-1 rounded-[3px] bg-surface-2 border border-border-subtle shadow-lg text-[11px] text-text break-words fade-in",style:{left:e.left,top:e.top,bottom:e.bottom,maxWidth:ez.de.MAX_WIDTH_PX},children:e.text}),document.body):null}let cS=(0,r.memo)(function(e){let{height:t=1,className:s=""}=e,l=(0,r.useRef)(null),[a,i]=(0,r.useState)(0);(0,r.useEffect)(()=>{let e=l.current;if(!e)return;let t=new ResizeObserver(t=>{let[s]=t,n=s?.contentRect?.width||e.offsetWidth;n>0&&i(Math.round(n))});return t.observe(e),()=>t.disconnect()},[]);let o=a||600,c=Math.max(1.8,(o+140)/250);return(0,n.jsx)("div",{ref:l,"aria-hidden":"true",className:`absolute inset-x-0 top-0 overflow-hidden pointer-events-none ${s}`,style:{height:t,"--pane-w":`${o}px`,"--beam-w":"140px","--beam-dur":`${c.toFixed(2)}s`,"--beam-delay":`${(c/2).toFixed(2)}s`},children:(0,n.jsxs)("div",{className:"relative w-full h-full bg-blue-500/10",children:[(0,n.jsx)("div",{className:"pane-light-beam"}),(0,n.jsx)("div",{className:"pane-light-beam pane-light-beam-2"})]})})});function cT(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,s=String(e).replace(/\/+$/,"").split("/");return s.length<=t?s.join("/"):`…/${s.slice(-t).join("/")}`}function cE(){let e=[{icon:ev.BK,label:"Terminal"},{icon:ev.VA,label:"Screen"},{icon:ev.vd,label:"Files"},{icon:ev.Zr,label:"Git"},{icon:ev.wO,label:"Android"},{icon:ev.qz,label:"Sites"}];return(0,n.jsx)("span",{className:"inline-flex flex-wrap items-center gap-x-3.5 gap-y-1.5",children:e.map(e=>{let{icon:t,label:s}=e;return(0,n.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,n.jsx)(t,{size:13,className:"shrink-0"}),s]},s)})})}let cR=["newTerminal","palette","help"];function cM(e){let{onAddWorkspace:t,onOpenRemote:s,recent:l=[],homeDir:a,onOpenRecent:i}=e,{t:o}=(0,eC.s)();(0,f.B)(e=>e.pushView);let[c,d]=(0,r.useState)(!1),u=[...cR.map(e=>tk.find(t=>t.id===e)).filter(Boolean),tN];return(0,n.jsxs)("div",{className:"h-full w-full empty-stage empty-stage-h",children:[(0,n.jsx)("div",{className:"empty-icons"}),(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),t?.()},disabled:!t,className:"empty-half text-left transition-all duration-150 enabled:hover:opacity-90 enabled:active:scale-[0.99] disabled:opacity-40 disabled:saturate-50",children:[(0,n.jsxs)("span",{className:"empty-idx",children:[(0,n.jsx)("b",{children:"01"})," / ",o("workspaces.emptyTagVibe")]}),(0,n.jsx)("span",{className:"empty-word login-hero-grad",children:o("workspaces.emptyWordVibe")}),(0,n.jsx)("span",{className:"empty-meta",dangerouslySetInnerHTML:{__html:o("workspaces.emptyMetaVibe")}}),(0,n.jsxs)("span",{className:"empty-go",children:[o("workspaces.emptyGoVibe"),(0,n.jsx)(ev.Qp,{size:14,className:"text-brand-500",strokeWidth:2.2})]}),!!l.length&&(0,n.jsx)("span",{className:"flex flex-wrap gap-1.5 mt-4 max-w-full",children:l.slice(0,4).map(e=>(0,n.jsx)("span",{role:"button",title:e.path,onClick:t=>{t.stopPropagation(),(0,eN.e)(),i?.(e.path)},className:"welcome-chip path-tail px-2 py-1 text-[11px] font-mono text-text-muted rounded-full truncate max-w-[180px]",children:cT(e.path)},e.path))})]}),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"empty-hairline","aria-hidden":!0}),(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),d(!0)},className:"empty-half text-left transition-all duration-150 enabled:hover:opacity-90 enabled:active:scale-[0.99] disabled:opacity-40 disabled:saturate-50",children:[(0,n.jsxs)("span",{className:"empty-idx",children:[(0,n.jsx)("b",{children:"02"})," / ",o("workspaces.emptyTagPair")]}),(0,n.jsx)("span",{className:"empty-word login-hero-grad",children:o("workspaces.emptyWordPair")}),(0,n.jsx)("span",{className:"empty-meta",children:(0,n.jsx)(cE,{})}),(0,n.jsxs)("span",{className:"empty-go",children:[o("workspaces.emptyGoPair"),(0,n.jsx)(ev.Qp,{size:14,className:"text-brand-500",strokeWidth:2.2})]})]})]}),c&&(0,n.jsx)(lr,{onClose:()=>d(!1)}),(0,n.jsx)("div",{className:"hidden lg:flex absolute bottom-0 inset-x-0 z-[2] flex-wrap items-center justify-center gap-x-5 gap-y-1.5 px-8 pb-6 font-mono text-[11px] text-text-subtle",children:u.map(e=>(0,n.jsxs)("span",{className:"flex items-center gap-1.5",children:[o(`shortcuts.${e.id}`),(0,n.jsx)("kbd",{className:"px-1.5 py-0.5 rounded-[4px] bg-surface-2/60 text-text-muted whitespace-nowrap",children:tR(e)})]},e.id))})]})}let c$=[],cz=(e,t)=>{if(!e||!t)return null;let s=e.getBoundingClientRect();return{scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,clientHeight:e.clientHeight,nodeTop:t.getBoundingClientRect().top-s.top+e.scrollTop}},cP=e=>String(e).padStart(2,"0");function cA(e){let t=Math.max(0,Math.floor(e/1e3)),s=Math.floor(t/3600),n=Math.floor(t%3600/60),r=t%60;return s>0?`${s}h ${n}m ${cP(r)}s`:n>0?`${n}m ${cP(r)}s`:`${r}s`}function cI(e){return e?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"text-text-muted/60",children:" \xb7 "}),lE(e)," tokens"]}):null}let cD=(0,r.memo)(function(e){let{engine:t="claude",failed:s=!1,onRetry:r}=e,l=sa[t]||sa.claude;return s?(0,n.jsxs)("div",{className:"h-full flex flex-col items-center justify-center gap-3 text-center p-6 select-none",children:[(0,n.jsx)("span",{className:"font-mono text-[12px] text-danger",children:"Couldn't load this conversation"}),(0,n.jsx)("span",{className:"text-[11px] font-mono text-text-muted/70",children:l.label}),(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),r?.()},className:"px-3 py-1.5 rounded-brand text-[11px] font-mono text-text bg-surface-2 hover:bg-surface-3 transition-colors",children:"Retry"})]}):(0,n.jsxs)("div",{className:"h-full flex flex-col items-center justify-center gap-3 text-center p-6 select-none",children:[(0,n.jsx)(ev.kr,{size:20,className:"animate-spin text-brand-500"}),(0,n.jsx)("span",{className:"ai-sheen-text font-mono text-[12px] text-text-muted",children:"Syncing…"}),(0,n.jsx)("span",{className:"text-[11px] font-mono text-text-muted/70",children:l.label})]})}),cL=(0,r.memo)(function(e){let{sessionId:t,engine:s="",hydrating:l=!1}=e,a=l4(e=>e.bySession[t]?.isTurnRunning),i=l4(e=>e.bySession[t]?.turnStartedAt),o=l4(e=>e.bySession[t]?.lastTurnMs),c=l4(e=>e.bySession[t]?.stats),d=l4(e=>e.bySession[t]?.turnBaseline),m=(0,u.d)(e=>e.connected),x=(0,u.d)(e=>e.retryStatus),p=l4(e=>e.bySession[t]?.messages)||c$,h=p[p.length-1]||null,f=Math.max(0,(c?.outputTokens||0)-(d?.outputTokens||0)),[b,g]=(0,r.useState)(Date.now());(0,r.useEffect)(()=>{if(!a)return;g(Date.now());let e=setInterval(()=>g(Date.now()),1e3);return()=>clearInterval(e)},[a]);let[v,y]=(0,r.useState)(null),w=(0,r.useRef)(a);(0,r.useEffect)(()=>{w.current&&!a&&i&&y({ms:o||Date.now()-i,outputTokens:f,changes:l$(p)}),a&&y(null),w.current=a},[a,i,o,f,p]);let j=(0,r.useMemo)(()=>v||a||!o?null:{ms:o,outputTokens:0,changes:l$(p)},[v,a,o,p]),k=v||j;if(!a&&!k)return null;if(!a)return(0,n.jsxs)("div",{className:"flex items-center gap-2 py-1 select-none text-xs text-text-muted",children:[(0,n.jsx)(ev.aJ,{size:14,className:"text-emerald-400 shrink-0"}),(0,n.jsxs)("span",{className:"flex items-center min-w-0 font-mono text-[11px]",children:[(0,n.jsxs)("span",{className:"truncate",children:["Worked for ",(0,n.jsx)("span",{className:"text-text",children:cA(k.ms)})]}),(0,n.jsxs)("span",{className:"shrink-0",children:[function(e){let{added:t,removed:s}=e;return t||s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"text-text-muted/60",children:" \xb7 "}),t>0&&(0,n.jsxs)("span",{className:"text-success",children:["+",t]}),t>0&&s>0&&" ",s>0&&(0,n.jsxs)("span",{className:"text-danger",children:["−",s]})]}):null}(k.changes),cI(k.outputTokens)]})]})]});let N=h?.tools?.find(e=>"running"===e.status),C=f+function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=0;for(let s=e.length-1;s>=0;s--){let n=e[s];if("user"===n.role)break;t+=(n.content?.length||0)+(n.thinking?.length||0)}return Math.round(t/4)}(p),S=function(){let{connected:e=!0,hydrating:t=!1,retryStatus:s=null,activeTool:n=null,engine:r="",lastMsg:l=null}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!e){let e=s||{};return{verb:"Reconnecting",detail:e.isRetrying?`attempt ${e.attempt}/${e.maxAttempts}${e.failed?" \xb7 gave up":""}`:"",tone:"alert"}}if(t)return{verb:"Syncing",detail:"from host",tone:"wait"};if(n?.name){let{name:e,input:t={}}=n,s=sn(r,e),l=lk(t.file_path||t.path);switch(s){case"bash":return{verb:"Running",detail:lC(t.command||"",60),tone:"wait"};case"file":{let s=/^(list|list_dir|ls)$/i.test(e),n=t.offset?`:L${t.offset}`:"";return{verb:s?"Listing":"Reading",detail:lC(`${l}${n}`,60),tone:"wait"}}case"search":{let e=t.pattern?`"${t.pattern}"`:t.query||t.url||"",s=lk(t.path);return{verb:"Searching",detail:lC([e,s?`in ${s}`:""].filter(Boolean).join(" "),60),tone:"wait"}}case"diff":return{verb:/^(Write|write_to_file)$/i.test(e)?"Writing":"Editing",detail:lC(lk(t.file_path||t.filePath||t.file||t.path)||lT(t),60),tone:"wait"};case"agent":{let e=n.children?.length||0;return{verb:"Delegating",detail:lC([t.description||lT(t),e?`${e} steps`:""].filter(Boolean).join(" \xb7 "),60),tone:"wait"}}case"task":return{verb:"Updating tasks",detail:lC(t.activeForm||t.subject||"",60),tone:"wait"};case"plan":return{verb:"Planning",detail:lC(lk(t.path)||e,60),tone:"wait"};default:return{verb:"Calling",detail:lC([lS(e),lT(t)].filter(Boolean).join(" "),60),tone:"wait"}}}return l?.thinking?{verb:"Thinking",detail:lC(lN(l.thinking),60),tone:"wait"}:l?.content?{verb:"Writing",detail:lC(lN(l.content),60),tone:"wait"}:{verb:"Working",detail:"",tone:"wait"}}({connected:m,hydrating:l,retryStatus:x,activeTool:N,engine:s,lastMsg:h});return(0,n.jsxs)("div",{className:"flex items-center gap-2 py-1 select-none text-xs text-text-muted",children:["alert"===S.tone?(0,n.jsx)("span",{className:"w-2 h-2 rounded-full bg-danger animate-pulse shrink-0"}):(0,n.jsx)(ev.kr,{size:13,className:"animate-spin text-brand-500 shrink-0"}),(0,n.jsxs)("span",{className:"flex items-center min-w-0 font-mono text-[11px]",children:[(0,n.jsxs)("span",{className:"truncate",children:[(0,n.jsxs)("span",{className:`ai-sheen-text${"alert"===S.tone?" !text-danger":""}`,children:[S.verb,"…"]}),S.detail&&(0,n.jsxs)("span",{className:"text-text-subtle",children:[" ",S.detail]}),(0,n.jsx)("span",{className:"text-text-muted/60",children:" \xb7 "}),cA(b-(i||b))]}),(0,n.jsx)("span",{className:"shrink-0",children:cI(C)})]})]})}),cB=(0,r.memo)(function(e){let{engine:t,engineMeta:s,workspacePath:l,bus:a=null,fileBus:i,onSendPrompt:o,onOpenResume:c}=e,{t:d}=(0,eC.s)(),[u,m]=(0,r.useState)([]),[x,p]=(0,r.useState)(null),h=eJ(),f=lx(l,i,{enabled:!!l});(0,r.useEffect)(()=>{if(!l)return;let e=!0;return i?.getSystemInfo?.().then(t=>{e&&t?.success&&p(t.homedir||null)}).catch(()=>{}),()=>{e=!1}},[i,l]),(0,r.useEffect)(()=>{if(!l)return;let e=!0;if(a?.emit)return a.emit("getAgentSessions",{cwd:l},s=>{e&&m((Array.isArray(s?.sessions)?s.sessions:[]).filter(e=>!t||e.agent===t).slice(0,8))}),()=>{e=!1}},[l,t]);let b=l?nC(l,x):"";return(0,n.jsxs)("div",{className:"h-full flex flex-col items-center justify-center text-center p-6 select-none overflow-y-auto custom-scrollbar",children:[(0,n.jsx)("div",{className:"w-12 h-12 rounded-2xl flex items-center justify-center mb-3 shadow-md border border-border-subtle/40 backdrop-blur-sm shrink-0",style:{backgroundColor:`${s.color}15`},children:(0,n.jsx)("img",{src:tu(`${t}-ui`),alt:s.label,className:`w-7 h-7 object-contain ${td}`})}),(0,n.jsx)("h3",{className:"text-base font-semibold text-text mb-1",children:s.label}),b&&(0,n.jsxs)("div",{className:"flex items-center justify-center gap-2 mb-3 text-[11px] font-mono text-text-muted",title:l,children:[(0,n.jsx)("span",{className:"truncate max-w-[220px]",children:b}),f.branch&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"text-text-muted/50",children:"\xb7"}),(0,n.jsx)("span",{className:"truncate max-w-[140px]",children:f.branch}),f.dirty&&(0,n.jsxs)("span",{className:"text-amber-400",title:`${f.changedCount} changed`,children:["●",f.changedCount]})]})]}),u.length>0&&(0,n.jsxs)("div",{className:"w-full max-w-md mb-4 text-left",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5 px-1 text-[10px] uppercase tracking-wide text-text-muted",children:[(0,n.jsx)(ev.BZ,{size:11}),(0,n.jsx)("span",{children:"Recent in this project"})]}),(0,n.jsx)("div",{className:"max-h-[38vh] overflow-y-auto custom-scrollbar rounded-brand border border-border-subtle bg-surface-2/30",children:u.map(e=>{let t=!!e.openSessionId&&h.has(e.openSessionId);return(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),t?window.dispatchEvent(new CustomEvent(ez.vP,{detail:{sessionId:e.openSessionId}})):c?.(e)},className:"w-full flex items-center gap-2 px-2.5 py-1.5 text-left border-b border-border-subtle/50 last:border-b-0 hover:bg-surface-2 transition-colors",title:t?d("agentHistory.openNow"):void 0,children:[(0,n.jsx)("span",{className:`flex-1 min-w-0 truncate text-[11px] ${t?"text-text font-medium":"text-text-muted"}`,children:e.title||"Untitled conversation"}),(0,n.jsx)("span",{className:"shrink-0 text-[10px] font-mono text-text-muted",children:function(e){if(!e)return"";let t=Math.round((Date.now()-e)/6e4);if(t<60)return`${Math.max(1,t)}m`;let s=Math.round(t/60);return s<24?`${s}h`:`${Math.round(s/24)}d`}(e.updatedAt)})]},`${e.agent}:${e.sessionId}`)})}),u.length>=8&&(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),c?.()},className:"mt-1.5 px-1 text-[10px] font-mono text-text-muted hover:text-text transition-colors",children:"All conversations →"})]}),(0,n.jsx)("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-md shrink-0",children:sd.map(e=>(0,n.jsx)("button",{type:"button",onClick:()=>o?.(e),className:"px-2.5 py-1 rounded-full bg-surface-2 hover:bg-surface-3 text-[11px] text-text font-mono border border-border-subtle transition-colors",children:e},e))})]})}),cF=(0,r.memo)(function(e){let{sessionId:t,engine:s="claude",workspacePath:l="",bus:a=null,fileBus:i=null,onSendPrompt:o,onResolvePermission:c,hasOlder:d=!1,onLoadOlder:u,onRewind:m,onPreviewRewind:x,onCutLocal:p,onListRewindPoints:h,onOpenResume:f,hydrating:b=!1,synced:g=!0,hydrateFailed:v=!1,onReload:y}=e,w=(0,r.useRef)(null),j=(0,r.useRef)(null),k=(0,r.useRef)(!0),N=(0,r.useRef)(null),C=(0,r.useRef)(null),S=(0,r.useRef)(null),T=(0,r.useRef)(null),E=(0,r.useRef)(0),R=(0,r.useRef)({top:0,atBottom:!0,key:""}),M=(0,r.useRef)(""),$=(0,r.useRef)(!1),[z,P]=(0,r.useState)(!1),[A,I]=(0,r.useState)(131072),[D,L]=(0,r.useState)(null),B=(0,r.useRef)({sessionId:null,n:0}),F=l4(e=>e.bySession[t]?.messages)||c$,O=sa[s]||sa.claude;(0,r.useEffect)(()=>{I(131072),L(null),T.current=null},[t]);let{id:_,index:K}=(0,r.useMemo)(()=>(function(e,t,s){if(!t?.length)return{id:null,index:0};let n=l8(t,s,void 0),r=null!=e?t.findIndex(t=>t.id===e):-1,l=l8(t,Math.max(524288,s),void 0),a=r<0?n:Math.max(r,l);return{id:t[a].id,index:a}})(D,F,A),[D,F,A]);(0,r.useEffect)(()=>{L(_)},[_]);let W=K>0?F.slice(K):F,[H,q]=(0,r.useState)(null),U=(0,r.useRef)(0);(0,r.useEffect)(()=>{q(null),U.current=0},[t]);let X=(0,r.useMemo)(()=>F.filter(e=>"user"===e.role).length,[F]);(0,r.useEffect)(()=>{if(H?.ok||H?.supported===!1||U.current>=6)return;let e=!0;return h?.().then(t=>{e&&(U.current+=1,q(t))}).catch(()=>{}),()=>{e=!1}},[h,s,t,X,H?.ok,H?.supported]);let V=!!H?.ok,G=(0,r.useMemo)(()=>{let e=new Map,t=0;for(let s=F.length-1;s>=0;s--)"user"===F[s].role&&e.set(F[s].id,t++);return e},[F]),J=(0,r.useMemo)(()=>{let e=[];for(let t of W)"user"===t.role||0===e.length?e.push({key:t.id,messages:[t]}):e[e.length-1].messages.push(t);return e},[W]),Z=Math.max(0,J.length-5),Q=(0,r.useCallback)(async function(){let{auto:e=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=w.current,s=Date.now();if(!e&&s-E.current<300)return;E.current=s;let n=S.current,r=n?function(){let{scrollTop:e=0,scrollHeight:t=0,clientHeight:s=0,nodeTop:n=0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{nodeTop:n,scrollTop:e,atBottom:t-e-s<8}}(cz(t,n)):null,l=r?{...r,atBottom:e&&k.current,node:n}:null,a={hiddenCount:K,hasOlder:d,scrollTop:t?.scrollTop??0,scrollHeight:t?.scrollHeight??0},i=null;0===K&&d&&(i=await u?.()),(0,Y.Lq)("ai-page","loadMore",{...a,fetched:i}),T.current=l,L(null),I(e=>e+131072)},[K,d,u]);(0,r.useLayoutEffect)(()=>{let e=w.current,t=T.current;if(!e||!t)return;T.current=null;let s=function(e){let{scrollHeight:t=0,clientHeight:s=0,nodeTop:n=0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e?e.atBottom?t:n<=e.nodeTop?null:Math.max(0,n-(e.nodeTop-e.scrollTop)):null}(t,cz(e,t.node)||{});null!=s&&(e.scrollTop=s);let n=e.scrollHeight-e.scrollTop-e.clientHeight;k.current=n<8,P(n>140)},[A,D]),(0,r.useEffect)(()=>{let e=B.current;if(e.sessionId!==t&&(e.sessionId=t,e.n=0),e.n>=40||b||!g||!k.current||!(d&&F?.length)||F[K]?.role==="user")return;let s=setTimeout(()=>{e.n+=1,Q({auto:!0})},0);return()=>clearTimeout(s)},[t,F,K,d,b,g,Q]);let ee=(0,r.useCallback)(()=>{N.current||(N.current=requestAnimationFrame(()=>{N.current=null;let e=w.current;if(!e||0===e.clientHeight||$.current)return;let t=e.scrollHeight-e.scrollTop-e.clientHeight,s=t<80;k.current=s,P(!s&&t>140),R.current={top:e.scrollTop,atBottom:s,key:M.current},e.scrollTop<120&&(K>0||d)&&Q()}))},[Q,K,d]);(0,r.useEffect)(()=>{let e=w.current,t=j.current;if(!e||!t)return;let s=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&!k.current&&Q()},{root:e,rootMargin:"120px"});return s.observe(t),()=>s.disconnect()},[Q]);let et=(0,r.useMemo)(()=>F.map(e=>`${e.id}:${+!!e.thinking}:${+!!e.content}:${e.tools?.length||0}:${e.diffs?.length||0}:${+!!e.permission}`).join("|"),[F]);(0,r.useLayoutEffect)(()=>{M.current=et},[et]);let es=(0,r.useCallback)(e=>{S.current=e},[]),en=(0,r.useRef)({id:null,pinned:!0});(0,r.useEffect)(()=>{let e=w.current,t=en.current,s=et?et.split("|").pop().split(":")[0]:null;if(!s){en.current={id:null,pinned:t.pinned};return}let n=t.pinned&&(null==t.id||!et.includes(`${t.id}:`));en.current={id:s,pinned:n||k.current},!e||(n||k.current)&&(e.scrollTop=e.scrollHeight,n&&(k.current=!0,P(!1)))},[et]);let er=(0,r.useMemo)(()=>F.reduce((e,t)=>e+(t.content?.length||0),0),[F]);(0,r.useEffect)(()=>{!k.current||C.current||(C.current=setTimeout(()=>{C.current=null;let e=w.current;e&&k.current&&(e.scrollTop=e.scrollHeight)},150))},[er]),(0,r.useEffect)(()=>()=>{C.current&&clearTimeout(C.current)},[]),(0,r.useEffect)(()=>{let e=w.current;if(!e)return;let t=new ResizeObserver(()=>{if(0===e.clientHeight){$.current=!0;return}let t=R.current;if(t.top>8&&!t.atBottom&&0===e.scrollTop&&t.key===M.current){e.scrollTop=Math.min(t.top,e.scrollHeight-e.clientHeight);let s=e.scrollHeight-e.scrollTop-e.clientHeight;k.current=s<8,P(s>140)}$.current=!1,k.current&&(e.scrollTop=e.scrollHeight)});return t.observe(e),()=>t.disconnect()},[]);let el=(0,r.useCallback)(()=>{(0,eN.e)();let e=w.current;e&&(e.scrollTo({top:e.scrollHeight,behavior:"smooth"}),k.current=!0,P(!1))},[]),ea=l4(e=>!!e.bySession[t]?.isTurnRunning),ei=(0,r.useCallback)(e=>ea&&e.messages.some(e=>e.isLive),[ea]);return(0,n.jsxs)("div",{className:"flex-1 min-h-0 relative flex flex-col overflow-hidden @container",children:[(0,n.jsxs)("div",{ref:w,onScroll:ee,className:"ai-conversation flex-1 min-h-0 overflow-y-auto px-3 @2xl:px-6 py-4 space-y-4 custom-scrollbar relative",children:[(K>0||d)&&(0,n.jsx)("div",{ref:j,"aria-hidden":"true",className:"h-px"}),0===F.length?g?(0,n.jsx)(cB,{engine:s,engineMeta:O,workspacePath:l,bus:a,fileBus:i,onSendPrompt:o,onOpenResume:f}):(0,n.jsx)(cD,{engine:s,failed:v,onRetry:y}):(0,n.jsxs)(n.Fragment,{children:[(K>0||d)&&(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),Q()},className:"w-full py-1.5 text-[11px] font-mono text-text-muted hover:text-text bg-surface-2/50 hover:bg-surface-2 border border-border-subtle/60 rounded-brand transition-colors",children:K>0?`Load older \xb7 ${K} more`:"Load older turns"}),J.map((e,t)=>{let[r,...a]=e.messages;return"user"!==r.role?(0,n.jsx)("div",{ref:0===t?es:void 0,children:(0,n.jsx)(ir,{messages:e.messages,engine:s,workspacePath:l,onResolvePermission:c,isLive:ei(e),fileBus:i,showImages:t>=Z})},e.key):(0,n.jsxs)("div",{ref:0===t?es:void 0,children:[(0,n.jsx)(ay,{message:r,engine:s,workspacePath:l,onResolvePermission:c,onRewind:m,onPreviewRewind:x,onCutLocal:p,rewindIndex:G.get(r.id),canRewind:V}),(0,n.jsx)(ir,{messages:a,engine:s,workspacePath:l,onResolvePermission:c,isLive:ei(e),fileBus:i,showImages:t>=Z})]},e.key)}),(0,n.jsx)(cL,{sessionId:t,engine:s,hydrating:b})]})]}),z&&(0,n.jsx)("button",{type:"button",onClick:el,className:"absolute bottom-4 right-6 p-2 rounded-full bg-surface-2 border border-border-subtle shadow-lg hover:bg-surface-3 text-text transition-all duration-150 z-30",title:"Scroll to bottom",children:(0,n.jsx)(ev.yd,{size:16})})]})});function cO(e){return e.provider?e.provider:e.id&&e.id.includes("/")?e.id.split("/")[0]:""}function c_(e,t,s,n){let r=n?t:e,l=[],a=r.filter(e=>e.recent||e.id===s).sort((e,t)=>(e.recentRank??999)-(t.recentRank??999));a.length>0&&l.push({key:"recent",title:"Recent",items:a});let i=new Set(a.map(e=>e.id)),o=r.filter(e=>!i.has(e.id)),c=new Map;for(let e of o){let t=cO(e)||"other";c.has(t)||c.set(t,[]),c.get(t).push(e)}for(let e of[...c.keys()].sort((e,t)=>"profiles"===e||"codex-profiles"===e?-1:"profiles"===t||"codex-profiles"===t?1:"opencode-go"===e?-1:"opencode-go"===t?1:"opencode"===e?-1:"opencode"===t?1:e.localeCompare(t))){let t=c.get(e)||[];0!==t.length&&(t.sort((e,t)=>(e.label||e.id).localeCompare(t.label||t.id)),l.push({key:e,title:e?"profiles"===e||"codex-profiles"===e?"Custom Profiles":"opencode-go"===e?"OpenCode Go":"opencode"===e?"OpenCode Zen":"9router"===e?"9Router":"google-antigravity"===e?"Google Antigravity":"ollama-cloud"===e?"Ollama Cloud":"anthropic"===e?"Anthropic":"openai"===e?"OpenAI":"google"===e?"Google":e.split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"Other Models",items:t}))}return l}let cK=new Map,cW=new Map,cH=(e,t)=>new Promise(s=>{e.emit("ai:files",t,e=>s(e?.ok?e:null))});function cq(e){if(!e)return null;let t=new Set(e.modified||[]);return{files:(e.paths||[]).map((e,s)=>({path:e,isModified:t.has(s)})),dirs:e.dirs||[],truncated:!!e.truncated}}let cU=(0,r.memo)(function(e){let{item:t}=e,s=t.label.lastIndexOf("/"),r=-1===s?"":t.label.slice(0,s+1),l=-1===s?t.label:t.label.slice(s+1),a=new Set(t.positions||[]),i=(e,t)=>[...e].map((e,s)=>a.has(t+s)?(0,n.jsx)("span",{className:"text-accent font-semibold",children:e},t+s):(0,n.jsx)("span",{children:e},t+s));return(0,n.jsxs)("span",{className:"font-mono text-xs min-w-0 flex flex-1 items-baseline",children:[(0,n.jsx)("span",{className:"min-w-0 truncate text-text-muted",style:{direction:"rtl",unicodeBidi:"plaintext"},children:i(r,0)}),(0,n.jsxs)("span",{className:`shrink-0 ${t.isDir?"text-brand-500":"text-text"}`,children:[i(l,r.length),t.isDir?"/":""]})]})}),cX=[],cV=(0,r.memo)(function(e){let{sessionId:t="",engine:s="claude",bus:l=null,isTurnRunning:a=!1,isFocused:i=!1,onSend:o,onRemoveQueueItem:c,onClearQueue:d,onStop:u,onRunShell:m,onResolvePermission:x,onSelectModel:p,onModeChange:h,onOpenModal:f,onOptionChange:b,onActivate:g,workspacePath:v="",model:y="",modalOpen:w=!1}=e,{t:j,locale:k}=(0,eC.s)(),N="mouse"===sD(),C=tE()?"Opt ←/→ \xb7 Opt 1…9 to switch tab":"Ctrl+Shift+←/→ \xb7 1…9 to switch tab",S=ss(s),T=S.permissionModes,E=S.slashCommands,R=l4(e=>e.bySession[t]?.isTurnRunning),M=l4(e=>e.bySession[t]?.metadata?.model),$=l4(e=>e.bySession[t]?.metadata?.modelOptions),z=$?.length?$:S.models,P=l4(e=>e.bySession[t]?.metadata?.skills)||cX,A=l4(e=>e.bySession[t]?.metadata?.commands)||cX,I=l4(e=>e.bySession[t]?.permissionMode),D=l4(e=>e.bySession[t]?.metadata?.effort||e.bySession[t]?.metadata?.variant),L=I||S.defaultMode,B=void 0!==R?R:a,F=void 0!==M?M:y,[O,_]=(0,r.useState)(""),K=l4(e=>e.bySession[t]?.queue)||cX,W=l4(e=>e.bySession[t]?.promptError)||null,H=l4(e=>e.bySession[t]?.promptSending)||null,[q,U]=(0,r.useState)(!1);(0,r.useEffect)(()=>{if(U(!1),!H)return;let e=setTimeout(()=>U(!0),1500);return()=>clearTimeout(e)},[H]);let[X,V]=(0,r.useState)(-1),G=(0,r.useRef)(""),[J,Y]=(0,r.useState)(!1),[Z,Q]=(0,r.useState)(null),[ee,et]=(0,r.useState)([]),[es,en]=(0,r.useState)(0),[er,el]=(0,r.useState)(null),[ea,ei]=(0,r.useState)(-1),[eo,ec]=(0,r.useState)(0),ed=sy(e=>e.addCommand),eu=sy(e=>e.resolveAlias),em=sy(e=>e.history),ex=sy(e=>e.pinned),ep=(0,r.useMemo)(()=>J?[]:sS(O,em,ex,[],!N),[O,em,ex,N,J]),[eh,ef]=(0,r.useState)(!1),[eb,eg]=(0,r.useState)(""),[ey,ew]=(0,r.useState)(()=>new Set),[ej,ek]=(0,r.useState)(!1),[eS,eT]=(0,r.useState)(!1),eE=(0,r.useRef)(null),{attachments:eR,setAttachments:eM,removeAttachment:e$,handleFileUpload:ez,handleAttachPaste:eP}=sq({bus:l,sessionId:t}),[eA]=s$(k),eI=sA({lang:sR(eA),onText:e=>{_(e),eO.current&&(eO.current.value=e,eO.current.style.height="auto",eO.current.style.height=`${Math.min(eO.current.scrollHeight,120)}px`,eO.current.focus())}}),eD=(0,r.useCallback)(()=>{(0,eN.e)(),eI.stop()},[eI]),eL=(0,r.useCallback)(()=>{eI.cancel()},[eI]),eB=(0,r.useCallback)(()=>{eI.listening?eI.stop():(document.activeElement?.blur(),eI.start(O))},[eI,O]),eF=(0,r.useCallback)(()=>{(0,eN.e)(),_(""),eO.current&&(eO.current.value="",eO.current.style.height="26px");try{localStorage.removeItem(`9remote_draft_${t}`)}catch{}eO.current?.focus()},[t]),eO=(0,r.useRef)(null),e_=(0,r.useRef)(eR);(0,r.useEffect)(()=>{e_.current=eR},[eR]);let eK=(0,r.useRef)(null),eW=(0,r.useRef)(!1),eH=(0,r.useRef)(0),eq=(0,r.useRef)(0),eU=(0,r.useRef)(0),eX=(0,r.useRef)("");sa[s]||sa.claude,(0,r.useEffect)(()=>{i&&!w&&N&&eO.current?.focus({preventScroll:!0})},[i,w,N]),(0,r.useEffect)(()=>{let e=e=>{if(e.detail?.sessionId!==t)return;let s=String(e.detail.text||"");if(s&&(_(e=>e===s||e.includes(s)?e:e?`${e}
18
18
  ${s}`:s),eO.current&&!eO.current.value.includes(s))){let e=eO.current.value?`${eO.current.value}
19
19
  ${s}`:s;eO.current.value=e,eO.current.style.height="auto",eO.current.style.height=`${Math.min(eO.current.scrollHeight,120)}px`,eO.current.focus()}};return window.addEventListener("9r:ai-prompt",e),()=>window.removeEventListener("9r:ai-prompt",e)},[t]),(0,r.useEffect)(()=>{let e=e=>{eE.current&&!eE.current.contains(e.target)&&(ef(!1),ek(!1))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]),(0,r.useEffect)(()=>{B&&(ef(!1),ek(!1))},[B]),(0,r.useEffect)(()=>{let e=eO.current;if(!e)return;e.style.height="auto";let t=Math.min(e.scrollHeight,140);e.style.height=`${Math.max(t,26)}px`,e.selectionEnd===e.value.length&&(e.scrollTop=e.scrollHeight)},[O]),(0,r.useEffect)(()=>{if(!J||!eK.current)return;let e=eK.current.querySelectorAll("[data-menu-item]")[es];e&&e.scrollIntoView({block:"nearest"})},[es,J]),(0,r.useEffect)(()=>{if(t){eM([]);try{_(localStorage.getItem(`9remote_draft_${t}`)||"")}catch{}}},[t,eM]),(0,r.useEffect)(()=>{if(!t)return;let e=setTimeout(()=>{try{O?localStorage.setItem(`9remote_draft_${t}`,O):localStorage.removeItem(`9remote_draft_${t}`)}catch{}},300);return()=>clearTimeout(e)},[O,t]),(0,r.useEffect)(()=>{if(er){let e=er.name.replace(/[/@]/g,"\\$&");if(RegExp(`(?:^|\\s)${e}\\s*$`).test(O))return;el(null)}let e=na(O,eo);if(!e){Y(!1),Q(null);return}let{trigger:t,query:s}=e,n=s.toLowerCase();if(Q(t),en(0),"/"===t){let e=function(){let{staticCommands:e=[],liveCommands:t=[],skills:s=[],filter:n=""}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=(t||[]).map(e=>({name:`/${e.name}`,description:e.description||"",isCommand:!0})),l=(s||[]).map(e=>({name:`/${e.name||e.id}`,description:e.description||`Skill: ${e.name||e.id}`,isSkill:!0})),a=new Set,i=String(n||"").toLowerCase();return[...e||[],...r,...l].filter(e=>!a.has(e.name)&&!!e.name.toLowerCase().includes(i)&&(a.add(e.name),!0))}({staticCommands:E,liveCommands:A,skills:P,filter:n});et(e),Y(e.length>0);return}let r=!1,a=setTimeout(async()=>{var e;let t;if(!v){et([]),Y(!1);return}let n=await function(e,t){if(!e?.emit||!t)return Promise.resolve(null);let s=cK.get(t);if(s&&Date.now()-s.at<3e4)return Promise.resolve(s.index);let n=cW.get(t);if(n)return n;let r=cH(e,{workspace:t}).then(e=>{cW.delete(t);let s=cq(e);return s&&cK.set(t,{index:s,at:Date.now()}),s});return cW.set(t,r),r}(l,v);if(r)return;if(!n){et([]),Y(!1);return}let a=nr(n,s,10),i=a[0],o=i&&!i.isDir&&(-1===(t=(e=i.path).lastIndexOf("/"))?e:e.slice(t+1)).toLowerCase().startsWith(s.toLowerCase());if(n.truncated&&s.length>=2&&!o){let e=await (!l?.emit||!v||!s?Promise.resolve(null):cH(l,{workspace:v,query:s}).then(cq));if(r)return;if(e){let t=nr(e,s,10),n=new Set(a.map(e=>e.path));a=[...a,...t.filter(e=>!n.has(e.path))].sort((e,t)=>t.score-e.score||e.path.length-t.path.length).slice(0,10)}}et(a.map(e=>({name:e.path,label:e.path,isDir:e.isDir,isModified:e.isModified,positions:e.positions}))),Y(a.length>0)},100);return()=>{r=!0,clearTimeout(a)}},[O,eo,l,v,P,A,E,er]);let eV=(0,r.useCallback)(e=>{let s="string"==typeof e?e:eO.current?eO.current.value:O,n=eu((s||O).trim()),r=e_.current;if(!n&&0===r.length)return;let l=Date.now();if(l-eq.current<250)return;eq.current=l,eU.current=l,eX.current=(s||O).trim(),(0,eN.e)(),n&&!n.startsWith("!")&&ed(n),V(-1),_(""),eO.current&&(eO.current.value="",eO.current.style.height="26px");try{localStorage.removeItem(`9remote_draft_${t}`)}catch{}if(n.startsWith("!"))return void m?.(n.slice(1).trim());let a=l4.getState().bySession[t]?.activePermission;a&&x?.(a.requestId,su,sm),r.length&&eM([]),o?.(n,{attachments:r.map(e=>{let{name:t,type:s,content:n}=e;return{filename:t,type:s,content:n}})})},[O,t,o,m,x,eM,ed,eu]),eG=e=>Date.now()-eU.current<200&&!!e?.trim()&&e.trim()===eX.current,eJ=(0,r.useCallback)(()=>{(0,eN.e)(),u?.()},[u]),eY=(0,r.useCallback)(()=>{let e=l4.getState().bySession[t]?.promptError;e&&((0,eN.e)(),l4.getState().clearPromptError(t),ai(t,e.text),o?.(e.text,{attachments:e.attachments||null,promptId:e.promptId||null}))},[t,o]),eZ=(0,r.useCallback)(()=>{let e=l4.getState().bySession[t]?.promptError;e&&(l4.getState().clearPromptError(t),ai(t,e.text),_(t=>t.trim()?`${e.text}
20
20
  ${t}`:e.text),requestAnimationFrame(()=>eO.current?.focus()))},[t]),eQ=(0,r.useCallback)(()=>{let e=l4.getState().bySession[t]?.promptError;e&&ai(t,e.text),l4.getState().clearPromptError(t)},[t]),e0=(0,r.useCallback)(e=>{let t=e.action||"send",[s,n]=t.split(":");if("modal"===s){eO.current?.blur(),f?.(n);return}if("clear"===s){o?.("/clear",{force:!0}),_("");return}if("setMode"===s){h?.(e.mode),_("");return}if("send"===s||"send"===t){o?.(e.name),_("");return}eO.current?.focus()},[f,o,h]),e1=(0,r.useCallback)(e=>{let t;(0,eN.e)();let s=na(O,eo);if(!s)return;let n=O.slice(0,s.start),r=O.slice(s.end),l="/"===Z&&e.action?.startsWith("modal:");if(t="@"===Z?e.isDir?`@${ni(e.name)}/`:`@${ni(e.name)} `:`${e.name} `,_(l?n+r:`${n}${t}${r}`),!l){let e=n.length+t.length;ec(e),requestAnimationFrame(()=>{let t=eO.current;t&&t.setSelectionRange(e,e)})}(Y(!1),"/"!==Z)?eO.current?.focus():"submenu"===e.action&&Array.isArray(e.subOptions)&&e.subOptions.length>0?B&&("effort"===e.optionKey||"variant"===e.optionKey)?_(""):(el(e),en(0),Y(!0)):e0(e)},[O,eo,Z,e0,B]),e2=(0,r.useCallback)(e=>{(0,eN.e)(),er&&(b?.(er.optionKey,e.value),el(null),Y(!1),_(""),eO.current?.focus())},[er,b]),e5=(0,r.useCallback)(e=>{(0,eN.e)();let t=/(?:^|\s)(\S*)$/.exec(O),s=t?t[1]:"";_(O.slice(0,O.length-s.length)+e),ei(-1),eO.current?.focus()},[O]),e3=e=>String(e||"").toLowerCase().replace(/\[[^\]]*\]$/,""),e4=(0,r.useMemo)(()=>{if(!F)return null;let e=z||[],t=e3(F);return e.find(e=>e.id===F)||e.find(e=>e3(e.id)===t)||e.find(e=>e3(e.id).split("/").pop()===t.split("/").pop())||null},[F,z]),e6=e4?.short||e4?.label||F||"Model",e8=D||S.defaultEffort||"",e9=(0,r.useMemo)(()=>{let e=[...z||[]];return F&&!e.some(e=>e.id===F)&&e.unshift({id:F,label:F,short:F}),e},[z,F]),e7=(0,r.useMemo)(()=>{if(e9.length<=20)return e9;let e=eb.trim().toLowerCase();return e?e9.filter(t=>{let s=(t.id||"").toLowerCase();return(t.label||"").toLowerCase().includes(e)||s.includes(e)||(t.provider||"").toLowerCase().includes(e)}):e9},[e9,eb]),te=(0,r.useMemo)(()=>e9.length<=20?[{key:"all",title:"",items:e9}]:c_(e9,e7,F,eb.trim()),[e9,e7,F,eb]),tt=(0,r.useMemo)(()=>(E||[]).find(e=>"submenu"===e.action&&("effort"===e.optionKey||"variant"===e.optionKey)),[E]),ts=(0,r.useMemo)(()=>{let e=(e4?.efforts||[]).map(e=>({value:e,label:e}));return e.length>0?e:tt?.subOptions||[]},[tt,e4]);return(0,n.jsxs)("div",{className:"relative px-3 py-1.5 bg-transparent select-none",children:[q&&H&&!W&&(0,n.jsxs)("div",{className:"flex items-center gap-2 mb-1 px-2.5 py-1.5 text-xs rounded-brand bg-brand-500/10 border border-brand-500/25",children:[(0,n.jsx)("span",{className:"w-2 h-2 rounded-full bg-brand-500 animate-pulse shrink-0"}),(0,n.jsx)("span",{className:"shrink-0 font-medium text-brand-500",children:j("common.sending")}),(0,n.jsx)("span",{className:"truncate min-w-0 text-text-muted",children:H.text})]}),W&&(0,n.jsxs)("div",{className:"flex items-center gap-2 mb-1 px-2.5 py-1.5 text-xs bg-danger/10 border border-danger/30 rounded-brand",children:[(0,n.jsx)(ev.RI,{size:13,className:"shrink-0 text-danger"}),(0,n.jsxs)("span",{className:"truncate min-w-0 text-text",title:W.text,children:["reload"===W.reason?j("common.promptRecovered"):`${j("common.promptNotSent")}${W.reason&&"timeout"!==W.reason?`: ${W.reason}`:""}`,W.text?(0,n.jsxs)("span",{className:"text-text-muted",children:[" — ",W.text]}):null]}),(0,n.jsxs)("button",{type:"button",onClick:eY,className:"shrink-0 inline-flex items-center gap-1 px-2 py-1 text-[11px] font-semibold text-white bg-brand-500 hover:bg-brand-600 rounded-brand transition-colors",children:[(0,n.jsx)(ev.kt,{size:11}),j("common.resend")]}),(0,n.jsx)("button",{type:"button",onClick:eZ,className:"shrink-0 px-2 py-1 text-[11px] text-text-muted hover:text-text border border-border-subtle rounded-brand transition-colors",children:j("common.edit")}),(0,n.jsx)("button",{type:"button",onClick:eQ,className:"shrink-0 text-text-muted hover:text-text",children:(0,n.jsx)(ev.X,{size:11})})]}),J&&er&&(0,n.jsxs)("div",{ref:eK,className:"absolute left-3 right-3 bottom-[calc(100%+6px)] max-h-52 menu-popover overflow-y-auto z-50 p-1 custom-scrollbar",children:[(0,n.jsxs)("div",{className:"px-2 py-0.5 text-[10px] text-text-muted font-mono uppercase tracking-wider border-b border-border-subtle mb-1 flex items-center justify-between",children:[(0,n.jsxs)("span",{children:[er.name," — ",er.optionKey]}),(0,n.jsx)("button",{type:"button",onClick:()=>{el(null),Y(!1),_("")},className:"text-text-muted hover:text-text",children:(0,n.jsx)(ev.X,{size:11})})]}),(er.subOptions||[]).map((e,t)=>(0,n.jsxs)("div",{"data-menu-item":"true",onClick:()=>e2(e),onMouseEnter:()=>en(t),className:`px-2 py-1 rounded-brand flex items-center justify-between text-xs cursor-pointer ${t===es?"bg-surface-2 text-text font-medium":"text-text-muted hover:text-text"}`,children:[(0,n.jsx)("span",{className:"font-mono text-xs text-text",children:e.label}),e.desc&&(0,n.jsx)("span",{className:"text-[10px] text-text-muted truncate ml-2 max-w-[55%]",children:e.desc})]},e.value))]}),J&&!er&&ee.length>0&&(0,n.jsxs)("div",{ref:eK,className:"absolute left-3 right-3 bottom-[calc(100%+6px)] max-h-52 menu-popover overflow-y-auto z-50 p-1 custom-scrollbar",children:[(0,n.jsx)("div",{className:"px-2 py-0.5 text-[10px] text-text-muted font-mono uppercase tracking-wider border-b border-border-subtle mb-1",children:"/"===Z?"Slash Commands & Skills":"Files in repo (@)"}),ee.map((e,t)=>{let s=B&&("/model"===e.name||"submenu"===e.action&&("effort"===e.optionKey||"variant"===e.optionKey));return(0,n.jsxs)("div",{"data-menu-item":"true",onClick:s?void 0:()=>e1(e),onMouseEnter:()=>en(t),className:`px-2 py-1 rounded-brand flex items-center justify-between text-xs ${s?"opacity-40 cursor-not-allowed":t===es?"bg-surface-2 text-text font-medium cursor-pointer":"text-text-muted hover:text-text cursor-pointer"}`,title:s?"Cannot change while turn is running":void 0,children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 truncate min-w-0",children:[e.isSkill?(0,n.jsx)(ev.Kq,{size:12,className:"text-warning shrink-0"}):"/"===Z?(0,n.jsx)(ev.BK,{size:12,className:"text-accent shrink-0"}):e.isDir?(0,n.jsx)(ev.vd,{size:12,className:"text-brand-500 shrink-0"}):(0,n.jsx)(ev.GD,{size:12,className:"text-accent shrink-0"}),"@"!==Z||e.isSkill?(0,n.jsx)("span",{className:"font-mono text-xs text-text",children:e.name}):(0,n.jsx)(cU,{item:e}),e.isSkill&&(0,n.jsx)("span",{className:"text-[9px] px-1 rounded bg-warning/15 text-warning font-mono",children:"skill"}),"submenu"===e.action&&(0,n.jsx)(ev.rX,{size:11,className:"text-text-muted shrink-0 rotate-90"})]}),e.description&&"@"!==Z&&(0,n.jsx)("span",{className:"text-[10px] text-text-muted truncate ml-2 max-w-[50%]",children:e.description}),"@"===Z&&!e.isSkill&&(0,n.jsxs)("span",{className:"flex items-center gap-1.5 shrink-0 ml-2",children:[e.isModified&&(0,n.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-warning",title:"modified"}),e.isDir&&(0,n.jsx)("span",{className:"text-[10px] text-text-muted font-mono",children:"/"})]})]},e.name)})]}),K.length>0&&(0,n.jsx)("div",{className:"mb-1 space-y-0.5",children:K.map((e,t)=>(0,n.jsxs)("div",{className:"px-2 py-0.5 rounded bg-brand-500/10 border border-brand-500/30 flex items-center justify-between text-xs animate-in fade-in duration-100",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5 truncate min-w-0",children:[(0,n.jsx)("span",{className:"font-mono text-[9px] uppercase tracking-wider font-semibold px-1 rounded bg-brand-500/20 text-brand-400 shrink-0",children:0===t?"Next":`Queued ${t+1}`}),(0,n.jsx)("span",{className:"truncate text-text font-mono text-[11px]",children:e.text}),e.attachments?.length>0&&(0,n.jsxs)("span",{className:"shrink-0 text-text-muted flex items-center gap-0.5 font-mono text-[10px]",children:[(0,n.jsx)(ev.xv,{size:10}),e.attachments.length]})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1 shrink-0 ml-2",children:[0===t&&(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),eJ()},className:"text-text-muted hover:text-brand-400 p-1 rounded hover:bg-surface-2 transition-colors cursor-pointer",title:"Send now (stops the current turn)",children:(0,n.jsx)(ev.Vn,{size:13})}),(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),c?.(e.id)},className:"text-text-muted hover:text-text p-1 rounded hover:bg-surface-2 transition-colors cursor-pointer",title:"Remove from queue",children:(0,n.jsx)(ev.X,{size:14})})]})]},e.id))}),(0,n.jsx)(s3,{voice:eI,onDone:eD,onCancel:eL,className:"mb-1.5"}),(0,n.jsxs)("div",{className:"relative rounded-brand border border-border-composer bg-transparent focus-within:border-brand-500 transition-colors px-2.5 py-1 flex flex-col gap-1",children:[eR.length>0&&(0,n.jsx)("div",{className:"flex gap-1.5 overflow-x-auto scroll-thin-x pt-0.5",children:eR.map(e=>(0,n.jsxs)("div",{className:"relative flex-shrink-0 group",children:[e.isImage?(0,n.jsx)("img",{src:`data:${e.type};base64,${e.content}`,alt:e.name,className:"w-10 h-10 object-cover rounded border border-border-subtle"}):(0,n.jsxs)("div",{className:"w-10 h-10 flex flex-col items-center justify-center rounded border border-border-subtle bg-surface-2 px-1",children:[(0,n.jsx)(ev.xv,{size:12,className:"text-text-muted"}),(0,n.jsx)("span",{className:"text-[8px] text-text-muted truncate w-full text-center",children:e.name})]}),(0,n.jsx)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>e$(e.id),className:"absolute -top-1.5 -right-1.5 w-4 h-4 flex items-center justify-center bg-surface-3 rounded-full text-text-muted hover:text-text border border-border-subtle","aria-label":"Remove attachment",children:(0,n.jsx)(ev.X,{size:10})})]},e.id))}),(0,n.jsx)(sT,{value:O,store:sy,isMobile:!N,activeIndex:ea,onSelect:e5}),(0,n.jsxs)("div",{className:"flex items-start gap-1",children:[(0,n.jsx)("textarea",{ref:eO,value:O,onPaste:eP,onChange:e=>{if(eG(e.target.value)){eO.current&&(eO.current.value="");return}_(e.target.value),ec(e.target.selectionStart??e.target.value.length),ei(-1)},onFocus:()=>g?.(),onSelect:e=>ec(e.currentTarget.selectionStart),onKeyUp:e=>{(e.key.startsWith("Arrow")||"Home"===e.key||"End"===e.key)&&ec(e.currentTarget.selectionStart)},onKeyDown:e=>{if(w||e.nativeEvent?.isComposing||229===e.keyCode)return;if(e.shiftKey&&"Tab"===e.key){e.preventDefault(),e.stopPropagation(),(0,eN.e)();let t=T||[];if(t.length>0){let e=t.findIndex(e=>e.id===L),s=-1===e?0:(e+1)%t.length,n=t[s]?.id;n&&h?.(n)}return}if((e.ctrlKey||e.metaKey)&&("c"===e.key||"C"===e.key)&&B){let t=eO.current;if(!(t&&t.selectionStart!==t.selectionEnd)){e.preventDefault(),eJ();return}}if("Escape"===e.key){if(er){e.preventDefault(),el(null),Y(!1),_("");return}if(J){e.preventDefault(),Y(!1);return}if(B){e.preventDefault(),eJ();return}if(K.length>0){e.preventDefault(),d?.();return}}if(er){let t=er.subOptions||[];if("ArrowDown"===e.key){e.preventDefault(),en(e=>(e+1)%t.length);return}if("ArrowUp"===e.key){e.preventDefault(),en(e=>(e-1+t.length)%t.length);return}if("Enter"===e.key||"Tab"===e.key){e.preventDefault(),e2(t[es]);return}}if(J&&ee.length>0){if("ArrowDown"===e.key){e.preventDefault(),en(e=>(e+1)%ee.length);return}if("ArrowUp"===e.key){e.preventDefault(),en(e=>(e-1+ee.length)%ee.length);return}if("Enter"===e.key||"Tab"===e.key){e.preventDefault(),e1(ee[es]);return}}if(ep.length>0){let t=ea<0?-1:(ea%ep.length+ep.length)%ep.length;if("Tab"===e.key&&!e.shiftKey){e.preventDefault(),ei(-1===t?0:(t+1)%ep.length);return}if(("Enter"===e.key||"Tab"===e.key)&&-1!==t){e.preventDefault(),e5(ep[t].cmd);return}}let t=eO.current,s=t?.selectionStart??0,n=t?.value??"",r=-1===n.lastIndexOf("\n",s-1),l=-1===n.indexOf("\n",s);if("ArrowUp"===e.key&&!er&&!J&&r&&em.length>0){if(e.preventDefault(),s>0)return void t?.setSelectionRange(0,0);-1===X&&(G.current=O);let n=Math.min(X+1,em.length-1);return void(n===X||(V(n),_(em[n])))}if("ArrowDown"===e.key&&!er&&!J&&l&&-1!==X){if(e.preventDefault(),s<n.length)return void t?.setSelectionRange(n.length,n.length);let r=X-1;return void(r<0?(V(-1),_(G.current)):(V(r),_(em[r])))}if("Enter"===e.key&&(e.metaKey||e.ctrlKey)){e.preventDefault(),eV();return}"Enter"===e.key&&!e.shiftKey&&N&&(e.preventDefault(),eV())},onCompositionStart:()=>{eW.current=!0},onCompositionEnd:()=>{eW.current=!1,eH.current=Date.now(),eG(eO.current?.value)&&(eO.current&&(eO.current.value=""),_(""))},placeholder:B?N?"Type command \xb7 Enter to queue \xb7 Esc to stop":"Type command \xb7 Send to queue":N?`Type command \xb7 ${C}`:"Type command",rows:1,className:"ai-conversation ai-composer-input flex-1 min-w-0 bg-transparent resize-none text-xs text-text placeholder-text-muted focus:outline-none custom-scrollbar leading-snug min-h-[24px]"}),O.trim().length>0?(0,n.jsx)("button",{type:"button",onClick:eF,className:"shrink-0 mt-0.5 p-1.5 rounded text-text-muted hover:text-text hover:bg-surface-2 transition-colors flex items-center justify-center",title:"Clear input",children:(0,n.jsx)(ev.X,{size:16})}):(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),eT(!0)},className:"shrink-0 mt-0.5 p-1.5 rounded text-text-muted hover:text-text hover:bg-surface-2 transition-colors flex items-center justify-center",title:j("history.title"),children:(0,n.jsx)(ev.BZ,{size:16})})]}),(0,n.jsxs)("div",{className:"relative flex items-center justify-between text-xs pt-1",children:[(0,n.jsx)("div",{className:"flex items-center gap-1.5 flex-1 min-w-0",children:(0,n.jsxs)("div",{ref:eE,className:"relative min-w-0 flex items-center gap-1",children:[(0,n.jsxs)("button",{type:"button",disabled:B,onClick:()=>{ef(!eh),eh||eg(""),ek(!1)},className:"min-w-0 px-1.5 py-0.5 rounded text-[11px] font-medium flex items-center gap-1 font-mono text-text-muted hover:text-text hover:bg-surface-2 transition-colors cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",title:B?"Cannot change model while turn is running":"Select model (/model)",children:[(0,n.jsx)("img",{src:tu(`${s}-ui`),alt:"",className:`w-3.5 h-3.5 object-contain shrink-0 ${td}`}),(0,n.jsx)("span",{dir:"rtl",className:"truncate min-w-0",children:(0,n.jsx)("bdi",{children:e6})}),(0,n.jsx)(ev.rX,{size:11,className:`text-text-muted shrink-0 transition-transform ${eh?"":"rotate-180"}`})]}),eh&&(0,n.jsxs)("div",{className:"absolute left-0 bottom-[calc(100%+6px)] min-w-[260px] max-h-56 bg-surface border border-border-subtle rounded-brand shadow-xl overflow-y-auto z-50 p-1 custom-scrollbar",children:[(0,n.jsx)("div",{className:"px-2 py-0.5 text-[10px] text-text-muted font-mono uppercase tracking-wider border-b border-border-subtle mb-1",children:"Select Model"}),e9.length>20&&(0,n.jsxs)("div",{className:"px-1.5 pb-1.5 mb-1 border-b border-border-subtle flex items-center gap-1.5 text-text-muted",children:[(0,n.jsx)(ev.vj,{size:12,className:"shrink-0"}),(0,n.jsx)("input",{type:"text",value:eb,onChange:e=>eg(e.target.value),placeholder:"Search models...",autoFocus:!0,className:"w-full bg-transparent text-[11px] text-text placeholder-text-muted/70 focus:outline-none py-0.5"})]}),0===e7.length&&(0,n.jsxs)("div",{className:"px-2 py-2 text-[11px] text-text-muted",children:['No models match "',eb,'"']}),te.map(e=>(0,n.jsxs)("div",{children:[te.length>1&&(0,n.jsxs)("button",{type:"button",onClick:()=>{var t;return t=e.key,void ew(e=>{let s=new Set(e);return s.has(t)?s.delete(t):s.add(t),s})},"aria-expanded":!ey.has(e.key),className:"w-full px-2 py-0.5 text-[10px] font-mono uppercase tracking-wider font-semibold text-text flex items-center justify-between select-none border-b border-border-subtle mb-1 mt-1 first:mt-0",children:[(0,n.jsxs)("span",{className:"flex items-center gap-1",children:[(0,n.jsx)("span",{className:"text-[8px]",children:ey.has(e.key)?"▶":"▼"}),e.title]}),(0,n.jsx)("span",{className:"text-[9px] text-text-subtle",children:e.items.length})]}),!ey.has(e.key)&&e.items.map(e=>{let t=F===e.id;return(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),p?.(e.id),ef(!1)},title:e.id,className:`w-full pl-4 pr-2 py-1.5 rounded text-left text-xs flex flex-col gap-0.5 transition-colors ${t?"bg-surface-2 text-text font-semibold":"text-text-muted hover:text-text hover:bg-surface-2"}`,children:[(0,n.jsxs)("span",{className:"w-full flex items-center justify-between",children:[(0,n.jsx)("span",{className:"truncate",children:e.label}),t&&(0,n.jsx)(ev.aJ,{size:12,className:"text-text shrink-0 ml-1"})]}),e.label!==e.id&&(0,n.jsx)("span",{className:"truncate font-mono text-[10px] text-text-subtle",children:e.id})]},e.id)})]},e.key))]}),ts.length>0&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{type:"button",disabled:B,onClick:()=>{ek(e=>!e),ef(!1)},className:"shrink-0 px-1 py-0.5 rounded text-[10px] uppercase tracking-wide font-mono text-text-muted hover:text-text hover:bg-surface-2 transition-colors cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",title:B?`Cannot change ${tt?.optionKey||"effort"} while turn is running`:`Select ${tt?.optionKey||"effort"}`,children:e8||"—"}),ej&&(0,n.jsxs)("div",{className:"absolute left-0 bottom-[calc(100%+6px)] min-w-[220px] max-h-56 bg-surface border border-border-subtle rounded-brand shadow-xl overflow-y-auto z-50 p-1 custom-scrollbar",children:[(0,n.jsx)("div",{className:"px-2 py-0.5 text-[10px] text-text-muted font-mono uppercase tracking-wider border-b border-border-subtle mb-1",children:tt?.optionKey==="variant"?"Variant":"Reasoning effort"}),ts.map(e=>{let t=e8===e.value;return(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),b?.(tt?.optionKey||"effort",e.value),ek(!1)},className:`w-full px-2 py-1.5 rounded text-left text-xs flex items-center justify-between gap-2 transition-colors ${t?"bg-brand-500/15 text-brand-400 font-semibold":"text-text-muted hover:text-text hover:bg-surface-2"}`,children:[(0,n.jsx)("span",{className:"font-mono truncate",children:e.label}),t&&(0,n.jsx)(ev.aJ,{size:12,className:"text-brand-400 shrink-0"}),!t&&e.desc&&(0,n.jsx)("span",{className:"text-[10px] text-text-subtle truncate max-w-[55%]",children:e.desc})]},e.value)})]})]})]})}),(0,n.jsxs)("div",{className:"flex items-center gap-1.5 shrink-0 pl-1.5",children:[(0,n.jsxs)("label",{className:"p-1.5 rounded text-text-muted hover:text-text hover:bg-surface-2 transition-colors cursor-pointer flex items-center justify-center",title:"Attach file or image",children:[(0,n.jsx)(ev.xv,{size:15}),(0,n.jsx)("input",{type:"file",multiple:!0,onChange:ez,className:"hidden",accept:"*/*"})]}),eI.active&&(0,n.jsx)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:eB,title:j("not-allowed"===eI.error||"service-not-allowed"===eI.error?"voice.denied":"voice.dictate"),"aria-label":j("voice.dictate"),className:`p-1.5 rounded flex items-center justify-center transition-colors ${eI.listening?"bg-red-500/90 text-white animate-pulse":eI.error?"text-red-400":"text-text-muted hover:text-text hover:bg-surface-2"}`,children:eI.listening?(0,n.jsx)(ev.jj,{size:15}):(0,n.jsx)(ev.GO,{size:15})}),B?(0,n.jsxs)(n.Fragment,{children:[(O.trim()||eR.length>0)&&(0,n.jsxs)("button",{type:"button",onClick:eV,className:"px-2 py-0.5 rounded bg-brand-500 hover:bg-brand-600 text-white flex items-center gap-1 text-[11px] font-medium transition-colors shadow-sm cursor-pointer",title:N?"Queue message (Enter)":"Queue message",children:[(0,n.jsx)(ev.Vn,{size:13}),(0,n.jsx)("span",{children:"Queue"})]}),(0,n.jsx)("button",{type:"button",onClick:eJ,className:"px-2 py-0.5 rounded bg-danger/20 hover:bg-danger/30 text-danger flex items-center gap-1 text-[11px] font-medium transition-colors cursor-pointer",title:K.length?"Stop & run the next queued message (Esc)":"Stop generation (Esc)",children:(0,n.jsx)(ev.M6,{size:13,className:"fill-current"})})]}):(0,n.jsx)("button",{type:"button",onClick:eV,disabled:!O.trim()&&0===eR.length,className:`px-2 py-1 rounded transition-colors flex items-center justify-center ${O.trim()||eR.length>0?"bg-brand-500 hover:bg-brand-600 text-white shadow-sm cursor-pointer":"text-text-muted bg-surface-2 cursor-not-allowed opacity-40"}`,title:"Send (Enter)",children:(0,n.jsx)(ev.Vn,{size:14})})]})]})]}),(0,n.jsx)(sj,{isOpen:eS,store:sy,onSelect:e5,onClose:()=>eT(!1)})]})}),cG={Shield:"text-text-muted",Pencil:"text-accent",Eye:"text-accent",Sparkles:"text-warning"},cJ=(0,r.memo)(function(e){let{sessionId:t="",sessionName:s="",engine:l="claude",workspacePath:a="",fileBus:i=null,isTurnRunning:o=!1,isDesktop:c=!0,onModeChange:d,onNewChat:u}=e,m=l4(e=>e.bySession[t]?.isTurnRunning),x=l4(e=>e.bySession[t]?.metadata),p=x?.goal,h=ss(l).permissionModes||[],f=l4(e=>e.bySession[t]?.permissionMode)||ss(l).defaultMode,{branch:b,dirty:g}=lx(a,i,{enabled:!!i&&!!a}),[v,y]=(0,r.useState)(!1),w=(0,r.useRef)(null);(0,r.useEffect)(()=>{let e=e=>{w.current&&!w.current.contains(e.target)&&y(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);let j=h.find(e=>e.id===f)||h[0];return(0,n.jsxs)("div",{className:`relative min-h-6 px-4 flex items-center text-[11px] font-mono text-text-muted select-none flex-shrink-0 z-20 gap-3${c?"":" safe-area-bottom"}`,children:[(void 0!==m?m:o)&&(0,n.jsx)(cS,{className:"hidden sm:block"}),(0,n.jsxs)("div",{className:"flex items-center gap-2.5 min-w-0 flex-1",children:[j&&h.length>0&&(0,n.jsxs)("div",{ref:w,className:"relative",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),y(e=>!e)},className:"hover:text-text flex items-center gap-1 transition-colors",title:"Change permission mode (Shift+Tab)",children:[(0,n.jsx)(ev.Ay,{name:j.icon||"Shield",size:11,className:`${cG[j.icon]||"text-text-muted"} shrink-0`}),(0,n.jsx)("span",{children:j.label}),(0,n.jsx)(ev.rX,{size:11,className:`text-text-muted transition-transform ${v?"":"rotate-180"}`})]}),v&&(0,n.jsxs)("div",{className:"absolute left-0 bottom-[calc(100%+6px)] min-w-[220px] max-h-56 bg-surface border border-border-subtle rounded-brand shadow-xl overflow-y-auto z-50 p-1 custom-scrollbar",children:[(0,n.jsx)("div",{className:"px-2 py-0.5 text-[10px] text-text-muted font-mono uppercase tracking-wider border-b border-border-subtle mb-1",children:"Permission Mode"}),h.map(e=>(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),d?.(e.id),y(!1)},className:`w-full px-2 py-1.5 rounded text-left text-xs flex flex-col gap-0.5 transition-colors cursor-pointer ${f===e.id?"bg-brand-500/15 text-brand-400 font-semibold":"text-text-muted hover:text-text hover:bg-surface-2"}`,children:[(0,n.jsxs)("div",{className:"flex items-center justify-between w-full",children:[(0,n.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,n.jsx)(ev.Ay,{name:e.icon||"Shield",size:12,className:`${cG[e.icon]||"text-text-muted"} shrink-0`}),(0,n.jsx)("span",{children:e.label})]}),f===e.id&&(0,n.jsx)(ev.aJ,{size:12,className:"text-brand-400 shrink-0"})]}),(0,n.jsx)("span",{className:"text-[10px] text-text-muted/70 font-normal font-sans leading-tight",children:e.desc})]},e.id))]})]}),p?.objective&&(0,n.jsxs)("div",{className:"flex items-center gap-1 min-w-0",title:`Goal (${p.status}): ${p.objective}`,children:[(0,n.jsx)(ev.We,{size:11,className:`shrink-0 ${"active"===p.status?"text-danger":"text-text-muted"}`}),(0,n.jsx)("span",{className:"truncate max-w-[22ch]",children:p.objective})]})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2.5 shrink-0",children:[b&&!(0,ez.ok)(b)&&(0,n.jsx)(lp,{branch:b,dirty:g,size:11,className:"text-text font-medium",iconClassName:"text-brand-500 opacity-100"}),(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),u?.(t)},className:"hover:text-text flex items-center transition-colors p-0.5 rounded hover:bg-surface-2",title:"New chat",children:(0,n.jsx)(ev.J4,{size:12})})]})]})}),cY=(0,r.memo)(function(e){let{skills:t=[],onClose:s,onSelectSkill:l}=e,[a,i]=(0,r.useState)(""),o=t.filter(e=>{let t=a.toLowerCase();return(e.name||e.id||"").toLowerCase().includes(t)||(e.description||"").toLowerCase().includes(t)});return(0,n.jsxs)(rb,{icon:(0,n.jsx)(ev.Kq,{size:14}),title:`Agent Skills (${t.length})`,subtitle:"Skills loaded from ~/.claude/skills and project directory",onClose:s,children:[(0,n.jsx)("div",{className:"p-3 border-b border-border-subtle bg-bg",children:(0,n.jsxs)("div",{className:"flex items-center gap-2 px-3 py-1.5 rounded-brand bg-surface border border-border-subtle focus-within:border-brand-500",children:[(0,n.jsx)(ev.vj,{size:14,className:"text-text-muted shrink-0"}),(0,n.jsx)("input",{type:"text",value:a,onChange:e=>i(e.target.value),placeholder:"Search skills (e.g. cloudflare, review, deploy)...",className:"w-full bg-transparent text-xs text-text placeholder-text-muted focus:outline-none",autoFocus:!0})]})}),(0,n.jsx)("div",{className:"p-3 flex-1 overflow-y-auto flex flex-col gap-0.5 custom-scrollbar",children:0===o.length?(0,n.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-text-muted",children:[(0,n.jsx)(ev.Kq,{size:32,className:"opacity-50"}),(0,n.jsx)("span",{className:"text-sm",children:0===t.length?"No skills discovered on host agent.":`No skills matching "${a}".`})]}):o.map(e=>(0,n.jsxs)("div",{onClick:()=>{(0,eN.e)(),l?.(e.name||e.id),s?.()},className:"modal-row items-start",children:[(0,n.jsxs)("div",{className:"min-w-0 flex-1 flex flex-col gap-1",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5 font-mono text-xs font-semibold text-text",children:[(0,n.jsxs)("span",{children:["/",e.name||e.id]}),(0,n.jsx)("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-surface-3 text-text-muted font-normal",children:"skill"})]}),e.description&&(0,n.jsx)("p",{className:"text-[11px] text-text-muted leading-relaxed line-clamp-2",children:e.description})]}),(0,n.jsxs)("span",{className:"modal-row-acts text-[11px] text-brand-500 items-center gap-1",children:[(0,n.jsx)("span",{children:"Use"}),(0,n.jsx)(ev.Lt,{size:11})]})]},e.id||e.name))})]})}),cZ=(0,r.memo)(function(e){let{mcpServers:t=[],onClose:s}=e;return(0,n.jsx)(rb,{icon:(0,n.jsx)(ev.lP,{size:14}),title:`MCP Servers (${t.length})`,subtitle:"Model Context Protocol tools and integrations",onClose:s,children:(0,n.jsx)("div",{className:"p-3 flex-1 overflow-y-auto flex flex-col gap-0.5 custom-scrollbar",children:0===t.length?(0,n.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-text-muted",children:[(0,n.jsx)(ev.lP,{size:32,className:"opacity-50"}),(0,n.jsx)("span",{className:"text-sm",children:"No MCP servers configured yet."})]}):t.map((e,t)=>(0,n.jsxs)("div",{className:"modal-row",children:[(0,n.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,n.jsxs)("div",{className:"text-xs font-semibold text-text flex items-center gap-2",children:[(0,n.jsx)(ev.Jl,{size:13,className:"text-emerald-400 shrink-0"}),(0,n.jsx)("span",{className:"font-mono",children:e.name||e.id})]}),e.command&&(0,n.jsx)("div",{className:"text-[11px] text-text-muted font-mono break-all mt-1",children:e.command})]}),(0,n.jsx)("span",{className:"px-2 py-0.5 rounded text-[10px] font-mono bg-emerald-500/15 text-emerald-300 border border-emerald-500/30 uppercase shrink-0 ml-2",children:e.status||"active"})]},e.id||t))})})}),cQ=(0,r.memo)(function(e){let{currentModel:t="",currentEffort:s="",models:l=[],onClose:a,onSelectModel:i,onSelectEffort:o,isTurnRunning:c=!1}=e,[d,u]=(0,r.useState)(""),[m,x]=(0,r.useState)(t),[p,h]=(0,r.useState)(()=>new Set),f=(0,r.useMemo)(()=>{let e=[...l||[]];return t&&!e.some(e=>e.id===t)&&e.unshift({id:t,label:t,desc:"Active CLI model",recent:!0}),e},[l,t]),b=f.find(e=>e.id===m),g=b?.efforts||[],v=(0,r.useMemo)(()=>{let e=d.trim().toLowerCase();return e?f.filter(t=>{let s=(t.label||"").toLowerCase(),n=(t.id||"").toLowerCase(),r=(t.desc||"").toLowerCase(),l=cO(t).toLowerCase();return s.includes(e)||n.includes(e)||r.includes(e)||l.includes(e)}):f},[f,d]),y=(0,r.useMemo)(()=>c_(f,v,t,d.trim()),[f,v,t,d]);return(0,n.jsxs)(rb,{icon:(0,n.jsx)(ev.cC,{size:14}),title:"Switch AI Model",subtitle:"Select an active model for this session",maxWidth:"max-w-md",onClose:a,children:[(0,n.jsx)("div",{className:"px-4 py-2.5 border-b border-border-subtle shrink-0",children:(0,n.jsxs)("div",{className:"flex items-center gap-2 focus-within:text-text text-text-muted",children:[(0,n.jsx)(ev.vj,{size:14,className:"shrink-0"}),(0,n.jsx)("input",{type:"text",value:d,onChange:e=>u(e.target.value),placeholder:"Search models...",className:"w-full bg-transparent text-xs text-text placeholder-text-muted/70 focus:outline-none",autoFocus:!0}),d&&(0,n.jsx)("button",{type:"button",onClick:()=>u(""),className:"text-text-muted hover:text-text shrink-0 text-xs px-1","aria-label":"Clear search",children:"✕"})]})}),g.length>0&&(0,n.jsxs)("div",{className:"px-3 pt-3 shrink-0",children:[(0,n.jsx)("div",{className:"text-[10px] font-mono uppercase tracking-wider text-text-muted mb-1.5",children:"Reasoning effort"}),(0,n.jsx)("div",{className:"flex items-center gap-1.5 flex-wrap",children:g.map(e=>(0,n.jsx)("button",{type:"button",disabled:c,onClick:()=>{(0,eN.e)(),o?.(e)},className:`px-2.5 py-1 rounded-brand text-[11px] font-mono border transition-colors ${s===e?"border-brand-500 bg-brand-500/10 text-brand-400":"border-border-subtle bg-surface-2/30 text-text-muted hover:text-text hover:bg-surface-2"} disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent`,title:c?"Cannot change effort while turn is running":void 0,children:e},e))})]}),(0,n.jsx)("div",{className:"p-3 flex-1 overflow-y-auto flex flex-col gap-0.5 custom-scrollbar",children:0===v.length?(0,n.jsxs)("div",{className:"py-8 text-center text-xs text-text-muted",children:['No models found matching "',d,'"']}):y.map(e=>(0,n.jsxs)("div",{className:"flex flex-col gap-0.5 mb-2",children:[y.length>1&&(0,n.jsxs)("button",{type:"button",onClick:()=>{var t;return t=e.key,void h(e=>{let s=new Set(e);return s.has(t)?s.delete(t):s.add(t),s})},"aria-expanded":!p.has(e.key),className:"w-full text-left text-[10px] font-mono uppercase tracking-wider font-semibold text-text px-2 pt-2 pb-1 select-none flex items-center justify-between border-b border-border-subtle",children:[(0,n.jsxs)("span",{className:"flex items-center gap-1",children:[(0,n.jsx)("span",{className:"text-[8px]",children:p.has(e.key)?"▶":"▼"}),e.title]}),(0,n.jsx)("span",{className:"text-text-subtle text-[9px]",children:e.items.length})]}),!p.has(e.key)&&e.items.map(t=>{var r;let l=m===t.id,a=cO(t),d=(r=t.contextWindow)&&!(r<=0)?r>=1e6?`${Math.round(r/1e5)/10}M`:r>=1e3?`${Math.round(r/1e3)}k`:`${r}`:null;return(0,n.jsxs)("div",{onClick:c?void 0:()=>(e=>{(0,eN.e)(),i?.(e),x(e);let t=f.find(t=>t.id===e),n=t?.efforts||[];if(n.length>0&&!n.includes(s)){let e=t?.defaultEffort||n[0];e&&o?.(e)}})(t.id),"data-selected":l,className:`modal-row ml-2 ${c?"opacity-40 cursor-not-allowed pointer-events-none":""}`,title:c?"Cannot change model while turn is running":t.id,children:[(0,n.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,n.jsxs)("div",{className:`text-xs flex items-center gap-1.5 flex-wrap ${l?"text-text font-semibold":"text-text-muted"}`,children:[(0,n.jsx)("span",{className:"truncate",children:t.label||t.id}),"opencode"===a&&(0,n.jsx)("span",{className:"text-[9px] px-1.5 py-0.2 rounded bg-emerald-500/10 border border-emerald-500/20 text-emerald-400 font-mono shrink-0",children:"Free"}),d&&(0,n.jsx)("span",{className:"text-[9px] px-1 py-0.2 rounded bg-surface-2/60 text-text-subtle font-mono shrink-0",children:d}),t.efforts?.length>0&&(0,n.jsx)("span",{className:"text-[9px] px-1 py-0.2 rounded bg-brand-500/10 text-brand-400 font-mono shrink-0",children:"reasoning"})]}),(t.desc||t.label!==t.id&&t.id)&&(0,n.jsx)("div",{className:"text-[10px] font-mono text-text-subtle truncate mt-0.5",children:t.desc||t.id})]}),l&&(0,n.jsx)(ev.aJ,{size:14,className:"text-text shrink-0"})]},`${e.key}-${t.id}`)})]},e.key))})]})}),c0=(0,r.memo)(function(e){let{engine:t="claude",workspacePath:s="",bus:l=null,onClose:a,onResume:i}=e,[o,c]=(0,r.useState)([]),[d,u]=(0,r.useState)(!0),[m,x]=(0,r.useState)(""),p=eJ(),h=(0,r.useCallback)(()=>{if(!l?.emit||!s){c([]),u(!1);return}u(!0),l.emit("getAgentSessions",{cwd:s},e=>{c(Array.isArray(e?.sessions)?e.sessions:[]),u(!1)})},[s]);(0,r.useEffect)(()=>{h()},[h]);let f=(0,r.useMemo)(()=>{let e=m.toLowerCase();return o.filter(e=>!t||e.agent===t).filter(t=>!e||(t.title||"").toLowerCase().includes(e)||(t.sessionId||"").toLowerCase().includes(e))},[o,t,m]);return(0,n.jsxs)(rb,{icon:(0,n.jsx)(ev.BZ,{size:14}),title:"Resume a session",subtitle:`Past ${t} conversations in this project`,maxWidth:"max-w-xl",onClose:a,children:[(0,n.jsx)("div",{className:"px-4 py-2.5 border-b border-border-subtle shrink-0",children:(0,n.jsxs)("div",{className:"flex items-center gap-2 focus-within:text-text text-text-muted",children:[(0,n.jsx)(ev.vj,{size:14,className:"shrink-0"}),(0,n.jsx)("input",{type:"text",value:m,onChange:e=>x(e.target.value),placeholder:"Search sessions...",className:"w-full bg-transparent text-xs text-text placeholder-text-muted/70 focus:outline-none",autoFocus:!0}),(0,n.jsx)("button",{type:"button",onClick:h,className:"hover:text-text shrink-0",title:"Refresh",children:(0,n.jsx)(ev.e9,{size:13,className:d?"animate-spin":""})})]})}),(0,n.jsx)("div",{className:"p-3 flex-1 overflow-y-auto flex flex-col gap-0.5 custom-scrollbar",children:d?(0,n.jsxs)("div",{className:"flex items-center justify-center gap-2 py-12 text-xs text-text-muted",children:[(0,n.jsx)(ev.kr,{size:14,className:"animate-spin"}),(0,n.jsx)("span",{children:"Scanning conversations..."})]}):0===f.length?(0,n.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-text-muted",children:[(0,n.jsx)(ev.BZ,{size:32,className:"opacity-50"}),(0,n.jsx)("span",{className:"text-sm",children:0===o.length?"No past conversations found for this project.":`No sessions matching "${m}".`})]}):f.map(e=>{let t=!!e.openSessionId&&p.has(e.openSessionId);return(0,n.jsxs)("div",{onClick:()=>{if((0,eN.e)(),t){window.dispatchEvent(new CustomEvent(ez.vP,{detail:{sessionId:e.openSessionId}})),a?.();return}(0,eN.e)(),i?.(e),a?.()},className:"modal-row",title:e.sessionId,children:[(0,n.jsx)("img",{src:tu("ui"===e.mode?`${e.agent}-ui`:e.agent),alt:e.agent,className:`shrink-0 ${td} ${t?"":"opacity-50"}`,style:{width:14,height:14}}),(0,n.jsx)("span",{className:`flex-1 min-w-0 truncate text-xs ${t?"text-text font-medium":"text-text-muted"}`,children:e.title||"Untitled conversation"}),e.updatedAt?(0,n.jsx)("span",{className:"shrink-0 text-[10px] font-mono text-text-subtle tabular-nums",children:function(e){if(!e)return"";let t=Math.round((Date.now()-e)/6e4);if(t<60)return`${Math.max(1,t)}m ago`;let s=Math.round(t/60);return s<24?`${s}h ago`:`${Math.round(s/24)}d ago`}(e.updatedAt)}):null]},`${e.agent}:${e.sessionId}`)})})]})}),c1={claude:{shape:"flat",items:[]},codex:{shape:"flat",items:[{key:"personality",kind:"menu",label:"Personality",desc:"Communication style codex is instructed to use",choices:[{value:"",label:"Default"},...tq],default:""},{key:"networkAccess",kind:"bool",label:"Network access",desc:"Let sandboxed commands reach the network",default:!1},{key:"planEffort",kind:"menu",label:"Plan mode reasoning",desc:"Reasoning tier used while in plan mode",choices:[{value:"",label:"Default"},{value:"low",label:"low"},{value:"medium",label:"medium"},{value:"high",label:"high"},{value:"xhigh",label:"xhigh"}],default:""},{key:"addDirs",kind:"list",label:"Extra writable directories",desc:"Absolute paths, comma-separated",default:[]},{key:"enable",kind:"list",label:"Enable features",desc:"Feature names, comma-separated (see `codex features list`)",default:[]},{key:"disable",kind:"list",label:"Disable features",desc:"Feature names, comma-separated",default:[]},{key:"skipGitRepoCheck",kind:"bool",label:"Allow outside a git repo",desc:"Run in a directory without a repository",default:!1},{key:"ephemeral",kind:"bool",label:"Ephemeral run",desc:"Do not persist the session to disk",default:!1}]},opencode:{shape:"flags",items:[{key:"pure",kind:"bool",label:"Pure mode",desc:"Run without external plugins",default:!1},{key:"printLogs",kind:"bool",label:"Print logs",desc:"Show CLI logs on stderr",default:!1}]}};function c2(e){return c1[e]||{shape:"flat",items:[]}}let c5=(0,r.memo)(function(e){let{engine:t="claude",options:s,onClose:l,onApply:a}=e,{shape:i,items:o}=c2(t),[c,d]=(0,r.useState)(()=>{let e,n;return e=c2(t).items,n=s||{},Object.fromEntries(e.map(e=>[e.key,void 0!==n[e.key]?n[e.key]:e.default]))}),u=(e,t)=>d(s=>({...s,[e]:t}));return(0,n.jsx)(rb,{icon:(0,n.jsx)(ev.wB,{size:14}),title:"Configuration",subtitle:`Runtime flags for ${t}`,maxWidth:"max-w-md",onClose:l,footer:o.length>0?(0,n.jsxs)("div",{className:"px-4 py-3 border-t border-border-subtle flex justify-end gap-2 shrink-0",children:[(0,n.jsx)("button",{type:"button",onClick:l,className:"px-3 py-1.5 rounded-brand text-xs text-text-muted hover:text-text hover:bg-surface-2 transition-colors",children:"Cancel"}),(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)();let e={};for(let t of o){let s=c[t.key];"list"===t.kind?e[t.key]=String(s||"").split(",").map(e=>e.trim()).filter(Boolean):e[t.key]=s}a?.("flags"===i?{flags:e}:e),l?.()},className:"px-3 py-1.5 rounded-brand text-xs bg-brand-500 hover:bg-brand-600 text-white font-medium transition-colors",children:"Apply"})]}):null,children:(0,n.jsx)("div",{className:"p-3 flex-1 overflow-y-auto flex flex-col gap-2 custom-scrollbar",children:0===o.length?(0,n.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-text-muted",children:[(0,n.jsx)(ev.wB,{size:32,className:"opacity-50"}),(0,n.jsxs)("span",{className:"text-sm",children:["No runtime flags are configurable for ",t,"."]})]}):o.map(e=>(0,n.jsxs)("div",{className:"p-3 rounded-brand bg-surface-2/50",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("div",{className:"text-xs font-semibold text-text",children:e.label}),(0,n.jsx)("div",{className:"text-[11px] text-text-muted",children:e.desc})]}),"bool"===e.kind&&(0,n.jsx)("input",{type:"checkbox",checked:!!c[e.key],onChange:()=>u(e.key,!c[e.key]),className:"w-4 h-4 accent-brand-500 rounded shrink-0"})]}),"menu"===e.kind&&(0,n.jsx)("div",{className:"flex items-center gap-1.5 flex-wrap mt-2",children:e.choices.map(t=>(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),u(e.key,t.value)},className:`px-2.5 py-1 rounded-brand text-[11px] border transition-colors ${c[e.key]===t.value?"border-brand-500 bg-brand-500/10 text-brand-400":"border-border-subtle bg-surface-2/30 text-text-muted hover:text-text hover:bg-surface-2"}`,children:t.label},t.value))}),"list"===e.kind&&(0,n.jsx)("input",{type:"text",value:Array.isArray(c[e.key])?c[e.key].join(", "):c[e.key]||"",onChange:t=>u(e.key,t.target.value),placeholder:"/path/one, /path/two",className:"mt-2 w-full px-2.5 py-1.5 rounded bg-bg border border-border-subtle text-xs font-mono text-text placeholder-text-muted focus:outline-none focus:border-brand-500"})]},e.key))})})}),c3={Shield:"text-text-muted",Pencil:"text-accent",Eye:"text-accent",Sparkles:"text-warning"},c4=(0,r.memo)(function(e){let{modes:t=[],currentMode:s="",onClose:r,onSelectMode:l}=e;return(0,n.jsx)(rb,{icon:(0,n.jsx)(ev.Ay,{name:"Shield",size:14}),title:"Permissions",subtitle:"What the agent may do without asking",maxWidth:"max-w-md",onClose:r,children:(0,n.jsx)("div",{className:"p-3 flex-1 overflow-y-auto flex flex-col gap-0.5 custom-scrollbar",children:t.map(e=>{let t=s===e.id;return(0,n.jsxs)("div",{onClick:()=>{var t;return t=e.id,void((0,eN.e)(),l?.(t),r?.())},"data-selected":t,className:"modal-row",children:[(0,n.jsxs)("div",{className:"min-w-0 flex-1 flex items-center gap-2",children:[(0,n.jsx)(ev.Ay,{name:e.icon||"Shield",size:14,className:`${c3[e.icon]||"text-text-muted"} shrink-0`}),(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("div",{className:"text-xs font-semibold text-text",children:e.label}),(0,n.jsx)("div",{className:"text-[11px] text-text-subtle",children:e.desc})]})]}),t&&(0,n.jsx)(ev.aJ,{size:14,className:"text-brand-500 shrink-0"})]},e.id)})})})}),c6=(0,r.memo)(function(e){let{engine:t="claude",workspacePath:s="",bus:l=null,onClose:a}=e,[i,o]=(0,r.useState)(null),[c,d]=(0,r.useState)(!0),u=(0,r.useCallback)(()=>{if(!l?.emit){o({error:"Not connected to the host agent."}),d(!1);return}d(!0),l.emit("ai:doctor",{engine:t,cwd:s},e=>{o(e?.ok?{output:e.output||"",version:e.version||""}:{error:e?.error||"Doctor check failed."}),d(!1)})},[t,s]);return(0,r.useEffect)(()=>{u()},[u]),(0,n.jsxs)(rb,{icon:(0,n.jsx)(ev.mN,{size:14}),title:"Diagnostics",subtitle:`Health check for the ${t} CLI`,onClose:a,children:[(0,n.jsx)("div",{className:"p-3 flex-1 overflow-y-auto custom-scrollbar",children:c?(0,n.jsxs)("div",{className:"flex items-center justify-center gap-2 py-8 text-xs text-text-muted",children:[(0,n.jsx)(ev.kr,{size:14,className:"animate-spin"}),(0,n.jsxs)("span",{children:["Running ",t," doctor..."]})]}):i?.error?(0,n.jsxs)("div",{className:"p-3 rounded-brand bg-danger/10 border border-danger/30 text-danger text-xs flex items-start gap-2",children:[(0,n.jsx)(ev.RI,{size:14,className:"shrink-0 mt-0.5"}),(0,n.jsx)("span",{children:i.error})]}):(0,n.jsxs)("div",{className:"space-y-3",children:[(0,n.jsxs)("div",{className:"p-3 rounded-brand bg-emerald-500/10 border border-emerald-500/30 text-emerald-300 text-xs flex items-center gap-2",children:[(0,n.jsx)(ev.Jl,{size:14,className:"shrink-0"}),(0,n.jsx)("span",{className:"font-medium",children:i?.version?`${t} ${i.version}`:`${t} environment report`})]}),(0,n.jsx)("pre",{className:"p-3 rounded-brand bg-bg border border-border-subtle text-[11px] font-mono text-text-muted whitespace-pre-wrap break-words leading-relaxed",children:i?.output||"No output."})]})}),(0,n.jsx)("div",{className:"px-4 py-3 border-t border-border-subtle flex justify-end shrink-0",children:(0,n.jsxs)("button",{type:"button",onClick:u,disabled:c,className:"px-3 py-1.5 rounded-brand text-xs text-text-muted hover:text-text hover:bg-surface-2 transition-colors flex items-center gap-1.5 disabled:opacity-50",children:[(0,n.jsx)(ev.e9,{size:12,className:c?"animate-spin":""}),(0,n.jsx)("span",{children:"Re-run"})]})})]})}),c8={completed:{icon:ev.Jl,cls:"text-emerald-400",line:"line-through text-text-muted"},in_progress:{icon:ev.kr,cls:"text-sky-400 animate-spin",line:"text-sky-300 font-semibold"},pending:{icon:ev.jl,cls:"text-text-muted",line:"text-text"}},c9=(0,r.memo)(function(e){let{tasks:t=[],onClose:s}=e,r=t.length,l=t.filter(e=>"completed"===e.status).length,a=t.filter(e=>"in_progress"===e.status).length,i=r-l-a;return(0,n.jsxs)(rb,{icon:(0,n.jsx)(ev.y8,{size:14}),title:`Tasks (${r})`,subtitle:"Checklist the agent is working through",onClose:s,children:[(0,n.jsx)("div",{className:"grid grid-cols-4 gap-2 px-4 py-3 border-b border-border-subtle bg-bg text-center shrink-0",children:[{label:"TOTAL",value:r,cls:"text-text"},{label:"RUNNING",value:a,cls:"text-sky-400"},{label:"DONE",value:l,cls:"text-emerald-400"},{label:"PENDING",value:i,cls:"text-text-muted"}].map(e=>(0,n.jsxs)("div",{className:"p-2 rounded-brand bg-surface-2/40",children:[(0,n.jsx)("div",{className:"text-[10px] text-text-muted font-mono",children:e.label}),(0,n.jsx)("div",{className:`text-base font-bold ${e.cls}`,children:e.value})]},e.label))}),(0,n.jsx)("div",{className:"p-3 flex-1 overflow-y-auto flex flex-col gap-0.5 custom-scrollbar",children:0===r?(0,n.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-text-muted",children:[(0,n.jsx)(ev.y8,{size:32,className:"opacity-50"}),(0,n.jsx)("span",{className:"text-sm",children:"No tasks in this session yet."})]}):t.map((e,t)=>{let s=c8[e.status]||c8.pending,r=s.icon;return(0,n.jsxs)("div",{className:"modal-row items-start",children:[(0,n.jsx)(r,{size:14,className:`${s.cls} shrink-0 mt-0.5`}),(0,n.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,n.jsx)("div",{className:`text-xs ${s.line}`,children:e.subject||e.activeForm||"(untitled task)"}),e.activeForm&&"in_progress"===e.status&&(0,n.jsx)("div",{className:"text-[11px] text-sky-400/80 font-mono mt-0.5 truncate",children:e.activeForm})]}),e.taskId&&(0,n.jsxs)("span",{className:"text-[10px] font-mono text-text-muted shrink-0",children:["#",e.taskId]})]},e.id||t)})})]})}),c7=(0,r.memo)(function(e){let{sessionId:t="",onListPoints:s,onPreview:l,onApply:a,onClose:i}=e,[o,c]=(0,r.useState)([]),[d,u]=(0,r.useState)(null),[m,x]=(0,r.useState)(!0),[p,h]=(0,r.useState)(null),[f,b]=(0,r.useState)(null),[g,v]=(0,r.useState)(!1),[y,w]=(0,r.useState)("");(0,r.useEffect)(()=>{let e=!0;return s?.().then(t=>{e&&(t||w("The host did not answer. Try again."),c(t?.points||[]),u(t?.support||null),x(!1))}).catch(()=>{e&&(w("Could not read this conversation."),x(!1))}),()=>{e=!1}},[s]);let j=(0,r.useCallback)(async e=>{(0,eN.e)(),h(e),b(null),w("");let t=await l?.(e.messageId);t?.ok?b(t):w(t?.error||"The host could not preview this rewind.")},[l]),k=(0,r.useCallback)(async()=>{if(!p)return;(0,eN.e)(),v(!0),w("");let e=await a?.(p.messageId);(v(!1),e?.ok)?i?.():w(e?.error||"The rewind did not go through.")},[p,a,i]),N=d&&!d.conversation;return(0,n.jsx)(rb,{icon:(0,n.jsx)(ev.BZ,{size:14}),title:"Rewind",subtitle:"Go back to an earlier prompt. Turns after it are discarded.",maxWidth:"max-w-xl",onClose:i,children:m?(0,n.jsxs)("div",{className:"flex items-center justify-center gap-2 py-12 text-xs text-text-muted",children:[(0,n.jsx)(ev.kr,{size:14,className:"animate-spin"}),(0,n.jsx)("span",{children:"Reading this conversation..."})]}):N?(0,n.jsxs)("div",{className:"flex flex-col items-center gap-2 py-12 px-6 text-center text-text-muted",children:[(0,n.jsx)(ev.RI,{size:28,className:"opacity-60"}),(0,n.jsx)("span",{className:"text-sm",children:d.how||"This engine cannot rewind a conversation."})]}):0===o.length?(0,n.jsxs)("div",{className:"flex flex-col items-center gap-2 py-12 text-text-muted",children:[(0,n.jsx)(ev.BZ,{size:32,className:"opacity-50"}),(0,n.jsx)("span",{className:"text-sm",children:y||"Nothing to rewind to yet."})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"p-3 flex-1 overflow-y-auto flex flex-col gap-0.5 custom-scrollbar max-h-[45vh]",children:[...o].reverse().map(e=>(0,n.jsxs)("div",{onClick:()=>j(e),className:`modal-row ${p?.messageId===e.messageId?"modal-row-active":""}`,children:[(0,n.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,n.jsx)("div",{className:"text-xs text-text truncate",children:e.text||"Untitled prompt"}),e.createdAt&&(0,n.jsx)("div",{className:"mt-1 text-[10px] font-mono text-text-subtle",children:function(e){if(!e)return"";let t=Math.round((Date.now()-e)/6e4);if(t<60)return`${Math.max(1,t)}m ago`;let s=Math.round(t/60);return s<24?`${s}h ago`:`${Math.round(s/24)}d ago`}(Date.parse(e.createdAt))})]}),(0,n.jsxs)("span",{className:"modal-row-acts text-[11px] text-brand-500 items-center gap-1",children:[(0,n.jsx)("span",{children:p?.messageId===e.messageId?"Selected":"Pick"}),(0,n.jsx)(ev.Lt,{size:11})]})]},e.messageId))}),y&&(0,n.jsx)("div",{className:"px-3 py-2 border-t border-border-subtle text-[11px] text-danger bg-danger/5",children:y}),(0,n.jsxs)("div",{className:"p-3 border-t border-border-subtle bg-bg shrink-0 flex flex-col gap-2",children:[p&&(0,n.jsx)("div",{className:"text-[11px] leading-relaxed text-text-muted",children:f?.files?.length>0?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"text-text",children:f.files.length})," file",1===f.files.length?"":"s"," will be restored.",(0,n.jsxs)("ul",{className:"mt-1 flex flex-col gap-0.5",children:[f.files.slice(0,8).map(e=>(0,n.jsxs)("li",{className:"truncate font-mono text-[10px]",title:e.file,children:["\xb7 ",e.file,e.status?` (${e.status})`:""]},e.file)),f.files.length>8&&(0,n.jsxs)("li",{className:"text-[10px]",children:["… and ",f.files.length-8," more"]})]}),f.note&&(0,n.jsx)("span",{className:"block mt-1 text-text-subtle",children:f.note})]}):f?(0,n.jsx)("span",{className:"block text-text-subtle",children:f.note}):(0,n.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,n.jsx)(ev.kr,{size:11,className:"animate-spin"}),"Checking what this would change..."]})}),(0,n.jsxs)("button",{type:"button",onClick:k,disabled:!p||g||!f?.ok,className:`px-3 py-1.5 rounded-brand text-xs font-medium flex items-center justify-center gap-1.5 transition-colors ${p&&!g&&f?.ok?"bg-brand-500 hover:bg-brand-600 text-white cursor-pointer":"bg-surface-2 text-text-muted cursor-not-allowed opacity-50"}`,children:[g?(0,n.jsx)(ev.kr,{size:13,className:"animate-spin"}):(0,n.jsx)(ev.aJ,{size:13}),(0,n.jsx)("span",{children:g?"Rewinding...":"Rewind to this prompt"})]})]})]})})}),de=(0,r.memo)(function(e){let{requestId:t="",tool:s="",input:l={},failed:a=!1,onResolve:i}=e,[o,c]=(0,r.useState)(""),[d,u]=(0,r.useState)(!1),m=function(e){if(e?.kind!=="permission_grant")return"";let t=[],s=String(e.reason||"").trim();return s&&t.push(s),t.push(...function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=[];e?.network?.enabled&&t.push("• network access");let s=e?.fileSystem||{};for(let e of s.read||[])t.push(`• read ${e}`);for(let e of s.write||[])t.push(`• write ${e}`);for(let e of s.entries||[]){var n;let s="string"==typeof(n=e?.path)?n:n?.path||n?.pattern||n?.value||"";s&&t.push(`• ${e.access||"access"} ${s}`)}return t}(e.permissions)),t.join("\n")}(l)||l?.command||l?.path||JSON.stringify(l||{});return(0,n.jsxs)("div",{className:"my-3 p-3 rounded-brand-lg border border-warning/30 bg-surface shadow-sm text-xs",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 mb-2 text-warning font-medium",children:[(0,n.jsx)(ev.ek,{size:16}),(0,n.jsx)("span",{children:"Permission Request"}),(0,n.jsx)("span",{className:"font-mono text-[10px] px-1.5 py-0.5 rounded bg-warning/15 text-warning uppercase min-w-0 break-all",title:s,children:s||"Action"})]}),(0,n.jsx)("div",{className:"p-2.5 rounded bg-bg font-mono text-[11px] text-text break-all border border-border-subtle mb-3 max-h-[140px] overflow-y-auto",children:m}),d&&(0,n.jsx)("div",{className:"mb-3",children:(0,n.jsx)("input",{type:"text",value:o,onChange:e=>c(e.target.value),placeholder:"Reason for denial or alternative instructions...",className:"w-full px-2.5 py-1.5 rounded bg-bg border border-border-subtle text-xs text-text placeholder-text-muted focus:outline-none focus:border-brand-500",autoFocus:!0})}),a&&(0,n.jsx)("div",{className:"mb-3 text-[11px] text-danger leading-snug",children:"Not sent — the host did not answer. Try again."}),(0,n.jsxs)("div",{className:"flex items-center gap-2 justify-end",children:[d?(0,n.jsx)("button",{type:"button",onClick:()=>u(!1),className:"px-2.5 py-1.5 rounded text-text-muted hover:text-text hover:bg-surface-2 transition-colors",children:"Hide note"}):(0,n.jsx)("button",{type:"button",onClick:()=>u(!0),className:"px-2.5 py-1.5 rounded text-text-muted hover:text-text hover:bg-surface-2 transition-colors",children:"Add note"}),(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),i?.(t,"deny",o||"User denied")},className:"px-3 py-1.5 rounded bg-surface-2 hover:bg-danger/20 text-danger flex items-center gap-1 font-medium transition-colors",children:[(0,n.jsx)(ev.X,{size:14}),(0,n.jsx)("span",{children:"Deny"})]}),(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),i?.(t,"allow")},className:"px-3.5 py-1.5 rounded bg-brand-500 hover:bg-brand-600 text-white flex items-center gap-1 font-medium transition-colors shadow-sm",children:[(0,n.jsx)(ev.aJ,{size:14}),(0,n.jsx)("span",{children:"Allow"})]})]})]})}),dt=(0,r.memo)(function(e){let{engine:t="",message:s="",reason:r="",escalate:l=null,onEscalate:a,onDismiss:i}=e;return(0,n.jsxs)("div",{className:"my-3 p-3 rounded-brand-lg border border-danger/40 bg-surface shadow-sm text-xs",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 mb-2 text-danger font-medium",children:[(0,n.jsx)(ev.ek,{size:16}),(0,n.jsx)("span",{children:"Action blocked"}),t&&(0,n.jsx)("span",{className:"font-mono text-[10px] px-1.5 py-0.5 rounded bg-danger/15 text-danger uppercase",children:t})]}),(0,n.jsx)("div",{className:"p-2.5 rounded bg-bg text-[11px] text-text border border-border-subtle mb-3 whitespace-pre-wrap wrap-anywhere max-h-[160px] overflow-y-auto",children:s||r||"The CLI refused this action under the current permission mode."}),(0,n.jsxs)("div",{className:"flex items-center gap-2 justify-end",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),i?.()},className:"px-2.5 py-1.5 rounded text-text-muted hover:text-text hover:bg-surface-2 transition-colors flex items-center gap-1",children:[(0,n.jsx)(ev.X,{size:13}),(0,n.jsx)("span",{children:"Dismiss"})]}),l?.mode&&(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),a?.(l?.mode)},className:"px-3.5 py-1.5 rounded bg-brand-500 hover:bg-brand-600 text-white flex items-center gap-1 font-medium transition-colors shadow-sm",children:[(0,n.jsx)(ev.sU,{size:14}),(0,n.jsxs)("span",{children:["Switch to ",l.label||l.mode]})]})]})]})}),ds=[],dn=(0,r.memo)(function(e){let{sessionId:t=""}=e,[s,l]=(0,r.useState)(!1),a=l4(e=>e.bySession[t]?.tasks),i=(0,r.useMemo)(()=>Array.isArray(a)?a.filter(e=>!!(e&&e.subject&&String(e.subject).trim().length>0)):ds,[a]);if(0===i.length)return null;let o=i.filter(e=>"completed"===e.status).length,c=i.find(e=>"in_progress"===e.status),d=o===i.length;return(0,n.jsxs)("div",{className:"px-4 sm:px-6 py-1 border-b border-border-subtle/40 bg-surface-2/20 shrink-0 text-xs select-none",children:[(0,n.jsx)("div",{onClick:()=>l(!s),className:"flex items-center justify-between py-1 px-0 hover:bg-surface-2/40 cursor-pointer data-pane-control transition-colors group",children:(0,n.jsxs)("div",{className:"flex items-center gap-2 min-w-0 flex-1",children:[d?(0,n.jsx)(ev.Jl,{size:13,className:"text-success shrink-0"}):c?(0,n.jsx)(ev.y8,{size:13,className:"text-brand-500 shrink-0"}):(0,n.jsx)(ev.y8,{size:13,className:"text-text-muted shrink-0"}),(0,n.jsx)("span",{className:"font-mono text-[10px] font-semibold text-text uppercase tracking-wider shrink-0 px-1 py-0.5 rounded bg-surface-2/80",children:"TASKS"}),(0,n.jsxs)("span",{className:"font-mono text-[11px] text-text-muted shrink-0",children:[o,"/",i.length]}),c&&(0,n.jsx)("span",{className:"text-[11px] text-brand-500 truncate min-w-0 font-medium",children:c.activeForm||c.subject}),(0,n.jsx)("span",{className:"text-text-muted/50 shrink-0 ml-auto",children:s?(0,n.jsx)(ev.yQ,{size:11}):(0,n.jsx)(ev.c_,{size:11})})]})}),s&&(0,n.jsx)("div",{className:"mt-1 ml-3.5 pl-3 border-l-2 border-border-subtle/80 py-1 space-y-0.5 animate-in fade-in duration-100",children:i.map((e,t)=>(0,n.jsxs)("div",{className:"flex items-center gap-2 py-0.5",children:["completed"===e.status?(0,n.jsx)(ev.Jl,{size:12,className:"text-success shrink-0"}):"in_progress"===e.status?(0,n.jsx)(ev.jG,{size:10,className:"text-brand-500 fill-brand-500 shrink-0"}):(0,n.jsx)(ev.jl,{size:12,className:"text-text-muted/50 shrink-0"}),(0,n.jsx)("span",{className:`text-[11px] truncate ${"completed"===e.status?"line-through text-text-muted/60":"in_progress"===e.status?"text-text font-medium":"text-text-muted"}`,children:e.subject})]},e.id||t))})]})}),dr=[],dl=(0,r.memo)(function(e){let{sessionId:t="",engine:s="claude",onStopTask:l}=e,a=l4(e=>e.bySession[t]?.messages)||dr,i=l4(e=>e.bySession[t]?.harnessTasks)||dr,o=(0,r.useMemo)(()=>(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t.length>0?t.filter(e=>e?.status==="running").filter(t=>t.toolUseId&&ly(e,t.toolUseId)).map(e=>({kind:e.background?"shell":"agent",id:e.toolUseId,taskId:e.taskId,label:e.description||e.subagentType||"task",startedAt:e.startedAt,taskType:e.taskType,subagentType:e.subagentType,usage:e.usage,toolUseId:e.toolUseId})):function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=[],s=e=>{for(let n of e||[]){if(n?.status==="running"){let e=n.startedAt||n.timestamp,s=e?{startedAt:e}:null;lb.has(n?.name)?t.push({kind:"agent",id:n.id,toolUseId:n.id,label:lg(n),...s}):n?.async&&t.push({kind:"shell",id:n.id,toolUseId:n.id,label:lv(n),...s})}n?.children?.length&&s(n.children)}};for(let n=e.length-1;n>=0&&(!e[n]?.tools?.length||(s(e[n].tools),!(t.length>0)));n--);return t}(e)})(a,i),[a,i]),[c,d]=(0,r.useState)(null),[u,m]=(0,r.useState)(()=>Date.now()),[x,p]=(0,r.useState)(!1),h=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(0===o.length)return;let e=setInterval(()=>m(Date.now()),1e3);return()=>clearInterval(e)},[o.length]),(0,r.useEffect)(()=>()=>clearTimeout(h.current),[]);let f=(0,r.useCallback)(()=>{if(!x){p(!0),(0,eN.e)(),clearTimeout(h.current),h.current=setTimeout(()=>p(!1),3e3);return}for(let e of(clearTimeout(h.current),p(!1),(0,eN.e)(),o))e.taskId&&l(e.taskId)},[x,o,l]),b=o.some(e=>e.taskId&&l);if(0===o.length)return null;let g=o.filter(e=>"agent"===e.kind),v=o.filter(e=>"shell"===e.kind);return(0,n.jsxs)("div",{className:"px-3 @2xl:px-6 py-1 border-b border-border-subtle/40 bg-brand-500/[0.06] shrink-0 text-xs select-none",children:[g.length>0&&(0,n.jsx)(da,{icon:(0,n.jsx)(ev.kr,{size:13,className:"text-brand-500 shrink-0 animate-spin"}),tag:"AGENTS",items:g,messages:a,engine:s,now:u,onOpen:d}),v.length>0&&(0,n.jsx)(da,{icon:(0,n.jsx)(ev.kr,{size:13,className:"text-warning shrink-0 animate-spin"}),tag:"SHELLS",items:v,messages:a,engine:s,now:u,onOpen:d}),b&&o.length>1&&(0,n.jsx)("div",{className:"flex justify-end pb-0.5",children:(0,n.jsx)("button",{type:"button",onClick:f,className:`text-[11px] px-2 py-0.5 rounded transition-colors ${x?"bg-danger/20 text-danger font-semibold":"text-text-muted hover:text-text"}`,children:x?"Press again to stop all":"Stop all"})}),c&&(0,n.jsx)(ia,{tasks:c,messages:a,engine:s,sessionId:t,onStopTask:l,onClose:()=>d(null)})]})});function da(e){let{icon:t,tag:s,items:r,messages:l,engine:a,now:i,onOpen:o}=e,c=r.map(e=>e.label).join(", "),d=lD(r.reduce((e,t)=>t.startedAt&&(!e?.startedAt||t.startedAt<e.startedAt)?t:e,null),i),u=r.map(e=>(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"claude";if(!e?.name)return"";let{name:s,input:n={}}=e,r=lk(n.file_path||n.path);switch(sn(t,s)){case"bash":return lC(n.description||n.command||"shell",60);case"file":return lC(`${/^(list|list_dir|ls)$/i.test(s)?"Listing":"Reading"} ${r}`,60);case"search":return lC([n.pattern?`"${n.pattern}"`:n.query||n.url||"",r?`in ${r}`:""].filter(Boolean).join(" "),60);case"diff":return lC(`${/^(Write|write_to_file)$/i.test(s)?"Writing":"Editing"} ${lk(n.file_path||n.filePath||n.file||n.path)||lT(n)}`,60);case"agent":return lC(n.description||lT(n)||"sub-agent",60);case"plan":return lC(lk(n.path)||s,60);default:return lC([lS(s),lT(n)].filter(Boolean).join(" "),60)}})(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",s=ly(e,t);if(!s)return null;let n=s;for(;"running"===n.status;){let e=n.children||[],t=e.filter(e=>e?.status==="running").pop()||e[e.length-1];if(!t||t===n)break;n=t}return n}(l,e.toolUseId),a)).find(Boolean);return(0,n.jsxs)("div",{className:"flex items-center gap-2 py-1 min-w-0",children:[t,(0,n.jsx)("span",{className:"font-mono text-[10px] font-semibold text-text uppercase tracking-wider shrink-0 px-1 py-0.5 rounded bg-surface-2/80",children:s}),(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),o(r)},title:c,className:"flex items-center gap-2 min-w-0 flex-1 text-left hover:bg-surface-2/40 rounded transition-colors px-1",children:[(0,n.jsxs)("span",{className:"font-mono text-[11px] text-brand-500 shrink-0 tabular-nums",children:[r.length," running"]}),d>0&&(0,n.jsx)("span",{className:"font-mono text-[11px] text-text shrink-0 tabular-nums",children:av(d)}),(0,n.jsx)("span",{className:"text-[11px] text-text-muted truncate min-w-0",children:u||c})]})]})}let di={model:"",skills:[],mcpServers:[]},dc=[],dd=(0,r.memo)(function(e){let{sessionId:t,engine:s="claude",workspacePath:l="",sessionName:a="",bus:i=null,fileBus:o=null,isVisible:c=!0,isFocused:d=!1,isDesktop:m=!0,bgIndex:x=0,onActivate:p=null,onOpenRemote:h=null,onOpenMobile:b=null,onOpenArtifact:g=null,onNewChat:v=null}=e,[y,w]=(0,r.useState)(null),[j,k]=(0,r.useState)(!1),[N,C]=(0,r.useState)(!1),[S,T]=(0,r.useState)(!1),{t:E}=(0,eC.s)(),R=(0,r.useCallback)(()=>T(!0),[]),{sendPrompt:M,removeQueueItem:$,clearQueue:z,resolvePermission:A,stop:I,stopTask:D,runShell:_,rewindToMessage:W,previewRewind:H,listRewindPoints:G,escalateMode:Z,dismissBlocked:Q,hasOlder:ee,loadOlder:et,reload:es,hydrating:en,synced:er,hydrateFailed:el}=function(e){let{sessionId:t,engine:s="claude",workspacePath:n="",bus:l=null,isVisible:a=!0}=e,i=(0,r.useRef)(l);(0,r.useEffect)(()=>{i.current=l},[l]);let o=l4(e=>e.initSession),c=l4(e=>e.setMetadata),d=l4(e=>e.appendDelta),m=l4(e=>e.appendThinking),x=l4(e=>e.appendDiff),p=l4(e=>e.appendTool),h=l4(e=>e.updateToolResult),f=l4(e=>e.nestTool),b=l4(e=>e.nestToolResult),g=l4(e=>e.upsertTask),v=l4(e=>e.setPermission),y=l4(e=>e.clearPermission),w=l4(e=>e.finishTurn),j=l4(e=>e.setTurnRunning),k=l4(e=>e.ensureTurnLive),N=l4(e=>e.addUserMessage),C=(0,u.d)(e=>e.connected),[S,T]=(0,r.useState)(!1),[E,R]=(0,r.useState)(!1),[M,$]=(0,r.useState)(!1),[z,A]=(0,r.useState)(!1),I=(0,r.useRef)(0),D=(0,r.useRef)(!1),_=(0,r.useRef)(new Map),W=(0,r.useCallback)(e=>{let t=_.current;if(t.size)for(let[s,n]of t)n.text===e&&(n.watch.settle(),t.delete(s))},[]),H=(0,r.useCallback)((e,t,n)=>{switch(t){case"user_message":N(e,n.text,n.attachments||null,!!n?.replay),n?.replay||(!function(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:globalThis.localStorage,n=ar(e,s),r=n.findIndex(e=>e.text===t);-1!==r&&(n.splice(r,1),al(e,n,s))}(e,n.text),l4.getState().clearPromptSending(e,n.text)),ab(e,n.text),W(n?.text);break;case"init":{let t=ao(l4.getState().bySession[e]?.metadata?.skills),s=new Map(t.map(e=>[e.id||e.name,e])),r=ao(n.skills),l=r.length>0?r.map(e=>{let t=s.get(e.id);return t?.description?{...e,description:t.description}:e}):t,{model:a,...i}=n||{};c(e,{...i,skills:l,...a?{model:a}:{}});break}case"goal":c(e,{goal:n?.goal||null});break;case"delta":n?.replay||k(e),d(e,n.text);break;case"thinking":n?.replay||k(e),m(e,n.text);break;case"diff":x(e,n);break;case"tool_child":f(e,n);break;case"tool_result_child":b(e,n);break;case"tool_start":if(n?.replay||k(e),p(e,n),n&&n.name){let t=l4.getState().bySession[e]?.tasks||[],r=sr(s,n.name,n.input,n.id,t);r&&g(e,r)}break;case"tool_result":if(h(e,n),n&&n.id){let t=sl(s,n.name||"",n.output||"",n.id);t&&g(e,t)}break;case"permission_request":v(e,n);break;case"permission_resolved":y(e,n.requestId);break;case"blocked":l4.getState().setBlocked(e,n);break;case"options_changed":n?.permissionMode&&l4.getState().setPermissionMode(e,n.permissionMode),n?.model&&c(e,{model:n.model}),n?.effort&&c(e,{effort:n.effort});break;case"queue_update":l4.getState().setQueue(e,n?.queue||[]);break;case"turn_complete":w(e,n.stats,n.turnMs,!!n?.replay),!n?.isError||ax(l4.getState().bySession[e]?.messages,n.result)||ad(l4.getState().bySession[e]?.messages,n.result)||l4.getState().addNotice(e,{subtype:n.subtype||"",level:"error",content:n.result||"The turn ended in an error."});break;case"stats":n?.stats&&l4.getState().setStats(e,n.stats);break;case"stopped":case"exit":y(e),l4.getState().finishTurn(e,null,n?.turnMs),"exit"===t&&l4.getState().settleDeadTasks(e),"exit"===t&&(n?.error||n?.code!=null&&0!==n.code)&&l4.getState().addNotice(e,{subtype:"exit",level:"error",content:n.error||`The AI process exited (code ${n.code}).`});break;case"stall":j(e,!1),w(e,null,n?.turnMs);break;case"error":l4.getState().addNotice(e,{subtype:"error",level:"error",content:n?.message||"AI process failed"}),w(e,null,n?.turnMs);break;case"prompt_refused":l4.getState().addNotice(e,{subtype:"prompt_refused",level:"error",content:ap(n)});break;case"conversation_reset":(0,Y.Lq)("ai-status","reset",{sessionId:e,isTurnRunning:n?.isTurnRunning,elapsedMs:n?.elapsedMs,lastTurnMs:n?.lastTurnMs,fromSeq:n?.fromSeq}),l4.getState().clearMessages(e),l4.getState().setTaskRecords(e,n?.taskRecords),l4.getState().restoreTurnState(e,n),Array.isArray(n?.queue)&&l4.getState().setQueue(e,n.queue);break;case"cli_event":{let t=n?.type||"",r=n?.record||null;l4.getState().applyTaskRecords(e,[[t,n?.subtype||"",r,n?.ageMs]]);let l=lV(t,r,s);l&&l4.getState().addNotice(e,l);break}case"ansi":{let t=am(n?.chunk);t&&l4.getState().addNotice(e,{subtype:"ansi",level:"warning",content:t})}}},[s,N,c,d,m,x,p,h,f,b,g,v,y,w,j,k,W]),G=(0,r.useRef)(H);(0,r.useEffect)(()=>{G.current=H});let Z=(0,r.useRef)(o);(0,r.useEffect)(()=>{Z.current=o});let Q=(0,r.useRef)(0),ee=(0,r.useRef)(null),et=(0,r.useRef)(!1),es=(0,r.useRef)([]),en=(0,r.useRef)(0),er=(0,r.useRef)(null);null==er.current&&(er.current=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:l7,t=0,s=!1;return{schedule:n=>s||!n?null:(s=!0,e[Math.min(t++,e.length-1)]),fired(){s=!1},answered(){s=!1,t=0},exhausted:()=>t>=e.length}}());let el=(0,r.useRef)(0),ea=(0,r.useRef)(null),ei=(0,r.useRef)(null),eo=(0,r.useRef)(null),ec=(0,r.useRef)(null),ed=(0,r.useRef)(null),eu=(0,r.useRef)(null),em=(0,r.useRef)(null),ex=(0,r.useRef)(null),ep=(0,r.useRef)(a);(0,r.useEffect)(()=>{ep.current=a},[a]);let eh=(0,r.useRef)(null),ef=(0,r.useRef)(null),eb=(0,r.useRef)([]),eg=(0,r.useRef)({events:[],bytes:0,hasMore:!1}),ev=(0,r.useRef)(null),ey=(0,r.useRef)(null),ew=(0,r.useRef)(0),ej=(0,r.useRef)(1e4),ek=(0,r.useRef)(!1),eN=(0,r.useRef)(0),eC=(0,r.useRef)(0),eS=(0,r.useCallback)(()=>{er.current?.answered(),ei.current?.clearPending("hydrate")},[]),eT=(0,r.useCallback)(()=>{let e=er.current?.schedule(u.d.getState().connected);A(!!er.current?.exhausted()),(0,Y.Lq)("ai-hydrate","ladder",{delay:e??null,exhausted:er.current?.exhausted(),connected:u.d.getState().connected}),null!=e&&ei.current?.request("hydrate",{delayMs:e})},[]);(0,r.useEffect)(()=>{ei.current=function(e){let{run:t,rank:s=as,debounceMs:n=150,schedule:r=setTimeout,clear:l=clearTimeout}=e,a=null,i=null,o=null,c=null,d=null,u=e=>s[e]??0,m=(e,t)=>{i=e,o=t,a=r(()=>{a=null;let e=i;i=null,x(e)},t??n)},x=e=>{c=e;let s=!1;t(e,()=>{if(s||null==c||(s=!0,c=null,!d))return;let e=d;d=null,e.immediate?x(e.intent):m(e.intent,e.delayMs)})};return{request(e){let{immediate:t=!1,delayMs:s=null}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(null!=c)return void(!d||u(e)>u(d.intent)?d={intent:e,immediate:t,delayMs:s}:t&&(d={...d,immediate:!0}));if(null!=a){let r=u(e)>u(i),c=s??n,d=o??n;if((r?c<=d:c<d)&&(l(a),a=null,m(r?e:i,c)),!t)return;l(a),a=null;let p=i;i=null,x(p);return}t?x(e):m(e,s)},busy:()=>null!=c,clearPending(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;(null==e||i===e)&&(null!=a&&l(a),a=null,i=null,o=null),(null==e||d?.intent===e)&&(d=null)},reset(){null!=a&&l(a),a=null,i=null,o=null,d=null,c=null}}}({run:(e,t)=>{"recover"===e?ec.current?ec.current(t):t():"gap"===e?ed.current?ed.current(t):(ei.current?.request("hydrate"),t()):(er.current?.fired(),eo.current?eo.current(t):t())}})},[]);let eE=(0,r.useCallback)((e,t,s)=>{if("conversation_reset"===t){eg.current={events:[],bytes:0,hasMore:!1};return}if(!Number.isInteger(e))return;let n=function(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:32768,n=[...e?.events||[],t],r=Number.isFinite(e?.bytes)?e.bytes+B(t):n.reduce((e,t)=>e+B(t),0),l=!1;for(;n.length&&r>s;)r-=B(n[0]),n.shift(),l=!0;return{events:n,bytes:r,dropped:l}}(eg.current,{seq:e,event:t,data:s},32768);eg.current={events:n.events,bytes:n.bytes,hasMore:eg.current.hasMore||n.dropped}},[]),eR=(0,r.useCallback)((e,t)=>{let s=F(e||[],32768);eg.current={events:s.events,bytes:s.bytes,hasMore:!!t||s.hasMore}},[]),eM=(0,r.useCallback)(()=>{var e;if(!U()||!t||l4.getState().bySession[t]?.isTurnRunning)return;let s=eq(t).head||"",n=function(e){let{hostKey:t,sessionId:s,epoch:n,tail:r,taskRecords:l=null,lastTurnMs:a=0,now:i=Date.now()}=e;if(!s||"string"!=typeof s||null!=t&&"string"!=typeof t||!Number.isInteger(n))return null;let o=r?.events||[],c=o[0],d=o[o.length-1];return c&&d&&Number.isInteger(c.seq)&&Number.isInteger(d.seq)&&!(d.seq<=0)?{v:1,hostKey:t||"",sessionId:s,epoch:n,seq:d.seq,firstSeq:c.seq,hasMore:!!r?.hasMore,bytes:Number.isFinite(r?.bytes)?r.bytes:0,events:o,taskRecords:Array.isArray(l)?l:null,lastTurnMs:Number.isFinite(a)?a:0,ts:i}:null}({hostKey:s,sessionId:t,epoch:ee.current,tail:eg.current,lastTurnMs:l4.getState().bySession[t]?.lastTurnMs||0});n&&(e=L(s,t),q||X(async t=>{let s=t.transaction(K,"readwrite");return s.objectStore(K).put(n,e),await new Promise(e=>{s.oncomplete=()=>e(!0),s.onerror=()=>e(!1),s.onabort=()=>e(!1)}),J(),!0}))},[t]),e$=(0,r.useCallback)(()=>{U()&&t&&(ev.current&&clearTimeout(ev.current),ev.current=setTimeout(()=>{ev.current=null,eM()},800))},[t,eM]),eP=(0,r.useCallback)(()=>{var e;if(!U()||!t||ey.current===t)return;ey.current=t;let n=eq(t).head||"";(e=L(n,t),X(async t=>{var s;let n=t.transaction(K,"readonly"),r=await V(n.objectStore(K).get(e)),l=O(r);return null!=r&&(!l||Date.now()-l.ts>864e5)?(s=e,q||X(async e=>(e.transaction(K,"readwrite").objectStore(K).delete(s),!0)),null):l})).then(e=>{if(ey.current!==t||!function(e){let{hostKey:t,sessionId:s,now:n=Date.now(),maxAgeMs:r=864e5}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},l=O(e);return!!l&&l.hostKey===(t||"")&&l.sessionId===s&&!(l.ts>n+6e4)&&!(n-l.ts>r)}(e,{hostKey:n,sessionId:t})||el.current)return;let r=l4.getState().bySession[t];if(r?.messages?.length)return;let l=ah(e.events,s);if(!l.messages?.length)return;l4.getState().hydrateSession(t,{messages:l.messages,tasks:l.tasks,metadata:{...r?.metadata||{},...l.metadata},stats:l.stats,isTurnRunning:!1,elapsedMs:0,lastTurnMs:e.lastTurnMs||0,harnessTasks:l.harnessTasks,queue:[]}),Q.current=e.seq,ee.current=e.epoch,I.current=e.firstSeq,T(!!e.hasMore);let a=F(e.events,32768);eg.current={events:a.events,bytes:a.bytes,hasMore:!!e.hasMore||a.hasMore},(0,Y.Lq)("ai-cache","painted cached tail",{sessionId:t,seq:e.seq,epoch:e.epoch,events:e.events.length})}).catch(()=>{})},[t,s]),eA=(0,r.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!t||!l)return void e?.();if(et.current){(0,Y.Lq)("ai-hydrate","blocked (round in flight)",{gen:en.current}),eT(),e?.();return}let r=++en.current,a=ee.current;et.current=!0,R(!0),es.current=[],eb.current=[],I.current=0;let i=Date.now();(0,Y.Lq)("ai-hydrate","emit ai:create",{gen:r,sessionId:t,engine:s,cwd:n,carrier:u.d.getState().carrier,connected:u.d.getState().connected});let o=()=>{let e=es.current;es.current=[],et.current=!1,R(!1);let s=at(e,{appliedSeq:Q.current,logEpoch:ee.current});(Q.current=s.appliedSeq,ee.current=s.logEpoch,(0,sp.unstable_batchedUpdates)(()=>{for(let e of s.apply)"conversation_reset"===e.event&&(I.current=e.data?.fromSeq??0,T(!!e.data?.hasMore)),G.current(t,e.event,e.data),eE(e.seq,e.event,e.data)}),s.resync||s.held.length>200)?ei.current?.request("hydrate"):s.held.length&&(eb.current=[...eb.current,...s.held],ei.current?.request("gap"))},c=setTimeout(()=>{r===en.current&&et.current&&(o(),l.kickWsZombie?.("hydrate-timeout"),eT(),e?.())},4e3);ea.current=c,l.emit("ai:create",{sessionId:t,engine:s,cwd:n,options:{defaultMode:ss(s).defaultMode,defaultEffort:ss(s).defaultEffort}},n=>{if(!function(e){let{isNewest:t,snapshotSeq:s=0,appliedSeq:n=0,sameLog:r=!0}=e;return!!t||!!r&&(s||0)>(n||0)}({isNewest:r===en.current,snapshotSeq:n?.session?.seq,appliedSeq:Q.current,sameLog:a===ee.current}))return void e?.();let l=null,d=null,u=n?.session?.events;(0,Y.Lq)("ai-hydrate","ack",{gen:r,stale:r!==en.current,ms:Date.now()-i,ok:n?.ok??null,error:n?.error??null,events:Array.isArray(u)?u.length:null,hasMore:n?.session?.hasMore??null});try{if(clearTimeout(c),!n?.ok||!Array.isArray(u))return void T(!1);let e=n.session.seq||0;if((0,Y.Lq)("ai-status","hydrate ack",{sessionId:t,isTurnRunning:n.session.isTurnRunning,elapsedMs:n.session.elapsedMs,lastTurnMs:n.session.lastTurnMs,events:u.length,hasMore:n.session.hasMore}),n.session.asleep&&!n.session.isTurnRunning){let e=P.rh.getState();e.applyStatusChange(eq(t).head??e.currentKey,{sessionId:t,state:"sleep"})}if(I.current=u[0]?.seq??0,T(!!n.session.hasMore&&u.length>0),eR(u,n.session.hasMore),Array.isArray(n?.modelOptions)&&n.modelOptions.length>0&&l4.getState().setMetadata(t,{modelOptions:n.modelOptions}),u.length>0){let e=ah(u,s);l4.getState().hydrateSession(t,{messages:e.messages,tasks:e.tasks,metadata:{...l4.getState().bySession[t]?.metadata,...e.metadata,...Array.isArray(n?.modelOptions)?{modelOptions:n.modelOptions}:{},...n.session.effort?{effort:n.session.effort}:{}},stats:{...e.stats,...n.session.stats||{}},isTurnRunning:void 0!==n.session.isTurnRunning?!!n.session.isTurnRunning:e.isTurnRunning,elapsedMs:n.session.elapsedMs||0,lastTurnMs:n.session.lastTurnMs||0,permissionMode:n.session.permissionMode||e.permissionMode,activeBlocked:e.activeBlocked,harnessTasks:lW(n.session.taskRecords,e.harnessTasks),queue:n.session.queue||[]})}else j(t,!!n.session.isTurnRunning),l4.getState().setTaskRecords(t,n.session.taskRecords),n.session.permissionMode&&l4.getState().setPermissionMode(t,n.session.permissionMode),Array.isArray(n.session.queue)&&l4.getState().setQueue(t,n.session.queue),n.session.stats&&l4.getState().setStats(t,n.session.stats);n.session.asleep&&!n.session.isTurnRunning&&l4.getState().settleDeadTasks(t),l=n.session.activePermission||null,d=Array.isArray(n.session.queue)?n.session.queue:null,Q.current=e,null!=n.session.epoch&&(ee.current=n.session.epoch)}finally{if(clearTimeout(c),r===en.current&&o(),l&&r===en.current&&l4.getState().setPermission(t,l),d&&r===en.current&&l4.getState().setQueue(t,d),n?.ok&&void 0!==n.session.isTurnRunning&&l4.getState().restoreTurnState(t,{isTurnRunning:!!n.session.isTurnRunning,elapsedMs:n.session.elapsedMs||0,lastTurnMs:n.session.isTurnRunning?0:n.session.lastTurnMs||0}),n?.ok)for(let e of($(!0),A(!1),eS(),el.current=Date.now(),(function(e){let{deliveredTexts:t=[],page:s="",minAgeMs:n=0,now:r=Date.now()}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:globalThis.localStorage,a=ar(e,l);if(!a.length)return[];let i=new Set(t),o=[],c=[];for(let e of a){if(e.page===s||r-(e.at||0)<n){c.push(e);continue}i.has(e.text)||o.push(e)}return al(e,c,l),o})(t,{deliveredTexts:(n.session?.events||[]).filter(e=>"user_message"===e.event).map(e=>e.data?.text),page:ac,minAgeMs:5e3}).filter(e=>!af(t,e.text))))l4.getState().setPromptError(t,e.text,"reload",null,e.id);else eT();e?.()}})},[t,s,n,l,j,eT,eS,eE,eR]),eI=(0,r.useCallback)(()=>{u.d.getState().connected&&ei.current?.request("recover")},[]),eD=(0,r.useCallback)(e=>{let s=i.current;if(!s||!t)return void e();if(!ep.current){eh.current="visible",e();return}if(!u.d.getState().connected||et.current)return void e();let n=!1,r=()=>{n||(n=!0,e())},l=!1,a=setTimeout(()=>{l||((0,Y.Lq)("ai-hydrate","peekSeq: no ack → full hydrate"),s.kickWsZombie?.("peek-timeout"),ei.current?.request("hydrate"),r())},ez.zm);ef.current=a,s.emit("ai:peekSeq",{sessionId:t,haveSeq:Q.current,epoch:ee.current},e=>{if(l=!0,clearTimeout(a),ef.current=null,!e?.ok||"number"!=typeof e.seq){ei.current?.request("hydrate"),r();return}let s=Q.current,n=!!l4.getState().bySession[t]?.isTurnRunning,i=l4.getState().bySession[t]?.queue?.length||0,o="number"==typeof e.queueLength?e.queueLength:i;if(e.seq===s&&!!e.isTurnRunning===n&&o===i){(0,Y.Lq)("ai-hydrate","peekSeq: nothing missed",{seq:s}),r();return}let c=null!=e.epoch&&e.epoch===ee.current;if(e.seq>s&&c){ei.current?.request("gap"),r();return}if(e.seq===s&&c&&o===i){(0,Y.Lq)("ai-hydrate","peekSeq: turn-flag drift patched in place",{seq:s,turn:e.isTurnRunning}),l4.getState().setTurnRunning(t,!!e.isTurnRunning),r();return}(0,Y.Lq)("ai-hydrate","peekSeq: state changed",{fromSeq:s,toSeq:e.seq,turn:e.isTurnRunning}),ei.current?.request("hydrate"),r()})},[t]);(0,r.useEffect)(()=>{eo.current=eA,ec.current=eD});let eB=(0,r.useCallback)(()=>{l?.kickWsZombie?.("refresh"),eS(),ei.current?.request("now",{immediate:!0})},[l,eS]);(0,r.useEffect)(()=>()=>{for(let{watch:e}of(ef.current&&clearTimeout(ef.current),ea.current&&clearTimeout(ea.current),eu.current&&clearTimeout(eu.current),ef.current=ea.current=eu.current=null,ei.current?.reset(),ei.current={request(){},busy:()=>!1,clearPending(){},reset(){}},et.current=!1,es.current=[],_.current.values()))e.settle();_.current.clear()},[]),(0,r.useEffect)(()=>{if(t)return ex.current!==t&&(ex.current=t,et.current=!1,eS(),$(!1),A(!1),ee.current=null,eb.current=[],ei.current?.reset(),ew.current=0,eN.current=0,eC.current=0),Z.current(t),eP(),eA()},[t,eA,eS,eP]),(0,r.useEffect)(()=>{!a||eh.current&&(eh.current=null,eI())},[a,eI]),(0,r.useEffect)(()=>{if(!l||!t)return;let e=()=>{document.hidden||eI()},s=e=>{e.detail?.hidden||eI()},n=()=>{if(em.current?.(),!ep.current){eh.current="reconnect";return}eI()};return l.on("connect",n),document.addEventListener("visibilitychange",e),document.addEventListener("resume",e),document.addEventListener("app-visibility",s),()=>{l.off("connect",n),document.removeEventListener("visibilitychange",e),document.removeEventListener("resume",e),document.removeEventListener("app-visibility",s)}},[l,t,eI]);let eF=(0,r.useRef)(!0);(0,r.useEffect)(()=>{let e=eF.current;if(eF.current=C,C&&!e){if(em.current?.(),!ep.current){eh.current="reconnect";return}eI()}},[C,eI]),(0,r.useEffect)(()=>{if(!l||!t)return;let e="",s="",n=null,r=[],a=!1,o=()=>{null!=n&&cancelAnimationFrame(n),n=null;let r=e,l=s;e="",s="",(r||l)&&l4.getState().appendStream(t,r,l)},c=()=>{a=!1;let e=r;r=[];let s=G.current;(0,sp.unstable_batchedUpdates)(()=>{for(let n of e)n.stream?l4.getState().appendStream(t,n.data.text,n.data.thinking):s(t,n.event,n.data)})},d=(t,l)=>{if("cli_event"!==t&&(e||s)){let t={stream:!0,data:{text:e,thinking:s}};e="",s="",null!=n&&(cancelAnimationFrame(n),n=null),r.push(t)}r.push({event:t,data:l}),a||(a=!0,queueMicrotask(c))},m=e=>{if(!e||e.sessionId!==t)return;if(ew.current=Date.now(),ej.current=1e4,et.current)return void es.current.push(e);if("conversation_reset"===e.event){Q.current=0,ee.current=e.data?.epoch??(ee.current??0)+1,I.current=e.data?.fromSeq??0,T(!!e.data?.hasMore),eb.current=[],eE(null,"conversation_reset",null),d(e.event,e.data);return}let s=ae(e,{appliedSeq:Q.current,logEpoch:ee.current});if("adopt"===s)ee.current=e.epoch;else if("resync"===s){eb.current=[],ei.current?.request("hydrate");return}else if("stale"===s||"dup"===s)return;else if("gap"===s){if(eb.current.push(e),eb.current.length>200){eb.current=[],ei.current?.request("hydrate");return}ei.current?.request("gap");return}null!=e.seq&&(Q.current=e.seq),eE(e.seq,e.event,e.data),"turn_complete"===e.event&&e$(),x(e.event,e.data)};function x(t,r){if("delta"===t||"thinking"===t){var l;return void((l=r?.text)&&("delta"===t?e+=l:s+=l,null==n&&(n=requestAnimationFrame(o))))}d(t,r)}ed.current=e=>{if(et.current)return void e();let s=i.current;if(!s||!u.d.getState().connected)return void e();let n=Q.current,r=ee.current,l=!1,a=t=>{var s,n;let a;if(l)return;if(l=!0,clearTimeout(o),eu.current=null,et.current)return void e();let i=(s=t?.ok&&t.events||[],n=Q.current,(a=s.filter(e=>null!=e.seq&&e.seq>n)).length?a[0].seq!==n+1||a.find(e=>("delta"===e.event||"thinking"===e.event)&&null!=e._fromSeq&&e._fromSeq<=n)?{safe:!1}:{safe:!0,apply:a}:{safe:!0,apply:[]});if(!t?.ok||t.resync||t.epoch!==r||t.hasMore||!i.safe){eb.current=[],ei.current?.request("hydrate"),e();return}for(let e of i.apply)Q.current=e.seq,x(e.event,e.data),eE(e.seq,e.event,e.data);(()=>{let e=eb.current;eb.current=[];let t=at(e,{appliedSeq:Q.current,logEpoch:ee.current});if(t.resync)return ei.current?.request("hydrate");for(let e of(Q.current=t.appliedSeq,ee.current=t.logEpoch,t.apply))x(e.event,e.data),eE(e.seq,e.event,e.data);t.held.length&&(eb.current=t.held,ei.current?.request("gap"))})(),e()},o=setTimeout(()=>{s.kickWsZombie?.("gap-timeout"),a(null)},3e3);eu.current=o,s.emit("aiSince",{sessionId:t,after:n,epoch:r},a)};let p=null,h=null,f=()=>{if(ek.current||et.current||ei.current?.busy()||!ep.current||!u.d.getState().connected)return;ek.current=!0;let e=!1,s=t=>{if(e)return;e=!0,clearTimeout(n),ek.current=!1;let s=!!t?.ok&&(null!=t.epoch&&null!=ee.current&&t.epoch!==ee.current||"number"==typeof t.seq&&t.seq>Q.current);if(t?.ok||i.current?.kickWsZombie?.("silence-probe"),!s){eN.current=0,ej.current=Math.min(2*ej.current,12e4);return}if(eN.current++,1===eN.current){p=setTimeout(f,1500);return}eN.current=0,null!=t.epoch&&t.epoch===ee.current?ei.current?.request("gap"):ei.current?.request("hydrate")},n=setTimeout(()=>s(null),ez.zm);h=n,i.current?.emit("ai:peekSeq",{sessionId:t,haveSeq:Q.current,epoch:ee.current},s)},b=setInterval(()=>{let e=l4.getState().bySession[t],s=Date.now()-eC.current<15e3;if(!e?.isTurnRunning&&!s){eN.current=0;return}!ew.current||Date.now()-ew.current<ej.current||f()},5e3);return l.on("ai:event",m),()=>{l.off("ai:event",m),clearInterval(b),p&&clearTimeout(p),h&&clearTimeout(h),ed.current=null,eu.current&&clearTimeout(eu.current),eu.current=null,ev.current&&clearTimeout(ev.current),ev.current=null,eM(),o()}},[l,t,H,eE,e$,eM]);let eO=(0,r.useCallback)(function(e){let{attachments:s=null,promptId:r=null,retries:l=0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e&&!s?.length)return;!function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:sy,s="string"==typeof e?e.trim():"";!s||s.startsWith("!")||t.getState().addCommand(s)}(e);let a=r||`p-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;eC.current=Date.now();let o=i.current;eL.getState().clearNotification(t);let c=n=>{(l4.getState().clearPromptSending(t,e),af(t,e))?aa(t,a):(l4.getState().setPromptError(t,e,n,s,a,l),"timeout"===n&&o?.hostCaps?.promptDedupe&&o.kickWsZombie?.("prompt-lost"))};(e&&function(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:globalThis.localStorage;if(!t?.id||!t.text)return;let n=ar(e,s).filter(e=>e.id!==t.id);n.push({id:t.id,text:t.text,page:t.page||"",at:Number.isFinite(t.at)?t.at:Date.now()}),al(e,n,s)}(t,{id:a,text:e,page:ac}),o)?(e&&l4.getState().setPromptSending(t,e),sU((n,r)=>o.emit("ai:prompt",n,n=>{n?.ok&&(aa(t,a),l4.getState().clearPromptSending(t,e),(()=>{if(!e)return;let n=function(e){let{timeoutMs:t,schedule:s=setTimeout,clear:n=clearTimeout,onMissing:r}=e,l=null,a=!1;return{arm(){a||null!=l||(l=s(()=>{l=null,a||(a=!0,r?.())},t))},settle(){a||(a=!0,null!=l&&(n(l),l=null))}}}({timeoutMs:3e3,onMissing:()=>{if(_.current.delete(a),af(t,e))return;let n=l4.getState().bySession[t];n?.isTurnRunning||n?.queue?.some(t=>t.text===e)||(l4.getState().clearPromptSending(t,e),l4.getState().setPromptError(t,e,"timeout",s,a,l))}}),r=_.current.get(a);r&&(r.watch.settle(),_.current.delete(a)),_.current.set(a,{text:e,watch:n}),n.arm()})()),r(n)}),{sessionId:t,message:e,cwd:n,promptId:a,...s?.length?{attachments:s}:{}},5e3,c,setTimeout,clearTimeout,()=>ab(t,e))):c("offline")},[t,n]),e_=(0,r.useCallback)(()=>{let e=l4.getState().bySession[t]?.promptError;if(!e?.text)return;if(af(t,e.text)){(0,Y.Lq)("ai-prompt","auto-resend skipped (already shown)",{text:String(e.text).slice(0,24)}),l4.getState().clearPromptError(t);return}if(!e.promptId||!i.current?.hostCaps?.promptDedupe)return;let s=(e.retries||0)+1;s>2||(l4.getState().clearPromptError(t),eO(e.text,{attachments:e.attachments||null,promptId:e.promptId,retries:s}))},[t,eO]);(0,r.useEffect)(()=>{em.current=e_},[e_]);let eK=(0,r.useCallback)(e=>{let s=i.current;if(!s)return;let n=l4.getState().bySession[t]?.queue||[],r=n.findIndex(t=>t.id===e);if(-1===r)return;let l=n[r];l4.getState().setQueue(t,n.filter(t=>t.id!==e)),sU((e,t)=>s.emit("ai:queueRemove",e,t),{sessionId:t,id:e},5e3,()=>{let e=[...l4.getState().bySession[t]?.queue||[]];e.splice(Math.min(r,e.length),0,l),l4.getState().setQueue(t,e)})},[t]),eW=(0,r.useCallback)(()=>{let e=i.current,s=l4.getState().bySession[t]?.queue||[];e&&s.length&&(l4.getState().setQueue(t,[]),sU((t,s)=>e.emit("ai:queueClear",t,s),{sessionId:t},5e3,()=>l4.getState().setQueue(t,s)))},[t]),eH=(0,r.useCallback)(function(e,s){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,l=i.current;if(!l)return;let a=!1,o=null,c=n=>{if(!a){if(a=!0,clearTimeout(o),n?.ok||n?.reason==="stale")return void y(t,e);(0,Y.Lq)("ai-gate","resolve failed",{requestId:e,behavior:s,res:n??"timeout"}),l4.getState().setGateError(t,e)}};r?l.emit("ai:question",{sessionId:t,requestId:e,answers:r},c):l.emit("ai:permission",{sessionId:t,requestId:e,behavior:s,message:n},c),o=setTimeout(()=>c(null),5e3)},[t,y]),eU=(0,r.useCallback)(()=>{let e=i.current;e?.emit("ai:stop",{sessionId:t})},[t]),eX=(0,r.useCallback)(e=>{if(!e)return;let s=i.current;s?.emit("ai:stopTask",{sessionId:t,taskId:e})},[t]),eV=(0,r.useCallback)(e=>{eO(`! ${e}`)},[eO]),eG=(0,r.useCallback)(async()=>{let e=i.current;if(!e)return null;let s=await new Promise(s=>{let n=!1,r=e=>{n||(n=!0,clearTimeout(l),s(e))},l=setTimeout(()=>r(null),4e3);e.emit("ai:rewind",{sessionId:t,action:"list"},r)});return s?s.support?.conversation?s.ok?{supported:!0,ok:!0,points:s.points||[],support:s.support}:{supported:!0,ok:!1,points:[],support:s.support}:{supported:!1,ok:!1,points:[],support:s.support}:null},[t]),eJ=(0,r.useCallback)(async function(e,s){let{files:r=!0,preview:l=!1,index:a=null}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=i.current;if(!o)return{ok:!1,error:"Not connected to the host."};let c=await new Promise(s=>{let n=!1,i=e=>{n||(n=!0,clearTimeout(c),s(e))},c=setTimeout(()=>i(null),l?4e3:13e4);o.emit("ai:rewind",{sessionId:t,action:l?"preview":"apply",messageId:e,index:a,files:r},i)});return(l||c&&c.ok||eB(),c)?(c.ok&&!l&&s&&o.emit("ai:prompt",{sessionId:t,message:s,cwd:n}),c):{ok:!1,error:"The host did not answer in time."}},[t,n,eB]),eY=(0,r.useCallback)(function(e){let{files:t=!0,index:s=null}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return eJ(e,null,{files:t,preview:!0,index:s})},[eJ]),eZ=(0,r.useCallback)(e=>{if(!e)return;l4.getState().setPermissionMode(t,e),l4.getState().clearBlocked(t);let s=i.current;s?.emit("ai:options",{sessionId:t,options:{mode:e}})},[t]),eQ=(0,r.useCallback)(()=>{l4.getState().clearBlocked(t)},[t]);return{hydrating:E,synced:M,hydrateFailed:z,hasOlder:S,loadOlder:(0,r.useCallback)(async()=>{if(D.current)return!1;let e=i.current;if(!e)return!1;D.current=!0;let n=I.current;try{let{messages:r,before:l,hasMore:a,answered:i}=await l9({startSeq:n,estimateBytes:l6,fetchChunk:s=>new Promise(n=>{let r=!1,l=e=>{r||(r=!0,clearTimeout(a),n(e))},a=setTimeout(()=>l(null),4e3);e.emit("aiHistory",{sessionId:t,before:s},l)}),reduceChunk:(e,n)=>{let r=l4.getState().bySession[t];return ah(e,s,(r?.messages?.length||0)+n+1).messages}});if(I.current!==n||!i||(I.current=l,T(a),!r.length))return!1;return l4.getState().prependMessages(t,r),!0}finally{D.current=!1}},[t,s]),reload:eB,sendPrompt:eO,removeQueueItem:eK,clearQueue:eW,resolvePermission:eH,stop:eU,stopTask:eX,runShell:eV,rewindToMessage:eJ,previewRewind:eY,listRewindPoints:eG,escalateMode:eZ,dismissBlocked:eQ}}({sessionId:t,engine:s,workspacePath:l,bus:i,isVisible:c}),ea=(0,r.useCallback)(()=>{(0,eN.e)(),k(!0),es(),setTimeout(()=>k(!1),700)},[es]),ei=l4(e=>e.bySession[t]?.activePermission),eo=!!l4(e=>e.bySession[t]?.isTurnRunning),ec=l4(e=>e.bySession[t]?.gateError),ed=l4(e=>e.bySession[t]?.activeBlocked),eu=l4(e=>e.bySession[t]?.metadata)||di,em=l4(e=>e.bySession[t]?.tasks)||dc,ex=l4(e=>e.setPermissionMode),ep=eU(t),eh=(0,f.B)(e=>e.terminalBackgroundOpacity),ef=(0,f.B)(e=>e.customBackgrounds),eb=(0,f.B)(e=>e.terminalBackgrounds),eg=(0,f.B)(e=>e.backgroundBySession[t]),ey=(0,f.B)(e=>e.terminalTheme),ew=(0,f.B)(e=>e.fontSize),ej=(0,f.B)(e=>e.showFolderButton),eS=(0,f.B)(e=>e.showNoteButton),eT=(0,f.B)(e=>e.setRightPanelRoot),eE=(0,f.B)(e=>e.setRightPanelTab),eR=(0,f.B)(e=>e.openRightPanel),eM=(0,f.B)(e=>e.artifactsBySession[t]),{count:e$}=rB(l,o,{enabled:d&&ej}),{theme:eP}=(0,sx.D)(),eA=(0,r.useMemo)(()=>(0,rq.In)(eP,ey),[eP,ey]),eI=(0,r.useMemo)(()=>(0,ez.ar)(ew)+(m?1:2),[ew,m]),eD=(0,r.useMemo)(()=>{let e=(0,ez.$Z)(eg,eb,ef,x),t="dark"===eP?(0,ez.RS)(e,ef):null;if(t){let e=`rgba(${ez.c},${eh??ez._z})`,s=`rgba(${ez.pZ},${ez.B$})`;return{backgroundColor:eA.background,backgroundImage:`linear-gradient(${e},${e}), linear-gradient(${s},${s}), url("${t}")`,backgroundSize:"100% 100%, 100% 100%, cover",backgroundPosition:"0 0, 0 0, center",backgroundRepeat:"no-repeat, no-repeat, no-repeat",backgroundBlendMode:"normal, screen, normal"}}return m?sc(eP):{backgroundColor:"transparent"}},[eb,eg,ef,eh,eA,eP,x,m]),eB=eu.skills||[],eF=eu.mcpServers||[],eO=(0,r.useCallback)(e=>{M(`/${e}`)},[M]),e_=(0,r.useCallback)(e=>{i?.emit?.("ai:options",{sessionId:t,options:e})},[i,t]),eK=(0,r.useCallback)(e=>{l4.getState().setMetadata(t,{model:e}),e_({model:e})},[e_,t]),eW=(0,r.useCallback)(e=>{e?.sessionId&&e_({resume:e.sessionId})},[e_]),eH=(0,r.useCallback)(e=>{if(e)return eW(e);w("sessions")},[eW]),eX=(0,r.useCallback)((e,s)=>{e&&("effort"===e&&l4.getState().setMetadata(t,{effort:s}),e_({[e]:s}))},[e_,t]),eV=ss(s),eG=(0,r.useCallback)(e=>{ex(t,e),e_({mode:e})},[e_,t,ex]),eJ=(0,r.useCallback)((e,s)=>{l4.getState().rewindToMessage(t,e,s)},[t]),eY=(0,r.useCallback)(e=>{if(!y&&e.shiftKey&&"Tab"===e.key){e.preventDefault(),(0,eN.e)();let s=eV.permissionModes||[],n=l4.getState().bySession[t]?.permissionMode||eV.defaultMode,r=s.findIndex(e=>e.id===n),l=-1===r?0:(r+1)%s.length,a=s[l]?.id;a&&eG(a)}},[t,eV,eG,y]),eZ=r4({isFocused:d,onActivate:()=>p?.(t)}),eQ=(0,r.useRef)(p);(0,r.useEffect)(()=>{eQ.current=p});let e0=(0,r.useCallback)(()=>eQ.current?.(t),[t]),e1=(0,r.useMemo)(()=>({sessionId:t,isFocused:d,activate:e0}),[t,d,e0]);return(0,n.jsx)(a_.Provider,{value:e1,children:(0,n.jsxs)("div",{...eZ,onKeyDown:eY,className:"ai-pane w-full h-full flex flex-col bg-bg overflow-hidden relative select-text",style:{...eD,"--color-text":eA.foreground,"--ai-fs":`${eI}px`},children:[(0,n.jsxs)("div",{style:{height:26},className:"sm:hidden flex items-center gap-2 px-2 bg-surface/80 backdrop-blur-md text-[11px] select-none shrink-0 relative z-10",children:[(0,n.jsx)("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${np(ep)}`,style:{background:nx(ep).dot}}),(0,n.jsx)("span",{className:"flex-1 min-w-0 truncate text-text",children:a||sa[s]?.label||s}),(0,n.jsx)(r3,{onOpenRemote:h,onOpenMobile:b})]}),d&&(0,n.jsxs)("div",{className:"absolute right-2 z-[2] flex flex-col items-end gap-2 pointer-events-auto touch-none top-9 sm:top-2",children:[(0,n.jsxs)("div",{className:"flex flex-row gap-2",children:[eS&&(0,n.jsx)("button",{onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onTouchStart:e=>{e.preventDefault(),e.stopPropagation()},onClick:e=>{e.stopPropagation(),(0,eN.e)(),C(!0)},className:r6,title:E("terminalPane.note"),children:(0,n.jsx)(ev.y8,{size:16,className:r8})}),(0,n.jsx)("button",{onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onTouchStart:e=>{e.preventDefault(),e.stopPropagation()},onClick:e=>{e.stopPropagation(),ea()},className:r6,title:E("terminalPane.refresh"),children:(0,n.jsx)(ev.e9,{size:16,className:`${r8} ${j?"animate-spin":""}`})})]}),ej&&l&&(0,n.jsxs)("button",{onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onTouchStart:e=>{e.preventDefault(),e.stopPropagation()},onClick:e=>{e.stopPropagation(),(0,eN.e)(),eT(l,l),window.innerWidth>=ez.jK?eE("files",l):eR()},className:`relative ${r6}`,title:E("terminalPane.openFolderHere"),children:[(0,n.jsx)(ev.vd,{size:16,className:r8}),e$>0&&(0,n.jsx)("span",{className:"absolute -top-1 -right-1 min-w-[16px] h-4 px-1 flex items-center justify-center text-[10px] font-semibold text-white bg-brand-500 rounded-full",children:e$>ez.KN?`${ez.KN}+`:e$})]}),g&&eM?.length>0&&(0,n.jsxs)("button",{onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onTouchStart:e=>{e.preventDefault(),e.stopPropagation()},onClick:e=>{e.stopPropagation(),(0,eN.e)(),g(t,eM[0])},className:`relative ${r6}`,title:E("terminalPane.artifacts"),children:[(0,n.jsx)(ev.sU,{size:16,className:r8}),(0,n.jsx)("span",{className:"absolute -top-1 -right-1 min-w-[16px] h-4 px-1 flex items-center justify-center text-[10px] font-semibold text-white bg-brand-500 rounded-full",children:eM.length})]})]}),(0,n.jsx)(dn,{sessionId:t}),(0,n.jsx)(dl,{sessionId:t,engine:s,onStopTask:D}),(0,n.jsx)(cF,{bus:i,sessionId:t,engine:s,workspacePath:l,fileBus:o,onSendPrompt:M,onResolvePermission:A,onRewind:W,onPreviewRewind:H,onListRewindPoints:G,onCutLocal:eJ,hasOlder:ee,onLoadOlder:et,onOpenResume:eH,hydrating:en,synced:er,hydrateFailed:el,onReload:es}),ed&&!ei&&(0,n.jsx)("div",{className:"px-3 pb-2 select-none list-rise flex-shrink-0 z-30",children:(0,n.jsx)(dt,{engine:ed.engine||s,message:ed.message,escalate:ed.escalate,onEscalate:Z,onDismiss:Q})}),ei&&(0,n.jsx)("div",{className:"px-3 pb-2 select-none list-rise flex-shrink-0 z-30",children:"AskUserQuestion"===ei.tool?(0,n.jsx)(aH,{requestId:ei.requestId,questions:ei.input?.questions||[],failed:ec,onResolve:A}):(0,n.jsx)(de,{requestId:ei.requestId,tool:ei.tool,input:ei.input,failed:ec,onResolve:A})}),(0,n.jsx)(cV,{bus:i,sessionId:t,engine:s,onSend:M,onRemoveQueueItem:$,onClearQueue:z,onStop:I,onRunShell:_,onResolvePermission:A,onSelectModel:eK,onModeChange:eG,onOpenModal:w,onOptionChange:eX,onActivate:e0,isFocused:d,workspacePath:l,modalOpen:null!==y}),(0,n.jsx)(cJ,{sessionId:t,fileBus:o,sessionName:a,engine:s,workspacePath:l,isDesktop:m,onModeChange:eG,onNewChat:R}),"skills"===y&&(0,n.jsx)(cY,{skills:eB,onClose:()=>w(null),onSelectSkill:eO}),"mcp"===y&&(0,n.jsx)(cZ,{mcpServers:eF,onClose:()=>w(null)}),"model"===y&&(0,n.jsx)(cQ,{currentModel:eu.model,currentEffort:eu.effort||"",models:eu.modelOptions?.length?eu.modelOptions:eV.models,isTurnRunning:eo,onClose:()=>w(null),onSelectModel:eK,onSelectEffort:e=>e_({effort:e})}),"sessions"===y&&(0,n.jsx)(c0,{bus:i,engine:s,workspacePath:l,onClose:()=>w(null),onResume:eW}),"config"===y&&(0,n.jsx)(c5,{engine:s,options:l4.getState().bySession[t]?.metadata,onClose:()=>w(null),onApply:e=>e_(e)}),"mode"===y&&(0,n.jsx)(c4,{modes:eV.permissionModes||[],currentMode:l4.getState().bySession[t]?.permissionMode||eV.defaultMode,onClose:()=>w(null),onSelectMode:eG}),"doctor"===y&&(0,n.jsx)(c6,{bus:i,engine:s,workspacePath:l,onClose:()=>w(null)}),"tasks"===y&&(0,n.jsx)(c9,{tasks:em,onClose:()=>w(null)}),"rewind"===y&&(0,n.jsx)(c7,{sessionId:t,onListPoints:G,onPreview:H,onApply:e=>W(e),onClose:()=>w(null)}),N&&eS&&(0,n.jsx)(r5,{bus:i,sessionId:t,onClose:()=>C(!1)}),(0,n.jsx)(ek.A,{isOpen:S,onClose:()=>T(!1),onConfirm:()=>v?.(t),title:E("ai.newChatTitle"),message:E("ai.newChatMessage"),confirmText:E("ai.newChatConfirm")})]})})});class du extends r.Component{constructor(e){super(e),this.handleReset=()=>{this.setState({hasError:!1,error:null}),this.props.onReset?.()},this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error("[ErrorBoundary caught error]:",e,t)}render(){return this.state.hasError?this.props.fallback?"function"==typeof this.props.fallback?this.props.fallback(this.state.error,this.handleReset):this.props.fallback:(0,n.jsxs)("div",{className:"w-full h-full min-h-[160px] flex flex-col items-center justify-center p-6 text-center select-none bg-surface/50 border border-border-subtle/40 rounded-brand m-2",children:[(0,n.jsx)(ev.RI,{size:24,className:"text-danger mb-2"}),(0,n.jsx)("div",{className:"text-sm font-semibold text-text mb-1",children:this.props.title||"Something went wrong in this pane"}),(0,n.jsx)("div",{className:"text-xs text-text-muted font-mono max-w-md truncate mb-4",children:this.state.error?.message||"Render error"}),(0,n.jsxs)("button",{type:"button",onClick:this.handleReset,className:"px-3 py-1.5 rounded bg-surface-2 hover:bg-surface-3 text-text text-xs flex items-center gap-1.5 font-medium transition-colors border border-border-subtle",children:[(0,n.jsx)(ev.e9,{size:12}),(0,n.jsx)("span",{children:"Try again"})]})]}):this.props.children}}function dm(e){let t=(0,r.useRef)(e);return(0,r.useEffect)(()=>{t.current=e}),(0,r.useCallback)(function(){for(var e=arguments.length,s=Array(e),n=0;n<e;n++)s[n]=arguments[n];return t.current?.(...s)},[])}let dx=()=>{},dp=(0,r.memo)(function(e){let{children:t}=e;return(0,n.jsx)("div",{className:"absolute inset-x-0 top-0 bottom-[37px] overflow-hidden",children:t})}),dh=(0,r.memo)(function(e){let{sessionId:t}=e,s=eU(t);return"idle"===s?null:(0,n.jsx)("div",{className:"absolute inset-x-0 bottom-0 z-20 h-[1px] pointer-events-none hidden sm:block",children:"working"===s?(0,n.jsx)(cS,{}):"done"===s?(0,n.jsx)("div",{className:"w-full h-full bg-[#f59e0b]",style:{boxShadow:"0 0 4px rgba(245,158,11,0.6)"}}):"blocked"===s?(0,n.jsx)("div",{className:"w-full h-full bg-[#ef4444] animate-pulse",style:{boxShadow:"0 0 4px rgba(239,68,68,0.7)"}}):null})}),df=(0,r.memo)(function(e){let{sessionId:t,placeholder:s}=e,r=(0,f.B)(e=>e.drafts[t]??"").replace(/\s+/g," ").trim();return r?(0,n.jsx)("span",{className:"text-text",children:r}):(0,n.jsx)(n.Fragment,{children:s})}),db=(0,r.memo)(function(e){let{bus:t,busRef:s,connected:l,carrier:a,platform:i,hostVersion:o,agentVersion:c,sessions:d,workspaces:m,activeSessionId:x,activeSession:p,activeWorkspaceId:h,openedSessions:b,livePanes:g,mountedWorkspaces:v,cwdBySession:y,sessionStatus:w,notifications:j,isDesktop:k,isTerminalView:N,slideClass:C,shells:S,pairDashboard:T=null,welcomeActive:E=!1,sidebarCollapsed:R,sidebarWidth:M,setSidebarWidth:$,toggleSidebar:z,paneWidth:A=null,setPaneWidth:I,paneRegistry:D,bindSwipeTab:L,nav:B,onBack:F,onOpenRemote:O,onOpenMobile:_,onOpenRemoteHost:K=null,onOpenMobileHost:W=null,onOpenFiles:H,onLogout:q,onRenameHost:U,onDeleteHost:X,onMainDisconnect:V,onDeleteWorkspace:G,onRenameWorkspace:J,onReorderSession:Y,onSetHiddenRepos:Z,atStackBottom:Q=!1,onAddWorkspace:ee,onOpenSettings:et,homeDir:es,recentWorkspaces:en,rightPanel:er,editorPanel:el,mobilePanel:ea,onOpenArtifact:ei,fileBus:eo,browserPanel:ec=null,browserVisible:ed=!0,onCreateAnyHost:eu,onQuickCreateHostAware:em,tunnelUrl:ex,apiKey:ep,connectionMode:eh,onResumeAgentSessionForeign:ef=null,subscribeToPush:eg,unsubscribeFromPush:ey}=e,{t:ew}=(0,eC.s)(),ej="mouse"===sD(),ek=(0,u.d)(e=>e.bus),eS=(0,u.d)(e=>e.busRef),eT=(0,u.d)(e=>e.connected),eE=(0,u.d)(e=>e.carrier),eR=t||ek,eM=s||eS,e$=(0,r.useMemo)(()=>d.filter(e=>!e.hostKey),[d]),eP=(0,r.useMemo)(()=>m.filter(e=>!e.hostKey),[m]),eA=(0,r.useCallback)(e=>{let t=eq(e);return t.head?t.bus:eR},[eR]),eI=l??eT,eD=eo||eb.getState(),eB=(0,r.useMemo)(()=>p?.hostKey?eH(p.hostKey).fileBus:eD,[p?.hostKey,eD]),{panesContainerRef:eF,registerPaneApi:eO,registerPaneElement:e_,registerKeyboardTextApi:eK,handlePasteFallback:eW,handleInputFocusChange:eU,focusKeyboardInput:eX,scrollPaneIntoView:eV}=D,[eG,eJ]=(0,r.useState)(null),{workspaceSessionIds:eY,workspaceOpenedSessions:eZ,renderedSessions:eQ,mountedSet:e0,workspaceIndex:e1}=(0,r.useMemo)(()=>(0,ti.gk)({sessions:d,openedSessions:b,livePanes:g,mountedWorkspaces:v,activeWorkspaceId:h,isDesktop:k}),[d,b,g,v,h,k]),e2=(0,r.useMemo)(()=>d.filter(e=>(0,ti.xs)(e)===h),[d,h]),e5=(0,r.useMemo)(()=>new Map(e2.map((e,t)=>[e.id,t])),[e2]),e3=m.find(e=>e.id===h),e4=e3?.path||p?.workspacePath||null,e6=rB(e4,eB),e8=(0,f.B)(e=>e.rightPanelRoots),e9=(0,f.B)(e=>e.agentBySession),e7=(0,f.B)(e=>e.fullModes||{})[h??ti.AD]??!1,te=(0,f.B)(e=>e.hiddenPaneSessionIds||[]),tt=(0,f.B)(e=>e.setRightPanelRoot),tn=(0,f.B)(e=>e.openRightPanel),tr=(0,f.B)(e=>e.reorderOpenedSessions),tl=(0,r.useCallback)(e=>{tr(e),Y?.(e)},[tr,Y]),ta=(0,r.useCallback)(e=>{B.handleSelectSession(e)},[B]),to=!!d.find(e=>e.id===x)?.hostKey,tc=e3?.hostKey||null,td=eH(tc).busRef,[tu,tm]=(0,r.useState)([]),tx=(0,P.rh)(e=>tc&&e.hosts[tc]?.status||null),tp=(0,P.rh)(e=>e.hosts),th=(0,P.rh)(e=>e.currentKey);(0,r.useEffect)(()=>{tc&&eH(tc).bus?.emit("getShells",e=>tm(e?.shells||[]))},[tc,tx]);let tf=dm(e=>{let t=si.find(t=>t.id===e9[e]);if(!t)return;let s=d.filter(t=>t.id!==e&&(0,ti.xs)(t)===(h??null)).length+1;B.handleReplaceSession(e,`${t.short||t.label} ${s}`,t,!0)}),tb=e8[e4]||e4,tg=dm((e,t)=>{let s=d.find(t=>t.id===e)?.workspacePath;tt(s,t||s),tn()}),tv=(0,r.useCallback)(e=>er?.onTabChange(e,e4??""),[er,e4]),ty=(0,r.useCallback)(()=>H?.(tb),[H,tb]),tw=(0,r.useMemo)(()=>e3?.hiddenRepos||[],[e3?.hiddenRepos]),tj=(0,r.useCallback)(e=>{e3&&Z?.(e3.id,e)},[e3,Z]),tk=x&&(y[x]||d.find(e=>e.id===x)?.cwd)||null;(0,r.useEffect)(()=>{tt(e4,null)},[x,e4,tt]);let tN=!d.length,tC=(0,P.rh)(e=>Object.keys(e.hosts).length),tS=tN&&!m.length&&tC<=1&&!(ec&&ed),[tT,tE]=(0,r.useState)(!1);er?.open&&!tT&&tE(!0);let[tR,tM]=(0,r.useState)(!1);!er?.open&&tR&&tM(!1),(0,r.useEffect)(()=>{if(!er?.open)return;let e=requestAnimationFrame(()=>tM(!0));return()=>cancelAnimationFrame(e)},[er?.open]);let t$=!!el?.filePath,[tz,tP]=(0,r.useState)(!1);t$&&!tz&&tP(!0);let[tA,tD]=(0,r.useState)(!1);!t$&&tA&&tD(!1);let[tL,tB]=(0,r.useState)(null);t$&&tL?.filePath!==el.filePath&&tB({filePath:el.filePath,artifactTitle:el.artifactTitle,previewSeq:el.previewSeq}),(0,r.useEffect)(()=>{if(!t$)return;let e=requestAnimationFrame(()=>tD(!0));return()=>cancelAnimationFrame(e)},[t$]);let[tF,tO]=(0,r.useState)(0),[t_,tK]=(0,r.useState)(!1),tW=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(!k)return;let e=tW.current;if(!e)return;let t=new ResizeObserver(e=>tO(e[0].contentRect.width));return t.observe(e),()=>t.disconnect()},[k]),(0,r.useEffect)(()=>{if(!eI||!eR?.emit)return;let e=!1,t=()=>eR.emit("bg:get",{},t=>{!e&&t?.success&&t.dataUrl&&f.B.getState().setCustomBackgrounds([{id:"custom",dataUrl:t.dataUrl}])}),s=setTimeout(()=>{e||t()},ez._O);return eR.emit("bg:list",{},n=>{e||(clearTimeout(s),n?.success&&Array.isArray(n.items)?f.B.getState().setCustomBackgrounds(n.items):t())}),()=>{e=!0,clearTimeout(s)}},[eI,eR]);let tH=(0,r.useMemo)(()=>eZ.filter(e=>!te.includes(e)),[eZ,te]).length,tq=(er?.open&&tR?er.width:0)+(t$&&tA?el.width:0)+(ea?.open&&"pin"===ea.mode?ea.width:0),tU=(0,ti.Jc)({rowWidth:tF,paneCount:tH,sidebarWidth:R?0:M,sidePx:tq,gapPx:ez.pS,paddingPx:ez.Jv,minWidth:ez.k9.min}),tX=A??tU,tV=(0,r.useRef)({editorFile:el?.filePath,rightOpen:er?.open});(0,r.useEffect)(()=>{if(!k||!x)return;let e=tV.current,t=e.editorFile!==el?.filePath||e.rightOpen!==er?.open;if(tV.current={editorFile:el?.filePath,rightOpen:er?.open},!t)return;let s=setTimeout(()=>{eV(x)},260);return()=>clearTimeout(s)},[el?.filePath,er?.open,x,k,eV]),(0,r.useEffect)(()=>{k&&e7&&eF.current&&(eF.current.scrollLeft=0)},[k,e7,eF]);let tG=e=>{let t=tX??e.currentTarget.parentElement?.offsetWidth??ez.k9.min;tK(!0),ts(e,{startWidth:t,onWidth:e=>I?.(e),onEnd:()=>tK(!1)})},tJ=(0,r.useCallback)(()=>I?.(null),[I]),[tY,tZ]=(0,r.useState)(null),tQ=(0,r.useRef)(null),t0=n2(tQ,tY?.x??0,tY?.y??0),t1=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),tZ({x:e.clientX,y:e.clientY})},[]),t2=(0,r.useCallback)(e=>{if("auto"===e)tJ();else{let t=eF.current?.clientWidth||tF-(R?0:M)-tq;if(t>0){let s=Math.max(ez.k9.min,Math.floor((t-(e-1)*ez.pS)/e));I?.(s)}}tZ(null)},[tJ,eF,tF,R,M,tq,I]);(0,r.useEffect)(()=>{if(!tY)return;let e=e=>{tQ.current&&!tQ.current.contains(e.target)&&tZ(null)},t=e=>{"Escape"===e.key&&tZ(null)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("keydown",t)}},[tY]),(0,r.useEffect)(()=>{let e=()=>tJ();return window.addEventListener("terminal:fitPanes",e),()=>window.removeEventListener("terminal:fitPanes",e)},[tJ]),(0,r.useEffect)(()=>{let e=e=>{e.detail?.fraction&&t2(e.detail.fraction)};return window.addEventListener("terminal:splitPreset",e),()=>window.removeEventListener("terminal:splitPreset",e)},[t2]);let t5=function(e,t,s){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,l=d.find(t=>t.id===e),a=l?.hostKey?eH(l.hostKey).fileBus:eD,i=e9[e],o=si.find(e=>e.id===i);return o?(0,n.jsx)(du,{title:"AI Chat Pane",children:(0,n.jsx)(dd,{sessionId:e,engine:o.aiEngine,workspacePath:l?.cwd||l?.workspacePath||e3?.path,sessionName:l?.name,bus:eA(e),fileBus:a,isVisible:t,isFocused:s,isDesktop:k,bgIndex:r,onActivate:B.handleSelectSession,onNewChat:tf,onOpenRemote:O,onOpenMobile:_,onOpenArtifact:ei})},e):(0,n.jsx)(r9,{workspacePath:l?.workspacePath,sessionName:l?.name,bus:eA(e),fileBus:a,connected:eI,sessionId:e,isVisible:t,isFocused:s,onActivate:B.handleSelectSession,onRegisterApi:eO,onPasteFallback:eW,showFocusBorder:!1,mountDelay:(0,ti.Mt)(e,s,e1),bgIndex:r,onOpenArtifact:ei,onOpenRemote:O,onOpenMobile:_})},t3=e=>{let t=d.find(t=>t.id===e),s=t?.hostKey?eH(t.hostKey).fileBus:eD;return(0,n.jsx)(nu,{bus:eA(e),sessionId:e,onExpandChange:dx,onRegisterTextApi:eK,onInputFocusChange:eU,platform:i,onInput:eL.getState().clearNotification,onSwitchSession:B.switchSession,onSwitchToIndex:B.switchToIndex,isDesktop:k,statusStrip:(0,n.jsx)(iz,{sessionId:e,fileBus:s,workspacePath:t?.workspacePath||null,busRef:eM,onReveal:tg})})},t4=!!(T||E),t6=!!ec,t8=t6&&ed;return(0,n.jsxs)("div",{className:`absolute inset-0 flex flex-col ${N||t8||T||E?"translate-x-0 opacity-100 z-10":"-translate-x-full opacity-0 z-0 pointer-events-none"}`,children:[(0,n.jsxs)("div",{ref:tW,className:`flex-1 min-h-0 relative ${k?"flex flex-row":"flex flex-col"}`,children:[k&&(0,n.jsx)("div",{className:"hidden sm:block overflow-hidden flex-shrink-0 transition-[width] duration-200 ease-out",style:{width:R?0:M},children:(0,n.jsx)(ib,{allSessions:d,mainSessions:e$,workspaces:eP,activeSessionId:x,activeWorkspaceId:h,onSelectSession:B.handleSelectSession,onSelectWorkspace:B.handleSelectWorkspace,onCreateNamedSession:B.handleCreateSession,onResumeAgentSession:to?ef:B.handleResumeAgentSession,shells:S,onRenameSession:B.handleRenameSession,onDeleteSession:B.handleDeleteSession,onReorderSession:tl,onDeleteWorkspace:G,onAddWorkspace:ee,onRenameWorkspace:J,onOpenSettings:et,onOpenRemoteHost:K,onOpenMobileHost:W,onLogout:q,onRenameHost:U,onMainDisconnect:V,onDeleteHost:X,busRef:eM,homeDir:es,cwdBySession:y,connected:eI,width:M,onResize:$,onCollapse:z})}),(0,n.jsxs)("div",{className:"relative flex-1 min-w-0 min-h-0 flex flex-col",children:[k&&R&&(T||E)&&(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),z()},title:tI(ew("menu.toggleSidebar")||"Show sidebar","toggleSidebar"),"aria-label":"Show sidebar",className:"absolute top-2 left-2 z-[70] p-1.5 rounded-brand bg-surface/90 backdrop-blur border border-border-subtle text-text-muted hover:text-text shadow-md transition-colors",children:(0,n.jsx)(ev.e6,{size:14})}),T&&(0,n.jsx)("div",{className:"absolute inset-0 z-[60] overflow-hidden bg-bg",children:T}),E&&!T&&(0,n.jsx)("div",{className:"absolute inset-0 z-[60] overflow-y-auto bg-bg",children:(0,n.jsx)(cM,{onAddWorkspace:ee,onOpenRemote:O,recent:en,homeDir:es,onOpenRecent:e=>ee?.(e)})}),!t4&&(!tN||!k)&&(0,n.jsx)(rM,{sessions:e2,allSessions:d,activeSessionId:x,isActive:N,connected:eI,onSwitchSession:ta,onCreateSession:tc?em:B.handleQuickCreateSession,onRenameSession:B.handleRenameSession,onDeleteSession:B.handleDeleteSession,onCreateNamedSession:eu,modalBusRef:td,modalHostKey:tc||"main",modalShells:tc?tu:null,onResumeAgentSession:to?ef:B.handleResumeAgentSession,onBack:k||Q?null:F,workspaces:m,activeWorkspaceId:h,onSelectWorkspace:B.handleSelectWorkspace,hasUngrouped:d.some(e=>!(0,ti.xs)(e)),onOpenRemote:O,onOpenMobile:_,onOpenRemoteHost:K,onOpenMobileHost:W,hostKey:tc,onOpenFiles:H,onLogout:q,tunnelUrl:ex,apiKey:ep,connectionMode:eh,subscribeToPush:eg,unsubscribeFromPush:ey,hostVersion:o||c,agentVersion:o||c,busRef:eM,carrier:a||eE,shells:S,onToggleSidebar:k?z:null,sidebarCollapsed:R,onReorderSession:tl,onToggleRightPanel:er?.onToggle,rightPanelOpen:er?.open,fileBus:eD,homeDir:es,isDesktop:k}),tS?(0,n.jsx)("div",{className:"flex-1 min-h-0",children:(0,n.jsx)(cM,{onAddWorkspace:ee,onOpenRemote:O,recent:en,homeDir:es,onOpenRecent:e=>ee?.(e)})}):(0,n.jsxs)("div",{ref:eF,className:`flex-1 min-h-0 ${t4?"hidden":""} ${k?`relative flex flex-row ${e7?"overflow-hidden":"overflow-x-auto"} overflow-y-hidden px-0 pb-0 scrollbar-none`:"relative"}`,...L({enabled:!k,sessionIds:eZ,activeSessionId:x,onSwitch:B.handleSelectSession}),children:[t6&&(0,n.jsx)("div",{className:`absolute inset-0 z-10 ${ed?"":"hidden"}`,children:ec}),eQ.map(e=>{let t=eY.has(e),s=e===x,r=te.includes(e),l=t&&!r&&(k&&!e7||s),a=!!tp[eq(e).head||th]?.updating,i=e5.get(e)??0;return(0,n.jsxs)("div",{ref:t=>e_(e,t),className:t8||!t||k&&e7&&!s||k&&r?"hidden":k?`h-full relative bg-bg ${a?"opacity-50 pointer-events-none":""} ${e7?"w-full flex-1":`border-r-2 border-border-subtle last:border-r-0 ${t_?"":"transition-[width] duration-200 ease-out"}`}`:`absolute inset-0 ${a?"opacity-50 pointer-events-none":s?`opacity-100 z-10 ${C}`:"opacity-0 z-0 pointer-events-none"}`,style:t&&k?e7?{width:"100%",flex:"1 1 0"}:null!=tX?{width:tX,flexShrink:0}:{flex:"1 1 0",minWidth:ez.k9.min}:void 0,children:[e0.has(e)?e9[e]?.endsWith("-ui")?(0,n.jsx)("div",{onMouseDown:()=>{s||B.handleSelectSession(e)},onTouchStart:()=>{s||B.handleSelectSession(e)},className:"w-full h-full flex flex-col relative overflow-hidden",children:t5(e,l,s,i)}):k?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(dp,{children:[t5(e,l,s,i),(0,n.jsx)(dh,{sessionId:e})]}),(0,n.jsx)("div",{className:"absolute inset-x-0 bottom-0 z-20 border-t border-border-subtle bg-surface",children:s?t3(e):(0,n.jsx)("button",{type:"button",tabIndex:-1,onClick:()=>{B.handleSelectSession(e),setTimeout(eX,60)},className:"group block w-full text-left","aria-label":"Focus this terminal input",children:(0,n.jsx)("span",{className:"block w-full pl-9 pr-16 py-2 text-sm text-text-muted/60 group-hover:bg-surface-2/70 group-hover:text-text-muted transition-colors truncate",children:(0,n.jsx)(df,{sessionId:e,placeholder:ew("mobileKeyboard.typeCommand")})})})})]}):t5(e,l,s,i):(0,n.jsx)("div",{className:"w-full h-full flex items-center justify-center text-text-muted text-xs"}),t&&k&&!e7&&!r&&(0,n.jsx)("div",{onPointerDown:tG,onDoubleClick:tJ,onContextMenu:t1,className:"absolute top-0 right-0 bottom-0 w-1 cursor-col-resize hover:bg-brand-500/40 transition-colors z-30",title:ej?tI(ew("shortcuts.fitPanes")||"Auto-fit panes","fitPanes"):void 0})]},e)})]}),!k&&x&&!e9[x]?.endsWith("-ui")&&t3(x)]}),(el?.filePath||k&&tz)&&(0,n.jsx)("div",{className:k?"overflow-hidden flex-shrink-0 transition-[width] duration-200 ease-out":"absolute inset-0 z-40 sheet-rise",style:k?{width:t$&&tA?el.width:0}:void 0,"aria-hidden":k&&!t$,children:(0,n.jsx)(cN,{filePath:t$?el.filePath:tL?.filePath,artifactTitle:t$?el.artifactTitle:tL?.artifactTitle,previewSeq:t$?el.previewSeq:tL?.previewSeq,jump:t$?el.jump:null,workspace:tb,fileBus:eB,width:el.width,onResize:el.onResize,onClose:el.onClose,onOpenFull:el.onOpenFull,onOpenFile:el.onOpen,isDesktop:k})}),k&&ea?.open&&"pin"===ea.mode&&(0,n.jsx)("div",{ref:eJ,className:"relative overflow-hidden flex-shrink-0 border-l border-border",style:{width:ea.width},children:(0,n.jsx)("div",{onPointerDown:ea.onResizeStart,className:"absolute top-0 left-0 bottom-0 w-1 cursor-col-resize hover:bg-brand-500/40 transition-colors z-20"})}),k&&ea?.open&&(0,n.jsx)(iV,{busRef:ea.busRef||eM,protocolRef:ea.protocolRef,connected:ea.connected??eI,pinSlot:eG}),er?.open&&!k&&(0,n.jsx)("div",{className:"absolute inset-0 z-20 scrim fade-in",onClick:er.onToggle}),(er?.open||k&&tT)&&(0,n.jsx)("div",{className:k?"overflow-hidden flex-shrink-0 transition-[width] duration-200 ease-out":"absolute inset-y-0 right-0 z-30 w-[85%] max-w-sm shadow-elev screen-in",style:k?{width:er?.open&&tR?er.width:0}:void 0,"aria-hidden":k&&!er?.open,children:(0,n.jsx)(oJ,{workspacePath:e4,filesRoot:tb,cwdHint:tk,activeFile:el?.filePath,fileBus:eB,tab:er.tabs?.[e4??""]||"files",onTabChange:tv,width:er.width,onResize:er.onResize,onClose:er.onToggle,onOpenFiles:H?ty:null,onOpenFile:el?.onOpen,onNewTerminal:er.onNewTerminal,onAddWorkspace:ee,homeDir:es,hiddenRepos:tw,changedPerRepo:e6.perRepo,onHiddenReposChange:e3&&Z?tj:null,isDesktop:k})})]}),(0,n.jsx)(cC,{}),k&&!tN&&(0,n.jsx)(iP,{cwd:x&&(y[x]||p?.cwd||e3?.path)||"",workspacePath:p?.workspacePath||e3?.path||null,sessionId:x,hostKey:p?.hostKey||null,sessionName:p?p?.name:"",hostVersion:o||c,agentVersion:o||c,platform:i,homeDir:es}),tY&&(0,n.jsxs)("div",{ref:tQ,className:"fixed z-[70] menu-popover p-1 min-w-[130px] pop-in shadow-xl",style:{left:t0.left,top:t0.top},children:[(0,n.jsx)("div",{className:"px-2 py-1 text-[10px] font-semibold text-text-subtle uppercase tracking-wider",children:"Split"}),(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),t2("auto")},className:"w-full text-left px-2 py-1.5 text-xs text-text hover:bg-surface-2/80 rounded-[6px] flex items-center justify-between",children:[(0,n.jsx)("span",{children:"Auto Fit"}),(0,n.jsx)("span",{className:"text-[10px] text-text-muted",children:"Auto"})]}),(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),t2(2)},className:"w-full text-left px-2 py-1.5 text-xs text-text hover:bg-surface-2/80 rounded-[6px] flex items-center justify-between",children:[(0,n.jsx)("span",{children:"1/2"}),(0,n.jsx)("span",{className:"text-[10px] text-text-muted",children:"50%"})]}),(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),t2(3)},className:"w-full text-left px-2 py-1.5 text-xs text-text hover:bg-surface-2/80 rounded-[6px] flex items-center justify-between",children:[(0,n.jsx)("span",{children:"1/3"}),(0,n.jsx)("span",{className:"text-[10px] text-text-muted",children:"33%"})]}),(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),t2(4)},className:"w-full text-left px-2 py-1.5 text-xs text-text hover:bg-surface-2/80 rounded-[6px] flex items-center justify-between",children:[(0,n.jsx)("span",{children:"1/4"}),(0,n.jsx)("span",{className:"text-[10px] text-text-muted",children:"25%"})]})]})]})});var dg=s(14337);function dv(e){let{label:t,inline:s=!1}=e,{t:l}=(0,eC.s)(),[a,i]=(0,r.useState)(!1),[o,c]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{let e=setTimeout(()=>i(!0),6e3);return()=>clearTimeout(e)},[]),(0,n.jsxs)("div",{className:`${s?"absolute inset-0 z-10":"fixed inset-0 z-40"} flex items-center justify-center fade-in`,children:[(0,n.jsx)("div",{className:"cine-bg","aria-hidden":!0,children:(0,n.jsx)("div",{className:"cine-icons"})}),(0,n.jsxs)("div",{className:"relative z-10 flex flex-col items-center gap-3 px-6 text-center",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"w-2 h-2 rounded-full bg-text animate-pulse-glow"}),(0,n.jsx)("span",{className:"text-[15px] font-semibold text-text tracking-wide",children:"9Remote"})]}),(0,n.jsx)(dg.A,{size:"lg"}),(0,n.jsx)("p",{className:"text-sm text-text-muted",children:t||l("connection.retrying")}),a&&(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),c(!0);try{sessionStorage.setItem("9remote_manual_disconnect","1")}catch{}setTimeout(()=>window.location.reload(),150)},disabled:o,className:"mt-2 px-4 py-2 bg-surface-2 hover:bg-surface-3 active:scale-[0.96] disabled:opacity-70 border border-border-subtle rounded-brand text-xs font-medium text-text transition-all duration-150 flex items-center gap-2 fade-in",children:[(0,n.jsx)(ev.e9,{size:14,className:`text-brand-500 ${o?"animate-spin":""}`}),(0,n.jsx)("span",{children:l("menu.reloadWeb")||"Reload"})]})]})]})}var dy=s(39634);function dw(e){let t,{sessions:s,cwdBySession:l={},connected:a,onSelect:i,onCreate:o,onDelete:c,onRename:d,onLogout:x,onOpenRemote:p,tunnelUrl:h,apiKey:b,connectionMode:g="tunnel",isActive:v=!0,busRef:y,subscribeToPush:w,unsubscribeFromPush:j,onResumeAgentSession:k=null,notifications:N,sessionStatus:C,hostVersion:S,agentVersion:T,carrier:E,workspaces:R=[],onRenameWorkspace:M,onDeleteWorkspace:$,onAddWorkspace:z,onOpenRemoteHost:A=null,onOpenMobileHost:I=null,fileBus:D,homeDir:L,recentWorkspaces:B=[],shells:F=[],onReorderSession:O,onRenameHost:_=null,onDeleteHost:K=null,onMainDisconnect:W=null,onMainReconnect:H=null}=e,{t:q}=(0,eC.s)(),U=D||eb.getState(),X=Object.values((0,P.rh)(e=>e.hosts)),V=(0,P.rh)(e=>e.currentKey),G=X.find(e=>e.key===V),J=(0,u.d)(e=>e.connected),Y=(0,u.d)(e=>e.carrier),Z=(0,u.d)(e=>e.busRef),Q=a??J,ee=E||Y||"ws",et=y||Z,es=eL(e=>e.notifications),en=eG(),er=N||es,el=C||en;eA(e=>e.open);let ea=eA(e=>e.setContext),ei=eA(e=>e.setCallbacks),eo=(0,f.B)(e=>e.pushView),ec=(0,m.gJ)(),[ed,eu]=(0,r.useState)(null),[em,ex]=(0,r.useState)(null),[ep,eh]=(0,r.useState)(!1),[ef,eg]=(0,r.useState)(!1),ey=e_(X,G?.key);(0,r.useEffect)(()=>{if(!v)return;let e=e=>{(e.metaKey||e.ctrlKey)&&e.altKey&&!e.shiftKey&&"t"===e.key.toLowerCase()&&(e.preventDefault(),ex({workspaceId:null}))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[v]),(0,r.useEffect)(()=>{v&&(ea({connected:Q,remoteAvailable:!!p,showTheme:!1,theme:"default",busRef:et,hideActions:["remote","files","sites"],tunnelUrl:h,apiKey:b,connectionMode:g,subscribeToPush:w,unsubscribeFromPush:j,notifications:er,hostVersion:S||T,agentVersion:S||T,carrier:ee}),ei({onRemote:null,onFiles:null,onSelectSite:null,onRefreshSites:null,onLogout:x,onThemeChange:null}))},[v,Q,p,x,ea,ei,et,g,w,j,S,T,ee,h,b,er]);let ew=new Set(s.map(e=>e.id)),ej=!X.some(e=>e.updating)&&!s.length&&!R.length&&X.length<=1;return(0,n.jsxs)("div",{className:"h-full flex flex-col overflow-hidden relative",children:[(0,n.jsxs)("header",{className:"relative z-10 pl-[28px] pr-4 py-3 flex items-center justify-between gap-2 flex-shrink-0",style:{paddingTop:"calc(0.75rem + env(safe-area-inset-top, 0px))"},children:[(0,n.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,n.jsx)("img",{src:"/icon-192.png",alt:"9Remote",draggable:!1,className:"w-5 h-5 rounded-brand flex-shrink-0"}),(0,n.jsx)("h1",{className:"text-text text-lg font-semibold truncate",children:q("sessions.headerTitle")}),(0,n.jsx)("span",{className:`w-2 h-2 rounded-full flex-shrink-0 ${Q?"bg-green-500":"bg-red-500 animate-pulse"}`,title:q(Q?"sessions.connected":"sessions.disconnected")})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1 flex-shrink-0",children:[(0,n.jsx)(dj,{icon:ev.e9,iconClass:ef?"animate-spin":"",label:q("menu.reload"),disabled:ef,onClick:()=>{eg(!0),setTimeout(()=>window.location.reload(),300)}}),(0,n.jsx)(dj,{icon:ev.kV,label:q("hosts.addHost"),onClick:()=>{(0,eN.e)(),eh(!0)}}),ec&&(0,n.jsx)(dj,{icon:ev.vW,label:q("connection.pairTab"),onClick:()=>{(0,eN.e)(),eo({type:"pair"})}})]})]}),(0,n.jsx)("div",{className:"relative z-10 flex-1 overflow-auto modal-scrollable pt-2 pb-[calc(94px_+_var(--safe-bottom))]",style:{overflowAnchor:"none"},children:ej?(0,n.jsx)("div",{className:"absolute inset-0 z-10",children:(0,n.jsx)(dk,{onAddWorkspace:z,recent:B,homeDir:L,connected:Q,isHostUi:ec})}):(0,n.jsx)(n.Fragment,{children:ey.map((e,t)=>(0,n.jsx)("div",{className:0===t?"pl-1 pr-3":"mt-3 border-t border-border-subtle pt-2 pl-1 pr-3",children:e.key===(G?.key||"main")&&G?(0,n.jsx)(ix,{mobile:!0,host:{...G,workspaces:R,sessions:s,statusMap:el,onDisconnect:W,onConnect:H},busRef:et,onResumeAgentSession:k,actions:{selectSession:i,createSession:o,renameSession:d,deleteSession:c,backgroundSession:e=>eu(e),reorderSession:O,renameWorkspace:M,deleteWorkspace:$,renameHost:_,deleteHost:K},connected:Q,fileBus:U,homeDir:L,cwdBySession:l,onAddWorkspace:z,menuAddWorkspace:z,onOpenRemoteHost:A,onOpenMobileHost:I,treeCls:"pl-5",rowCls:"active:bg-surface-2 active:text-text"}):(0,n.jsx)(ix,{mobile:!0,host:{...e,onDisconnect:()=>P.rh.getState().disconnectHost(e.key)},actions:{...tw(e,{onSelectSession:i}),renameHost:_,deleteHost:K},connected:Q,onOpenRemoteHost:A,onOpenMobileHost:I,treeCls:"pl-5",rowCls:"active:bg-surface-2 active:text-text"})},e.key))})}),ed&&(0,n.jsx)(n6,{sessionId:ed.id,title:ed.name,busRef:et,onClose:()=>eu(null)}),em&&(0,n.jsx)(n1,{onClose:()=>ex(null),onCreate:(e,t,s,n,r,l)=>{o?.(e,em.workspaceId,t,r||null,s,n,l),ex(null)},shells:F,busRef:et,onResumeAgentSession:k,onSelectSession:i,liveSessionIds:ew,connected:Q,workspaceId:em.workspaceId,workspacePath:R.find(e=>e.id===em.workspaceId)?.path||null,workspaceName:R.find(e=>e.id===em.workspaceId)?.name||"",fileBus:U,homeDir:L,suggestName:`${q("terminal.defaultName")} ${(t=em.workspaceId,s.filter(e=>(0,ti.xs)(e)===t)).length+1}`}),ep&&(0,n.jsx)(lr,{onClose:()=>eh(!1)})]})}function dj(e){let{icon:t,iconClass:s="",label:r,onClick:l,disabled:a,className:i=""}=e;return(0,n.jsx)("button",{onClick:()=>{(0,eN.e)(),l()},disabled:a,title:r,className:`p-2 rounded-brand transition-colors active:scale-[0.96] ${a?"text-text-subtle cursor-not-allowed":`text-text-muted hover:text-text hover:bg-surface-2 ${i}`}`,children:(0,n.jsx)(t,{className:`w-5 h-5 ${s}`})})}function dk(e){let{onAddWorkspace:t,recent:s,homeDir:l,connected:a,isHostUi:i}=e,{t:o}=(0,eC.s)();(0,f.B)(e=>e.pushView);let[c,d]=(0,r.useState)(!1);return(0,n.jsxs)("div",{className:"empty-stage w-full h-full fade-in",children:[(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),t?.()},disabled:!a,className:"empty-half text-left active:opacity-80 enabled:active:scale-[0.99] transition-all duration-150 disabled:opacity-40 disabled:saturate-50",children:[(0,n.jsxs)("span",{className:"empty-idx",children:[(0,n.jsx)("b",{children:"01"})," / ",o("workspaces.emptyTagVibe")]}),(0,n.jsx)("span",{className:"empty-word login-hero-grad",children:o("workspaces.emptyWordVibe")}),(0,n.jsx)("span",{className:"empty-meta",dangerouslySetInnerHTML:{__html:o("workspaces.emptyMetaVibe")}}),(0,n.jsxs)("span",{className:"empty-go empty-go-strong",children:[o("workspaces.emptyGoVibe"),(0,n.jsx)(ev.Qp,{size:14,className:"text-white",strokeWidth:2.2})]}),!!s.length&&(0,n.jsx)("span",{className:"flex flex-wrap gap-1.5 mt-4 max-w-full",children:s.slice(0,3).map(e=>(0,n.jsx)("span",{role:"button",title:e.path,onClick:s=>{s.stopPropagation(),(0,eN.e)(),t?.(e.path)},className:"welcome-chip path-tail px-2 py-1 text-[11px] font-mono text-text-muted rounded-full truncate max-w-[46%]",children:cT(e.path)},e.path))})]}),i&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"empty-hairline","aria-hidden":!0}),(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),d(!0)},className:"empty-half text-left active:opacity-80 enabled:active:scale-[0.99] transition-all duration-150 disabled:opacity-40 disabled:saturate-50",children:[(0,n.jsxs)("span",{className:"empty-idx",children:[(0,n.jsx)("b",{children:"02"})," / ",o("workspaces.emptyTagPair")]}),(0,n.jsx)("span",{className:"empty-word login-hero-grad",children:o("workspaces.emptyWordPair")}),(0,n.jsx)("span",{className:"empty-meta",children:(0,n.jsx)(cE,{})}),(0,n.jsxs)("span",{className:"empty-go",children:[o("workspaces.emptyGoPair"),(0,n.jsx)(ev.Qp,{size:14,className:"text-brand-500",strokeWidth:2.2})]})]})]}),c&&(0,n.jsx)(lr,{onClose:()=>d(!1)})]})}let dN=(e,t,s)=>Math.max(t,Math.min(s,e));function dC(e){let{clientX:t,clientY:s,containerRect:n,pan:r,totalScale:l}=e;return{x:(t-n.left-r.x)/l,y:(s-n.top-r.y)/l}}function dS(e,t){return{x:Math.min(0,e.width-t.width),y:Math.min(0,e.height-t.height)}}function dT(e,t){return{x:dN(e.x,t.x,0),y:dN(e.y,t.y,0)}}function dE(e){let{prevZoom:t,prevPan:s,focal:n,nextZoomRaw:r,maxZoom:l,containerSize:a,displaySizeAt:i}=e,o=dN(r,1,l),c=o/t,d=dS(a,i(o));return{zoom:o,pan:dT({x:n.x-(n.x-s.x)*c,y:n.y-(n.y-s.y)*c},d)}}function dR(e){let{accum:t,delta:s,threshold:n,multiplier:r}=e,l=t+s;if(Math.abs(l)<n)return{accum:l,scroll:null};let a=Math.max(1,Math.round(Math.abs(l)*r));return{accum:0,scroll:l>0?a:-a}}function dM(e){let{emits:t,streaming:s,hostPlatform:n,storagePrefix:l="remoteDesktop",defaultPointerMode:a=c.eR.pointerMode,hoverMove:i=!1,wheelMultiplier:o,intercept:d,interceptKey:u,stageLockRef:m}=e,x=e=>`${l}.${e}`,[p,h]=sB(x("showTextPanel"),!0),[f,b]=sB(x("keyboard"),!1),[g,v]=sB(x("controlsHidden"),!1),[y,w]=sB(x("pointerMode"),a),[j,k]=sB(x("handMode"),!1),N=sD(),C=c.eR.pcModeControls,[S,T]=(0,r.useState)(!1);(0,r.useEffect)(()=>{let e=window.matchMedia("(orientation: landscape)"),t=()=>T(e.matches);return t(),e.addEventListener?.("change",t),()=>e.removeEventListener?.("change",t)},[]);let E=S&&Math.min(window.screen.width,window.screen.height)>=700;(0,r.useEffect)(()=>{"mouse"===N&&"direct"!==y&&w("direct")},[N,y,w]);let{emitRequestScreenWithHashes:R,emitMousePress:M,emitMouseRelease:$,emitMouseClick:z,emitMouseMove:P,emitMouseDragSelect:A,emitKeyPress:I,emitTypeText:D,emitScroll:L,emitBoostStream:B,emitSetFocus:F}=t,O={emitRequestScreenWithHashes:R,emitMousePress:M,emitMouseRelease:$,emitMouseClick:z,emitMouseMove:P,emitMouseDragSelect:A,emitKeyPress:I,emitTypeText:D,emitScroll:L,emitBoostStream:B},_=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{stageLockRef:t}=e,s=(0,r.useRef)(null),n=(0,r.useRef)(null),[l,a]=(0,r.useState)(1),[i,o]=(0,r.useState)({x:0,y:0}),[d,u]=(0,r.useState)(1),[m,x]=(0,r.useState)({width:0,height:0}),p=(0,r.useRef)({width:0,height:0}),h=(0,r.useRef)({x:0,y:0}),f=d*l,b=(0,r.useCallback)(()=>{let e=n.current;return e?{width:e.clientWidth,height:e.clientHeight}:null},[]),g=(0,r.useCallback)(e=>({width:m.width*e,height:m.height*e}),[m]),v=(0,r.useCallback)((e,t)=>{let r=s.current,a=n.current;return r&&a&&0!==r.width?function(e){let{canvasPoint:t,canvasWidth:s,canvasHeight:n}=e;return{percentX:dN(t.x/s*100,0,100),percentY:dN(t.y/n*100,0,100)}}({canvasPoint:dC({clientX:e,clientY:t,containerRect:a.getBoundingClientRect(),pan:i,totalScale:d*l}),canvasWidth:r.width,canvasHeight:r.height}):{percentX:0,percentY:0}},[i,l,d]),y=(0,r.useCallback)((e,t)=>{let s=d*l;s<=0||(h.current={x:(e-i.x)/s,y:(t-i.y)/s})},[d,l,i]),w=(0,r.useCallback)(()=>{a(1),o({x:0,y:0})},[]),j=(0,r.useCallback)(()=>o({x:0,y:0}),[]),k=(0,r.useCallback)((e,t)=>{let s=b();if(!s)return;let n=d*l;if(n<=0)return;let r=t||h.current,a=dS(s,g(l));o(t=>{if(!e||l<=1&&a.y>=0)return dT(t,a);let{y:i}=function(e){let{focus:t,containerHeight:s,totalScale:n}=e;return{y:s/3-t.y*n}}({focus:r,containerHeight:s.height,totalScale:n});return dT({x:t.x,y:i},a)})},[b,g,d,l]),N=(0,r.useCallback)(()=>{let e=n.current,r=s.current,l=p.current;if(!e||!r||0===l.width||0===l.height)return;let a=t?.current,i=a?.kbShrunk&&a.height?a.height:e.clientHeight,o={width:e.clientWidth,height:i};if(0===o.width||0===o.height)return;let c=Math.min(o.width/l.width,o.height/l.height);u(c),x({width:l.width*c,height:l.height*c})},[t]);(0,r.useEffect)(()=>{let e=null,t=null,s=()=>{let e=n.current;if(!e)return void N();let s=e.clientWidth,r=e.clientHeight,l=0,a=0,i=()=>{let n=e.clientWidth,o=e.clientHeight;if(n===s&&o===r){if(++l>=c.eR.resizeStableFrames){t=null,N();return}}else l=0,s=n,r=o;if(a++>=c.eR.resizeMaxFrames){t=null,N();return}t=requestAnimationFrame(i)};t=requestAnimationFrame(i)},r=()=>{e&&clearTimeout(e),t&&(cancelAnimationFrame(t),t=null),e=setTimeout(s,c.eR.resizeDebounceMs)};return window.addEventListener("resize",r),window.addEventListener("orientationchange",r),window.visualViewport&&window.visualViewport.addEventListener("resize",r),()=>{e&&clearTimeout(e),t&&cancelAnimationFrame(t),window.removeEventListener("resize",r),window.removeEventListener("orientationchange",r),window.visualViewport&&window.visualViewport.removeEventListener("resize",r)}},[N]),(0,r.useEffect)(()=>{o(e=>{let t=n.current;if(!t)return e;let s=dT(e,dS({width:t.clientWidth,height:t.clientHeight},{width:m.width*l,height:m.height*l}));return s.x===e.x&&s.y===e.y?e:s})},[m,l]);let C=(0,r.useCallback)((e,t)=>{p.current={width:e.width,height:e.height};let r=s.current,l=n.current;if(!r||!l)return!1;let a=r.width!==e.width||r.height!==e.height;r.width=e.width,r.height=e.height;let i=r.getContext("2d");return i.imageSmoothingEnabled=!1,a&&(i.clearRect(0,0,r.width,r.height),i.fillStyle="#2a2a2a",i.fillRect(0,0,r.width,r.height),t?.current&&t.current.clear()),N(),a},[N]);return{canvasRef:s,canvasContainerRef:n,canvasZoom:l,setCanvasZoom:a,canvasPan:i,setCanvasPan:o,fitScale:d,totalScale:f,baseCanvasSize:m,serverDimensionsRef:p,containerSize:b,displaySizeAt:g,getCanvasCoordinates:v,recordInteractPx:y,resetZoom:w,resetPan:j,panForKeyboard:k,handleCanvasDimensions:C,recalculateDisplaySize:N}}(t),{canvasRef:n,canvasContainerRef:l,canvasZoom:a,setCanvasZoom:i,canvasPan:o,setCanvasPan:d,fitScale:u,baseCanvasSize:m,containerSize:x,displaySizeAt:p,getCanvasCoordinates:h,recordInteractPx:f}=s,[b,g]=(0,r.useState)(!1),[v,y]=(0,r.useState)(!1),w=(0,r.useRef)(0),j=(0,r.useRef)({x:0,y:0}),[k,N]=(0,r.useState)(!1),C=(0,r.useRef)(null),[S,T]=(0,r.useState)(null),E=(0,r.useRef)(null),R=(0,r.useRef)(!1),M=(0,r.useRef)({x:0,y:0}),$=(0,r.useRef)(0),z=(0,r.useRef)({x:0,y:0}),[P,A]=(0,r.useState)(!1),I=(0,r.useRef)({x:0,y:0}),D=(0,r.useRef)({x:0,y:0}),L=(0,r.useRef)(0),B=(0,r.useRef)(null),[F,O]=(0,r.useState)({x:0,y:0}),_=(0,r.useRef)(0),K=(0,r.useRef)(0),W=(0,r.useRef)(null),H=(0,r.useRef)({time:0,distance:0,centerX:0,centerY:0}),q=(0,r.useRef)(!1),U=(0,r.useRef)(0),X=(0,r.useRef)(!1),V=(0,r.useRef)(null),G=(0,r.useRef)(!1),[J,Y]=(0,r.useState)(!1),Z=(0,r.useRef)(null),Q=(0,r.useRef)(!1),[ee,et]=(0,r.useState)(!1),es=(0,r.useRef)(null),en=(0,r.useRef)({x:0,y:0}),er=(0,r.useRef)(!1),el=(0,r.useRef)(null),ea=(0,r.useRef)(0),ei=(0,r.useCallback)((e,t)=>{let s=l.current;if(!s)return;let n=s.getBoundingClientRect(),r=e-n.left,i=t-n.top,o=dN(7.5*a,5,15);f(r,i),T({x:r,y:i,size:o}),setTimeout(()=>T(null),500)},[a,l,f]),eo=(0,r.useCallback)(()=>{E.current&&(clearTimeout(E.current),E.current=null)},[]),ec=(0,r.useCallback)((t,s,n,r)=>{eo(),R.current=!1,M.current={x:t,y:s},E.current=setTimeout(()=>{R.current=!0,ei(t,s),e?.emitMouseClick(n,r,"right")},c.eR.longPressDelay)},[eo,ei,e]),ed=(0,r.useCallback)((e,t)=>{let s=Date.now(),n=function(e){let{now:t,lastTime:s,lastPos:n,x:r,y:l,cfg:a}=e,i=Math.abs(r-n.x),o=Math.abs(l-n.y);return t-s<a.doubleClickDelay&&i<a.moveThreshold&&o<a.moveThreshold}({now:s,lastTime:$.current,lastPos:z.current,x:e,y:t,cfg:c.eR});return $.current=s,z.current={x:e,y:t},n},[]),eu=(0,r.useCallback)(()=>{B.current&&(cancelAnimationFrame(B.current),B.current=null),D.current={x:0,y:0},I.current={x:0,y:0},A(!1)},[]),em=(0,r.useCallback)(()=>{let t=()=>{var s,n;let r=(s=D.current,n=c.eR,Math.abs(s.y)<n.momentumMinVelocity?null:{scrollY:Math.round(s.y*n.edgeScrollMultiplier),nextVelocity:{x:s.x*n.momentumFriction,y:s.y*n.momentumFriction}});if(!r)return eu();Math.abs(r.scrollY)>=1&&e?.emitScroll(r.scrollY>0?"up":"down",Math.abs(r.scrollY),!1),D.current=r.nextVelocity,B.current=requestAnimationFrame(t)};B.current=requestAnimationFrame(t)},[e,eu]);(0,r.useEffect)(()=>()=>{eo(),eu()},[eo,eu]);let ex=(0,r.useCallback)(t=>{let{edgeScrollThreshold:s,edgeScrollMultiplier:n}=c.eR,r=dR({accum:I.current.y,delta:t,threshold:s,multiplier:n});I.current.y=r.accum,r.scroll&&e?.emitScroll(r.scroll>0?"up":"down",Math.abs(r.scroll),!1)},[e]),ep=(0,r.useCallback)(t=>{let{edgeScrollThreshold:s,edgeScrollMultiplier:n}=c.eR,r=dR({accum:I.current.x,delta:t,threshold:s,multiplier:n});I.current.x=r.accum,r.scroll&&e?.emitScroll(r.scroll>0?"right":"left",Math.abs(r.scroll),!0)},[e]),eh=(0,r.useCallback)((e,t)=>({percentX:dN(e.x/t.width*100,0,100),percentY:dN(e.y/t.height*100,0,100)}),[]),ef=(0,r.useCallback)(t=>{let s=n.current;if(!s||0===s.width)return;let{percentX:r,percentY:l}=eh(t,s);e?.emitMouseMove?.(r,l)},[e,n,eh]);(0,r.useEffect)(()=>{let t=t=>{if(null==es.current||t.pointerType&&"mouse"!==t.pointerType)return;let s=n.current,r=l.current;if(!s||!r)return;let{percentX:a,percentY:i}=h(t.clientX,t.clientY),o=es.current;es.current=null,e?.emitMouseRelease?.(a,i,o)};return window.addEventListener("pointerup",t),window.addEventListener("pointercancel",t),()=>{window.removeEventListener("pointerup",t),window.removeEventListener("pointercancel",t)}},[h,e,n,l]);let eb=(0,r.useCallback)((t,s,r)=>{let{streaming:m,pointerMode:f="direct"}=r;if(!m||!e)return;let S={canvasRef:n,canvasContainerRef:l,containerSize:x,displaySizeAt:p,getCanvasCoordinates:h,socketEmitFunctions:e,canvasZoom:a,fitScale:u,virtualCursor:F,canvasPan:o,setCanvasZoom:i,setCanvasPan:d,setVirtualCursor:O,isZooming:b,isPanning:v,isEdgeScrolling:P,recentZoomGesture:k,lastTouchDistanceRef:w,lastTouchCenterRef:j,setIsZooming:g,setIsPanning:y,setIsEdgeScrolling:A,setRecentZoomGesture:N,gestureLockRef:W,gestureStartRef:H,multiTouchLatchRef:q,twoFingerMaxMovedRef:U,touchOutsideRef:X,longPressTriggeredRef:R,touchStartPosRef:M,edgeScrollAccumRef:I,velocityRef:D,lastTouchTimeRef:L,touchStartTimeRef:_,touchTotalMoveRef:K,handLongPressTimerRef:V,handHoldingRef:G,setHandHolding:Y,scrollLongPressTimerRef:Z,scrollLockRef:Q,setScrollLock:et,mouseDownButtonRef:es,wheelAccumRef:en,wheelActiveRef:er,wheelEndTimerRef:el,wheelLastBoostRef:ea,zoomGestureTimeoutRef:C,showClickIndicator:ei,cancelLongPress:eo,startLongPress:ec,checkDoubleClick:ed,stopMomentum:eu,startMomentumScroll:em,emitScrollFromDelta:ex,emitHScrollFromDelta:ep,cursorPercent:eh,emitVirtualCursor:ef};if(t.nativeEvent?.pointerType==="mouse"||"wheel"===t.type||"contextmenu"===t.type||"dblclick"===t.type)return("wheel"===t.type||"contextmenu"===t.type)&&t.preventDefault(),function(e,t,s,n){let{socketEmitFunctions:r,getCanvasCoordinates:l,showClickIndicator:a}=e,{streaming:i,selectionMode:o,handleSelection:d}=n;if(!i||!r)return;let u=c.eR.mouseButtonMap[t.button]||"left";if("wheel"===s){var m,x;let{percentX:s,percentY:a}=l(t.clientX,t.clientY),i=(m=t.deltaMode,x=c.eR,1===m?x.wheelLineHeight:2===m?x.wheelPageHeight:1),o=t.deltaY*i,d=t.deltaX*i;if(t.ctrlKey||t.metaKey){let s=e.canvasContainerRef.current,n=e.canvasRef.current;if(!s||!n)return;let r=s.getBoundingClientRect(),l={x:t.clientX-r.left,y:t.clientY-r.top},a={width:s.clientWidth,height:s.clientHeight},i=o>0?-1:1;e.setCanvasZoom(t=>{let s=dN(t+i*c.eR.wheelZoomStep,1,4);return s===t?t:(e.setCanvasPan(n=>dE({prevZoom:t,prevPan:n,focal:l,nextZoomRaw:s,maxZoom:4,containerSize:a,displaySizeAt:e.displaySizeAt}).pan),s)});return}if(e.wheelActiveRef.current){let t=Date.now();t-e.wheelLastBoostRef.current>=c.eR.wheelBoostInterval&&(r.emitBoostStream?.(),e.wheelLastBoostRef.current=t)}else r.emitBoostStream?.(),r.emitMouseMove?.(s,a),e.wheelActiveRef.current=!0,e.wheelLastBoostRef.current=Date.now();e.wheelEndTimerRef.current&&clearTimeout(e.wheelEndTimerRef.current),e.wheelEndTimerRef.current=setTimeout(()=>{e.wheelActiveRef.current=!1,e.wheelAccumRef.current.x=0},150);let u=n.wheelMultiplier??c.eR.wheelScrollMultiplier;if(o&&e.emitScrollFromDelta(-o*u),d){let{edgeScrollThreshold:t,edgeScrollMultiplier:s}=c.eR,n=dR({accum:e.wheelAccumRef.current.x,delta:d*u,threshold:t,multiplier:s});e.wheelAccumRef.current.x=n.accum,n.scroll&&r.emitScroll?.(n.scroll>0?"right":"left",Math.abs(n.scroll),!0)}return}if("contextmenu"===s){let{percentX:e,percentY:s}=l(t.clientX,t.clientY);a(t.clientX,t.clientY),r.emitMouseClick?.(e,s,"right");return}if("dblclick"===s)return;if(o){"pointerdown"===s?d?.(t.clientX,t.clientY,"start"):"pointermove"===s&&null!=e.mouseDownButtonRef.current?d?.(t.clientX,t.clientY,"move"):"pointerup"===s&&(d?.(t.clientX,t.clientY,"end"),e.mouseDownButtonRef.current=null),"pointerdown"===s&&(e.mouseDownButtonRef.current=u);return}let{percentX:p,percentY:h}=l(t.clientX,t.clientY);if("pointerdown"===s){e.mouseDownButtonRef.current=u,a(t.clientX,t.clientY),r.emitMousePress?.(p,h,u);return}if("pointermove"===s){(null!=e.mouseDownButtonRef.current||n.hoverMove)&&r.emitMouseMove?.(p,h);return}if("pointerup"===s){let t=e.mouseDownButtonRef.current||u;e.mouseDownButtonRef.current=null,r.emitMouseRelease?.(p,h,t)}}(S,t,s,r);t.preventDefault(),t.type.startsWith("touch")&&t.touches?.length>=2&&(q.current=!0,Z.current&&(clearTimeout(Z.current),Z.current=null),Q.current&&(Q.current=!1,et(!1),I.current={x:0,y:0}),V.current&&(clearTimeout(V.current),V.current=null)),"trackpad"===f&&t.type.startsWith("touch")&&function(e,t,s,n){let r=e.canvasRef.current;if(!r||0===r.width)return!0;let{selectionMode:l,dragMode:a,isDragging:i,setIsDragging:o,setDragMode:d,handleSelection:u,handMode:m=!1,onHandRelease:x}=n;if(t.touches?.length>=2||!(!e.multiTouchLatchRef.current&&(t.touches?.length===1||"touchend"===s)))return!1;let p=t.touches?.[0]||t.changedTouches?.[0];if(!p)return!0;if("touch"===s){if(e.touchStartTimeRef.current=Date.now(),e.touchTotalMoveRef.current=0,e.lastTouchCenterRef.current={x:p.clientX,y:p.clientY},e.lastTouchTimeRef.current=Date.now(),l){let{percentX:t,percentY:s}=e.cursorPercent(e.virtualCursor,r);return u?.(0,0,"start",{...n,percentOverride:{percentX:t,percentY:s}}),!0}return m&&!e.handHoldingRef.current&&(e.handLongPressTimerRef.current&&clearTimeout(e.handLongPressTimerRef.current),e.handLongPressTimerRef.current=setTimeout(()=>{e.handLongPressTimerRef.current=null;let t=e.canvasRef.current;if(!t||0===t.width)return;let{percentX:s,percentY:n}=e.cursorPercent(e.virtualCursor,t);e.handHoldingRef.current=!0,e.setHandHolding(!0),(0,eN.e)(15),e.socketEmitFunctions.emitMousePress?.(s,n,"left")},c.eR.longPressDelay)),m||e.scrollLockRef.current||(e.scrollLongPressTimerRef.current&&clearTimeout(e.scrollLongPressTimerRef.current),e.scrollLongPressTimerRef.current=setTimeout(()=>{e.scrollLongPressTimerRef.current=null,e.scrollLockRef.current=!0,e.setScrollLock(!0),e.edgeScrollAccumRef.current={x:0,y:0},(0,eN.e)(15)},c.eR.longPressDelay)),!0}if("touchmove"===s){let t=p.clientX-e.lastTouchCenterRef.current.x,s=p.clientY-e.lastTouchCenterRef.current.y;if(e.touchTotalMoveRef.current+=Math.abs(t)+Math.abs(s),e.scrollLockRef.current)return e.emitScrollFromDelta(s),e.emitHScrollFromDelta(t),e.lastTouchCenterRef.current={x:p.clientX,y:p.clientY},e.lastTouchTimeRef.current=Date.now(),!0;e.scrollLongPressTimerRef.current&&e.touchTotalMoveRef.current>c.eR.trackpadTapMaxMove&&(clearTimeout(e.scrollLongPressTimerRef.current),e.scrollLongPressTimerRef.current=null);let a=Date.now(),i=function(e){let{deltaX:t,deltaY:s,dt:n,cfg:r}=e,l=Math.sqrt(t*t+s*s)/n,a=1+Math.min(r.trackpadAcceleration,l*r.trackpadAcceleration);return r.trackpadSensitivity*a}({deltaX:t,deltaY:s,dt:Math.max(1,a-e.lastTouchTimeRef.current),cfg:c.eR}),o=Math.max(1e-4,e.fitScale*e.canvasZoom),d=t*i/o,x=s*i/o;return l?e.setVirtualCursor(t=>{let s={x:dN(t.x+d,0,r.width-1),y:dN(t.y+x,0,r.height-1)},{percentX:l,percentY:a}=e.cursorPercent(s,r);return e.emitVirtualCursor(s),u?.(0,0,"move",{...n,percentOverride:{percentX:l,percentY:a}}),s}):(m&&!e.handHoldingRef.current&&e.handLongPressTimerRef.current&&e.touchTotalMoveRef.current>c.eR.trackpadTapMaxMove&&(clearTimeout(e.handLongPressTimerRef.current),e.handLongPressTimerRef.current=null),e.setVirtualCursor(t=>{let s={x:dN(t.x+d,0,r.width-1),y:dN(t.y+x,0,r.height-1)};if(e.emitVirtualCursor(s),e.handHoldingRef.current){let{percentX:t,percentY:n}=e.cursorPercent(s,r);e.socketEmitFunctions.emitMouseMove?.(t,n)}let n=e.containerSize(),l={width:r.width*o,height:r.height*o};if(n&&(e.canvasZoom>1||l.height>n.height||l.width>n.width)){let t=dS(n,l);e.setCanvasPan(e=>{let r=function(e){let{cursor:t,pan:s,containerSize:n,displaySize:r,totalScale:l,marginRatio:a}=e,i=n.width*a,o=n.height*a,c=t.x*l+s.x,d=t.y*l+s.y,u={x:0,y:0};return c<i?u.x=i-c:c>n.width-i&&(u.x=-(c-(n.width-i))),d<o?u.y=o-d:d>n.height-o&&(u.y=-(d-(n.height-o))),u}({cursor:s,pan:e,containerSize:n,displaySize:l,totalScale:o,marginRatio:c.eR.trackpadEdgeMarginRatio});return dT({x:e.x+r.x,y:e.y+r.y},t)})}return s})),e.lastTouchCenterRef.current={x:p.clientX,y:p.clientY},e.lastTouchTimeRef.current=a,!0}if("touchend"===s){if(l){let{percentX:t,percentY:s}=e.cursorPercent(e.virtualCursor,r);return u?.(0,0,"end",{...n,percentOverride:{percentX:t,percentY:s}}),!0}if(m){if(e.handLongPressTimerRef.current&&(clearTimeout(e.handLongPressTimerRef.current),e.handLongPressTimerRef.current=null),e.handHoldingRef.current){let{percentX:t,percentY:s}=e.cursorPercent(e.virtualCursor,r);e.socketEmitFunctions.emitMouseRelease?.(t,s,"left"),e.handHoldingRef.current=!1,e.setHandHolding(!1),x?.()}return!0}if(e.scrollLongPressTimerRef.current&&(clearTimeout(e.scrollLongPressTimerRef.current),e.scrollLongPressTimerRef.current=null),e.scrollLockRef.current)return e.scrollLockRef.current=!1,e.setScrollLock(!1),e.edgeScrollAccumRef.current={x:0,y:0},!0;let t=Date.now()-e.touchStartTimeRef.current;if(e.touchTotalMoveRef.current<=c.eR.trackpadTapMaxMove&&t<=c.eR.trackpadTapMaxDuration){let{percentX:t,percentY:s}=e.cursorPercent(e.virtualCursor,r),n=e.checkDoubleClick(e.virtualCursor.x,e.virtualCursor.y);a?i?(o(!1),d(!1),e.socketEmitFunctions.emitMouseRelease(t,s,"left")):(o(!0),e.socketEmitFunctions.emitMousePress(t,s,"left")):e.socketEmitFunctions.emitMouseClick(t,s,"left",n)}return!0}return!1}(S,t,s,r)||function(e,t,s,n){let r,l,{selectionMode:a,selectionStart:i,dragMode:o,isDragging:d,setIsDragging:u,setDragMode:m,isMobile:x,handleSelection:p,pointerMode:h="direct"}=n;if(t.type.startsWith("touch")&&t.touches?.length>=2&&!a){var f;let n,r,l,a=(n=(f=t.touches)[0].clientX-f[1].clientX,Math.sqrt(n*n+(r=f[0].clientY-f[1].clientY)*r)),i={x:((l=t.touches)[0].clientX+l[1].clientX)/2,y:(l[0].clientY+l[1].clientY)/2};if("touch"===s){e.setIsZooming(!0),e.lastTouchDistanceRef.current=a,e.lastTouchCenterRef.current=i,e.gestureLockRef.current=null,e.gestureStartRef.current={time:Date.now(),distance:a,centerX:i.x,centerY:i.y},e.twoFingerMaxMovedRef.current=0;return}if("touchmove"===s&&e.isZooming){let t=e.canvasContainerRef.current;if(!t)return;if(null===e.gestureLockRef.current){let t=Date.now()-e.gestureStartRef.current.time,s=Math.abs(a-e.gestureStartRef.current.distance),n=Math.sqrt((i.x-e.gestureStartRef.current.centerX)**2+(i.y-e.gestureStartRef.current.centerY)**2);e.twoFingerMaxMovedRef.current=Math.max(e.twoFingerMaxMovedRef.current,s,n),e.gestureLockRef.current=function(e){let{elapsed:t,deltaDistance:s,deltaCentroid:n,cfg:r}=e,l=s>=r.gestureDistanceThreshold,a=n>=r.gestureCentroidThreshold;if(!l&&!a&&t<r.gestureLockDelay)return null;let i=n>.5?s/n:1/0;return i>=r.gestureDominanceRatio&&l?"zoom":i<=1/r.gestureDominanceRatio&&a?"scroll":l&&!a?"zoom":a&&!l?"scroll":null}({elapsed:t,deltaDistance:s,deltaCentroid:n,cfg:c.eR})}if("scroll"===e.gestureLockRef.current){let t=i.y-e.lastTouchCenterRef.current.y;if(!e.isEdgeScrolling){let t=e.canvasRef.current,s="trackpad"===h&&t&&t.width>0?e.cursorPercent(e.virtualCursor,t):e.getCanvasCoordinates(i.x,i.y);e.socketEmitFunctions?.emitBoostStream?.(),e.socketEmitFunctions?.emitMouseMove?.(s.percentX,s.percentY),e.setIsEdgeScrolling(!0)}e.emitScrollFromDelta(t),e.lastTouchDistanceRef.current=a,e.lastTouchCenterRef.current=i;return}if("zoom"===e.gestureLockRef.current&&e.lastTouchDistanceRef.current>0){let s=t.getBoundingClientRect(),n={width:t.clientWidth,height:t.clientHeight},r={x:i.x-s.left,y:i.y-s.top},l=e.canvasZoom*(a/e.lastTouchDistanceRef.current);e.setCanvasPan(t=>dE({prevZoom:e.canvasZoom,prevPan:t,focal:r,nextZoomRaw:l,maxZoom:4,containerSize:n,displaySizeAt:e.displaySizeAt}).pan),e.setCanvasZoom(dN(l,1,4)),e.lastTouchDistanceRef.current=a}e.lastTouchCenterRef.current=i;return}}if(t.type.startsWith("touch")&&t.touches?.length===1){let n=t.touches[0];if(e.isZooming){e.lastTouchCenterRef.current={x:n.clientX,y:n.clientY};return}if("touch"===s){if(e.lastTouchCenterRef.current={x:n.clientX,y:n.clientY},e.lastTouchTimeRef.current=Date.now(),e.velocityRef.current={x:0,y:0},e.edgeScrollAccumRef.current={x:0,y:0},e.stopMomentum(),e.touchOutsideRef.current=!function(e,t,s){let n=e.canvasRef.current,r=e.canvasContainerRef.current;if(!n||!r||0===n.width)return!1;let l=dC({clientX:t,clientY:s,containerRect:r.getBoundingClientRect(),pan:e.canvasPan,totalScale:e.fitScale*e.canvasZoom});return l.x>=0&&l.x<=n.width&&l.y>=0&&l.y<=n.height}(e,n.clientX,n.clientY),a)p(n.clientX,n.clientY,"start");else if(!o&&!e.touchOutsideRef.current){let{percentX:t,percentY:s}=e.getCanvasCoordinates(n.clientX,n.clientY);e.startLongPress(n.clientX,n.clientY,t,s)}return}if("touchmove"===s){let t=Math.abs(n.clientX-e.touchStartPosRef.current.x),s=Math.abs(n.clientY-e.touchStartPosRef.current.y);if((t>c.eR.moveThreshold||s>c.eR.moveThreshold)&&e.cancelLongPress(),a&&i)return p(n.clientX,n.clientY,"move");if(!a&&!o){let t=n.clientX-e.lastTouchCenterRef.current.x,s=n.clientY-e.lastTouchCenterRef.current.y,r=Date.now(),l=r-e.lastTouchTimeRef.current;if(l>0&&(e.velocityRef.current={x:t/l*16,y:s/l*16},e.lastTouchTimeRef.current=r),Math.abs(t)>5||Math.abs(s)>5){e.cancelLongPress();let r=e.getCanvasCoordinates(n.clientX,n.clientY),l=Math.abs(s)>1.5*Math.abs(t),a=t=>{l&&(e.isEdgeScrolling||(e.socketEmitFunctions?.emitBoostStream?.(),e.socketEmitFunctions?.emitMouseMove?.(r.percentX,r.percentY),e.setIsEdgeScrolling(!0)),e.emitScrollFromDelta(t))},i=e.containerSize()||{width:0,height:0},o=e.displaySizeAt(e.canvasZoom);if(!(o.width>i.width||o.height>i.height)&&1===e.canvasZoom){l&&a(s),e.lastTouchCenterRef.current={x:n.clientX,y:n.clientY};return}e.setIsPanning(!0),e.setCanvasPan(n=>{let r=function(e){let{prevPan:t,deltaX:s,deltaY:n,containerSize:r,displaySize:l}=e,a=dS(r,l),i=dT({x:t.x+s,y:t.y+n},a),o=Math.abs(i.y-t.y)>.5?0:t.y+n-i.y;return{pan:i,overflowY:o}}({prevPan:n,deltaX:t,deltaY:s,containerSize:i,displaySize:o});return Math.abs(r.overflowY)>0?a(r.overflowY):(e.edgeScrollAccumRef.current.y=0,e.setIsEdgeScrolling(!1)),r.pan}),e.lastTouchCenterRef.current={x:n.clientX,y:n.clientY}}return}}}if("touchend"===s){if(e.cancelLongPress(),"trackpad"===h&&e.isZooming&&0===(t.touches?.length||0)&&null===e.gestureLockRef.current&&Date.now()-e.gestureStartRef.current.time<=c.eR.trackpadTapMaxDuration&&e.twoFingerMaxMovedRef.current<=c.eR.trackpadTapMaxMove){let t=e.canvasRef.current;if(t&&t.width>0&&e.socketEmitFunctions?.emitMouseClick){let{percentX:s,percentY:n}=e.cursorPercent(e.virtualCursor,t);e.socketEmitFunctions.emitMouseClick(s,n,"right"),(0,eN.e)(15)}}e.gestureLockRef.current=null,0===(t.touches?.length||0)&&(e.multiTouchLatchRef.current=!1);let s=e.isZooming,n=e.isPanning,r=e.isEdgeScrolling,l=e.longPressTriggeredRef.current;if(e.longPressTriggeredRef.current=!1,s&&(e.setRecentZoomGesture(!0),e.zoomGestureTimeoutRef.current&&clearTimeout(e.zoomGestureTimeoutRef.current),e.zoomGestureTimeoutRef.current=setTimeout(()=>e.setRecentZoomGesture(!1),200)),r&&(Math.abs(e.velocityRef.current.x)>c.eR.momentumMinVelocity||Math.abs(e.velocityRef.current.y)>c.eR.momentumMinVelocity)?e.startMomentumScroll():e.stopMomentum(),e.setIsZooming(!1),e.setIsPanning(!1),s||n||r||e.recentZoomGesture||l)return;if(t.type.startsWith("touch")){let s=t.changedTouches?.[0];if(s){if(a)p(s.clientX,s.clientY,"end");else if(!e.touchOutsideRef.current){let{percentX:t,percentY:n}=e.getCanvasCoordinates(s.clientX,s.clientY);if(e.showClickIndicator(s.clientX,s.clientY),o)d?(u(!1),m(!1),e.socketEmitFunctions.emitMouseRelease(t,n,"left")):(u(!0),e.socketEmitFunctions.emitMousePress(t,n,"left"));else{let r=e.checkDoubleClick(s.clientX,s.clientY);e.socketEmitFunctions.emitMouseClick(t,n,"left",r)}}}}return}if(e.isZooming||e.isPanning)return;if(t.type.startsWith("touch")){if(t.touches?.length!==1)return;r=t.touches[0].clientX,l=t.touches[0].clientY}else r=t.clientX,l=t.clientY;let{percentX:b,percentY:g}=e.getCanvasCoordinates(r,l);if("click"===s)if(a)p(r,l,i?"end":"start");else if(e.showClickIndicator(r,l),o)d?(u(!1),m(!1),e.socketEmitFunctions.emitMouseRelease(b,g,"left")):(u(!0),e.socketEmitFunctions.emitMousePress(b,g,"left"));else{let t=e.checkDoubleClick(r,l);e.socketEmitFunctions.emitMouseClick(b,g,"left",t)}else if("move"===s&&!x){if(a&&i)return p(r,l,"move");e.socketEmitFunctions.emitMouseMove(b,g)}}(S,t,s,r)},[b,v,P,a,k,u,F,o,h,ei,e,eo,ec,ed,eu,em,ef,ex,ep,n,l,x,p,d,i,eh]);(0,r.useEffect)(()=>{let e=n.current;e&&0!==e.width&&O(t=>0===t.x&&0===t.y?{x:e.width/2,y:e.height/2}:t)},[m,n]);let eg=(0,r.useCallback)(()=>{let e=n.current,t=x();if(!e||!t||0===e.width)return;let s=u*a;s<=0||O({x:dN((t.width/2-o.x)/s,0,e.width-1),y:dN((t.height/2-o.y)/s,0,e.height-1)})},[u,a,o,n,x]),ev=(0,r.useCallback)(()=>{let t=n.current;if(!t||0===t.width||G.current)return;V.current&&(clearTimeout(V.current),V.current=null);let{percentX:s,percentY:r}=eh(F,t);G.current=!0,Y(!0),(0,eN.e)(15),e?.emitBoostStream?.(),e?.emitMousePress?.(s,r,"left")},[F,e,n,eh]),ey=(0,r.useCallback)(()=>{if(!G.current)return;let t=n.current,s=t&&t.width>0?F.x/t.width*100:0,r=t&&t.height>0?F.y/t.height*100:0;e?.emitMouseRelease?.(s,r,"left"),G.current=!1,Y(!1)},[F,e,n]);return{canvasRef:n,canvasContainerRef:l,canvasZoom:a,canvasPan:o,fitScale:u,baseCanvasSize:m,zoomGestureTimeoutRef:C,clickIndicator:S,virtualCursor:F,handHolding:J,scrollLock:ee,getCanvasCoordinates:h,resetZoom:s.resetZoom,resetPan:s.resetPan,panForKeyboard:s.panForKeyboard,centerVirtualCursor:eg,startHandHold:ev,releaseHandHold:ey,handleCanvasInteraction:eb,handleCanvasDimensions:s.handleCanvasDimensions,serverDimensionsRef:s.serverDimensionsRef,recalculateDisplaySize:s.recalculateDisplaySize}}(O,{stageLockRef:m}),{canvasRef:K,canvasContainerRef:W,canvasZoom:H,canvasPan:q,fitScale:U,getCanvasCoordinates:X,centerVirtualCursor:V,startHandHold:G,releaseHandHold:J,handleCanvasInteraction:Y,baseCanvasSize:Z}=_,Q=(0,r.useCallback)(()=>{w(e=>{let t="trackpad"===e?"direct":"trackpad";return"trackpad"===t&&V(),t})},[V,w]),ee=function(e){let[t,s]=(0,r.useState)(""),[n,l]=(0,r.useState)(!1),[a,i]=(0,r.useState)(!1),o=(0,r.useRef)(null),[d,u]=(0,r.useState)({ctrl:!1,cmd:!1,alt:!1,shift:!1}),[m,x]=(0,r.useState)(!1),[p,h]=(0,r.useState)(null),[f,b]=(0,r.useState)(null),[g,v]=(0,r.useState)(!1),[y,w]=(0,r.useState)(!1),j=(0,r.useRef)(null);(0,r.useEffect)(()=>{let e=()=>{let e=window.innerWidth<=768||/Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);return l(e),e},t=()=>{e()?i((window.visualViewport?.height||window.innerHeight)<.75*window.screen.height):i(!1)};return e(),window.addEventListener("resize",t),window.visualViewport&&window.visualViewport.addEventListener("resize",t),()=>{window.removeEventListener("resize",t),window.visualViewport&&window.visualViewport.removeEventListener("resize",t)}},[]),(0,r.useEffect)(()=>()=>{j.current&&clearInterval(j.current)},[]);let k=(0,r.useCallback)(e=>{u(t=>({...t,[e]:!t[e]})),n&&o.current&&o.current.focus()},[n]),N=(0,r.useCallback)(()=>{x(e=>!e),h(null),b(null)},[]),C=(0,r.useCallback)(()=>{v(e=>!e),y&&w(!1)},[y]),S=(0,r.useCallback)(()=>{},[]),T=(0,r.useCallback)((t,s)=>{if(!s||!e?.emitKeyPress)return;let n=t.key;if("Shift"===n||"Control"===n||"Meta"===n||"Alt"===n)return;"F12"!==n&&t.preventDefault();let r=[];t.ctrlKey&&r.push("control"),t.metaKey&&r.push("command"),t.altKey&&r.push("alt"),t.shiftKey&&r.push("shift");let l=Object.keys(d).filter(e=>d[e]);for(let e of l){let t=c.tC[e];t&&!r.includes(t)&&r.push(t)}let a=c.FO[n]??(1===n.length?n:n.toLowerCase());e.emitKeyPress(a,r),l.length>0&&u({ctrl:!1,cmd:!1,alt:!1,shift:!1})},[d,e]),E=(0,r.useCallback)(function(t,s){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];s&&e?.emitScroll&&(j.current&&clearInterval(j.current),e.emitScroll(t,20,r),j.current=setInterval(()=>{e?.emitScroll&&s&&e.emitScroll(t,20,r)},c.eR.scrollInterval),n&&o.current&&a&&setTimeout(()=>o.current?.focus(),10))},[n,a,e]),R=(0,r.useCallback)(e=>E("up",e),[E]),M=(0,r.useCallback)(e=>E("down",e),[E]),$=(0,r.useCallback)(e=>E("left",e,!0),[E]),z=(0,r.useCallback)(e=>E("right",e,!0),[E]),P=(0,r.useCallback)(()=>{j.current&&(clearInterval(j.current),j.current=null)},[]),A=sv(e=>e.addCommand),I=(0,r.useCallback)(n=>{if(!n||!e?.emitTypeText)return;if(!t.trim())return void e.emitKeyPress?.("enter",[]);let r=document.activeElement===o.current;e.emitTypeText(t),A(t),s(""),r&&o.current?.focus()},[t,e,o,A]),D=(0,r.useRef)(""),L=(0,r.useRef)(null),B=(0,r.useCallback)((t,n)=>{n&&t&&e?.emitTypeText&&(D.current+=t,s(""),L.current&&clearTimeout(L.current),L.current=setTimeout(()=>{let t=D.current;D.current="",L.current=null,t&&e.emitTypeText(t)},150))},[e]),F=(0,r.useCallback)(t=>{if(!e?.emitKeyPress)return;let s=Object.keys(d).filter(e=>d[e]),n=s.map(e=>c.tC[e]);e.emitKeyPress(t,n),s.length>0&&u({ctrl:!1,cmd:!1,alt:!1,shift:!1})},[d,e]),O=(0,r.useCallback)(e=>{e&&(F("backspace"),n&&o.current&&a&&o.current.focus())},[n,a,F]),_=(0,r.useCallback)((e,t)=>{t&&(F(e),n&&o.current&&a&&o.current.focus())},[n,a,F]),K=(0,r.useCallback)(e=>{e&&(F("escape"),n&&o.current&&a&&o.current.focus())},[n,a,F]),W=(0,r.useCallback)(e=>{e&&(F("tab"),n&&o.current&&a&&o.current.focus())},[n,a,F]),H=(0,r.useCallback)((e,t)=>{t&&(F("enter"),e&&e.preventDefault(),n&&o.current&&a&&o.current.focus())},[n,a,F]),q=(0,r.useCallback)((t,s,n,r)=>{let{streaming:l,getCanvasCoordinates:a,baseCanvasSize:i,canvasZoom:o,canvasPan:c,percentOverride:d}=r;if(!m||!l||!e?.emitMouseDragSelect)return;let{percentX:u,percentY:f}=d||a(t,s);if("start"===n)h({x:u,y:f}),b(null);else if("move"===n&&p){let e=i.width*o,t=i.height*o;b({x:Math.min(p.x,u)*e/100+c.x,y:Math.min(p.y,f)*t/100+c.y,width:Math.abs(u-p.x)*e/100,height:Math.abs(f-p.y)*t/100})}else"end"===n&&p&&(e.emitMouseDragSelect(p.x,p.y,u,f),setTimeout(()=>{h(null),x(!1),b(null)},500))},[m,p,e]),U=(0,r.useCallback)(function(n,r){let l=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!r||!e?.emitTypeText||!e?.emitKeyPress)return;let a=n.key.toLowerCase();if(["shift","control","meta","alt"].includes(a)||"Unidentified"===n.key||229===n.keyCode)return;let i=Object.keys(d).filter(e=>d[e]),o=i.length>0,m=n.ctrlKey||n.metaKey||n.altKey||n.shiftKey;if(l){n.preventDefault();let t=i.map(e=>c.tC[e]);n.ctrlKey&&!t.includes("control")&&t.push("control"),n.metaKey&&!t.includes("command")&&t.push("command"),n.altKey&&!t.includes("alt")&&t.push("alt"),n.shiftKey&&!t.includes("shift")&&t.push("shift"),c.FO[a]?a=c.FO[a]:" "===a?a="space":1===n.key.length&&(a=n.key),e.emitKeyPress(a,t),o&&u({ctrl:!1,cmd:!1,alt:!1,shift:!1}),s("");return}if("Enter"===n.key){n.preventDefault(),t.trim()&&(e.emitTypeText(t),A(t),s(""));return}let x=/^[a-z0-9]$/i.test(n.key);if((o||m)&&(!x||o)){n.preventDefault();let t=i.map(e=>c.tC[e]);n.ctrlKey&&!t.includes("control")&&t.push("control"),n.metaKey&&!t.includes("command")&&t.push("command"),n.altKey&&!t.includes("alt")&&t.push("alt"),n.shiftKey&&!t.includes("shift")&&t.push("shift"),c.FO[a]?a=c.FO[a]:" "===a&&(a="space"),e.emitKeyPress(a,t),u({ctrl:!1,cmd:!1,alt:!1,shift:!1}),s("")}},[d,t,e,A]);return{textInputValue:t,setTextInputValue:s,textInputRef:o,keyboardVisible:a,modifierKeys:d,selectionMode:m,selectionStart:p,selectionRect:f,dragMode:g,isDragging:y,setIsDragging:w,setDragMode:v,toggleModifierKey:k,toggleSelectionMode:N,toggleDragMode:C,handleTextInputFocus:S,handleCanvasKeyPress:T,startScrollUp:R,startScrollDown:M,startScrollLeft:$,startScrollRight:z,stopScrolling:P,sendTextInput:I,sendBackspace:O,sendArrowKey:_,sendEscKey:K,sendTabKey:W,sendEnterKey:H,handleSelection:q,handleModifiedTextInput:U,handleDirectInputChange:B,emitKeyWithActiveModifiers:F}}(O),{textInputRef:et,selectionMode:es,selectionStart:en,dragMode:er,isDragging:el,setIsDragging:ea,setDragMode:ei,toggleSelectionMode:eo,handleCanvasKeyPress:ec,handleSelection:ed,emitKeyWithActiveModifiers:eu}=ee,em=function(e){let{streaming:t,keyboardOn:s,setKeyboardOn:n,showTextPanel:l,setShowTextPanel:a,textInputRef:i,canvasContainerRef:o,panForKeyboard:c,pointerMode:d,virtualCursor:u}=e,m=(0,r.useRef)(s);(0,r.useEffect)(()=>{m.current=s},[s]);let x=(0,r.useCallback)(()=>{let e=!s;m.current=e,n(e),e?i.current?.focus():i.current?.blur()},[s]),p=(0,r.useRef)(!1);(0,r.useEffect)(()=>{t&&!p.current&&m.current&&(p.current=!0,i.current?.focus())},[t]);let h=(0,r.useCallback)(()=>{let e=!l;!e&&s&&i.current?.focus(),a(e)},[l,s]),f=(0,r.useCallback)(()=>{m.current&&!l&&setTimeout(()=>i.current?.focus(),0)},[l]),b=(0,r.useRef)(null);return(0,r.useEffect)(()=>{b.current="trackpad"===d?u:null},[d,u]),(0,r.useEffect)(()=>{let e=window.visualViewport;if(!e)return;let t=e.height,s=0,n=()=>{let n=e.height<t;t=e.height;let r=o.current;if(!r)return;let l=r.clientHeight;cancelAnimationFrame(s);let a=0,i=()=>{r.clientHeight!==l||a++>30?c(n,b.current):s=requestAnimationFrame(i)};s=requestAnimationFrame(i)};return e.addEventListener("resize",n),()=>{cancelAnimationFrame(s),e.removeEventListener("resize",n)}},[o,c]),{keyboardOnRef:m,toggleKeyboard:x,toggleTextPanel:h,handleTextInputBlur:f}}({streaming:s,keyboardOn:f,setKeyboardOn:b,showTextPanel:p,setShowTextPanel:h,textInputRef:et,canvasContainerRef:W,panForKeyboard:_.panForKeyboard,pointerMode:y,virtualCursor:_.virtualCursor}),ex=(0,r.useCallback)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];s&&(t.length>0?I(e,r&&"darwin"===n?t.map(e=>"control"===e?"command":e):t):eu(e))},[s,n,I,eu]),ep=(0,r.useCallback)(()=>{k(e=>{let t=!e;return t?(es&&eo(),G()):J(),t})},[k,es,eo,G,J]);(0,r.useEffect)(()=>{if(!s||!F)return;let e=setTimeout(()=>{let e=K.current,t=W.current;if(!e||!t||0===e.width)return;if(H<=1)return void F(null,1);let s=U*H;if(s<=0)return;let n=Math.max(0,-q.x/s),r=Math.max(0,-q.y/s),l=Math.min(e.width-n,t.clientWidth/s),a=Math.min(e.height-r,t.clientHeight/s);F({x:Math.floor(n),y:Math.floor(r),w:Math.ceil(l),h:Math.ceil(a)},H)},c.eR.focusDebounce);return()=>clearTimeout(e)},[s,H,q,U,K,W,F]);let eh=(0,r.useCallback)(()=>k(!1),[k]),ef=(0,r.useCallback)(()=>{j&&k(!1),eo()},[j,k,eo]);return{..._,...ee,...em,streaming:s,inputMode:N,show:e=>"mouse"!==N||C?.[e],tallLandscape:E,pointerMode:y,handMode:j,keyboardOn:f,showTextPanel:p,controlsHidden:g,setControlsHidden:v,togglePointerMode:Q,toggleHandMode:ep,handleToggleSelection:ef,emitKeyDirect:ex,interactionHandler:e=>t=>{d?.(t,e)||Y(t,e,{streaming:s,selectionMode:es,selectionStart:en,dragMode:er,isDragging:el,setIsDragging:ea,setDragMode:ei,isMobile:e.includes("touch"),pointerMode:y,handMode:j,hoverMove:i,wheelMultiplier:o,onHandRelease:eh,handleSelection:(e,t,n,r)=>ed(e,t,n,{streaming:s,getCanvasCoordinates:X,baseCanvasSize:Z,canvasZoom:H,canvasPan:q,...r})})},onCanvasKeyDown:e=>{u?.(e)||ec(e,s)},emitRequestScreenWithHashes:R,recalculateDisplaySize:_.recalculateDisplaySize}}let d$=!!window.chrome,dz=e=>new Blob([e]),dP=(e,t)=>()=>{e.current[t]=null},dA=null,dI=0,dD=new Map;async function dL(e){if("u"<typeof createImageBitmap)return null;if(d$)return createImageBitmap(e);let t=new Image,s=URL.createObjectURL(e);t.src=s,await t.decode();let n=await createImageBitmap(t);return URL.revokeObjectURL(s),n}function dB(e,t,n){let{ackEvent:l="tile-ack",verifyEvent:a="request-screen-with-hashes",targetId:i=null,resetWorker:o=!0}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},[d,u]=(0,r.useState)(126),[m,x]=(0,r.useState)(!1),p=(0,r.useRef)(new Set),h=(0,r.useRef)(new Map),f=(0,r.useRef)([]),b=(0,r.useRef)(!1),g=(0,r.useRef)(0),v=(0,r.useRef)(new Set),y=(0,r.useRef)(new Set),w=(0,r.useRef)(new Map),j=(0,r.useRef)(new Map),k=(0,r.useRef)(null),N=(0,r.useRef)(t);(0,r.useEffect)(()=>{N.current=t},[t]);let C=(0,r.useCallback)(()=>{k.current=null;let t=n?.current;if(!t)return void j.current.clear();let s=t.getContext("2d"),r=0;for(let[e,t]of j.current){let{bitmap:n,x:l,y:a,width:i,height:o,frameTs:c,invalidateTileHash:d}=t;if((w.current.get(e)??c)>c){n?.close?.();continue}try{s.drawImage(n,l,a,i,o),p.current.add(e),x(!0),c>r&&(r=c),n?.close?.()}catch{d()}}if(j.current.clear(),r>0){let t=i?{targetId:i,ts:r}:{ts:r};e?.current?.emit(l,t)}},[n,e,l,i]),S=(0,r.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e&&k.current&&(cancelAnimationFrame(k.current),k.current=null),k.current||(k.current=requestAnimationFrame(C))},[C]),T=(0,r.useCallback)(e=>{if(n?.current)try{let t=n.current.getContext("2d");t.imageSmoothingEnabled=!1;let s=new Image;s.onload=()=>{if(n?.current)try{t.drawImage(s,0,0,e.screen.width,e.screen.height),p.current.clear();for(let e=0;e<d;e++)p.current.add(e);x(!0)}catch(e){}},s.src=e.screen.imageBase64}catch(e){console.error("Full screen error:",e)}},[n,d]),E=(0,r.useCallback)(e=>{if(n?.current)try{if(n.current.getContext("2d"),g.current=Date.now(),e.currentHashes&&Array.isArray(e.currentHashes)&&(f.current=e.currentHashes,b.current=!1),!e.tiles?.length)return;let t=e.timestamp||Date.now();for(let s of e.tiles){let e=h.current.get(s.tileIndex),n=w.current.get(s.tileIndex)??0;t>=n&&(e?.controller&&(e.controller.cancelled=!0),w.current.set(s.tileIndex,t),null!=s.hash&&(f.current[s.tileIndex]=s.hash))}if(void 0!==e.hasBitmap){for(let s of e.tiles){if(!s.bitmap&&!s.imageBuffer)continue;if((w.current.get(s.tileIndex)??t)>t){s.bitmap?.close?.();continue}let e=dP(f,s.tileIndex);s.bitmap?j.current.set(s.tileIndex,{bitmap:s.bitmap,x:s.x,y:s.y,width:s.width,height:s.height,frameTs:t,invalidateTileHash:e}):dL(dz(s.imageBuffer)).then(n=>{n&&(j.current.set(s.tileIndex,{bitmap:n,x:s.x,y:s.y,width:s.width,height:s.height,frameTs:t,invalidateTileHash:e}),S(!0))}).catch(()=>{e()})}S(!0);return}let s=[];for(let t=0;t<e.tiles.length;t+=c.eR.batchSize)s.push(e.tiles.slice(t,t+c.eR.batchSize));s.forEach((e,s)=>{let r=setTimeout(()=>{v.current.delete(r),e.forEach(e=>{if(!e.imageBuffer&&!e.imageBase64)return;if((w.current.get(e.tileIndex)??t)>t)return void h.current.delete(e.tileIndex);let s={cancelled:!1};h.current.set(e.tileIndex,{controller:s});let r=setTimeout(()=>{s.cancelled=!0,h.current.delete(e.tileIndex),f.current[e.tileIndex]=null},c.eR.tileLoadTimeout),l=dP(f,e.tileIndex),a=a=>{s.cancelled||!n?.current?a?.close?.():(clearTimeout(r),h.current.delete(e.tileIndex),j.current.set(e.tileIndex,{bitmap:a,x:e.x,y:e.y,width:e.width,height:e.height,frameTs:t,invalidateTileHash:l}),S())};if(e.imageBuffer&&"u">typeof createImageBitmap)dL(dz(e.imageBuffer)).then(a).catch(()=>{if(s.cancelled)return;let t=new Image,n=URL.createObjectURL(dz(e.imageBuffer));t.onload=()=>{a(t),URL.revokeObjectURL(n)},t.onerror=()=>{URL.revokeObjectURL(n),clearTimeout(r),h.current.delete(e.tileIndex),l()},t.src=n});else{let t=new Image;if(e.imageBuffer){let s=URL.createObjectURL(dz(e.imageBuffer));t.onload=()=>{a(t),URL.revokeObjectURL(s)},t.onerror=()=>{URL.revokeObjectURL(s),clearTimeout(r),h.current.delete(e.tileIndex),l()},t.src=s}else t.onload=()=>a(t),t.onerror=()=>{clearTimeout(r),h.current.delete(e.tileIndex),l()},t.src=`data:image/jpeg;base64,${e.imageBase64}`}})},s*c.eR.batchDelay);v.current.add(r)})}catch(e){console.error("Tiles data error:",e)}},[n,S]),R=(0,r.useCallback)(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"ws";if(!e)return;let r=e instanceof ArrayBuffer?e:e?.buffer;if(!r)return;let l=function(){if(!1===dA)return null;if(dA)return dA;try{return(dA=new Worker(s.tu(new URL(s.p+s.u(8534),s.b)))).onmessage=e=>{let{data:{tiles:t,timestamp:s,id:n,hasBitmap:r,error:l}}=e,a=dD.get(n);if(!a){if(t)for(let e of t)e.bitmap?.close?.();return}clearTimeout(a.timer),dD.delete(n),a.resolve(l?null:{tiles:t,timestamp:s,hasBitmap:r})},dA}catch{return dA=!1,null}}();if(!l)return;let a=r.byteLength,i=++dI;new Promise(e=>{let s=setTimeout(()=>{dD.has(i)&&(dD.delete(i),e(null))},c.eR.tileLoadTimeout),n=c.eR.decodeQueueCap;for(;dD.size>=n;){let e=dD.keys().next().value,t=dD.get(e);if(!t)break;clearTimeout(t.timer),dD.delete(e),t.resolve(null)}dD.set(i,{resolve:e,timer:s}),l.postMessage({buffer:r,id:i,v:t},[r])}).then(e=>{e&&(2===t&&(b.current=!1),E({tiles:e.tiles,timestamp:e.timestamp,hasBitmap:e.hasBitmap,bytes:a,transport:n}))})},[E]),M=(0,r.useCallback)(e=>R(e,1,"ws"),[R]),$=(0,r.useCallback)(e=>R(e,2,"ws"),[R]),z=(0,r.useCallback)(e=>{e&&(g.current=Date.now(),e.currentHashes&&Array.isArray(e.currentHashes)&&(f.current=e.currentHashes,b.current=!1))},[]),P=(0,r.useCallback)(e=>{e()},[]),A=(0,r.useCallback)(e=>{e.tileCount&&u(e.tileCount)},[]),I=(0,r.useCallback)(()=>{if(!e?.current||!N.current||b.current||0===f.current.length||Date.now()-g.current<c.eR.lastDataThreshold)return;b.current=!0;let t=i?{targetId:i,tileHashes:f.current}:{tileHashes:f.current};e.current.emit(a,t);let s=setTimeout(()=>{y.current.delete(s),b.current=!1},1e3);y.current.add(s)},[e,a,i]),D=(0,r.useCallback)(()=>{for(let[,e]of h.current.entries())e.controller&&(e.controller.cancelled=!0);h.current.clear(),f.current=[],p.current.clear(),w.current.clear(),g.current=0,b.current=!1,x(!1),o&&function(){if(dA&&!1!==dA)try{dA.terminate()}catch{}for(let e of(dA=null,dD.values()))try{e.resolve(null)}catch{}dD.clear()}(),k.current&&(cancelAnimationFrame(k.current),k.current=null),j.current.clear()},[o]);return(0,r.useEffect)(()=>{let e=v.current,t=y.current;return()=>{e.forEach(clearTimeout),e.clear(),t.forEach(clearTimeout),t.clear()}},[]),{renderedTilesRef:p,totalTileCount:d,hasFrame:m,handleFullScreenData:T,handleTilesData:E,handleTilesBinary:M,handleTilesBinaryV2:$,handleTilesMeta:z,startStreamingWithTiles:P,handleScreenDimensions:A,cleanupTiles:D,requestScreenWithHashes:I,clientTileHashesRef:f,tileTimestampRef:w}}let dF={fps:0,latency:0,tilesPerSec:0,bandwidthMBps:0,webrtcTiles:0,wsTiles:0,webrtcPercent:0};function dO(){let[e,t]=(0,r.useState)(""),[s,n]=(0,r.useState)(!1),l=(0,r.useRef)(null),a=(0,r.useCallback)((e,s)=>{s&&s===l.current||(l.current=s||null,t(e||""),n(!0))},[]);return(0,r.useEffect)(()=>{if(!s)return;let e=setTimeout(()=>n(!1),c.eR.clipboardBadgeTimeout);return()=>clearTimeout(e)},[s,e]),{text:e,isNew:s,setNew:n,push:a}}function d_(e){let{list:t,activeIndex:s,onSelect:r}=e;if(!Array.isArray(t)||t.length<=1)return null;let l=e=>e.stopPropagation();return(0,n.jsx)("div",{className:"absolute bottom-1.5 right-1.5 z-40 flex gap-1.5",children:t.map(e=>{let t=e.index===s,a=`${e.index+1}`;return(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),r?.(e.index)},onMouseDown:e=>e.preventDefault(),onPointerDown:l,onPointerUp:l,onPointerMove:l,onTouchStart:l,onTouchMove:l,onTouchEnd:l,onWheel:l,className:`px-1.5 py-0.5 rounded-md text-xs font-medium backdrop-blur-md border transition-colors inline-flex items-center gap-1 ${t?"bg-blue-500/70 text-white border-blue-400/70":"bg-black/30 text-white/80 border-white/10 hover:bg-black/50"}`,title:`${e.name} (${e.width}\xd7${e.height})`,children:[(0,n.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2"}),(0,n.jsx)("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),(0,n.jsx)("line",{x1:"12",y1:"17",x2:"12",y2:"21"})]}),a]},e.index)})})}function dK(e){let{canvasRef:t,canvasContainerRef:s,canvasZoom:l,canvasPan:a,fitScale:i,streaming:o,hasFrame:d=!0,selectionRect:u,clickIndicator:m,pointerMode:x,selectionMode:p,handMode:h,handHolding:f,scrollLock:b,virtualCursor:g,cursorShape:v,inputMode:y,keyboardOn:w,monitors:j,activeMonitorIndex:k,onSelectMonitor:N,onPointerDown:C,onPointerMove:S,onPointerUp:T,onWheel:E,onContextMenu:R,onDoubleClick:M,onTouchStart:$,onTouchMove:z,onTouchEnd:P,onKeyDown:A,screenLocked:I,unlockReady:D,unlockResult:L,onUnlockSubmit:B,cursorOverride:F,children:O}=e,_=i*l,K="mouse"===y,{t:W}=(0,eC.s)(),[H,q]=(0,r.useState)(!1),[U,X]=(0,r.useState)(""),[V,G]=(0,r.useState)(!1),[J,Y]=(0,r.useState)(!1);(0,r.useEffect)(()=>{I||(X(""),G(!1))},[I]),(0,r.useEffect)(()=>{L&&G(!1)},[L]);let Z={ew:"cursor-ew-resize",ns:"cursor-ns-resize",nwse:"cursor-nwse-resize",nesw:"cursor-nesw-resize",all:"cursor-move"},Q=p?"cursor-crosshair":h?f?"cursor-grabbing":"cursor-grab":K&&H?"cursor-grabbing":K&&v&&Z[v]?Z[v]:"trackpad"===x?"cursor-grab active:cursor-grabbing":"cursor-default",ee=(0,r.useRef)(E);return(0,r.useEffect)(()=>{ee.current=E},[E]),(0,r.useEffect)(()=>{let e=t.current;if(!e)return;let s=e=>ee.current?.(e);return e.addEventListener("wheel",s,{passive:!1}),()=>e.removeEventListener("wheel",s)},[t]),(0,r.useEffect)(()=>{K&&o&&t.current?.focus()},[t,K,o]),(0,r.useEffect)(()=>{if(!H)return;let e=()=>q(!1);return window.addEventListener("pointerup",e),window.addEventListener("pointercancel",e),window.addEventListener("blur",e),()=>{window.removeEventListener("pointerup",e),window.removeEventListener("pointercancel",e),window.removeEventListener("blur",e)}},[H]),(0,n.jsxs)("div",{className:"w-full h-full overflow-hidden relative flex-1",children:[(0,n.jsxs)("div",{className:"absolute inset-0",ref:s,style:{touchAction:"none"},onTouchStart:$,onTouchMove:z,onTouchEnd:P,children:[(0,n.jsx)("canvas",{ref:t,className:`block ${Q} bg-black outline-none`,style:{touchAction:"none",cursor:F,transformOrigin:"top left",userSelect:"none",WebkitUserSelect:"none",WebkitTouchCallout:"none",WebkitTapHighlightColor:"transparent",transform:`translate3d(${a.x}px, ${a.y}px, 0) scale(${_})`,imageRendering:"auto",willChange:"transform"},onPointerDown:e=>{w&&"mouse"!==e.pointerType&&e.preventDefault();let s=document.activeElement;if(s?.name==="remote-batch-input")if(w){let e=document.querySelector('textarea[name="remote-keyboard-sink"]');e?.focus()}else s.blur();K&&(t.current?.focus(),"mouse"===e.pointerType&&q(!0)),C?.(e)},onPointerMove:S,onPointerUp:e=>{K&&"mouse"===e.pointerType&&q(!1),T?.(e)},onDoubleClick:M,onContextMenu:R,tabIndex:0,onKeyDown:A}),o&&!d&&!I&&(0,n.jsx)("div",{className:"absolute inset-0 z-20 flex items-center justify-center pointer-events-none",children:(0,n.jsxs)("div",{className:"flex items-center gap-2 px-3 py-1.5 rounded-full bg-black/60 text-white/80 text-[11px] font-mono",children:[(0,n.jsx)(ev.kr,{size:12,className:"animate-spin"}),W("remote.receivingImage",{defaultValue:"Receiving screen…"})]})}),u&&(0,n.jsx)("div",{className:"absolute border-2 border-blue-400 bg-blue-400/20 z-10",style:{left:`${u.x}px`,top:`${u.y}px`,width:`${u.width}px`,height:`${u.height}px`}}),"trackpad"===x&&g&&(0,n.jsx)("div",{className:"absolute pointer-events-none z-30",style:{left:`${g.x*_+a.x}px`,top:`${g.y*_+a.y}px`,width:`${c.eR.trackpadCursorSize}px`,height:`${c.eR.trackpadCursorSize}px`,transform:v||h||b||p?"translate(-50%, -50%)":"translate(-2px, -2px)"},children:b?(0,n.jsx)("div",{className:"w-full h-full flex items-center justify-center text-yellow-400 drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]",style:{fontSize:`${c.eR.trackpadCursorSize}px`,lineHeight:1},children:"✥"}):p?(0,n.jsx)("svg",{viewBox:"0 0 24 24",className:"w-full h-full text-yellow-400 drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]",children:(0,n.jsx)("path",{d:"M12 3 V21 M3 12 H21",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})}):h?(0,n.jsx)("div",{className:"w-full h-full flex items-center justify-center drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]",style:{fontSize:`${c.eR.trackpadCursorSize}px`,lineHeight:1},children:f?"✊":"✋"}):v?(0,n.jsx)("svg",{viewBox:"0 0 24 24",className:"w-full h-full drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]",style:{transform:`rotate(${"ns"===v?90:"nwse"===v?45:"nesw"===v?-45:0}deg)`},children:"all"===v?(0,n.jsx)("path",{d:"M12 3 V21 M3 12 H21 M8 6 L12 2 L16 6 M8 18 L12 22 L16 18 M6 8 L2 12 L6 16 M18 8 L22 12 L18 16",fill:"#ffffff",stroke:"#000000",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round"}):(0,n.jsx)("path",{d:"M3 12 H21 M7 8 L3 12 L7 16 M17 8 L21 12 L17 16",fill:"#ffffff",stroke:"#000000",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round"})}):(0,n.jsx)("svg",{viewBox:"0 0 24 24",className:"w-full h-full drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]",children:(0,n.jsx)("path",{d:"M4 2 L4 18 L8.5 14 L11 20 L14 18.5 L11.5 13 L18 12.5 Z",fill:"#ffffff",stroke:"#000000",strokeWidth:"1.2",strokeLinejoin:"round"})})}),m&&(0,n.jsxs)("div",{className:"absolute pointer-events-none z-20",style:{left:`${m.x-m.size/2}px`,top:`${m.y-m.size/2}px`,width:`${m.size}px`,height:`${m.size}px`},children:[(0,n.jsx)("div",{className:"w-full h-full rounded-full border-2 border-blue-400 bg-blue-400/30 animate-ping"}),(0,n.jsx)("div",{className:"absolute inset-0 w-full h-full rounded-full border-2 border-blue-400 bg-blue-400/50"})]})]}),O,(0,n.jsx)(d_,{list:j,activeIndex:k,onSelect:N}),I&&(0,n.jsx)("div",{className:"absolute inset-0 z-10 flex items-center justify-center",style:{background:"radial-gradient(circle at 50% 40%, rgba(40,60,140,0.55) 0%, rgba(10,12,30,0.92) 60%, rgba(0,0,0,0.96) 100%)"},children:(0,n.jsx)("div",{className:"w-full max-w-[300px] mx-4 rounded-2xl p-5 shadow-2xl backdrop-blur-md",style:{background:"rgba(20,22,40,0.85)",border:"1px solid rgba(120,140,220,0.25)"},children:D?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"flex flex-col items-center gap-2 mb-4",children:[(0,n.jsx)("div",{className:"w-12 h-12 rounded-full flex items-center justify-center",style:{background:"rgba(120,140,220,0.18)"},children:(0,n.jsx)(ev.LM,{size:26,color:"#a9b8ff"})}),(0,n.jsx)("h3",{className:"text-base font-semibold text-white",children:W("remote.lockTitle")}),(0,n.jsx)("p",{className:"text-xs text-center",style:{color:"rgba(220,225,245,0.7)"},children:W("remote.lockDesc")})]}),(0,n.jsxs)("div",{className:"relative",children:[(0,n.jsx)("input",{type:J?"text":"password",value:U,autoFocus:!0,disabled:V,onChange:e=>X(e.target.value),onKeyDown:e=>{"Enter"===e.key&&U&&!V&&(G(!0),B?.(U))},placeholder:W("remote.lockPlaceholder"),className:"w-full rounded-xl px-4 py-2 pr-11 text-sm text-white focus:outline-none focus:border-blue-400",style:{background:"rgba(255,255,255,0.08)",border:"1px solid rgba(120,140,220,0.35)"}}),(0,n.jsx)("button",{type:"button",onClick:()=>Y(e=>!e),tabIndex:-1,className:"absolute right-2 top-1/2 -translate-y-1/2 p-1.5 rounded-lg",style:{color:"rgba(220,225,245,0.7)"},"aria-label":J?"Hide password":"Show password",children:J?(0,n.jsx)(ev.X_,{size:18}):(0,n.jsx)(ev.kU,{size:18})})]}),(0,n.jsx)("button",{type:"button",disabled:!U||V,onClick:()=>{G(!0),B?.(U)},className:"w-full mt-2.5 rounded-xl py-2.5 text-sm font-semibold text-white transition-opacity disabled:opacity-40",style:{background:"linear-gradient(135deg, #4a6cf7 0%, #6b8aff 100%)"},children:W(V?"remote.unlocking":"remote.unlock")}),L&&!L.ok&&(0,n.jsx)("p",{className:"mt-3 text-xs text-center text-red-300",children:W("remote.unlockFailed")})]}):(0,n.jsxs)("div",{className:"flex flex-col items-center gap-2 text-center",children:[(0,n.jsx)("div",{className:"w-12 h-12 rounded-full flex items-center justify-center",style:{background:"rgba(120,140,220,0.18)"},children:(0,n.jsx)(ev.LM,{size:26,color:"#a9b8ff"})}),(0,n.jsx)("h3",{className:"text-base font-semibold text-white",children:W("remote.lockTitle")}),(0,n.jsx)("p",{className:"text-xs",style:{color:"rgba(220,225,245,0.85)"},children:W("remote.lockGrantDesc")})]})})})]})}var dW=s(56156);function dH(e){let{active:t,primary:s,pinned:r,children:l,className:a="",onClick:i,...o}=e;return(0,n.jsx)("button",{type:"button",onPointerDown:e=>e.preventDefault(),onMouseDown:e=>e.preventDefault(),onClick:i,className:`shrink-0 px-1 h-8 rounded-brand text-xs font-semibold shadow-sm disabled:opacity-50 disabled:cursor-not-allowed min-w-[34px] flex items-center justify-center ${t?"bg-brand-500 text-white shadow-sm transition-all duration-150 ease-out active:scale-[0.94]":r?"bg-brand-500/15 hover:bg-brand-500/25 text-brand-400 transition-all duration-150 ease-out active:scale-[0.94]":s?"bg-green-600 hover:bg-green-700 text-white shadow-sm transition-all duration-150 ease-out active:scale-[0.94]":"bg-surface-2 hover:bg-surface-3 text-text transition-all duration-150 ease-out active:scale-[0.94]"} ${a}`,style:{touchAction:"manipulation",WebkitTapHighlightColor:"transparent"},...o,children:l})}let dq=function(e){for(var t=arguments.length,s=Array(t>1?t-1:0),n=1;n<t;n++)s[n-1]=arguments[n];(0,eN.e)(),e?.(...s)};function dU(e){let t,s,l,a,{streaming:i,canvasZoom:o,clipboardNew:d,clipboardText:u,onOpenClipboard:m,selectionMode:x,pointerMode:p,handMode:h,inputMode:f,onToggleHandMode:b,onTogglePointerMode:g,modifierKeys:v,textInputValue:y,textInputRef:w,keyboardOn:j,showTextPanel:k,onResetZoom:N,onRefresh:C,onToggleSelection:S,onToggleModifier:T,onToggleKeyboard:E,onToggleTextPanel:R,onToggleHelp:M,onToggleDebug:$,debugOn:z,onEmitKey:P,onTextInputChange:A,onTextInputFocus:I,onTextInputBlur:D,onTextInputKeyDown:L,onDirectInputChange:B,onSendText:F,onClose:O,onDesktopSwitch:_,controlsHidden:K,onToggleControlsHidden:W,tallLandscape:H,transparent:q=!1}=e,{t:U,locale:X}=(0,eC.s)(),V=(0,r.useRef)(null),[G]=s$(X),[J,Y]=(0,r.useState)(!1),Z=sA({lang:sR(G),onText:e=>{A(e);let t=V.current;t&&requestAnimationFrame(()=>{try{t.selectionStart=t.selectionEnd=t.value.length}catch{}t.scrollTop=t.scrollHeight})}});(0,r.useEffect)(()=>{let e=V.current;e&&!window.matchMedia("(orientation: landscape)").matches&&(e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,72)}px`)},[y]);let Q=()=>{Z.listening&&Z.stop(),dq(F,i)},ee=`flex gap-1.5 overflow-auto scroll-thin-x py-0.5 pr-2 ${H?"":"landscape:flex-wrap landscape:overflow-y-auto landscape:overflow-x-hidden landscape:py-2 landscape:pr-0 landscape:content-center landscape:justify-center"} rounded-lg`,[et,es]=(0,r.useState)(!1),[en,er]=(0,r.useState)(!1),[el,ea]=(0,r.useState)(0);(0,r.useEffect)(()=>{if(!d)return void ea(0);ea(Math.ceil(c.eR.clipboardBadgeTimeout/1e3));let e=setInterval(()=>{ea(e=>e<=1?0:e-1)},1e3);return()=>clearInterval(e)},[d,u]);let ei=sF("remoteDesktop.bottomKeys",c.ij,c.D5,"flat"),eo=sF("remoteDesktop.extraKeys",c.ij,c.I9,"grid");(0,r.useEffect)(()=>{if(!k)return;let e=setTimeout(()=>V.current?.focus(),350);return()=>clearTimeout(e)},[k]);let ec=c.eR.pcModeControls,ed=e=>"mouse"!==f||ec[e],eu=window.innerWidth<768,em=function(e,t){let s=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",l=e.label.length>1?"text-[11px]":"",a=`${r} ${l}`.trim();if("modifier"===e.type)return(0,n.jsx)(dH,{onClick:()=>dq(T,e.modifier),disabled:!i,active:v[e.modifier],pinned:s,className:a,children:e.label},e.id+t);if("desktop"===e.type){if(!_)return null;let r="prev"===e.direction?ev.JG:"next"===e.direction?ev.c_:ev.FW;return(0,n.jsxs)(dH,{onClick:()=>dq(_,e.direction),disabled:!i,pinned:s,className:a,title:`${e.direction} desktop`,children:[(0,n.jsx)(ev.VA,{size:12}),(0,n.jsx)(r,{size:"new"===e.direction?10:12,className:"-ml-0.5"})]},e.id+t)}return(0,n.jsx)(dH,{onClick:()=>dq(P,e.key,e.modifiers||[],e.osAdaptive),disabled:!i,primary:!s&&e.primary,pinned:s,className:a,children:e.label},e.id+t)};return(0,n.jsxs)("div",{className:`${q?"":"bg-bg"} select-none relative landscape:flex landscape:flex-col landscape:shrink-0 ${H||K?"":"landscape:h-full landscape:justify-end"} ${K?"landscape:w-12":H?"landscape:w-full landscape:pl-12":"landscape:w-64"}`,children:[(0,n.jsx)("textarea",{ref:w,rows:1,value:y,onChange:e=>{j?B?.(e.target.value):A(e.target.value)},onKeyDown:L,onFocus:I,onBlur:D,"aria-hidden":"true",autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-lpignore":"true","data-1p-ignore":"true","data-form-type":"other",name:"remote-keyboard-sink",style:{position:"absolute",opacity:.01,width:1,height:1,border:0,padding:0,left:0,top:0,fontSize:16,resize:"none",pointerEvents:"none",zIndex:-1}}),(0,n.jsx)("div",{className:`absolute top-1 right-1 z-30 ${K||H?"hidden":"hidden landscape:flex"}`,children:(0,n.jsx)(dH,{onClick:()=>{(0,eN.e)(),W?.(!0)},title:U("remote.hideControls"),children:(0,n.jsx)(ev.X_,{size:14})})}),(0,n.jsxs)("div",{className:K?"landscape:hidden":"contents",children:[(0,n.jsxs)("div",{className:`${k?"flex":"hidden"} landscape:flex ${H?"":"landscape:flex-col"} relative z-30 px-2 py-1 gap-2 ${H?"landscape:px-0":"landscape:gap-1 landscape:order-last"}`,children:[(0,n.jsxs)("div",{className:"relative flex-1",children:[(0,n.jsx)(sT,{value:y,store:sv,isMobile:eu,onSelect:e=>{A(e),V.current?.focus()}}),(0,n.jsx)("textarea",{ref:V,rows:1,cols:1,value:y,onChange:e=>A(e.target.value),onFocus:I,onKeyDown:e=>{"mouse"===f&&"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),i&&Q())},placeholder:"mouse"===f?U("remoteControls.enterToSend"):U("remoteControls.typeToSend"),autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-lpignore":"true","data-1p-ignore":"true","data-form-type":"other",name:"remote-batch-input",className:`block w-full px-3 py-2 pr-8 bg-surface-2 rounded text-text text-sm placeholder-text-muted focus:outline-none focus:ring-2 focus:ring-brand-500/40 transition-all duration-150 ease-out resize-none overflow-y-auto ${H?"":"landscape:!h-16"}`,disabled:!i}),y?(0,n.jsx)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>{A(""),V.current?.focus()},title:U("voice.clear"),className:"absolute right-1.5 top-1.5 w-5 h-5 flex items-center justify-center text-text-muted hover:text-text transition-colors",children:(0,n.jsx)(ev.X,{size:14})}):(0,n.jsx)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>Y(!0),title:U("history.title"),className:"absolute right-1.5 top-1.5 w-5 h-5 flex items-center justify-center text-text-muted hover:text-text transition-colors",children:(0,n.jsx)(ev.BZ,{size:14})})]}),(0,n.jsxs)("div",{className:"flex gap-2 items-center justify-end",children:[Z.active&&(0,n.jsx)("div",{className:"relative shrink-0",children:(0,n.jsx)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>{Z.listening?Z.stop():(document.activeElement?.blur(),Z.start(y))},disabled:!i,title:"not-allowed"===Z.error||"service-not-allowed"===Z.error?U("voice.denied"):U("voice.dictate"),className:`h-9 w-9 flex items-center justify-center rounded-full transition-all duration-150 ease-out disabled:opacity-40 ${Z.listening?"bg-red-500/90 text-white animate-pulse":Z.error?"bg-surface-2 text-red-400":"bg-surface-2 hover:bg-surface-3 text-text-muted hover:text-text"}`,children:Z.listening?(0,n.jsx)(ev.jj,{size:18}):(0,n.jsx)(ev.GO,{size:18})})}),(0,n.jsx)(dW.A,{variant:"primary",size:"sm",className:"!px-2.5 shrink-0",onMouseDown:e=>e.preventDefault(),onClick:Q,disabled:!i,children:y.trim()?U("remoteControls.send"):(0,n.jsx)(ev.Lt,{size:16,strokeWidth:2.5})})]})]}),(0,n.jsx)("div",{className:`overflow-hidden transition-all duration-300 ${et?"max-h-56 opacity-100":"hidden"}`,children:(0,n.jsx)("div",{className:"px-2 py-1",children:(0,n.jsx)("div",{className:"space-y-1",children:eo.rows.map((e,t)=>(0,n.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,n.jsx)("div",{className:"flex-1 min-w-0 flex gap-1.5 overflow-x-auto scroll-thin-x pr-3 rounded-lg",children:e.map((e,s)=>{let n=c.ij.find(t=>t.id===e);return n?em(n,100*t+s):null})}),0===t&&(0,n.jsx)("button",{onMouseDown:e=>e.preventDefault(),onClick:()=>{(0,eN.e)(),er(!0)},className:"shrink-0 h-10 w-10 flex items-center justify-center text-text-muted hover:text-text bg-surface-2 hover:bg-surface-3 rounded-brand transition-all duration-150 ease-out",title:U("remote.customizeKeys"),children:(0,n.jsx)(ev.wB,{size:16})}),t>0&&(0,n.jsx)("div",{className:"shrink-0 h-10 w-10"})]},t))})})}),(0,n.jsxs)("div",{className:"flex items-center gap-1.5 px-2 py-1 landscape:hidden",children:[(0,n.jsxs)("div",{className:`${ee} flex-1 min-w-0 px-0 py-0 landscape:py-0`,children:[O&&(0,n.jsx)(dH,{onClick:()=>dq(O),title:U("remote.back"),pinned:!0,className:"landscape:hidden",children:(0,n.jsx)(ev.JG,{size:16})}),d&&u?(0,n.jsxs)(dH,{onClick:()=>dq(m),className:"!text-red-500 landscape:hidden",title:U("common.clipboard"),children:[(0,n.jsx)(ev.Ir,{size:14,className:"shrink-0"}),(0,n.jsx)("span",{className:"tabular-nums",children:el})]}):(0,n.jsxs)(dH,{onClick:()=>dq(N),disabled:!i,className:"text-text landscape:hidden",title:U("remote.resetZoom"),children:[Math.round(100*o),"%"]}),(0,n.jsx)(dH,{onClick:()=>dq(C),disabled:!i,title:U("remote.refresh"),className:"landscape:hidden",children:(0,n.jsx)(ev.e9,{size:14})}),ed("rectangleSelect")&&(0,n.jsx)(dH,{onClick:()=>dq(S),disabled:!i,active:x,title:U("remote.rectangleSelection"),className:"landscape:hidden",children:"□"}),ed("pointerModeToggle")&&(0,n.jsx)(dH,{onClick:()=>dq(g),disabled:!i,active:"trackpad"===p,title:"trackpad"===p?U("remoteControls.trackpadMode"):U("remoteControls.directMode"),className:"landscape:hidden",children:(0,n.jsx)("span",{className:"text-base leading-none",children:"\uD83D\uDDB1️"})}),ed("handMode")&&"trackpad"===p&&(0,n.jsx)(dH,{onClick:()=>dq(b),disabled:!i,active:h,title:U("remote.handMode"),className:"landscape:hidden",children:(0,n.jsx)(ev.Ud,{size:14})}),ed("keyboardToggle")&&(0,n.jsx)(dH,{onClick:()=>dq(E),disabled:!i,active:j,title:U("remote.toggleKeyboard"),className:"landscape:hidden",children:(0,n.jsx)(ev.s3,{size:14})}),ed("textPanel")&&(0,n.jsx)(dH,{onClick:()=>dq(R),disabled:!i,active:k,title:U("remote.textBatchInput"),className:"landscape:hidden",children:"Aa"}),ed("help")&&(0,n.jsx)(dH,{onClick:()=>dq(M),title:U("remote.help"),className:"landscape:hidden",children:(0,n.jsx)(ev.mN,{size:14})})]}),(0,n.jsx)(dH,{onClick:()=>{(0,eN.e)(),es(e=>!e)},active:et,pinned:!0,className:"landscape:hidden shrink-0",title:U("remote.extraKeys"),children:et?(0,n.jsx)(ev.X,{size:16}):(0,n.jsx)(ev.a4,{size:16})})]}),ed("modifierRow")&&(t=ei.keys.filter(e=>e.id!==c.Ic),s=c.ij.find(e=>e.id===c.Ic),l=(0,n.jsx)(dH,{onClick:()=>{(0,eN.e)(),es(e=>!e)},active:et,pinned:!0,title:U("remote.extraKeys"),children:et?(0,n.jsx)(ev.X,{size:16}):(0,n.jsx)(ev.a4,{size:16})}),a=s?em(s,"pinned",!0):null,(0,n.jsxs)("div",{className:`px-2 py-1 ${"mouse"===f?"":"safe-area-bottom"} ${H?"landscape:px-0":"landscape:py-2"}`,children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5 landscape:hidden",children:[(0,n.jsx)("div",{className:`${ee} flex-1 min-w-0`,children:t.map((e,t)=>em(e,t))}),a]}),(0,n.jsxs)("div",{className:`${ee} hidden ${H?"landscape:flex":""}`,children:[t.map((e,t)=>em(e,t)),l,a]}),(0,n.jsxs)("div",{className:`hidden ${H?"":"landscape:flex"} landscape:flex-col gap-1`,children:[(0,n.jsxs)("div",{className:"flex gap-1.5 overflow-x-auto scroll-thin-x",children:[t.slice(0,5).map((e,t)=>em(e,t)),l]}),(0,n.jsxs)("div",{className:"flex gap-1.5 overflow-x-auto scroll-thin-x",children:[t.slice(5).map((e,t)=>em(e,t)),a]})]})]}))]}),(0,n.jsxs)("div",{className:`flex-col gap-1.5 p-1.5 ${K?"hidden landscape:flex":"hidden"}`,children:[(0,n.jsx)(dH,{onClick:()=>{(0,eN.e)(),W?.(!1)},title:U("remote.showControls"),children:(0,n.jsx)(ev.kU,{size:16})}),(0,n.jsx)(dH,{onClick:()=>dq(E),disabled:!i,active:j,title:U("remote.toggleKeyboard"),children:(0,n.jsx)(ev.s3,{size:16})})]}),(0,n.jsx)(sH,{isOpen:en,onClose:()=>er(!1),title:U("remote.customizeRemoteKeys"),tabs:[{id:"bottom",label:U("remoteControls.bottomRow"),hook:ei,excludeIds:[c.Ic]},{id:"extra",label:U("remoteControls.extraPanel"),hook:eo}]}),(0,n.jsx)(sj,{isOpen:J,store:sv,onSelect:e=>{A(e),V.current?.focus()},onClose:()=>Y(!1)})]})}let dX="bg-surface-2 hover:bg-surface-3 text-text",dV="bg-surface-2 hover:bg-surface-3 text-text-muted hover:text-text",dG="bg-brand-500 text-white";function dJ(e){let{onClick:t,title:s,disabled:r,className:l,children:a}=e;return(0,n.jsx)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>{(0,eN.e)(),t()},disabled:r,title:s,className:`shrink-0 w-9 h-9 rounded-brand flex items-center justify-center transition-all duration-150 active:scale-[0.94] ${l} ${r?"disabled:opacity-50":""}`,children:a})}function dY(e){let{streaming:t,canvasZoom:s,pointerMode:r,handMode:l,keyboardOn:a,selectionMode:i,show:o,onBack:c,onRefresh:d,onResetZoom:u,onTogglePointerMode:m,onToggleHandMode:x,onToggleKeyboard:p,onShowHelp:h,onToggleSelection:f}=e,{t:b}=(0,eC.s)();return(0,n.jsxs)("div",{className:"hidden landscape:flex flex-col items-center gap-1.5 py-2 px-1 bg-bg shrink-0 landscape:w-12 z-20",children:[c&&(0,n.jsx)(dJ,{onClick:c,title:b("remote.back"),className:"bg-brand-500/15 hover:bg-brand-500/25 text-brand-400",children:(0,n.jsx)(ev.JG,{size:18})}),(0,n.jsx)(dJ,{onClick:d,disabled:!t,title:b("remote.refresh"),className:dV,children:(0,n.jsx)(ev.e9,{size:16})}),(0,n.jsxs)(dJ,{onClick:u,disabled:!t,title:b("remote.resetZoom"),className:`text-[10px] font-semibold ${dX}`,children:[Math.round(100*s),"%"]}),o("pointerModeToggle")&&(0,n.jsx)(dJ,{onClick:m,disabled:!t,title:b("trackpad"===r?"remoteControls.trackpadMode":"remoteControls.directMode"),className:`text-base leading-none ${"trackpad"===r?dG:dX}`,children:"\uD83D\uDDB1️"}),o("handMode")&&"trackpad"===r&&(0,n.jsx)(dJ,{onClick:x,disabled:!t,title:b("remote.handMode"),className:l?dG:dX,children:(0,n.jsx)(ev.Ud,{size:16})}),o("keyboardToggle")&&(0,n.jsx)(dJ,{onClick:p,disabled:!t,title:b("remote.toggleKeyboard"),className:a?dG:dV,children:(0,n.jsx)(ev.s3,{size:16})}),o("help")&&(0,n.jsx)(dJ,{onClick:h,title:b("remote.help"),className:dV,children:(0,n.jsx)(ev.mN,{size:16})}),o("rectangleSelect")&&(0,n.jsx)(dJ,{onClick:f,disabled:!t,title:b("remote.rectangleSelection"),className:i?dG:dX,children:"□"})]})}function dZ(e){let{onClose:t,inputMode:s="touch",pointerMode:l="direct"}=e,{t:a}=(0,eC.s)();(0,r.useEffect)(()=>{let e=e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),t?.())};return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)},[t]);let i="mouse"===s?[{title:a("remoteHelp.mouseTitle"),items:[{key:a("remoteHelp.mouseClickKey"),desc:a("remoteHelp.mouseClickDesc")},{key:a("remoteHelp.mouseRightKey"),desc:a("remoteHelp.mouseRightDesc")},{key:a("remoteHelp.mouseWheelKey"),desc:a("remoteHelp.mouseWheelDesc")},{key:a("remoteHelp.mouseDoubleKey"),desc:a("remoteHelp.mouseDoubleDesc")}]},{title:a("remoteHelp.keyboardTitle"),items:[{key:a("remoteHelp.keyPhysicalKey"),desc:a("remoteHelp.keyPhysicalDesc")},{key:a("remoteHelp.keyModifierKey"),desc:a("remoteHelp.keyModifierDesc")}]}]:"trackpad"===l?[{title:a("remoteHelp.gesturesTrackpadTitle"),items:[{key:a("remoteHelp.trackpadSwipeKey"),desc:a("remoteHelp.trackpadSwipeDesc")},{key:a("remoteHelp.trackpadScrollLockKey"),desc:a("remoteHelp.trackpadScrollLockDesc")},{key:a("remoteHelp.trackpadTapKey"),desc:a("remoteHelp.trackpadTapDesc")},{key:a("remoteHelp.trackpad2TapKey"),desc:a("remoteHelp.trackpad2TapDesc")},{key:a("remoteHelp.trackpad2SwipeKey"),desc:a("remoteHelp.trackpad2SwipeDesc")},{key:a("remoteHelp.trackpadPinchKey"),desc:a("remoteHelp.trackpadPinchDesc")}]},{title:a("remoteHelp.toolbarTitle"),items:[{key:"✋",desc:a("remoteHelp.toolbarHandDesc")},{key:"\uD83D\uDDB1️",desc:a("remoteHelp.toolbarMouseDirectDesc")},{key:"⌨️ / Aa",desc:a("remoteHelp.toolbarKeyboardDesc")}]}]:[{title:a("remoteHelp.gesturesDirectTitle"),items:[{key:a("remoteHelp.directTapKey"),desc:a("remoteHelp.directTapDesc")},{key:a("remoteHelp.directLongKey"),desc:a("remoteHelp.directLongDesc")},{key:a("remoteHelp.directDoubleKey"),desc:a("remoteHelp.directDoubleDesc")},{key:a("remoteHelp.directScrollKey"),desc:a("remoteHelp.directScrollDesc")},{key:a("remoteHelp.directPinchKey"),desc:a("remoteHelp.directPinchDesc")},{key:a("remoteHelp.directPanKey"),desc:a("remoteHelp.directPanDesc")}]},{title:a("remoteHelp.toolbarTitle"),items:[{key:"\uD83D\uDDB1️",desc:a("remoteHelp.toolbarMouseTrackpadDesc")},{key:"⌨️ / Aa",desc:a("remoteHelp.toolbarKeyboardDesc")},{key:"□",desc:a("remoteHelp.toolbarRectDesc")}]}],o=a("mouse"===s?"remoteHelp.modePc":"trackpad"===l?"remoteHelp.modeTrackpad":"remoteHelp.modeDirect");return(0,n.jsx)("div",{className:"fixed inset-x-0 top-0 h-[var(--app-height,100dvh)] z-50 scrim flex items-center justify-center p-4",onClick:t,children:(0,n.jsxs)("div",{className:"card-elev max-w-lg w-full max-h-full overflow-y-auto",onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("div",{className:"flex items-center justify-between p-4 border-b border-border sticky top-0 z-10",children:[(0,n.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,n.jsx)("h2",{className:"text-text text-base font-semibold",children:a("remote.help")}),(0,n.jsx)("span",{className:"text-brand-400 text-xs font-mono",children:o})]}),(0,n.jsx)("button",{onClick:t,className:"p-1 rounded hover:bg-surface-2 text-text-muted hover:text-text transition-colors",children:(0,n.jsx)(ev.X,{size:18})})]}),(0,n.jsx)("div",{className:"p-4 space-y-4",children:i.map(e=>(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"text-brand-400 text-xs font-semibold uppercase tracking-wider mb-2",children:e.title}),(0,n.jsx)("ul",{className:"space-y-1.5",children:e.items.map(e=>(0,n.jsxs)("li",{className:"flex gap-3 text-sm",children:[(0,n.jsx)("span",{className:"text-text font-mono bg-bg px-2 py-0.5 rounded text-xs shrink-0 min-w-[120px] text-center",children:e.key}),(0,n.jsx)("span",{className:"text-text-muted",children:e.desc})]},e.key))})]},e.title))})]})})}function dQ(e){let{text:t,onClose:s}=e,[l,a]=(0,r.useState)(!1);(0,r.useEffect)(()=>{let e=e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),s?.())};return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)},[s]);let i=async()=>{try{await navigator.clipboard?.writeText(t),a(!0),setTimeout(()=>a(!1),1500)}catch{}};return(0,n.jsx)("div",{className:"fixed inset-x-0 top-0 h-[var(--app-height,100dvh)] z-50 scrim flex items-center justify-center p-4",onClick:s,children:(0,n.jsxs)("div",{className:"card-elev max-w-lg w-full max-h-full flex flex-col",onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("div",{className:"flex items-center justify-between p-4 border-b border-border",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(ev.m0,{size:16,className:"text-brand-400"}),(0,n.jsx)("h2",{className:"text-text text-base font-semibold",children:"Clipboard"})]}),(0,n.jsx)("button",{onClick:s,className:"p-1 rounded hover:bg-surface-2 text-text-muted hover:text-text transition-colors",children:(0,n.jsx)(ev.X,{size:18})})]}),(0,n.jsx)("div",{className:"p-4 overflow-y-auto flex-1",children:(0,n.jsx)("pre",{className:"text-text text-sm whitespace-pre-wrap break-all bg-bg rounded p-3 font-mono min-h-[120px] max-h-[55dvh] overflow-y-auto scroll-thin",children:t||""})}),(0,n.jsx)("div",{className:"flex justify-end gap-2 p-4 border-t border-border",children:(0,n.jsxs)("button",{onClick:i,disabled:!t,className:"flex items-center gap-1.5 px-3 py-1.5 rounded-brand bg-brand-500 hover:bg-brand-600 disabled:opacity-50 text-white text-sm font-semibold transition-colors",children:[l?(0,n.jsx)(ev.aJ,{size:14}):(0,n.jsx)(ev.m0,{size:14}),"Copy"]})})]})})}function d0(e){let{surface:t,connected:s=!0,clipboard:l,hasFrame:a=!0,canvasProps:i,controlsProps:o,Controls:c=dU,bottomLayout:d=!1,canvasStyle:u=null,onBack:m,onRefresh:x,onClose:p,onDesktopSwitch:h,onToggleDebug:f,debugOn:b,placeholder:g,children:v}=e,[y,w]=(0,r.useState)(!1),[j,k]=(0,r.useState)(!1),N=()=>t.streaming&&x?.();return(0,n.jsxs)("div",{className:`bg-bg text-text flex flex-col h-full w-full ${!d&&!t.tallLandscape?"landscape:flex-row":""}`,style:{...u,userSelect:"none",WebkitUserSelect:"none",WebkitTouchCallout:"none",WebkitTapHighlightColor:"transparent"},onContextMenu:e=>e.preventDefault(),children:[(0,n.jsxs)("div",{className:"flex flex-row flex-1 min-h-0",children:[s&&!d&&(0,n.jsx)(dY,{streaming:t.streaming,canvasZoom:t.canvasZoom,pointerMode:t.pointerMode,handMode:t.handMode,keyboardOn:t.keyboardOn,selectionMode:t.selectionMode,show:t.show,onBack:m,onRefresh:N,onResetZoom:t.resetZoom,onTogglePointerMode:t.togglePointerMode,onToggleHandMode:t.toggleHandMode,onToggleKeyboard:t.toggleKeyboard,onShowHelp:()=>w(!0),onToggleSelection:t.handleToggleSelection}),s?(0,n.jsx)(dK,{canvasRef:t.canvasRef,canvasContainerRef:t.canvasContainerRef,canvasZoom:t.canvasZoom,canvasPan:t.canvasPan,fitScale:t.fitScale,streaming:t.streaming,hasFrame:a,selectionRect:t.selectionRect,clickIndicator:t.clickIndicator,pointerMode:t.pointerMode,selectionMode:t.selectionMode,handMode:t.handMode,handHolding:t.handHolding,scrollLock:t.scrollLock,virtualCursor:t.virtualCursor,inputMode:t.inputMode,keyboardOn:t.keyboardOn,onPointerDown:t.interactionHandler("pointerdown"),onPointerMove:t.interactionHandler("pointermove"),onPointerUp:t.interactionHandler("pointerup"),onWheel:t.interactionHandler("wheel"),onContextMenu:t.interactionHandler("contextmenu"),onDoubleClick:t.interactionHandler("dblclick"),onTouchStart:t.interactionHandler("touch"),onTouchMove:t.interactionHandler("touchmove"),onTouchEnd:t.interactionHandler("touchend"),onKeyDown:t.onCanvasKeyDown,...i,children:v}):g]}),(0,n.jsx)(c,{transparent:!!u,streaming:t.streaming,canvasZoom:t.canvasZoom,clipboardNew:l.isNew,clipboardText:l.text,onOpenClipboard:()=>{l.setNew(!1),k(!0)},onDesktopSwitch:h,selectionMode:t.selectionMode,pointerMode:t.pointerMode,handMode:t.handMode,inputMode:t.inputMode,onToggleHandMode:t.toggleHandMode,onTogglePointerMode:t.togglePointerMode,modifierKeys:t.modifierKeys,textInputValue:t.textInputValue,textInputRef:t.textInputRef,keyboardOn:t.keyboardOn,showTextPanel:t.showTextPanel,onResetZoom:t.resetZoom,onRefresh:N,onToggleSelection:t.handleToggleSelection,onToggleModifier:t.toggleModifierKey,onToggleKeyboard:t.toggleKeyboard,onToggleTextPanel:t.toggleTextPanel,controlsHidden:t.controlsHidden,onToggleControlsHidden:t.setControlsHidden,tallLandscape:t.tallLandscape,onToggleHelp:()=>w(!0),onEmitKey:t.emitKeyDirect,onTextInputChange:t.setTextInputValue,onTextInputFocus:t.handleTextInputFocus,onTextInputBlur:t.handleTextInputBlur,onTextInputKeyDown:e=>t.handleModifiedTextInput(e,t.streaming,t.keyboardOn),onDirectInputChange:e=>t.handleDirectInputChange(e,t.streaming),onSendText:t.sendTextInput,onClose:p,onToggleDebug:f,debugOn:b,...o}),y&&(0,n.jsx)(dZ,{inputMode:t.inputMode,pointerMode:t.pointerMode,onClose:()=>{w(!1),t.keyboardOn&&t.textInputRef.current?.focus()}}),j&&(0,n.jsx)(dQ,{text:l.text,onClose:()=>k(!1)})]})}function d1(e){let{hostLabel:t,status:s=null,platform:r=null,hosts:l=[],onOpenHost:a,onBack:i,canvasStyle:o=null}=e,{t:c}=(0,eC.s)(),d=t||c("agentSwitcher.unnamed"),u=[];return s?(s.capable||u.push(c("remote.unavailableNoCapture")),s.enabled||u.push(c("remote.unavailableDisabled",{host:d})),s.screenRecording||u.push(c("remote.unavailableScreenRecording",{host:d})),s.accessibility||u.push(c("remote.unavailableAccessibility",{host:d}))):u.push(c("remote.unavailableUnknown",{host:d})),u.length||u.push(c("remote.unavailableFailed",{host:d})),"darwin"!==r||!s||s.screenRecording&&s.accessibility||u.push(c("remote.unavailableMacRestart")),(0,n.jsxs)("div",{className:"flex h-full w-full flex-col bg-bg text-text",style:o,children:[(0,n.jsxs)("header",{className:"flex items-center gap-2 px-3 py-3 flex-shrink-0",style:{paddingTop:"calc(0.75rem + env(safe-area-inset-top, 0px))"},children:[(0,n.jsx)("button",{type:"button",onClick:()=>{(0,eN.e)(),i?.()},className:"grid place-items-center w-8 h-8 rounded-brand text-text-muted hover:text-text active:scale-90 transition-all","aria-label":c("remote.back"),children:(0,n.jsx)(ev.JG,{size:20})}),(0,n.jsx)("h2",{className:"text-sm font-semibold truncate",children:c("remote.title")})]}),(0,n.jsx)("div",{className:"flex-1 overflow-auto modal-scrollable px-4 pb-[calc(24px+var(--safe-bottom))]",children:(0,n.jsxs)("div",{className:"mx-auto mt-4 max-w-md card-elev rounded-2xl p-5 fade-in",children:[(0,n.jsxs)("div",{className:"flex items-center gap-3",children:[(0,n.jsx)("span",{className:"grid place-items-center w-10 h-10 rounded-full bg-surface-2 text-text-muted flex-shrink-0",children:(0,n.jsx)(ev.VA,{size:18})}),(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("h3",{className:"text-sm font-semibold text-text truncate",children:c("remote.unavailableTitle")}),(0,n.jsx)("p",{className:"text-xs text-text-muted truncate",children:d})]})]}),(0,n.jsx)("ul",{className:"mt-4 flex flex-col gap-2.5",children:u.map(e=>(0,n.jsxs)("li",{className:"flex items-start gap-2 text-[13px] leading-snug text-text-muted",children:[(0,n.jsx)(ev.RI,{size:15,className:"mt-0.5 flex-shrink-0 text-amber-500"}),(0,n.jsx)("span",{children:e})]},e))}),l.length>0&&(0,n.jsxs)("div",{className:"mt-5",children:[(0,n.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-text-muted",children:c("remote.unavailableOtherHosts")}),(0,n.jsx)("div",{className:"mt-1.5 flex flex-col",children:l.map(e=>(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,eN.e)(),a?.(e.key)},className:"flex items-center gap-2.5 px-1 py-2.5 text-left rounded-brand hover:bg-surface-2 active:bg-surface-2 transition-colors",children:[(0,n.jsx)(ev.VA,{size:16,className:"text-text-muted flex-shrink-0"}),(0,n.jsx)("span",{className:"flex-1 min-w-0 truncate text-sm text-text",children:e.label||c("agentSwitcher.unnamed")}),(0,n.jsx)(ev.c_,{size:16,className:"text-text-muted flex-shrink-0"})]},e.key))})]})]})})]})}function d2(e){var t,s;let l,{stats:a,mode:i,onReset:o,onClose:c,onCopy:d,onForceWsDisconnect:u,onToggleWsBlock:m,isWsBlocked:x}=e,{t:p}=(0,eC.s)(),[h,f]=(0,r.useState)(!1);return h?(0,n.jsx)("div",{className:"fixed top-4 right-4 z-50",children:(0,n.jsxs)("button",{onClick:()=>f(!1),className:"bg-surface-2 text-text px-4 py-2 rounded-lg shadow-md hover:bg-surface-3 transition-all duration-150 ease-out active:scale-[0.97]",children:["\uD83D\uDD0D ",p("remote.debug")]})}):(0,n.jsxs)("div",{className:"fixed top-4 right-4 z-50 card-elev p-4 min-w-[280px] text-sm",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between mb-3 pb-2 border-b border-border",children:[(0,n.jsxs)("h3",{className:"text-text font-semibold flex items-center gap-2",children:["\uD83D\uDD0D ",p("remote.debugTitle")]}),(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsx)("button",{onClick:()=>f(!0),className:"text-text-muted hover:text-text transition-colors",title:p("remote.minimize"),children:"─"}),(0,n.jsx)("button",{onClick:c,className:"text-text-muted hover:text-text transition-colors",title:p("common.close"),children:"✕"})]})]}),(0,n.jsxs)("div",{className:"space-y-2 mb-3",children:[(0,n.jsxs)("div",{className:"flex justify-between items-center",children:[(0,n.jsx)("span",{className:"text-text-muted",children:"Mode:"}),(0,n.jsx)("span",{className:"rtc"===i?"text-blue-400 font-semibold":"text-yellow-400 font-semibold",children:"rtc"===i?"RTC enabled":"WS only"})]}),(0,n.jsxs)("div",{className:"flex justify-between items-center",children:[(0,n.jsxs)("span",{className:"text-text-muted",children:[p("remote.transport"),":"]}),(0,n.jsx)("span",{className:a.webrtcPercent>50?"text-blue-400 font-semibold":"text-text-muted",children:a.webrtcPercent>50?"WebRTC ✅":"WebSocket"})]}),(0,n.jsxs)("div",{className:"flex justify-between items-center",children:[(0,n.jsxs)("span",{className:"text-text-muted",children:[p("remote.fps"),":"]}),(0,n.jsx)("span",{className:`font-semibold ${(t=a.fps)>=15?"text-green-400":t>=10?"text-yellow-400":"text-red-400"}`,children:a.fps})]}),(0,n.jsxs)("div",{className:"flex justify-between items-center",children:[(0,n.jsxs)("span",{className:"text-text-muted",children:[p("remote.latency"),":"]}),(0,n.jsx)("span",{className:`font-semibold ${(s=a.latency)<50?"text-green-400":s<100?"text-yellow-400":"text-red-400"}`,children:(l=a.latency,`${Math.round(l)}ms`)})]}),(0,n.jsxs)("div",{className:"flex justify-between items-center",children:[(0,n.jsxs)("span",{className:"text-text-muted",children:[p("remote.tilesPerSec"),":"]}),(0,n.jsx)("span",{className:"text-text font-semibold",children:a.tilesPerSec})]}),(0,n.jsxs)("div",{className:"flex justify-between items-center",children:[(0,n.jsxs)("span",{className:"text-text-muted",children:[p("remote.bandwidth"),":"]}),(0,n.jsxs)("span",{className:"text-text font-semibold",children:[a.bandwidthMBps," MB/s"]})]})]}),(0,n.jsxs)("div",{className:"border-t border-border pt-3 mb-3 space-y-1",children:[(0,n.jsxs)("div",{className:"flex justify-between items-center text-xs",children:[(0,n.jsx)("span",{className:"text-blue-400",children:"WebRTC:"}),(0,n.jsxs)("span",{className:"text-text-muted",children:[a.webrtcTiles.toLocaleString()," tiles (",a.webrtcPercent,"%)"]})]}),(0,n.jsxs)("div",{className:"flex justify-between items-center text-xs",children:[(0,n.jsx)("span",{className:"text-text-muted",children:"WebSocket:"}),(0,n.jsxs)("span",{className:"text-text-muted",children:[a.wsTiles.toLocaleString()," tiles (",100-a.webrtcPercent,"%)"]})]})]}),(0,n.jsxs)("div",{className:"flex gap-2 border-t border-border pt-3",children:[(0,n.jsx)("button",{onClick:o,className:"flex-1 bg-surface hover:bg-surface-2 text-text py-2 px-3 rounded transition-colors text-xs",children:p("remote.clearStats")}),(0,n.jsx)("button",{onClick:d,className:"flex-1 bg-surface hover:bg-surface-2 text-text py-2 px-3 rounded transition-colors text-xs",children:"Copy"})]}),(u||m)&&(0,n.jsxs)("div",{className:"flex gap-2 mt-2",children:[u&&(0,n.jsx)("button",{onClick:u,className:"flex-1 bg-red-900/40 hover:bg-red-900/60 text-red-300 py-2 px-3 rounded transition-colors text-xs",title:"Disconnect WS once (auto-reconnect)",children:"⚡ Kill WS"}),m&&(0,n.jsx)("button",{onClick:m,className:`flex-1 py-2 px-3 rounded transition-colors text-xs ${x?"bg-yellow-900/60 hover:bg-yellow-900/80 text-yellow-200":"bg-surface hover:bg-surface-2 text-text"}`,title:"Block WS reconnect to test RTC standalone",children:x?"\uD83D\uDD12 WS Blocked":"\uD83D\uDEAB Block WS"})]})]})}function d5(e){let{onClose:t,busRef:s,protocolRef:l,connected:a,carrier:i,hostPlatform:o,hostLabel:u,remoteStatus:m=null,otherReadyHosts:x=[],onOpenHost:p,canvasStyle:h=null}=e,{t:f}=(0,eC.s)(),[b,g]=(0,r.useState)(!1),[v,y]=(0,r.useState)(null),{stats:w,trackTilesReceived:j,resetStats:k}=function(){let[e,t]=(0,r.useState)(dF),s=(0,r.useRef)({frameCount:0,lastFpsTime:Date.now(),tilesReceived:0,lastTilesTime:Date.now(),bytesReceived:0,lastBandwidthTime:Date.now(),latencies:[],webrtcTilesTotal:0,wsTilesTotal:0});return{stats:e,trackTilesReceived:(0,r.useCallback)((e,n)=>{let r=s.current,l=Date.now();r.frameCount++;let a=e.tiles?.length||0;r.tilesReceived+=a;let i="number"==typeof e.bytes?e.bytes:e.tiles?.reduce((e,t)=>e+(t.imageBuffer?.byteLength||t.imageBuffer?.length||0),0)||0;if(r.bytesReceived+=i,e.timestamp){let t=Date.now()-e.timestamp;r.latencies.push({value:t,time:l}),r.latencies=r.latencies.filter(e=>l-e.time<6e4)}if(n?.startsWith("dc")||"webrtc"===n?r.webrtcTilesTotal+=a:r.wsTilesTotal+=a,l-r.lastFpsTime>=500){let e=(l-r.lastFpsTime)/1e3,s=Math.round(r.frameCount/e),n=r.latencies.length>0?Math.round(r.latencies.reduce((e,t)=>e+t.value,0)/r.latencies.length):0,a=Math.round(r.tilesReceived/e),i=(r.bytesReceived/e/1024/1024).toFixed(2),o=r.webrtcTilesTotal+r.wsTilesTotal,c=o>0?Math.round(r.webrtcTilesTotal/o*100):0;t({fps:s,latency:n,tilesPerSec:a,bandwidthMBps:parseFloat(i),webrtcTiles:r.webrtcTilesTotal,wsTiles:r.wsTilesTotal,webrtcPercent:c}),r.frameCount=0,r.tilesReceived=0,r.bytesReceived=0,r.lastFpsTime=l}},[]),resetStats:(0,r.useCallback)(()=>{let e=s.current;e.frameCount=0,e.lastFpsTime=Date.now(),e.tilesReceived=0,e.lastTilesTime=Date.now(),e.bytesReceived=0,e.lastBandwidthTime=Date.now(),e.latencies=[],e.webrtcTilesTotal=0,e.wsTilesTotal=0,t(dF)},[])}}(),[N,C]=(0,r.useState)(c.eR.debug?.panel??!1),[S,T]=(0,r.useState)(!1),E=c.eR.enableWebRTC?"rtc":"ws",R=(0,r.useCallback)(()=>{let e={mode:E,...w,ts:new Date().toISOString()};navigator.clipboard?.writeText(JSON.stringify(e,null,2)).catch(()=>{})},[w,E]),M=(0,r.useRef)(w);(0,r.useEffect)(()=>{M.current=w},[w]),(0,r.useEffect)(()=>{(0,d.c)("remote",`[stats] interval started, mode=${E}`);let e=setInterval(()=>{(0,d.c)("remote",`[stats][${E}]`,JSON.stringify(M.current))},5e3);return()=>{(0,d.c)("remote","[stats] interval stopped"),clearInterval(e)}},[E]);let $=function(e,t){let[s,n]=(0,r.useState)(!1);(0,r.useEffect)(()=>{if(t&&e?.current)return n(!0),()=>n(!1)},[t,e]);let l=(0,r.useCallback)((t,s)=>{e?.current?.emit(t,s)},[e]),a=(0,r.useCallback)(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"left";s&&l("mouse-press",{x:e,y:t,button:n})},[l,s]),i=(0,r.useCallback)(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"left";s&&l("mouse-release",{x:e,y:t,button:n})},[l,s]),o=(0,r.useCallback)(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"left",r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];s&&l("mouse-click",{x:e,y:t,button:n,double:r})},[l,s]),c=(0,r.useCallback)((e,t)=>{s&&l("mouse-move",{x:e,y:t})},[l,s]),d=(0,r.useCallback)((e,t,n,r)=>{s&&l("mouse-drag-select",{startX:e,startY:t,endX:n,endY:r})},[l,s]),u=(0,r.useCallback)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];s&&l("key-press",{key:e,modifier:t})},[l,s]),m=(0,r.useCallback)(e=>{s&&l("type-text",{text:e})},[l,s]),x=(0,r.useCallback)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];s&&l("scroll",{direction:e,amount:t,horizontal:n})},[l,s]),p=(0,r.useCallback)(()=>{s&&l("boost-stream")},[l,s]),h=(0,r.useCallback)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;s&&l("set-focus",{rect:e,zoom:t,viewerWidth:window.innerWidth,dpr:window.devicePixelRatio||1})},[l,s]),f=(0,r.useCallback)(e=>{s&&l("request-screen-with-hashes",{tileHashes:e})},[l,s]),b=(0,r.useCallback)(e=>{s&&l("desktop-switch",{direction:e})},[l,s]);return{streaming:s,emitRequestScreenWithHashes:f,emitMousePress:a,emitMouseRelease:i,emitMouseClick:o,emitMouseMove:c,emitMouseDragSelect:d,emitKeyPress:u,emitTypeText:m,emitScroll:x,emitBoostStream:p,emitSetFocus:h,emitDesktopSwitch:b}}(s,a),{streaming:z,emitRequestScreenWithHashes:P,emitDesktopSwitch:A}=$,I=dM({emits:$,streaming:z,hostPlatform:o}),{canvasRef:D,serverDimensionsRef:L,handleCanvasDimensions:B,resetPan:F,zoomGestureTimeoutRef:O,textInputRef:_,keyboardOn:K}=I,W=(0,r.useCallback)(()=>g(!0),[]);(0,r.useEffect)(()=>{i&&(0,d.c)("remote",`[remote] carrier: ${i}`)},[i]);let H=dB(s,z,D),{screenLocked:q,unlockReady:U,unlockResult:X,setUnlockResult:V,clipboard:G,monitors:J,activeMonitorIndex:Y,cursorShape:Z}=function(e){let{busRef:t,connected:s,streaming:n,canvasRef:l,serverDimensionsRef:a,handleCanvasDimensions:i,resetPan:o,zoomGestureTimeoutRef:u,trackTilesReceived:m,tiles:x,onUnavailable:p}=e,[h,f]=(0,r.useState)(!1),[b,g]=(0,r.useState)(!1),[v,y]=(0,r.useState)(null),w=dO(),[j,k]=(0,r.useState)([]),[N,C]=(0,r.useState)(0),[S,T]=(0,r.useState)(null),E=(0,r.useRef)(null),{renderedTilesRef:R,handleFullScreenData:M,handleTilesData:$,handleTilesBinary:z,handleTilesBinaryV2:P,handleTilesMeta:A,handleScreenDimensions:I,cleanupTiles:D,requestScreenWithHashes:L}=x;return(0,r.useEffect)(()=>{let e=t?.current;if(!e||!s)return;D();let n=e=>{I(e),i(e,R)},r=e=>M(e),l=e=>{let t=e.transport||"ws";t!==E.current&&(E.current=t,(0,d.c)("remote",`[remote] tiles via ${t}`)),m(e,t),$(e)},a=e=>console.error("Screen error:",e),c=()=>p?.(),x=function(){let{locked:e,ready:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};f(!!e),g(!!t),e&&y(null)},h=e=>y(e||null),b=(e,t)=>{"ws"!==E.current&&(E.current="ws",(0,d.c)("remote",`[remote] tiles via ws${t}`)),m(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now(),{tileCount:s,timestamp:n,bytes:r}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now(),s=e instanceof ArrayBuffer?e:e?.buffer,n=s?.byteLength||0,r=0,l=t;if(s&&s.byteLength>=12){let e=new DataView(s);r=e.getUint32(0,!0),l=e.getFloat64(4,!1)}return{tileCount:r,timestamp:l,bytes:n}}(e,t);return{tiles:Array(s),timestamp:n,bytes:r}}(e),"ws")},v=e=>{b(e,""),z(e)},j=e=>A(e),N=e=>{b(e," v2"),P(e)},S=()=>{D(),e.emit("get-screen-dimensions"),e.emit("get-unlock-state"),e.emit("start-streaming")},L=()=>S(),B=e=>{let{text:t,hash:s}=e;return w.push(t,s)},F=e=>{let{list:t,activeIndex:s}=e;k(Array.isArray(t)?t:[]),"number"==typeof s&&C(s)},O=e=>{D(),o(),"number"==typeof e?.monitorIndex&&C(e.monitorIndex)};e.on("screen-dimensions",n),e.on("full-screen-data",r),e.on("tiles-data",l),e.on("tiles-data-binary",v),e.on("tiles-bin-v2",N),e.on("tiles-meta",j),e.on("screen-error",a),e.on("remote:unavailable",c),e.on("screen-locked",x),e.on("unlock-result",h),e.on("remote:ready",L),e.on("clipboard-update",B),e.on("monitors",F),e.on("frame_meta",O);let _=e=>T(e?.shape??null);return e.on("cursor-shape",_),S(),()=>{e.emit("stop-streaming"),e.off("screen-dimensions",n),e.off("full-screen-data",r),e.off("tiles-data",l),e.off("tiles-data-binary",v),e.off("tiles-bin-v2",N),e.off("tiles-meta",j),e.off("screen-error",a),e.off("remote:unavailable",c),e.off("screen-locked",x),e.off("unlock-result",h),e.off("remote:ready",L),e.off("clipboard-update",B),e.off("monitors",F),e.off("frame_meta",O),e.off("cursor-shape",_),D(),u.current&&clearTimeout(u.current)}},[s]),(0,r.useEffect)(()=>{if(!n||!s||!t?.current)return;let e=setInterval(()=>{0===R.current.size?t.current.emit("request-screen-with-hashes",{tileHashes:[]}):L()},c.eR.hashRequestInterval);return()=>clearInterval(e)},[n,s,t,L,R]),(0,r.useEffect)(()=>{if(!s)return;let e=()=>{let e=l.current;if(!e||e.width>0)return!0;let{width:s,height:n}=a.current||{};return s>0?i({width:s,height:n},R):t.current?.emit("get-screen-dimensions"),!1};if(e())return;let n=setInterval(()=>{e()&&clearInterval(n)},c.eR.restreamDelay);return()=>clearInterval(n)},[s,t,l,a,i,R]),(0,r.useEffect)(()=>{let e=t?.current;if(!e||!s)return;let n=()=>{document.hidden?e.emit("stop-streaming"):e.emit("start-streaming")};return document.addEventListener("visibilitychange",n),()=>document.removeEventListener("visibilitychange",n)},[s,t]),{screenLocked:h,unlockReady:b,unlockResult:v,setUnlockResult:y,clipboard:w,monitors:j,activeMonitorIndex:N,cursorShape:S}}({busRef:s,connected:a,streaming:z,canvasRef:D,serverDimensionsRef:L,handleCanvasDimensions:B,resetPan:F,zoomGestureTimeoutRef:O,trackTilesReceived:j,tiles:H,onUnavailable:()=>y(s)}),Q=(0,r.useCallback)(e=>{s?.current?.emit("select_monitor",{index:e})},[s]);return v&&v===s?(0,n.jsx)(d1,{hostLabel:u,status:m,platform:o,hosts:x,onOpenHost:p,onBack:t,canvasStyle:h}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(d0,{surface:I,canvasStyle:h,connected:a,clipboard:G,hasFrame:H.hasFrame,onBack:W,onClose:W,onRefresh:()=>P([]),onDesktopSwitch:A,onToggleDebug:()=>C(e=>!e),debugOn:N,canvasProps:{cursorShape:Z,monitors:J,activeMonitorIndex:Y,onSelectMonitor:Q,screenLocked:q,unlockReady:U,unlockResult:X,onUnlockSubmit:e=>{V(null),s?.current?.emit("desktop-unlock",{text:e})}},placeholder:(0,n.jsxs)("div",{className:"flex-1 min-w-0 empty-stage",children:[(0,n.jsx)("div",{className:"empty-icons"}),(0,n.jsxs)("div",{className:"empty-half",children:[(0,n.jsxs)("span",{className:"empty-idx",children:[(0,n.jsx)("b",{children:"01"})," / ",f("workspaces.emptyTagRemote")]}),(0,n.jsx)("span",{className:"empty-word login-hero-grad",children:f("workspaces.emptyWordRemote")}),(0,n.jsx)("span",{className:"empty-meta",dangerouslySetInnerHTML:{__html:f("workspaces.emptyMetaRemote")}}),(0,n.jsxs)("span",{className:"empty-go",children:[(0,n.jsx)(dg.A,{size:"sm"}),f("remote.connecting")]})]})]})}),N&&(0,n.jsx)(d2,{onForceWsDisconnect:()=>s?.current?.disconnect(),onToggleWsBlock:()=>{let e=l?.current;if(!e)return;let t=!e.wsBlocked;e.setWsBlocked(t),T(t)},isWsBlocked:S,stats:w,mode:E,onReset:k,onCopy:R,onClose:()=>C(!1)}),(0,n.jsx)(ek.A,{isOpen:b,onClose:()=>{g(!1),K&&_.current?.focus()},onConfirm:()=>t?.(),title:f("remote.exitRemote"),message:f("remoteControls.exitConfirmMessage"),confirmText:f("connection.exit"),cancelText:f("common.cancel")})]})}let d3={darwin:"macOS",win32:"Windows",linux:"Linux"};function d4(e){let{hosts:t=[],onPick:s,onClose:r}=e,{t:l}=(0,eC.s)();return(0,n.jsx)("div",{className:"fixed inset-0 z-50 flex items-end sm:items-center justify-center scrim fade-in",onClick:r,children:(0,n.jsxs)("div",{className:"card-elev w-full sm:max-w-sm max-h-[70%] flex flex-col overflow-hidden rounded-t-3xl sm:rounded-3xl sheet-rise",onClick:e=>e.stopPropagation(),children:[(0,n.jsx)("span",{className:"sm:hidden mx-auto mt-2.5 h-1 w-9 rounded-full bg-text-subtle/40","aria-hidden":"true"}),(0,n.jsx)("h2",{className:"px-5 pt-3 pb-2 text-base font-semibold text-text",children:l("remote.title")}),(0,n.jsx)("div",{className:"px-2 overflow-auto modal-scrollable",style:{paddingBottom:"max(0.5rem, var(--safe-bottom))"},children:t.map(e=>{let t=[d3[e.platform],l("hosts.online")].filter(Boolean).join(" \xb7 ");return(0,n.jsxs)("button",{onClick:()=>{(0,eN.e)(),s?.(e.key)},className:"w-full flex items-center gap-3 px-3 py-2.5 text-left rounded-2xl hover:bg-surface-2 active:bg-surface-2 transition-colors",children:[(0,n.jsxs)("span",{className:"relative grid place-items-center w-10 h-10 rounded-xl bg-surface-2 text-text-muted shrink-0",children:[(0,n.jsx)(ev.VA,{size:18}),(0,n.jsx)("span",{className:"absolute -bottom-0.5 -right-0.5 w-2.5 h-2.5 rounded-full bg-green-500 ring-2 ring-surface-2"})]}),(0,n.jsxs)("span",{className:"flex-1 min-w-0",children:[(0,n.jsx)("span",{className:"block text-sm font-medium text-text truncate",children:e.label||l("agentSwitcher.unnamed")}),(0,n.jsx)("span",{className:"block text-[11px] text-text-muted truncate",children:t})]}),(0,n.jsx)(ev.c_,{size:16,className:"text-text-subtle shrink-0"})]},e.key)})})]})})}function d6(e){return e?{scale:Math.min(1.25,window.devicePixelRatio||1),quality:85}:{}}let d8=new Set(["localhost","127.0.0.1","::1"]),d9=e=>"local"===e||d8.has(window.location.hostname);function d7(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default";return(0,r.useCallback)(function(s){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new Promise(r=>{let l=e?.current;if(!l?.emit)return r({ok:!1,error:"Not connected"});let a={profile:t,...n},i=!1,o=setTimeout(()=>{i||(i=!0,r({ok:!1,error:"No reply from host — restart the host?"}))},12e3);l.emit("browser:invoke",{action:s,payload:a},e=>{i||(i=!0,clearTimeout(o),r(e||{ok:!1,error:"No reply from host"}))})})},[e,t])}function ue(e){let{busRef:t,connected:s,targetId:n,onPainted:l,canvasRef:a,frameRef:i,applyDimensions:o}=e,d=(0,r.useRef)(null),u=a||d,[m,x]=(0,r.useState)(null),p=(0,r.useRef)(null),h=i||p,f=(0,r.useRef)(null),b=(0,r.useRef)(null),g=(0,r.useRef)(l);(0,r.useEffect)(()=>{g.current=l},[l]);let{hasFrame:v,handleTilesData:y,handleTilesBinaryV2:w,cleanupTiles:j,requestScreenWithHashes:k,handleScreenDimensions:N,renderedTilesRef:C}=dB(t,s&&!!n,u,{ackEvent:"browser:stream.ack",verifyEvent:"browser:request-tiles-hashes",targetId:n,resetWorker:!1});return(0,r.useEffect)(()=>{let e=t?.current;if(!s||!e?.on||!n)return;j();let r=!1;if(f.current!==n){f.current=n,b.current=null,h.current=null,x(null);let e=u.current;e?.width&&e.getContext("2d").clearRect(0,0,e.width,e.height)}let l=e=>{r||b.current===n&&(y(e),g.current?.({},e.bytes))},a=e=>{r||b.current===n&&(w(e),g.current?.({},e?.byteLength||0))},i=t=>{if(r||t?.targetId!==n||!t.frameW||!t.frameH)return;b.current=n;let s=h.current,l=!s||s.w!==t.frameW||s.h!==t.frameH,a=u.current,i=!!a&&(a.width!==t.frameW||a.height!==t.frameH),c={w:t.frameW,h:t.frameH,meta:{...s?.meta||{},deviceWidth:t.deviceWidth,deviceHeight:t.deviceHeight}};h.current=c,(l||i)&&(j(),N({tileCount:t.tileCount}),x(c),o?o({width:t.frameW,height:t.frameH},C):u.current&&(u.current.width=t.frameW,u.current.height=t.frameH),e.emit?.("browser:request-tiles-hashes",{targetId:n,tileHashes:[]}))};e.on?.("browser:tiles-data",l),e.on?.("browser:tiles-bin",a),e.on?.("browser:screen-dimensions",i);let d=setInterval(()=>{r||!("u"<typeof document)&&document.hidden||(0===C.current.size?e.emit?.("browser:request-tiles-hashes",{targetId:n,tileHashes:[]}):k())},c.eR.hashRequestInterval);return()=>{r=!0,e.off?.("browser:tiles-data",l),e.off?.("browser:tiles-bin",a),e.off?.("browser:screen-dimensions",i),clearInterval(d),j()}},[t,s,n,j,y,w,N,k,C,u,h,o]),{canvasRef:u,frame:v||m?m||{w:1280,h:720}:null,frameRef:h}}function ut(e){let{title:t,icon:s=null,onClose:l,children:a,footer:i=null,wide:o=!1}=e;return((0,r.useEffect)(()=>{let e=e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),l?.())};return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)},[l]),"u"<typeof document)?null:(0,sp.createPortal)((0,n.jsx)("div",{className:"modal-overlay z-50 scrim fade-in",onClick:l,children:(0,n.jsxs)("div",{role:"dialog","aria-modal":"true",className:`card-elev ${o?"max-w-lg":"max-w-md"} w-full my-auto overflow-hidden flex flex-col pop-in`,onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2 px-4 pt-4 pb-3 border-b border-border-subtle",children:[(0,n.jsxs)("h2",{className:"flex items-center gap-1.5 text-sm font-semibold text-text min-w-0",children:[s,(0,n.jsx)("span",{className:"truncate",children:t})]}),(0,n.jsx)("button",{onClick:l,"aria-label":"Close",className:"shrink-0 text-text-muted hover:text-text",children:(0,n.jsx)(ev.X,{size:18})})]}),(0,n.jsx)("div",{className:"flex-1 min-h-0 overflow-y-auto px-4 py-3",children:a}),i&&(0,n.jsx)("div",{className:"px-4 py-3 border-t border-border-subtle",children:i})]})}),document.body)}function us(e){let{element:t,autoFocusNote:s=!1,at:l=null,onAddAnnotation:a,onClose:i}=e,[o,c]=(0,r.useState)(""),[d,u]=(0,r.useState)(!1),[m,x]=(0,r.useState)(!1),[p,h]=(0,r.useState)(!1),f=(0,r.useRef)(null);if((0,r.useEffect)(()=>{s&&f.current?.focus()},[s]),!t)return null;let b=t.selector||t.tag||"element",g=async()=>{(0,eN.e)(),await navigator.clipboard?.writeText(b),u(!0),setTimeout(()=>u(!1),2e3)},v=async()=>{(0,eN.e)();let e=[`### Target Element: \`<${t.tag}>\``,`- Selector: \`${b}\``,t.text?`- Text: "${t.text}"`:null,t.html?`- HTML: \`${t.html.slice(0,300)}\``:null,o?`- Instructions: ${o}`:null].filter(Boolean).join("\n");await navigator.clipboard?.writeText(e),x(!0),setTimeout(()=>x(!1),2e3)},y=()=>{(0,eN.e)(),a?.({id:Date.now().toString(),tag:t.tag,selector:b,text:t.text,html:t.html,note:o.trim()}),h(!0),setTimeout(()=>{h(!1),i()},800)},w=(0,n.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,n.jsx)("span",{className:"px-1.5 py-0.5 rounded bg-brand-500/10 text-brand-500 font-mono text-xs font-semibold uppercase",children:t.tag}),(0,n.jsx)("span",{className:"font-mono text-xs text-text truncate",children:b})]}),j=(0,n.jsxs)(n.Fragment,{children:[!l&&(0,n.jsx)("div",{className:"pb-1",children:w}),t.text&&(0,n.jsx)("div",{className:"text-xs text-text-muted bg-surface-2 p-2 rounded-brand font-mono line-clamp-2",children:t.text}),t.styles&&(0,n.jsxs)("div",{className:"flex flex-wrap gap-2 text-[11px] text-text-muted font-mono",children:[t.styles.display&&(0,n.jsxs)("span",{children:["display: ",t.styles.display]}),t.styles.fontSize&&(0,n.jsxs)("span",{children:["size: ",t.styles.fontSize]}),t.styles.color&&(0,n.jsxs)("span",{children:["color: ",t.styles.color]})]}),(0,n.jsx)("input",{ref:f,type:"text",value:o,onChange:e=>c(e.target.value),onKeyDown:e=>"Enter"===e.key&&y(),placeholder:"Note for AI (e.g. change color to dark, fix alignment...)",className:"w-full px-2.5 py-1.5 bg-surface-2 rounded-brand text-xs text-text placeholder-text-muted focus:outline-none focus:ring-1 focus:ring-brand-500"})]}),k=(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("button",{onClick:g,className:"flex-1 py-1.5 bg-surface-2 hover:bg-surface-3 text-text rounded-brand text-xs font-medium flex items-center justify-center gap-1.5 transition-colors",children:[d?(0,n.jsx)(ev.aJ,{size:13,className:"text-emerald-500"}):(0,n.jsx)(ev.QR,{size:13}),d?"Copied":"Copy Selector"]}),(0,n.jsxs)("button",{onClick:v,className:"flex-1 py-1.5 bg-brand-500 hover:bg-brand-600 text-white rounded-brand text-xs font-medium flex items-center justify-center gap-1.5 transition-colors",children:[m?(0,n.jsx)(ev.aJ,{size:13}):(0,n.jsx)(ev.sU,{size:13}),m?"Copied AI Prompt":"Copy for AI"]}),(0,n.jsxs)("button",{onClick:y,className:"px-3 py-1.5 bg-surface-2 hover:bg-surface-3 rounded-brand text-xs font-medium flex items-center justify-center gap-1.5 transition-colors",children:[p?(0,n.jsx)(ev.aJ,{size:13,className:"text-emerald-500"}):(0,n.jsx)(ev.Vn,{size:13}),p?"Saved":"Add Note"]})]});return l?(0,n.jsxs)("div",{className:"z-30 bg-surface border border-border-subtle shadow-2xl p-3 flex flex-col gap-2.5 overflow-y-auto pop-in absolute w-[300px] max-w-[90%] max-h-[60%] rounded-xl",style:{left:`min(${l.x}px, calc(100% - 310px))`,top:`min(${l.y}px, calc(100% - 120px))`},children:[(0,n.jsxs)("div",{className:"flex items-center justify-between",children:[w,(0,n.jsx)("button",{onClick:i,className:"p-1 text-text-muted hover:text-text rounded-brand shrink-0",title:"Close",children:(0,n.jsx)(ev.X,{size:15})})]}),j,(0,n.jsx)("div",{className:"flex items-center gap-2 pt-1",children:k})]}):(0,n.jsx)(ut,{title:"Inspect Element",onClose:i,footer:(0,n.jsx)("div",{className:"flex items-center gap-2",children:k}),children:(0,n.jsx)("div",{className:"flex flex-col gap-2.5",children:j})})}function un(e){let{annotations:t=[],onDelete:s,onClear:l,onClose:a}=e,[i,o]=(0,r.useState)(!1),[c,d]=(0,r.useState)(!1),u=()=>[`## Design & Code Feedback (${t.length} items)`,...t.map((e,t)=>[`