@jetcrab/pi-desk 1.1.18-dev → 1.1.20-dev

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 (105) hide show
  1. package/docs/plugins.md +1 -1
  2. package/next.config.ts +1 -0
  3. package/package.json +3 -2
  4. package/src/client/l2_biz/workbench/file-workspace/l2-file-workspace-runtime.ts +1 -1
  5. package/src/client/l2_biz/workbench/hooks/l2-workbench-chat-reload.ts +42 -0
  6. package/src/client/l2_biz/workbench/l2-work-session-sidebar.tsx +19 -1
  7. package/src/client/l2_biz/workbench/l2-workbench-chat.ts +45 -0
  8. package/src/client/l2_biz/workbench/l2-workbench.tsx +4 -0
  9. package/src/client/l3_modules/conversation/l3-conversation-markdown.tsx +10 -1
  10. package/src/client/l3_modules/project-files/l3-markdown-preview.tsx +10 -1
  11. package/src/client/l3_modules/project-files/l3-project-document-view.tsx +2 -0
  12. package/src/client/l3_modules/project-files/l3-project-file-browser.tsx +171 -229
  13. package/src/client/l3_modules/project-files/l3-project-file-runtime.ts +133 -70
  14. package/src/client/l3_modules/project-files/l3-project-reader.ts +4 -3
  15. package/src/client/l3_modules/project-files/views/l3-project-search-controls.tsx +201 -0
  16. package/src/client/l3_modules/project-files/views/l3-project-search-results.tsx +333 -0
  17. package/src/client/l4_foundation/ui/code/l4-code-preview.tsx +47 -3
  18. package/src/client/l4_foundation/ui/markdown/l4-markdown-remark.ts +89 -0
  19. package/src/client/l4_foundation/ui/markdown/l4-markdown.module.css +58 -0
  20. package/src/client/l4_foundation/ui/markdown/l4-markdown.tsx +108 -0
  21. package/src/common/l2_biz/work-session/l2-work-session-file-contract.ts +4 -3
  22. package/src/common/l2_biz/workbench/l2-workbench-locale-messages.ts +6 -0
  23. package/src/common/l3_modules/project-files/l3-project-files-contract.ts +2 -3
  24. package/src/common/l3_modules/project-files/l3-project-files-locale-messages.ts +56 -10
  25. package/src/common/l4_foundation/file/l4-project-file-contract.ts +51 -1
  26. package/src/common/l4_foundation/locale/l4-host-error-messages.ts +11 -0
  27. package/src/common/l4_foundation/locale/l4-locale-messages.ts +16 -0
  28. package/src/instrumentation.ts +0 -2
  29. package/src/server/l1_entry/api/l1-project-read-routes.ts +6 -4
  30. package/src/server/l1_entry/api/l1-project-route.ts +9 -8
  31. package/src/server/l1_entry/api/l1-work-session-file-error.ts +23 -0
  32. package/src/server/l2_biz/plugin-management/l2-plugin-management.ts +0 -3
  33. package/src/server/l2_biz/work-session/l2-work-session-chat-runtime.ts +30 -58
  34. package/src/server/l2_biz/work-session/l2-work-session-manage.ts +0 -4
  35. package/src/server/l4_foundation/file/l4-project-file-index.ts +276 -0
  36. package/src/server/l4_foundation/file/l4-project-search.ts +399 -0
  37. package/src/server/l4_foundation/file/l4-ripgrep-search.ts +192 -0
  38. package/src/server/l4_foundation/file/l4-work-session-project-file.ts +8 -332
  39. package/src/server/l4_foundation/pi/l4-pi-package-maintenance.ts +0 -6
  40. package/src/server/l4_foundation/pi/l4-pi-plugin-capability-probe.ts +1 -3
  41. package/src/server/l4_foundation/pi/l4-pi-plugin-probe.ts +1 -3
  42. package/src/server/l4_foundation/pi/l4-pi-runner-process.ts +2 -2
  43. package/src/server/l4_foundation/process/l4-process-tree.js +23 -4
  44. package/temp/build/pi-desk/release/.next/BUILD_ID +1 -1
  45. package/temp/build/pi-desk/release/.next/build-manifest.json +3 -3
  46. package/temp/build/pi-desk/release/.next/prerender-manifest.json +3 -3
  47. package/temp/build/pi-desk/release/.next/react-loadable-manifest.json +1 -1
  48. package/temp/build/pi-desk/release/.next/required-server-files.js +3 -2
  49. package/temp/build/pi-desk/release/.next/required-server-files.json +3 -2
  50. package/temp/build/pi-desk/release/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  51. package/temp/build/pi-desk/release/.next/server/app/_global-error.html +1 -1
  52. package/temp/build/pi-desk/release/.next/server/app/_global-error.rsc +1 -1
  53. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  54. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  55. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  56. package/temp/build/pi-desk/release/.next/server/app/_not-found/page.js +1 -1
  57. package/temp/build/pi-desk/release/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  58. package/temp/build/pi-desk/release/.next/server/app/api/health/route.js +1 -1
  59. package/temp/build/pi-desk/release/.next/server/app/api/project-files/get/route.js +2 -1
  60. package/temp/build/pi-desk/release/.next/server/app/api/project-files/list/route.js +2 -1
  61. package/temp/build/pi-desk/release/.next/server/app/api/project-files/reveal/route.js +1 -1
  62. package/temp/build/pi-desk/release/.next/server/app/api/project-files/search/route.js +2 -1
  63. package/temp/build/pi-desk/release/.next/server/app/api/project-git/get/route.js +2 -1
  64. package/temp/build/pi-desk/release/.next/server/app/api/project-git-branches/list/route.js +2 -1
  65. package/temp/build/pi-desk/release/.next/server/app/api/project-git-changes/list/route.js +2 -1
  66. package/temp/build/pi-desk/release/.next/server/app/api/project-git-diff/get/route.js +2 -1
  67. package/temp/build/pi-desk/release/.next/server/app/api/project-git-heads/get/route.js +2 -1
  68. package/temp/build/pi-desk/release/.next/server/app/api/project-git-log/list/route.js +2 -1
  69. package/temp/build/pi-desk/release/.next/server/app/login/page.js +1 -1
  70. package/temp/build/pi-desk/release/.next/server/app/login/page_client-reference-manifest.js +1 -1
  71. package/temp/build/pi-desk/release/.next/server/app/page.js +77 -77
  72. package/temp/build/pi-desk/release/.next/server/app/page_client-reference-manifest.js +1 -1
  73. package/temp/build/pi-desk/release/.next/server/chunks/{33658.js → 10881.js} +8 -8
  74. package/temp/build/pi-desk/release/.next/server/chunks/23054.js +1 -1
  75. package/temp/build/pi-desk/release/.next/server/chunks/25406.js +3 -3
  76. package/temp/build/pi-desk/release/.next/server/chunks/35985.js +5 -5
  77. package/temp/build/pi-desk/release/.next/server/chunks/50520.js +2 -4
  78. package/temp/build/pi-desk/release/.next/server/chunks/6917.js +1 -1
  79. package/temp/build/pi-desk/release/.next/server/chunks/70780.js +1 -0
  80. package/temp/build/pi-desk/release/.next/server/chunks/74528.js +1 -1
  81. package/temp/build/pi-desk/release/.next/server/chunks/92386.js +1 -1
  82. package/temp/build/pi-desk/release/.next/server/instrumentation.js +1 -1
  83. package/temp/build/pi-desk/release/.next/server/middleware-build-manifest.js +1 -1
  84. package/temp/build/pi-desk/release/.next/server/middleware-react-loadable-manifest.js +1 -1
  85. package/temp/build/pi-desk/release/.next/server/pages/500.html +1 -1
  86. package/temp/build/pi-desk/release/.next/server/server-reference-manifest.json +1 -1
  87. package/temp/build/pi-desk/release/.next/static/chunks/27611-0890482fe76bd9d6.js +238 -0
  88. package/temp/build/pi-desk/release/.next/static/chunks/{31087-ba426d09d6f68bfd.js → 31087-d8e5765d541d5c26.js} +1 -1
  89. package/temp/build/pi-desk/release/.next/static/chunks/{49516-cc4dcd84d64ab4fe.js → 51474-8dc714cb76b2e60a.js} +2 -2
  90. package/temp/build/pi-desk/release/.next/static/chunks/77592-5bef6acb8e7c4b96.js +13 -0
  91. package/temp/build/pi-desk/release/.next/static/chunks/app/layout-a50c456648537afb.js +3 -0
  92. package/temp/build/pi-desk/release/.next/static/chunks/app/{page-a984139e99586041.js → page-0789c43551b29dd2.js} +4 -4
  93. package/temp/build/pi-desk/release/.next/static/chunks/{webpack-40a782fc8a3535b9.js → webpack-d7248206b7fc7ba8.js} +1 -1
  94. package/temp/build/pi-desk/release/.next/static/css/250a6b93cc2222d1.css +1 -0
  95. package/temp/build/pi-desk/release/.next/static/css/6dbae2922f88ca31.css +1 -0
  96. package/temp/build/pi-desk/release/.next/static/css/a4cf28fd76c70165.css +1 -0
  97. package/temp/build/pi-desk/release/.next/trace-build +1 -1
  98. package/temp/build/pi-desk/release/.next/server/chunks/8584.js +0 -2
  99. package/temp/build/pi-desk/release/.next/static/chunks/39654-b5fedd762ea0312e.js +0 -238
  100. package/temp/build/pi-desk/release/.next/static/chunks/75130-d2ca74894aff8085.js +0 -13
  101. package/temp/build/pi-desk/release/.next/static/chunks/app/layout-c0e1c5cef8620cf8.js +0 -3
  102. package/temp/build/pi-desk/release/.next/static/css/6427d02b6edf406f.css +0 -1
  103. package/temp/build/pi-desk/release/.next/static/css/79e06f05df9edff0.css +0 -1
  104. /package/temp/build/pi-desk/release/.next/static/{n2LrXQgq8UkbH_AzhR3fw → RLKcK-RQF5FvEeDmS9uih}/_buildManifest.js +0 -0
  105. /package/temp/build/pi-desk/release/.next/static/{n2LrXQgq8UkbH_AzhR3fw → RLKcK-RQF5FvEeDmS9uih}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[31087],{35842:(e,t,n)=>{n.d(t,{X:()=>g});var i=n(7962),s=n(49762),r=n(49362),a=n(24121),l=n(86758),o=n(69266),c=n(78121),d=n(49426),u=n(86963),f=n(1364),p=n(73165),h=n(35989);let m=[{scope:"current",label:"closeTab"},{scope:"others",label:"closeOtherTabs"},{scope:"right",label:"closeRightTabs"},{scope:"left",label:"closeLeftTabs"},{scope:"all",label:"closeAllTabs"}];function x(e,t){let n=e.replaceAll("\\","/").split("/"),i=n.at(-1)??e;return t.some(t=>t!==e&&t.split("/").at(-1)===i)&&n.length>1?n.slice(-2).join("/"):i}function g({cwd:e,gitRuntime:t,paths:n,activePath:v,diffPath:b,mobile:w,onActivate:j,onClose:y}){let{t:C}=(0,c.Bd)("projectFiles");(0,o.useSyncExternalStore)(t.subscribe,t.getRevision,t.getRevision);let k=t.getWorkspace(e)?.snapshot,N=(0,o.useRef)(null),S=(0,o.useRef)(!1),[E,D]=(0,o.useState)(!1),[A,R]=(0,o.useState)(!1),[z,L]=(0,o.useState)([]),M=(w?2:3)*36,T=n.map(e=>({path:e,label:x(e,n),title:e}));b&&T.push({path:null,label:`${x(b,n)} \xb7 Diff`,title:b});let F=b?null:v;return((0,o.useLayoutEffect)(()=>{let e=N.current;if(!e)return;let t=()=>{let t=Array.from(e.children).filter(e=>e instanceof HTMLElement).flatMap((e,t)=>e.offsetTop>=M?[t]:[]);L(e=>e.join(",")===t.join(",")?e:t),R(e.scrollHeight>M);let n=e.querySelector('[aria-selected="true"]')?.closest("[data-file-tab]");n&&n.offsetTop>=M&&D(!0)};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[F,b,M,n]),0===T.length)?null:(0,i.jsxs)("div",{className:"shrink-0 border-b bg-muted","data-testid":"file-tabs",children:[(0,i.jsx)("div",{className:"overflow-hidden",style:{maxHeight:E?void 0:M},children:(0,i.jsx)("div",{ref:N,role:"tablist","aria-label":C("openFiles"),className:"relative flex flex-wrap content-start items-start",children:T.map((t,n)=>{let a=!E&&z.includes(n),l=t.path===F,o=t.path&&k?.status==="ready"?(0,h.lN)(e,t.path,k.repositories)?.change:void 0,c=null===t.path?C("closeDiff",{name:t.title.split("/").at(-1)}):C("closeFile",{name:t.title.split("/").at(-1)});return(0,i.jsxs)(f.tz,{onOpenChange:(e,t)=>{e&&"pointerType"in t.event&&"touch"===t.event.pointerType&&(S.current=!0)},children:[(0,i.jsxs)(f.Rc,{render:(0,i.jsx)("div",{"data-file-tab":!0,"data-testid":null===t.path?`file-diff-tab-${t.title}`:`file-tab-${t.path}`,"aria-hidden":a||void 0,inert:a||void 0,title:t.title,className:(0,d.cn)("flex h-9 max-w-full items-center border-r border-b text-sm",w?"w-[min(50%,12rem)]":"max-w-60",a&&"invisible",l?"bg-background text-foreground shadow-[inset_0_-2px_0_var(--primary)]":"text-muted-foreground"),onPointerDown:e=>{"touch"===e.pointerType&&(S.current=!1)}}),children:[(0,i.jsxs)("button",{type:"button",role:"tab","aria-selected":l,className:"flex h-9 min-w-0 flex-1 cursor-pointer items-center gap-2 pl-3 pr-1 outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",onClick:()=>{if(S.current){S.current=!1;return}null!==t.path&&j(t.path)},onKeyDown:e=>{if("F10"===e.key&&e.shiftKey){e.preventDefault(),e.stopPropagation();let t=e.currentTarget.closest('[data-slot="context-menu-trigger"]');if(t){let e=t.getBoundingClientRect();t.dispatchEvent(new MouseEvent("contextmenu",{bubbles:!0,cancelable:!0,clientX:e.left+e.width/2,clientY:e.top+e.height/2}))}return}let t="ArrowRight"===e.key||"ArrowDown"===e.key?1:"ArrowLeft"===e.key||"ArrowUp"===e.key?-1:0;if(!t)return;e.preventDefault();let i=(n+t+T.length)%T.length;D(!0);let s=N.current?.querySelectorAll('[role="tab"]');s?.[i]?.focus({preventScroll:!0})},children:[(0,i.jsx)(s.A,{className:"size-3.5 shrink-0"}),(0,i.jsx)("span",{className:(0,d.cn)("truncate",o&&(0,h.iH)(o)),children:t.label}),o?(0,i.jsx)("span",{className:(0,d.cn)("shrink-0 text-xs",(0,h.iH)(o)),"aria-label":C("gitStatus",{status:(0,h.XB)(o)}),children:(0,h.XB)(o)}):null]}),(0,i.jsx)(u.$,{variant:"ghost",size:"icon","data-testid":null===t.path?`file-diff-tab-close-${t.title}`:`file-tab-close-${t.path}`,"aria-label":c,onClick:e=>{if(e.stopPropagation(),S.current){S.current=!1;return}y(t.path,"current")},children:(0,i.jsx)(r.A,{className:"size-3.5"})})]}),(0,i.jsx)(p.D,{children:m.map(({scope:e,label:s})=>(0,i.jsxs)("span",{children:["all"===e?(0,i.jsx)(f.K5,{}):null,(0,i.jsx)(f.kt,{disabled:"others"===e?T.length<=1:"left"===e?0===n:"right"===e&&n===T.length-1,onClick:()=>{S.current=!1,y(t.path,e)},children:C(s)})]},e))})]},t.path??"diff")})})}),A?(0,i.jsxs)(u.$,{variant:"ghost",className:"w-full rounded-none text-muted-foreground","aria-expanded":E,onClick:()=>D(e=>!e),children:[E?(0,i.jsx)(a.A,{className:"size-3.5"}):(0,i.jsx)(l.A,{className:"size-3.5"}),E?C("collapseTabs"):C("expandTabs",{count:T.length})]}):null]})}},73068:(e,t,n)=>{n.d(t,{R:()=>M});var i=n(7962),s=n(31123),r=n(28436),a=n(60278),l=n(55628),o=n(47974),c=n(90680),d=n(3433),u=n(41148),f=n(15824),p=n(35995),h=n(49762),m=n(14044),x=n(69266),g=n(78121),v=n(99084),b=n(90504),w=n(91182),j=n(18302),y=n(33550);let C=(0,x.forwardRef)(function({original:e,modified:t,viewMode:n,onEscape:s,savedState:r,onSaveState:a,initialLine:l},o){let{t:c}=(0,g.Bd)("common"),{wrapLines:d,collapseUnchanged:u}=(0,y.TX)(),f=(0,x.useRef)(null),p=(0,x.useRef)(null),h=(0,x.useRef)({viewMode:n,wrapLines:d,collapseUnchanged:u}),v=(0,x.useRef)(s),b=(0,x.useRef)(r),C=(0,x.useRef)(a),k=(0,x.useRef)(l);(0,x.useEffect)(()=>{v.current=s,b.current=r,C.current=a,k.current=l},[l,s,a,r]);let[N,S]=(0,x.useState)("loading"),[E,D]=(0,x.useState)(null);return(0,x.useEffect)(()=>{h.current={viewMode:n,wrapLines:d,collapseUnchanged:u}},[u,n,d]),(0,x.useImperativeHandle)(o,()=>({previousChange(){p.current?.goToDiff("previous")},nextChange(){p.current?.goToDiff("next")},focus(){p.current?.getModifiedEditor().focus()}}),[]),(0,x.useEffect)(()=>{let n=f.current;if(!n)return;let i=!0,s=null,r=null,a=null,l=()=>void 0,o=()=>void 0,d=[];return queueMicrotask(()=>{i&&(S("loading"),D(null))}),(0,w.cu)().then(u=>{if(!i)return;r=u.editor.createModel(e.content,(0,w.ix)(e.path,new TextEncoder().encode(e.content).length),(0,w.B3)(u,e.path,"diff-original")),a=u.editor.createModel(t.content,(0,w.ix)(t.path,new TextEncoder().encode(t.content).length),(0,w.B3)(u,t.path,"diff-modified"));let f=h.current;s=u.editor.createDiffEditor(n,{theme:(0,w.dC)(),readOnly:!0,domReadOnly:!0,editContext:!1,originalEditable:!1,automaticLayout:!0,renderSideBySide:"side-by-side"===f.viewMode,useInlineViewWhenSpaceIsLimited:!1,enableSplitViewResizing:!0,diffAlgorithm:"advanced",ignoreTrimWhitespace:!1,maxComputationTime:5e3,hideUnchangedRegions:f.collapseUnchanged?{enabled:!0,revealLineCount:3,minimumLineCount:6,contextLineCount:3}:{enabled:!1},minimap:{enabled:!1},stickyScroll:{enabled:!1},scrollBeyondLastLine:!1,smoothScrolling:!0,diffWordWrap:f.wrapLines?"on":"off",wrappingIndent:"same",...(0,w.R)(),lineNumbersMinChars:3,renderValidationDecorations:"off",renderWhitespace:"selection",unicodeHighlight:{nonBasicASCII:!1},padding:{top:10,bottom:10},overviewRulerBorder:!1,contextmenu:!0,ariaLabel:c("gitDiffReadOnly")});let m=k.current,x=!1;d.push(s.onDidUpdateDiff(()=>{if(!i||!s)return;let e=s.getLineChanges();if(D(e?.length??null),!x&&null!==e&&void 0!==m){x=!0;let e=Math.max(1,Math.min(m,a?.getLineCount()??1)),t=s.getModifiedEditor();t.setPosition({lineNumber:e,column:1}),t.revealLineInCenter(e)}})),s.setModel({original:r,modified:a}),void 0===m&&b.current&&s.restoreViewState(b.current);let g=()=>C.current?.(s?.saveViewState()??null);d.push(s.getOriginalEditor().onDidScrollChange(g),s.getModifiedEditor().onDidScrollChange(g)),v.current&&((0,j.e)(s.getOriginalEditor(),u.KeyCode.Escape,()=>v.current?.()),(0,j.e)(s.getModifiedEditor(),u.KeyCode.Escape,()=>v.current?.())),p.current=s,l=(0,w.Tr)(e=>u.editor.setTheme(e)),o=(0,w.BK)(e=>s?.updateOptions(e)),S("ready")}).catch(n=>{i&&(console.error("[Pi Desk][CodeDiff] Monaco 加载失败",{originalPath:e.path,modifiedPath:t.path,errorName:n instanceof Error?n.name:"UnknownError"}),S("error"))}),()=>{for(let e of(i=!1,l(),o(),C.current?.(s?.saveViewState()??null),d))e.dispose();p.current=null,s?.setModel(null),s?.dispose(),window.setTimeout(()=>{r?.dispose(),a?.dispose()},0)}},[t.content,t.path,e.content,e.path,c]),(0,x.useEffect)(()=>{p.current?.updateOptions({renderSideBySide:"side-by-side"===n,diffWordWrap:d?"on":"off",hideUnchangedRegions:u?{enabled:!0,revealLineCount:3,minimumLineCount:6,contextLineCount:3}:{enabled:!1}}),"side-by-side"===n&&p.current?.getOriginalEditor().updateOptions({wordWrapOverride2:"inherit"})},[u,n,d]),(0,i.jsxs)("div",{"data-testid":"code-diff",className:"relative flex h-full min-h-0 w-full flex-col overflow-hidden bg-background",children:[(0,i.jsx)("div",{ref:f,className:"min-h-0 flex-1"}),(0,i.jsx)("div",{role:"status","aria-label":c("diffStatus"),className:"flex min-h-6 shrink-0 items-center justify-end border-t px-3 text-xs text-muted-foreground",children:null===E?c("diffCalculating"):c("diffCount",{count:E})}),"loading"===N?(0,i.jsxs)("div",{className:"pointer-events-none absolute inset-0 flex items-center justify-center gap-2 bg-background text-sm text-muted-foreground",children:[(0,i.jsx)(m.A,{className:"size-4 animate-spin"})," ",c("diffLoading")]}):null,"error"===N?(0,i.jsx)("div",{className:"absolute inset-0 flex items-center justify-center p-6 text-center text-sm text-destructive",children:c("diffFailed")}):null]})});var k=n(58840),N=n(51821),S=n(86963),E=n(35989),D=n(32892);function A({label:e,onClick:t,active:n=!1,children:s}){return(0,i.jsxs)(D.m_,{children:[(0,i.jsx)(D.k$,{render:(0,i.jsx)(S.$,{type:"button",size:"icon-sm",variant:"ghost","aria-label":e,"aria-pressed":n||void 0,onPointerDown:e=>e.preventDefault(),onClick:t}),children:s}),(0,i.jsx)(D.ZI,{children:e})]})}var R=n(36510),z=n(46487),L=n(97921);function M({ref:e,runtime:t,gitRuntime:n,compact:m,visible:w=!0,onEscape:j,onSwitchPane:D}){let F,O,B,U,W,$,P,{t:I}=(0,g.Bd)("projectFiles"),{wrapLines:V,diffViewMode:_,collapseUnchanged:H}=(0,y.TX)();(0,x.useSyncExternalStore)(t.subscribe,t.getRevision,t.getRevision);let{activeDiff:K,activePath:X}=t.state,q=!K&&X?t.state.documents.get(X):null,G=X?(0,L.g)(X):null,Y=q?.status==="text"&&(!G||"source"===q.viewMode),Z=(0,x.useRef)(null),J=(0,x.useRef)(null),Q=(0,x.useRef)(null),ee=(0,x.useRef)(null),et=(0,N.G)();(0,x.useImperativeHandle)(e,()=>({focus(){Y?J.current?.focus():K?Q.current?.focus():Z.current?.querySelector('[data-testid="markdown-preview"]')?.focus()}}),[K,Y]),(0,x.useEffect)(()=>{let e=e=>{ee.current&&e.source===ee.current.contentWindow&&("pi-desk:file-escape"===e.data&&j(),"pi-desk:file-switch-pane"===e.data&&D?.())};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[j,D]);let en=()=>{X&&J.current&&t.saveEditorState(X,J.current.getViewState())},{refresh:ei,unavailable:es}=((0,x.useSyncExternalStore)(n.subscribe,n.getRevision,n.getRevision),F=n.getWorkspace(t.cwd)?.snapshot,O=t.state.activePath,B=!!t.state.activeDiff,U=O?t.state.documents.get(O):void 0,W=(0,x.useRef)(en),(0,x.useEffect)(()=>{W.current=en},[en]),$=(0,x.useCallback)(()=>{O&&!B&&(W.current(),t.reloadFile(O),n.refreshSnapshot(t.cwd))},[B,n,O,t]),(0,x.useEffect)(()=>{if(!w||!O||B)return;let e=()=>"visible"===window.document.visibilityState&&!!Z.current?.getClientRects().length&&!Z.current?.closest('[inert], [aria-hidden="true"]'),i=Date.now();e()&&(t.state.documents.get(O)?.status==="text"&&(W.current(),t.reloadFile(O)),n.refreshSnapshot(t.cwd));let s=()=>{!e()||Date.now()-i<1e3||(i=Date.now(),$())};return window.addEventListener("focus",s),window.document.addEventListener("visibilitychange",s),()=>{window.removeEventListener("focus",s),window.document.removeEventListener("visibilitychange",s)}},[w,B,n,Z,O,$,t]),(0,x.useEffect)(()=>{if(!w||!O||B||U?.status!=="text")return;let e=new AbortController,n=F?.status==="ready"?(0,E.lN)(t.cwd,O,F.repositories):null;return t.compareFile(O,n?.repository.state==="ready"&&n.change?{repositoryRoot:n.repository.root,path:n.change.path}:null,e.signal),()=>e.abort()},[w,B,U,O,t,F]),P=O&&F?.status==="ready"?(0,E.lN)(t.cwd,O,F.repositories):null,{refresh:$,unavailable:F?.status==="error"||P?.repository.state==="unavailable"}),er=q?.status==="text"?q.comparison:void 0,[ea,el]=(0,x.useState)(null),eo=er?.status==="ready"&&q?.status==="text"&&ea?.original===er.original.content&&ea.modified===q.content?ea.count:void 0,ec=e=>{X&&(en(),t.openFileDiff(X,e))},ed=es||er?.status==="error"?I("gitMarkersFailed"):er?.status==="unavailable"||er?.status==="ready"&&null===eo?I("gitMarkersUnavailable"):er?.status==="loading"||er?.status==="ready"&&void 0===eo?I("gitMarkersLoading"):er?.status==="ready"?I("gitChangesCount",{count:eo}):null;return(0,i.jsxs)("div",{ref:Z,className:"flex size-full min-h-0 min-w-0 flex-col outline-none",tabIndex:-1,onFocus:e=>{e.target===e.currentTarget&&(Y?J.current?.focus():K?Q.current?.focus():Z.current?.querySelector('[data-testid="markdown-preview"]')?.focus())},children:[K||X?(0,i.jsx)("div",{className:"flex min-h-9 shrink-0 flex-wrap items-center justify-end gap-2 border-b px-3 py-1","aria-label":I("fileActions"),children:K?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)("span",{className:"mr-auto shrink-0 px-1 text-xs text-muted-foreground",children:[K.label??I("headToWorking"),"text"===K.status&&K.original.content===K.modified.content?I("noDiffChanges"):""]}),(0,i.jsx)(A,{label:I("previousChange"),onClick:()=>Q.current?.previousChange(),children:(0,i.jsx)(s.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I("nextChange"),onClick:()=>Q.current?.nextChange(),children:(0,i.jsx)(r.A,{className:"size-4"})}),m?null:(0,i.jsx)(A,{label:"side-by-side"===_?I("inlineDiff"):I("sideBySideDiff"),active:"inline"===_,onClick:()=>t.setDiffViewMode("side-by-side"===_?"inline":"side-by-side"),children:(0,i.jsx)(a.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I(V?"wrapOff":"wrapOn"),active:V,onClick:()=>t.setDiffWrapLines(!V),children:(0,i.jsx)(l.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I(H?"expandUnchanged":"collapseUnchanged"),active:H,onClick:()=>t.setDiffCollapseUnchanged(!H),children:(0,i.jsx)(o.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I("reloadDiff"),onClick:()=>t.reloadDiff(),children:(0,i.jsx)(c.A,{className:"size-4"})})]}):(0,i.jsxs)(i.Fragment,{children:[G&&q?.status==="text"&&X?(0,i.jsx)("div",{className:"mr-auto flex shrink-0",role:"group","aria-label":I("markdown"===G?"markdownMode":"htmlMode"),children:["preview","source"].map(e=>(0,i.jsx)(S.$,{variant:q.viewMode===e?"secondary":"ghost",size:"sm","aria-pressed":q.viewMode===e,onClick:()=>{en(),t.setTextViewMode(X,e)},children:I("preview"===e?"previewMode":"sourceMode")},e))}):null,Y&&ed?(0,i.jsx)("span",{"data-testid":"file-git-status",role:"status",className:"mr-auto min-w-0 truncate text-xs text-muted-foreground",title:er?.status==="error"?er.error:ed,children:m&&er?.status==="ready"&&"number"==typeof eo?I("gitChangesCompact",{count:eo}):ed}):null,Y&&er?.status==="ready"?(0,i.jsxs)(i.Fragment,{children:["number"==typeof eo&&eo>0?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(A,{label:I("previousChange"),onClick:()=>J.current?.previousChange(),children:(0,i.jsx)(s.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I("nextChange"),onClick:()=>J.current?.nextChange(),children:(0,i.jsx)(r.A,{className:"size-4"})})]}):null,(0,i.jsx)(A,{label:I("viewDiff"),onClick:()=>ec(),children:(0,i.jsx)(d.A,{className:"size-4"})})]}):null,Y&&X?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(A,{label:I("findInFile"),onClick:()=>J.current?.openSearch(),children:(0,i.jsx)(u.A,{className:"size-4"})}),m?null:(0,i.jsx)(A,{label:I("goToLine"),onClick:()=>J.current?.gotoLine(),children:(0,i.jsx)(f.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I(V?"wrapOff":"wrapOn"),active:V,onClick:()=>t.setWrapLines(X,!V),children:(0,i.jsx)(l.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I("copySelectionOrAll"),onClick:()=>{if(q?.status!=="text")return;let e=J.current?.getSelectionText()??"";(0,v.x)(e||q.content).then(t=>{t?et.success(I(e?"selectedCodeCopied":"allCodeCopied")):et.error(I("copyContentFailed"))})},children:(0,i.jsx)(p.A,{className:"size-4"})})]}):null,X?(0,i.jsx)(A,{label:I("reloadCurrentFile"),onClick:ei,children:(0,i.jsx)(c.A,{className:"size-4"})}):null]})}):null,(0,i.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden pb-[env(safe-area-inset-bottom)]",children:K?"text"===K.status?(0,i.jsx)(C,{ref:Q,original:K.original,modified:K.modified,viewMode:m?"inline":_,savedState:K.editorState,initialLine:K.initialLine,onSaveState:e=>t.saveDiffState(K,e),onEscape:j},`${K.repositoryRoot}:${K.path}`):"metadata"===K.status?(0,i.jsxs)("div",{className:"grid h-full grid-cols-1 gap-4 overflow-auto p-4 md:grid-cols-2",children:[(0,i.jsx)("pre",{className:"whitespace-pre-wrap break-all text-sm",children:K.originalMetadata}),(0,i.jsx)("pre",{className:"whitespace-pre-wrap break-all text-sm",children:K.modifiedMetadata})]}):"loading"===K.status?(0,i.jsx)(T,{}):(0,i.jsxs)("div",{className:"flex size-full flex-col items-center justify-center gap-3 p-6 text-center text-sm",children:[(0,i.jsx)("p",{className:"text-muted-foreground",children:"binary"===K.status?I("binaryDiffUnavailable"):"too_large"===K.status?I("largeDiffUnavailable"):K.error}),"error"===K.status?(0,i.jsx)(S.$,{variant:"outline",onClick:()=>t.reloadDiff(),children:I("readAgain")}):null]}):X&&q?"loading"===q.status||"unloaded"===q.status?(0,i.jsx)(T,{}):"error"===q.status?(0,i.jsxs)("div",{className:"flex size-full flex-col items-center justify-center gap-3 p-6 text-center",children:[(0,i.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:q.error}),(0,i.jsx)(S.$,{variant:"outline",onClick:()=>t.reloadFile(X),children:I("readAgain")})]}):"image"===q.status?(0,i.jsx)(k.k,{mode:"inline",slides:[{src:q.objectUrl,alt:X}],ariaLabel:I("imageViewer",{name:X.replaceAll("\\","/").split("/").at(-1)??X})},q.objectUrl):"markdown"===G&&"preview"===q.viewMode?(0,i.jsx)(z.n,{content:q.content,label:I("markdownPreview",{name:X}),savedScrollTop:q.previewScrollTop,onScroll:e=>t.savePreviewScrollTop(X,e)},X):"html"===G&&"preview"===q.viewMode?(0,i.jsx)("iframe",{ref:ee,className:"block size-full border-0 bg-white",sandbox:"allow-scripts",srcDoc:(0,R.z)(q.content),title:I("htmlPreview",{name:X})}):(0,i.jsx)(b.e,{ref:J,path:X,content:q.content,size:q.size,originalContent:er?.status==="ready"?er.original.content:void 0,onChanges:e=>{er?.status==="ready"&&el({original:er.original.content,modified:q.content,count:e})},onOpenDiff:ec,savedState:q.editorState,onSaveState:(e,n)=>t.saveEditorState(e,n),onEscape:j},X):(0,i.jsxs)("div",{"data-testid":"file-workspace-empty",className:"flex size-full flex-col items-center justify-center gap-3 p-6 text-sm text-muted-foreground",children:[(0,i.jsx)(h.A,{className:"size-6"}),I("noOpenFile")]})})]})}function T(){let{t:e}=(0,g.Bd)("projectFiles");return(0,i.jsxs)("div",{className:"flex size-full items-center justify-center gap-2 text-sm text-muted-foreground",children:[(0,i.jsx)(m.A,{className:"size-4 animate-spin"}),e("loadingFile")]})}}}]);
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[31087],{35842:(e,t,n)=>{n.d(t,{X:()=>g});var i=n(7962),s=n(49762),r=n(49362),a=n(24121),l=n(86758),o=n(69266),c=n(78121),d=n(49426),u=n(86963),f=n(1364),p=n(73165),h=n(35989);let m=[{scope:"current",label:"closeTab"},{scope:"others",label:"closeOtherTabs"},{scope:"right",label:"closeRightTabs"},{scope:"left",label:"closeLeftTabs"},{scope:"all",label:"closeAllTabs"}];function x(e,t){let n=e.replaceAll("\\","/").split("/"),i=n.at(-1)??e;return t.some(t=>t!==e&&t.split("/").at(-1)===i)&&n.length>1?n.slice(-2).join("/"):i}function g({cwd:e,gitRuntime:t,paths:n,activePath:v,diffPath:b,mobile:w,onActivate:j,onClose:y}){let{t:C}=(0,c.Bd)("projectFiles");(0,o.useSyncExternalStore)(t.subscribe,t.getRevision,t.getRevision);let k=t.getWorkspace(e)?.snapshot,N=(0,o.useRef)(null),S=(0,o.useRef)(!1),[E,D]=(0,o.useState)(!1),[A,R]=(0,o.useState)(!1),[z,L]=(0,o.useState)([]),M=(w?2:3)*36,T=n.map(e=>({path:e,label:x(e,n),title:e}));b&&T.push({path:null,label:`${x(b,n)} \xb7 Diff`,title:b});let F=b?null:v;return((0,o.useLayoutEffect)(()=>{let e=N.current;if(!e)return;let t=()=>{let t=Array.from(e.children).filter(e=>e instanceof HTMLElement).flatMap((e,t)=>e.offsetTop>=M?[t]:[]);L(e=>e.join(",")===t.join(",")?e:t),R(e.scrollHeight>M);let n=e.querySelector('[aria-selected="true"]')?.closest("[data-file-tab]");n&&n.offsetTop>=M&&D(!0)};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[F,b,M,n]),0===T.length)?null:(0,i.jsxs)("div",{className:"shrink-0 border-b bg-muted","data-testid":"file-tabs",children:[(0,i.jsx)("div",{className:"overflow-hidden",style:{maxHeight:E?void 0:M},children:(0,i.jsx)("div",{ref:N,role:"tablist","aria-label":C("openFiles"),className:"relative flex flex-wrap content-start items-start",children:T.map((t,n)=>{let a=!E&&z.includes(n),l=t.path===F,o=t.path&&k?.status==="ready"?(0,h.lN)(e,t.path,k.repositories)?.change:void 0,c=null===t.path?C("closeDiff",{name:t.title.split("/").at(-1)}):C("closeFile",{name:t.title.split("/").at(-1)});return(0,i.jsxs)(f.tz,{onOpenChange:(e,t)=>{e&&"pointerType"in t.event&&"touch"===t.event.pointerType&&(S.current=!0)},children:[(0,i.jsxs)(f.Rc,{render:(0,i.jsx)("div",{"data-file-tab":!0,"data-testid":null===t.path?`file-diff-tab-${t.title}`:`file-tab-${t.path}`,"aria-hidden":a||void 0,inert:a||void 0,title:t.title,className:(0,d.cn)("flex h-9 max-w-full items-center border-r border-b text-sm",w?"w-[min(50%,12rem)]":"max-w-60",a&&"invisible",l?"bg-background text-foreground shadow-[inset_0_-2px_0_var(--primary)]":"text-muted-foreground"),onPointerDown:e=>{"touch"===e.pointerType&&(S.current=!1)}}),children:[(0,i.jsxs)("button",{type:"button",role:"tab","aria-selected":l,className:"flex h-9 min-w-0 flex-1 cursor-pointer items-center gap-2 pl-3 pr-1 outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",onClick:()=>{if(S.current){S.current=!1;return}null!==t.path&&j(t.path)},onKeyDown:e=>{if("F10"===e.key&&e.shiftKey){e.preventDefault(),e.stopPropagation();let t=e.currentTarget.closest('[data-slot="context-menu-trigger"]');if(t){let e=t.getBoundingClientRect();t.dispatchEvent(new MouseEvent("contextmenu",{bubbles:!0,cancelable:!0,clientX:e.left+e.width/2,clientY:e.top+e.height/2}))}return}let t="ArrowRight"===e.key||"ArrowDown"===e.key?1:"ArrowLeft"===e.key||"ArrowUp"===e.key?-1:0;if(!t)return;e.preventDefault();let i=(n+t+T.length)%T.length;D(!0);let s=N.current?.querySelectorAll('[role="tab"]');s?.[i]?.focus({preventScroll:!0})},children:[(0,i.jsx)(s.A,{className:"size-3.5 shrink-0"}),(0,i.jsx)("span",{className:(0,d.cn)("truncate",o&&(0,h.iH)(o)),children:t.label}),o?(0,i.jsx)("span",{className:(0,d.cn)("shrink-0 text-xs",(0,h.iH)(o)),"aria-label":C("gitStatus",{status:(0,h.XB)(o)}),children:(0,h.XB)(o)}):null]}),(0,i.jsx)(u.$,{variant:"ghost",size:"icon","data-testid":null===t.path?`file-diff-tab-close-${t.title}`:`file-tab-close-${t.path}`,"aria-label":c,onClick:e=>{if(e.stopPropagation(),S.current){S.current=!1;return}y(t.path,"current")},children:(0,i.jsx)(r.A,{className:"size-3.5"})})]}),(0,i.jsx)(p.D,{children:m.map(({scope:e,label:s})=>(0,i.jsxs)("span",{children:["all"===e?(0,i.jsx)(f.K5,{}):null,(0,i.jsx)(f.kt,{disabled:"others"===e?T.length<=1:"left"===e?0===n:"right"===e&&n===T.length-1,onClick:()=>{S.current=!1,y(t.path,e)},children:C(s)})]},e))})]},t.path??"diff")})})}),A?(0,i.jsxs)(u.$,{variant:"ghost",className:"w-full rounded-none text-muted-foreground","aria-expanded":E,onClick:()=>D(e=>!e),children:[E?(0,i.jsx)(a.A,{className:"size-3.5"}):(0,i.jsx)(l.A,{className:"size-3.5"}),E?C("collapseTabs"):C("expandTabs",{count:T.length})]}):null]})}},73068:(e,t,n)=>{n.d(t,{R:()=>M});var i=n(7962),s=n(31123),r=n(28436),a=n(60278),l=n(55628),o=n(47974),c=n(90680),d=n(3433),u=n(41148),f=n(15824),p=n(35995),h=n(49762),m=n(14044),x=n(69266),g=n(78121),v=n(99084),b=n(90504),w=n(91182),j=n(18302),y=n(33550);let C=(0,x.forwardRef)(function({original:e,modified:t,viewMode:n,onEscape:s,savedState:r,onSaveState:a,initialLine:l},o){let{t:c}=(0,g.Bd)("common"),{wrapLines:d,collapseUnchanged:u}=(0,y.TX)(),f=(0,x.useRef)(null),p=(0,x.useRef)(null),h=(0,x.useRef)({viewMode:n,wrapLines:d,collapseUnchanged:u}),v=(0,x.useRef)(s),b=(0,x.useRef)(r),C=(0,x.useRef)(a),k=(0,x.useRef)(l);(0,x.useEffect)(()=>{v.current=s,b.current=r,C.current=a,k.current=l},[l,s,a,r]);let[N,S]=(0,x.useState)("loading"),[E,D]=(0,x.useState)(null);return(0,x.useEffect)(()=>{h.current={viewMode:n,wrapLines:d,collapseUnchanged:u}},[u,n,d]),(0,x.useImperativeHandle)(o,()=>({previousChange(){p.current?.goToDiff("previous")},nextChange(){p.current?.goToDiff("next")},focus(){p.current?.getModifiedEditor().focus()}}),[]),(0,x.useEffect)(()=>{let n=f.current;if(!n)return;let i=!0,s=null,r=null,a=null,l=()=>void 0,o=()=>void 0,d=[];return queueMicrotask(()=>{i&&(S("loading"),D(null))}),(0,w.cu)().then(u=>{if(!i)return;r=u.editor.createModel(e.content,(0,w.ix)(e.path,new TextEncoder().encode(e.content).length),(0,w.B3)(u,e.path,"diff-original")),a=u.editor.createModel(t.content,(0,w.ix)(t.path,new TextEncoder().encode(t.content).length),(0,w.B3)(u,t.path,"diff-modified"));let f=h.current;s=u.editor.createDiffEditor(n,{theme:(0,w.dC)(),readOnly:!0,domReadOnly:!0,editContext:!1,originalEditable:!1,automaticLayout:!0,renderSideBySide:"side-by-side"===f.viewMode,useInlineViewWhenSpaceIsLimited:!1,enableSplitViewResizing:!0,diffAlgorithm:"advanced",ignoreTrimWhitespace:!1,maxComputationTime:5e3,hideUnchangedRegions:f.collapseUnchanged?{enabled:!0,revealLineCount:3,minimumLineCount:6,contextLineCount:3}:{enabled:!1},minimap:{enabled:!1},stickyScroll:{enabled:!1},scrollBeyondLastLine:!1,smoothScrolling:!0,diffWordWrap:f.wrapLines?"on":"off",wrappingIndent:"same",...(0,w.R)(),lineNumbersMinChars:3,renderValidationDecorations:"off",renderWhitespace:"selection",unicodeHighlight:{nonBasicASCII:!1},padding:{top:10,bottom:10},overviewRulerBorder:!1,contextmenu:!0,ariaLabel:c("gitDiffReadOnly")});let m=k.current,x=!1;d.push(s.onDidUpdateDiff(()=>{if(!i||!s)return;let e=s.getLineChanges();if(D(e?.length??null),!x&&null!==e&&void 0!==m){x=!0;let e=Math.max(1,Math.min(m,a?.getLineCount()??1)),t=s.getModifiedEditor();t.setPosition({lineNumber:e,column:1}),t.revealLineInCenter(e)}})),s.setModel({original:r,modified:a}),void 0===m&&b.current&&s.restoreViewState(b.current);let g=()=>C.current?.(s?.saveViewState()??null);d.push(s.getOriginalEditor().onDidScrollChange(g),s.getModifiedEditor().onDidScrollChange(g)),v.current&&((0,j.e)(s.getOriginalEditor(),u.KeyCode.Escape,()=>v.current?.()),(0,j.e)(s.getModifiedEditor(),u.KeyCode.Escape,()=>v.current?.())),p.current=s,l=(0,w.Tr)(e=>u.editor.setTheme(e)),o=(0,w.BK)(e=>s?.updateOptions(e)),S("ready")}).catch(n=>{i&&(console.error("[Pi Desk][CodeDiff] Monaco 加载失败",{originalPath:e.path,modifiedPath:t.path,errorName:n instanceof Error?n.name:"UnknownError"}),S("error"))}),()=>{for(let e of(i=!1,l(),o(),C.current?.(s?.saveViewState()??null),d))e.dispose();p.current=null,s?.setModel(null),s?.dispose(),window.setTimeout(()=>{r?.dispose(),a?.dispose()},0)}},[t.content,t.path,e.content,e.path,c]),(0,x.useEffect)(()=>{p.current?.updateOptions({renderSideBySide:"side-by-side"===n,diffWordWrap:d?"on":"off",hideUnchangedRegions:u?{enabled:!0,revealLineCount:3,minimumLineCount:6,contextLineCount:3}:{enabled:!1}}),"side-by-side"===n&&p.current?.getOriginalEditor().updateOptions({wordWrapOverride2:"inherit"})},[u,n,d]),(0,i.jsxs)("div",{"data-testid":"code-diff",className:"relative flex h-full min-h-0 w-full flex-col overflow-hidden bg-background",children:[(0,i.jsx)("div",{ref:f,className:"min-h-0 flex-1"}),(0,i.jsx)("div",{role:"status","aria-label":c("diffStatus"),className:"flex min-h-6 shrink-0 items-center justify-end border-t px-3 text-xs text-muted-foreground",children:null===E?c("diffCalculating"):c("diffCount",{count:E})}),"loading"===N?(0,i.jsxs)("div",{className:"pointer-events-none absolute inset-0 flex items-center justify-center gap-2 bg-background text-sm text-muted-foreground",children:[(0,i.jsx)(m.A,{className:"size-4 animate-spin"})," ",c("diffLoading")]}):null,"error"===N?(0,i.jsx)("div",{className:"absolute inset-0 flex items-center justify-center p-6 text-center text-sm text-destructive",children:c("diffFailed")}):null]})});var k=n(58840),N=n(51821),S=n(86963),E=n(35989),D=n(32892);function A({label:e,onClick:t,active:n=!1,children:s}){return(0,i.jsxs)(D.m_,{children:[(0,i.jsx)(D.k$,{render:(0,i.jsx)(S.$,{type:"button",size:"icon-sm",variant:"ghost","aria-label":e,"aria-pressed":n||void 0,onPointerDown:e=>e.preventDefault(),onClick:t}),children:s}),(0,i.jsx)(D.ZI,{children:e})]})}var R=n(36510),z=n(46487),L=n(97921);function M({ref:e,runtime:t,gitRuntime:n,compact:m,visible:w=!0,onEscape:j,onSwitchPane:D}){let F,O,B,U,W,$,P,{t:I}=(0,g.Bd)("projectFiles"),{wrapLines:V,diffViewMode:_,collapseUnchanged:H}=(0,y.TX)();(0,x.useSyncExternalStore)(t.subscribe,t.getRevision,t.getRevision);let{activeDiff:K,activePath:X}=t.state,q=!K&&X?t.state.documents.get(X):null,G=X?(0,L.g)(X):null,Y=q?.status==="text"&&(!G||"source"===q.viewMode),Z=(0,x.useRef)(null),J=(0,x.useRef)(null),Q=(0,x.useRef)(null),ee=(0,x.useRef)(null),et=(0,N.G)();(0,x.useImperativeHandle)(e,()=>({focus(){Y?J.current?.focus():K?Q.current?.focus():Z.current?.querySelector('[data-testid="markdown-preview"]')?.focus()}}),[K,Y]),(0,x.useEffect)(()=>{let e=e=>{ee.current&&e.source===ee.current.contentWindow&&("pi-desk:file-escape"===e.data&&j(),"pi-desk:file-switch-pane"===e.data&&D?.())};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[j,D]);let en=()=>{X&&J.current&&t.saveEditorState(X,J.current.getViewState())},{refresh:ei,unavailable:es}=((0,x.useSyncExternalStore)(n.subscribe,n.getRevision,n.getRevision),F=n.getWorkspace(t.cwd)?.snapshot,O=t.state.activePath,B=!!t.state.activeDiff,U=O?t.state.documents.get(O):void 0,W=(0,x.useRef)(en),(0,x.useEffect)(()=>{W.current=en},[en]),$=(0,x.useCallback)(()=>{O&&!B&&(W.current(),t.reloadFile(O),n.refreshSnapshot(t.cwd))},[B,n,O,t]),(0,x.useEffect)(()=>{if(!w||!O||B)return;let e=()=>"visible"===window.document.visibilityState&&!!Z.current?.getClientRects().length&&!Z.current?.closest('[inert], [aria-hidden="true"]'),i=Date.now();e()&&(t.state.documents.get(O)?.status==="text"&&(W.current(),t.reloadFile(O)),n.refreshSnapshot(t.cwd));let s=()=>{!e()||Date.now()-i<1e3||(i=Date.now(),$())};return window.addEventListener("focus",s),window.document.addEventListener("visibilitychange",s),()=>{window.removeEventListener("focus",s),window.document.removeEventListener("visibilitychange",s)}},[w,B,n,Z,O,$,t]),(0,x.useEffect)(()=>{if(!w||!O||B||U?.status!=="text")return;let e=new AbortController,n=F?.status==="ready"?(0,E.lN)(t.cwd,O,F.repositories):null;return t.compareFile(O,n?.repository.state==="ready"&&n.change?{repositoryRoot:n.repository.root,path:n.change.path}:null,e.signal),()=>e.abort()},[w,B,U,O,t,F]),P=O&&F?.status==="ready"?(0,E.lN)(t.cwd,O,F.repositories):null,{refresh:$,unavailable:F?.status==="error"||P?.repository.state==="unavailable"}),er=q?.status==="text"?q.comparison:void 0,[ea,el]=(0,x.useState)(null),eo=er?.status==="ready"&&q?.status==="text"&&ea?.original===er.original.content&&ea.modified===q.content?ea.count:void 0,ec=e=>{X&&(en(),t.openFileDiff(X,e))},ed=es||er?.status==="error"?I("gitMarkersFailed"):er?.status==="unavailable"||er?.status==="ready"&&null===eo?I("gitMarkersUnavailable"):er?.status==="loading"||er?.status==="ready"&&void 0===eo?I("gitMarkersLoading"):er?.status==="ready"?I("gitChangesCount",{count:eo}):null;return(0,i.jsxs)("div",{ref:Z,className:"flex size-full min-h-0 min-w-0 flex-col outline-none",tabIndex:-1,onFocus:e=>{e.target===e.currentTarget&&(Y?J.current?.focus():K?Q.current?.focus():Z.current?.querySelector('[data-testid="markdown-preview"]')?.focus())},children:[K||X?(0,i.jsx)("div",{className:"flex min-h-9 shrink-0 flex-wrap items-center justify-end gap-2 border-b px-3 py-1","aria-label":I("fileActions"),children:K?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)("span",{className:"mr-auto shrink-0 px-1 text-xs text-muted-foreground",children:[K.label??I("headToWorking"),"text"===K.status&&K.original.content===K.modified.content?I("noDiffChanges"):""]}),(0,i.jsx)(A,{label:I("previousChange"),onClick:()=>Q.current?.previousChange(),children:(0,i.jsx)(s.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I("nextChange"),onClick:()=>Q.current?.nextChange(),children:(0,i.jsx)(r.A,{className:"size-4"})}),m?null:(0,i.jsx)(A,{label:"side-by-side"===_?I("inlineDiff"):I("sideBySideDiff"),active:"inline"===_,onClick:()=>t.setDiffViewMode("side-by-side"===_?"inline":"side-by-side"),children:(0,i.jsx)(a.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I(V?"wrapOff":"wrapOn"),active:V,onClick:()=>t.setDiffWrapLines(!V),children:(0,i.jsx)(l.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I(H?"expandUnchanged":"collapseUnchanged"),active:H,onClick:()=>t.setDiffCollapseUnchanged(!H),children:(0,i.jsx)(o.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I("reloadDiff"),onClick:()=>t.reloadDiff(),children:(0,i.jsx)(c.A,{className:"size-4"})})]}):(0,i.jsxs)(i.Fragment,{children:[G&&q?.status==="text"&&X?(0,i.jsx)("div",{className:"mr-auto flex shrink-0",role:"group","aria-label":I("markdown"===G?"markdownMode":"htmlMode"),children:["preview","source"].map(e=>(0,i.jsx)(S.$,{variant:q.viewMode===e?"secondary":"ghost",size:"sm","aria-pressed":q.viewMode===e,onClick:()=>{en(),t.setTextViewMode(X,e)},children:I("preview"===e?"previewMode":"sourceMode")},e))}):null,Y&&ed?(0,i.jsx)("span",{"data-testid":"file-git-status",role:"status",className:"mr-auto min-w-0 truncate text-xs text-muted-foreground",title:er?.status==="error"?er.error:ed,children:m&&er?.status==="ready"&&"number"==typeof eo?I("gitChangesCompact",{count:eo}):ed}):null,Y&&er?.status==="ready"?(0,i.jsxs)(i.Fragment,{children:["number"==typeof eo&&eo>0?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(A,{label:I("previousChange"),onClick:()=>J.current?.previousChange(),children:(0,i.jsx)(s.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I("nextChange"),onClick:()=>J.current?.nextChange(),children:(0,i.jsx)(r.A,{className:"size-4"})})]}):null,(0,i.jsx)(A,{label:I("viewDiff"),onClick:()=>ec(),children:(0,i.jsx)(d.A,{className:"size-4"})})]}):null,Y&&X?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(A,{label:I("findInFile"),onClick:()=>J.current?.openSearch(),children:(0,i.jsx)(u.A,{className:"size-4"})}),m?null:(0,i.jsx)(A,{label:I("goToLine"),onClick:()=>J.current?.gotoLine(),children:(0,i.jsx)(f.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I(V?"wrapOff":"wrapOn"),active:V,onClick:()=>t.setWrapLines(X,!V),children:(0,i.jsx)(l.A,{className:"size-4"})}),(0,i.jsx)(A,{label:I("copySelectionOrAll"),onClick:()=>{if(q?.status!=="text")return;let e=J.current?.getSelectionText()??"";(0,v.x)(e||q.content).then(t=>{t?et.success(I(e?"selectedCodeCopied":"allCodeCopied")):et.error(I("copyContentFailed"))})},children:(0,i.jsx)(p.A,{className:"size-4"})})]}):null,X?(0,i.jsx)(A,{label:I("reloadCurrentFile"),onClick:ei,children:(0,i.jsx)(c.A,{className:"size-4"})}):null]})}):null,(0,i.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden pb-[env(safe-area-inset-bottom)]",children:K?"text"===K.status?(0,i.jsx)(C,{ref:Q,original:K.original,modified:K.modified,viewMode:m?"inline":_,savedState:K.editorState,initialLine:K.initialLine,onSaveState:e=>t.saveDiffState(K,e),onEscape:j},`${K.repositoryRoot}:${K.path}`):"metadata"===K.status?(0,i.jsxs)("div",{className:"grid h-full grid-cols-1 gap-4 overflow-auto p-4 md:grid-cols-2",children:[(0,i.jsx)("pre",{className:"whitespace-pre-wrap break-all text-sm",children:K.originalMetadata}),(0,i.jsx)("pre",{className:"whitespace-pre-wrap break-all text-sm",children:K.modifiedMetadata})]}):"loading"===K.status?(0,i.jsx)(T,{}):(0,i.jsxs)("div",{className:"flex size-full flex-col items-center justify-center gap-3 p-6 text-center text-sm",children:[(0,i.jsx)("p",{className:"text-muted-foreground",children:"binary"===K.status?I("binaryDiffUnavailable"):"too_large"===K.status?I("largeDiffUnavailable"):K.error}),"error"===K.status?(0,i.jsx)(S.$,{variant:"outline",onClick:()=>t.reloadDiff(),children:I("readAgain")}):null]}):X&&q?"loading"===q.status||"unloaded"===q.status?(0,i.jsx)(T,{}):"error"===q.status?(0,i.jsxs)("div",{className:"flex size-full flex-col items-center justify-center gap-3 p-6 text-center",children:[(0,i.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:q.error}),(0,i.jsx)(S.$,{variant:"outline",onClick:()=>t.reloadFile(X),children:I("readAgain")})]}):"image"===q.status?(0,i.jsx)(k.k,{mode:"inline",slides:[{src:q.objectUrl,alt:X}],ariaLabel:I("imageViewer",{name:X.replaceAll("\\","/").split("/").at(-1)??X})},q.objectUrl):"markdown"===G&&"preview"===q.viewMode?(0,i.jsx)(z.n,{content:q.content,label:I("markdownPreview",{name:X}),savedScrollTop:q.previewScrollTop,onScroll:e=>t.savePreviewScrollTop(X,e)},X):"html"===G&&"preview"===q.viewMode?(0,i.jsx)("iframe",{ref:ee,className:"block size-full border-0 bg-white",sandbox:"allow-scripts",srcDoc:(0,R.z)(q.content),title:I("htmlPreview",{name:X})}):(0,i.jsx)(b.e,{ref:J,path:X,content:q.content,size:q.size,originalContent:er?.status==="ready"?er.original.content:void 0,onChanges:e=>{er?.status==="ready"&&el({original:er.original.content,modified:q.content,count:e})},onOpenDiff:ec,savedState:q.editorState,navigation:t.pendingNavigation,onNavigation:(e,n)=>t.consumeNavigation(e,n),onSaveState:(e,n)=>t.saveEditorState(e,n),onEscape:j},X):(0,i.jsxs)("div",{"data-testid":"file-workspace-empty",className:"flex size-full flex-col items-center justify-center gap-3 p-6 text-sm text-muted-foreground",children:[(0,i.jsx)(h.A,{className:"size-6"}),I("noOpenFile")]})})]})}function T(){let{t:e}=(0,g.Bd)("projectFiles");return(0,i.jsxs)("div",{className:"flex size-full items-center justify-center gap-2 text-sm text-muted-foreground",children:[(0,i.jsx)(m.A,{className:"size-4 animate-spin"}),e("loadingFile")]})}}}]);