@neuralnomads/codenomad-dev 0.20.0-dev-20260922-e68ac524 → 0.20.0-dev-20260922-5650ed9d

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 (81) hide show
  1. package/dist/workspaces/__tests__/git-common-directory.test.js +11 -0
  2. package/dist/workspaces/__tests__/git-common-directory.test.js.map +1 -1
  3. package/dist/workspaces/git-process.js +16 -6
  4. package/dist/workspaces/git-process.js.map +1 -1
  5. package/dist/workspaces/git-status.js +32 -38
  6. package/dist/workspaces/git-status.js.map +1 -1
  7. package/dist/workspaces/git-status.test.js +28 -1
  8. package/dist/workspaces/git-status.test.js.map +1 -1
  9. package/package.json +1 -1
  10. package/public/assets/App-BInh9z8B.js +51 -0
  11. package/public/assets/App-BInh9z8B.js.map +1 -0
  12. package/public/assets/{FilesTab-CznSFRW_.js → FilesTab-Bz3ekii-.js} +3 -3
  13. package/public/assets/{FilesTab-CznSFRW_.js.map → FilesTab-Bz3ekii-.js.map} +1 -1
  14. package/public/assets/{GitChangesTab-DLtyzpX0.js → GitChangesTab-DEmFm9X9.js} +3 -3
  15. package/public/assets/{GitChangesTab-DLtyzpX0.js.map → GitChangesTab-DEmFm9X9.js.map} +1 -1
  16. package/public/assets/{SplitFilePanel-BHkyIER4.js → SplitFilePanel-D9KFC8Yo.js} +2 -2
  17. package/public/assets/{SplitFilePanel-BHkyIER4.js.map → SplitFilePanel-D9KFC8Yo.js.map} +1 -1
  18. package/public/assets/{StatusTab-BB3L4UEF.js → StatusTab-V8ZSDdnZ.js} +2 -2
  19. package/public/assets/{StatusTab-BB3L4UEF.js.map → StatusTab-V8ZSDdnZ.js.map} +1 -1
  20. package/public/assets/{align-justify-BGcr8Y3G.js → align-justify-Bi3yHu8i.js} +2 -2
  21. package/public/assets/{align-justify-BGcr8Y3G.js.map → align-justify-Bi3yHu8i.js.map} +1 -1
  22. package/public/assets/{bundle-full-CwHbX2Tz.js → bundle-full-CSLya0fX.js} +2 -2
  23. package/public/assets/{bundle-full-CwHbX2Tz.js.map → bundle-full-CSLya0fX.js.map} +1 -1
  24. package/public/assets/{client-state-CjVIIkWh.js → client-state-BZr92Odb.js} +2 -2
  25. package/public/assets/{client-state-CjVIIkWh.js.map → client-state-BZr92Odb.js.map} +1 -1
  26. package/public/assets/{diff-viewer-FNBCogHl.js → diff-viewer-DHy_0NiU.js} +2 -2
  27. package/public/assets/{diff-viewer-FNBCogHl.js.map → diff-viewer-DHy_0NiU.js.map} +1 -1
  28. package/public/assets/{index-AeE49W2c.js → index-B80YtNDR.js} +2 -2
  29. package/public/assets/{index-AeE49W2c.js.map → index-B80YtNDR.js.map} +1 -1
  30. package/public/assets/{index-D292-iMl.js → index-BF4aeRZL.js} +2 -2
  31. package/public/assets/{index-D292-iMl.js.map → index-BF4aeRZL.js.map} +1 -1
  32. package/public/assets/{index-Dk3HFhZs.js → index-BMM7DX4E.js} +2 -2
  33. package/public/assets/{index-Dk3HFhZs.js.map → index-BMM7DX4E.js.map} +1 -1
  34. package/public/assets/{index-CaYFZAN4.js → index-C5fAhE7q.js} +2 -2
  35. package/public/assets/{index-CaYFZAN4.js.map → index-C5fAhE7q.js.map} +1 -1
  36. package/public/assets/{index-CLdQSSfU.js → index-Cr0fq_1m.js} +2 -2
  37. package/public/assets/{index-CLdQSSfU.js.map → index-Cr0fq_1m.js.map} +1 -1
  38. package/public/assets/{index-BhInW6hR.js → index-DTM4JCOg.js} +3 -3
  39. package/public/assets/{index-BhInW6hR.js.map → index-DTM4JCOg.js.map} +1 -1
  40. package/public/assets/{index-C9vJvaFa.js → index-DUSHdfNt.js} +2 -2
  41. package/public/assets/{index-C9vJvaFa.js.map → index-DUSHdfNt.js.map} +1 -1
  42. package/public/assets/{index-ChudAs0f.js → index-DvzNUKxQ.js} +2 -2
  43. package/public/assets/{index-ChudAs0f.js.map → index-DvzNUKxQ.js.map} +1 -1
  44. package/public/assets/index-DyV5PLqt.js +2 -0
  45. package/public/assets/{index-C2jBtFkI.js.map → index-DyV5PLqt.js.map} +1 -1
  46. package/public/assets/{index-CLgpBTF6.js → index-aeY5PFwo.js} +2 -2
  47. package/public/assets/{index-CLgpBTF6.js.map → index-aeY5PFwo.js.map} +1 -1
  48. package/public/assets/{index-B875QQLi.js → index-je4g4OjU.js} +2 -2
  49. package/public/assets/{index-B875QQLi.js.map → index-je4g4OjU.js.map} +1 -1
  50. package/public/assets/{index-C8zCyB6Z.js → index-vOjZjElj.js} +2 -2
  51. package/public/assets/{index-C8zCyB6Z.js.map → index-vOjZjElj.js.map} +1 -1
  52. package/public/assets/{loading-D8BcUQaM.js → loading-XXcoiSPg.js} +2 -2
  53. package/public/assets/{loading-D8BcUQaM.js.map → loading-XXcoiSPg.js.map} +1 -1
  54. package/public/assets/main-C_TdncJ5.js +42 -0
  55. package/public/assets/main-C_TdncJ5.js.map +1 -0
  56. package/public/assets/{markdown-CRPEbAqL.js → markdown-DcIkkDVW.js} +4 -4
  57. package/public/assets/{markdown-CRPEbAqL.js.map → markdown-DcIkkDVW.js.map} +1 -1
  58. package/public/assets/{monaco-viewer-CG0aPZ-r.js → monaco-viewer-DWKuMLsd.js} +2 -2
  59. package/public/assets/monaco-viewer-DWKuMLsd.js.map +1 -0
  60. package/public/assets/{startup-state-settings-card-CHqS2Pmg.js → startup-state-settings-card-DsQ6ZLN9.js} +2 -2
  61. package/public/assets/{startup-state-settings-card-CHqS2Pmg.js.map → startup-state-settings-card-DsQ6ZLN9.js.map} +1 -1
  62. package/public/assets/{terminal-square-DhmNJqNG.js → terminal-square-CvdvCOmv.js} +2 -2
  63. package/public/assets/{terminal-square-DhmNJqNG.js.map → terminal-square-CvdvCOmv.js.map} +1 -1
  64. package/public/assets/{todo-DXJ5kP_Z.js → todo-DZCMHJBr.js} +2 -2
  65. package/public/assets/{todo-DXJ5kP_Z.js.map → todo-DZCMHJBr.js.map} +1 -1
  66. package/public/assets/{tool-call-Bjo9DalZ.js → tool-call-Bw7CQyE9.js} +17 -17
  67. package/public/assets/{tool-call-Bjo9DalZ.js.map → tool-call-Bw7CQyE9.js.map} +1 -1
  68. package/public/assets/{unified-picker-CxrTM_tY.js → unified-picker-D3FIJGsM.js} +2 -2
  69. package/public/assets/{unified-picker-CxrTM_tY.js.map → unified-picker-D3FIJGsM.js.map} +1 -1
  70. package/public/assets/{wrap-text-BznZeD4J.js → wrap-text-ma0EMBIk.js} +2 -2
  71. package/public/assets/{wrap-text-BznZeD4J.js.map → wrap-text-ma0EMBIk.js.map} +1 -1
  72. package/public/index.html +3 -3
  73. package/public/loading.html +3 -3
  74. package/public/sw.js +1 -1
  75. package/public/sw.js.map +1 -1
  76. package/public/assets/App-BSkmbNUC.js +0 -51
  77. package/public/assets/App-BSkmbNUC.js.map +0 -1
  78. package/public/assets/index-C2jBtFkI.js +0 -2
  79. package/public/assets/main-DRbjgAo8.js +0 -42
  80. package/public/assets/main-DRbjgAo8.js.map +0 -1
  81. package/public/assets/monaco-viewer-CG0aPZ-r.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{ap as _,t as b,i as x,u as E,m as V,g as B}from"./monaco-viewer-CG0aPZ-r.js";import{c as L,d as F,k as p,a as D,S as T,E as z,D as G,C as $,G as U}from"./git-diff-vendor-CT8HfOQw.js";import{bu as N,au as K}from"./main-DRbjgAo8.js";import"./fast-diff-vendor-DgdwVvTQ.js";import"./highlight-vendor-8FKMu9os.js";import"./index-BhInW6hR.js";var q=b("<div>"),O=b("<div class=tool-call-diff-viewer>"),P=b("<pre class=tool-call-diff-fallback>");const j=B("session");U();function I(e,s,o){const a=window.getComputedStyle(o),i=document.createElement("span");i.textContent=s||"",i.style.position="absolute",i.style.visibility="hidden",i.style.pointerEvents="none",i.style.display="inline-block",i.style.width="auto",i.style.maxWidth="none",i.style.whiteSpace="nowrap",i.style.fontFamily=a.fontFamily,i.style.fontSize=a.fontSize,i.style.fontWeight=a.fontWeight,i.style.fontStyle=a.fontStyle,i.style.letterSpacing=a.letterSpacing,i.style.fontVariant=a.fontVariant,i.style.textTransform=a.textTransform,i.style.lineHeight=a.lineHeight,e.appendChild(i);const f=Math.ceil(i.getBoundingClientRect().width);return i.remove(),f}function M(e,s,o=40){const a=s.reduce((l,n)=>Math.max(l,I(e,n.text,n.source)),0),i=s.reduce((l,n)=>Math.max(l,n.text.length),1),f=Math.round(i*7+4);return Math.max(2,Math.min(o,a>0?a+2:f))}function J(e,s){const o=e.querySelector(".unified-diff-table-wrapper"),a=e.querySelector(".unified-diff-table"),i=e.querySelector(".unified-diff-table-num-col"),f=e.querySelectorAll(".diff-line-num"),l=e.querySelectorAll(".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper"),n=[];a&&(s?(a.classList.add("table-fixed"),a.style.tableLayout="fixed",a.style.width="100%",a.style.minWidth="100%"):(a.classList.remove("table-fixed"),a.style.tableLayout="auto",a.style.width="max-content",a.style.minWidth="100%")),f.forEach(r=>{var v,k;const c=r.querySelector("[data-line-old-num]"),m=r.querySelector("[data-line-new-num]"),W=r.querySelector(".shrink-0"),S=r.querySelector(":scope > .flex"),C=r.querySelector(":scope > .tool-call-diff-compact-line-number"),y=((v=c==null?void 0:c.textContent)==null?void 0:v.trim())??"",w=((k=m==null?void 0:m.textContent)==null?void 0:k.trim())??"",H=w.length>0&&w!=="0",R=y.length>0&&y!=="0",g=H?w:R?y:w||y;S&&(S.style.display="none"),W&&(W.style.display="none"),c&&(c.style.display="none",c.style.width="auto"),m&&(m.style.display="none",m.style.width="auto"),r.style.paddingLeft="1px",r.style.paddingRight="1px",r.style.textAlign="left";const h=C??document.createElement("span");h.className="tool-call-diff-compact-line-number",h.textContent=g,h.setAttribute("aria-hidden",g?"false":"true"),C||r.appendChild(h),n.push({gutter:r,label:h,text:g})});const t=M(e,n.map(r=>({text:r.text,source:r.label}))),d=`${t}px`,u=`${Math.max(8,t-10)}px`;o&&(o.style.setProperty("--diff-aside-width",u),o.style.setProperty("--diff-aside-width--",u)),i&&(i.style.width=d),n.forEach(({gutter:r,label:c})=>{r.style.width=d,r.style.minWidth=d,r.style.maxWidth=d,c.style.width="auto",c.style.maxWidth="none"}),l.forEach(r=>{r.style.width=d,r.style.minWidth=d,r.style.maxWidth=d,r.style.paddingLeft="0",r.style.paddingRight="0"})}function Q(e){const s=e.querySelector(".old-diff-table-wrapper"),o=e.querySelector(".new-diff-table-wrapper"),a=Array.from(e.querySelectorAll(".diff-line-old-num, .diff-line-new-num")),i=Array.from(e.querySelectorAll(".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper")),f=a.map(t=>({cell:t,span:t.querySelector("[data-line-num]")})).filter(t=>!!t.span),n=`${M(e,f.map(({span:t})=>{var d;return{text:((d=t.textContent)==null?void 0:d.trim())??"",source:t}}),64)}px`;[s,o].forEach(t=>{t&&t.style.setProperty("--diff-aside-width",n)}),a.forEach(t=>{t.style.width=n,t.style.minWidth=n,t.style.maxWidth=n,t.style.paddingLeft="2px",t.style.paddingRight="2px",t.style.textAlign="left",t.style.whiteSpace="nowrap",t.style.overflowWrap="normal",t.style.wordBreak="normal"}),f.forEach(({span:t})=>{t.style.whiteSpace="nowrap",t.style.overflowWrap="normal",t.style.wordBreak="normal"}),i.forEach(t=>{t.style.width=n,t.style.minWidth=n,t.style.maxWidth=n,t.style.paddingLeft="0",t.style.paddingRight="0"})}function A(e,s,o=!1){if(s==="unified"){J(e,o);return}s==="split"&&Q(e)}function ne(e){const s=L(()=>{const f=_(e.diffText);if(!f)return null;const l=N(e.filePath)||"text",n=e.filePath||"diff";return{oldFile:{fileName:n,fileLang:l},newFile:{fileName:n,fileLang:l},hunks:[f]}});let o,a;const i=L(()=>s()?`${e.theme}|${e.mode}|${e.wrap?"wrap":"nowrap"}|${e.diffText}`:"");return F(()=>{var n;if(e.cachedHtml){o&&A(o,e.mode,!!e.wrap),(n=e.onRendered)==null||n.call(e);return}const l=i();l&&o&&a!==l&&requestAnimationFrame(()=>{var d;if(!o)return;A(o,e.mode,!!e.wrap);const t=o.innerHTML;t&&(a=l,e.cacheEntryParams&&K(e.cacheEntryParams,{text:e.diffText,html:t,theme:e.theme,mode:e.mode,wrap:e.wrap}),(d=e.onRendered)==null||d.call(e))})}),(()=>{var f=O();return x(f,p(T,{get when(){return e.cachedHtml},get fallback(){return(()=>{var l=q(),n=o;return typeof n=="function"?E(n,l):o=l,x(l,p(T,{get when(){return s()},get fallback(){return(()=>{var t=P();return x(t,()=>e.diffText),t})()},children:t=>p(z,{fallback:d=>(j.warn("Failed to render diff view",d),(()=>{var u=P();return x(u,()=>e.diffText),u})()),get children(){return p(G,{get data(){return t()},get diffViewMode(){return V(()=>e.mode==="split")()?$.Split:$.Unified},get diffViewTheme(){return e.theme},diffViewHighlight:!0,get diffViewWrap(){return!!e.wrap},diffViewFontSize:13})}})})),l})()},get children(){var l=q(),n=o;return typeof n=="function"?E(n,l):o=l,D(()=>l.innerHTML=e.cachedHtml),l}})),f})()}export{ne as ToolCallDiffViewer};
2
- //# sourceMappingURL=diff-viewer-FNBCogHl.js.map
1
+ import{ap as _,t as b,i as x,u as E,m as V,g as B}from"./monaco-viewer-DWKuMLsd.js";import{c as L,d as F,k as p,a as D,S as T,E as z,D as G,C as $,G as U}from"./git-diff-vendor-CT8HfOQw.js";import{bu as N,au as K}from"./main-C_TdncJ5.js";import"./fast-diff-vendor-DgdwVvTQ.js";import"./highlight-vendor-8FKMu9os.js";import"./index-DTM4JCOg.js";var q=b("<div>"),O=b("<div class=tool-call-diff-viewer>"),P=b("<pre class=tool-call-diff-fallback>");const j=B("session");U();function I(e,s,o){const a=window.getComputedStyle(o),i=document.createElement("span");i.textContent=s||"",i.style.position="absolute",i.style.visibility="hidden",i.style.pointerEvents="none",i.style.display="inline-block",i.style.width="auto",i.style.maxWidth="none",i.style.whiteSpace="nowrap",i.style.fontFamily=a.fontFamily,i.style.fontSize=a.fontSize,i.style.fontWeight=a.fontWeight,i.style.fontStyle=a.fontStyle,i.style.letterSpacing=a.letterSpacing,i.style.fontVariant=a.fontVariant,i.style.textTransform=a.textTransform,i.style.lineHeight=a.lineHeight,e.appendChild(i);const f=Math.ceil(i.getBoundingClientRect().width);return i.remove(),f}function M(e,s,o=40){const a=s.reduce((l,n)=>Math.max(l,I(e,n.text,n.source)),0),i=s.reduce((l,n)=>Math.max(l,n.text.length),1),f=Math.round(i*7+4);return Math.max(2,Math.min(o,a>0?a+2:f))}function J(e,s){const o=e.querySelector(".unified-diff-table-wrapper"),a=e.querySelector(".unified-diff-table"),i=e.querySelector(".unified-diff-table-num-col"),f=e.querySelectorAll(".diff-line-num"),l=e.querySelectorAll(".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper"),n=[];a&&(s?(a.classList.add("table-fixed"),a.style.tableLayout="fixed",a.style.width="100%",a.style.minWidth="100%"):(a.classList.remove("table-fixed"),a.style.tableLayout="auto",a.style.width="max-content",a.style.minWidth="100%")),f.forEach(r=>{var v,k;const c=r.querySelector("[data-line-old-num]"),m=r.querySelector("[data-line-new-num]"),W=r.querySelector(".shrink-0"),S=r.querySelector(":scope > .flex"),C=r.querySelector(":scope > .tool-call-diff-compact-line-number"),y=((v=c==null?void 0:c.textContent)==null?void 0:v.trim())??"",w=((k=m==null?void 0:m.textContent)==null?void 0:k.trim())??"",H=w.length>0&&w!=="0",R=y.length>0&&y!=="0",g=H?w:R?y:w||y;S&&(S.style.display="none"),W&&(W.style.display="none"),c&&(c.style.display="none",c.style.width="auto"),m&&(m.style.display="none",m.style.width="auto"),r.style.paddingLeft="1px",r.style.paddingRight="1px",r.style.textAlign="left";const h=C??document.createElement("span");h.className="tool-call-diff-compact-line-number",h.textContent=g,h.setAttribute("aria-hidden",g?"false":"true"),C||r.appendChild(h),n.push({gutter:r,label:h,text:g})});const t=M(e,n.map(r=>({text:r.text,source:r.label}))),d=`${t}px`,u=`${Math.max(8,t-10)}px`;o&&(o.style.setProperty("--diff-aside-width",u),o.style.setProperty("--diff-aside-width--",u)),i&&(i.style.width=d),n.forEach(({gutter:r,label:c})=>{r.style.width=d,r.style.minWidth=d,r.style.maxWidth=d,c.style.width="auto",c.style.maxWidth="none"}),l.forEach(r=>{r.style.width=d,r.style.minWidth=d,r.style.maxWidth=d,r.style.paddingLeft="0",r.style.paddingRight="0"})}function Q(e){const s=e.querySelector(".old-diff-table-wrapper"),o=e.querySelector(".new-diff-table-wrapper"),a=Array.from(e.querySelectorAll(".diff-line-old-num, .diff-line-new-num")),i=Array.from(e.querySelectorAll(".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper")),f=a.map(t=>({cell:t,span:t.querySelector("[data-line-num]")})).filter(t=>!!t.span),n=`${M(e,f.map(({span:t})=>{var d;return{text:((d=t.textContent)==null?void 0:d.trim())??"",source:t}}),64)}px`;[s,o].forEach(t=>{t&&t.style.setProperty("--diff-aside-width",n)}),a.forEach(t=>{t.style.width=n,t.style.minWidth=n,t.style.maxWidth=n,t.style.paddingLeft="2px",t.style.paddingRight="2px",t.style.textAlign="left",t.style.whiteSpace="nowrap",t.style.overflowWrap="normal",t.style.wordBreak="normal"}),f.forEach(({span:t})=>{t.style.whiteSpace="nowrap",t.style.overflowWrap="normal",t.style.wordBreak="normal"}),i.forEach(t=>{t.style.width=n,t.style.minWidth=n,t.style.maxWidth=n,t.style.paddingLeft="0",t.style.paddingRight="0"})}function A(e,s,o=!1){if(s==="unified"){J(e,o);return}s==="split"&&Q(e)}function ne(e){const s=L(()=>{const f=_(e.diffText);if(!f)return null;const l=N(e.filePath)||"text",n=e.filePath||"diff";return{oldFile:{fileName:n,fileLang:l},newFile:{fileName:n,fileLang:l},hunks:[f]}});let o,a;const i=L(()=>s()?`${e.theme}|${e.mode}|${e.wrap?"wrap":"nowrap"}|${e.diffText}`:"");return F(()=>{var n;if(e.cachedHtml){o&&A(o,e.mode,!!e.wrap),(n=e.onRendered)==null||n.call(e);return}const l=i();l&&o&&a!==l&&requestAnimationFrame(()=>{var d;if(!o)return;A(o,e.mode,!!e.wrap);const t=o.innerHTML;t&&(a=l,e.cacheEntryParams&&K(e.cacheEntryParams,{text:e.diffText,html:t,theme:e.theme,mode:e.mode,wrap:e.wrap}),(d=e.onRendered)==null||d.call(e))})}),(()=>{var f=O();return x(f,p(T,{get when(){return e.cachedHtml},get fallback(){return(()=>{var l=q(),n=o;return typeof n=="function"?E(n,l):o=l,x(l,p(T,{get when(){return s()},get fallback(){return(()=>{var t=P();return x(t,()=>e.diffText),t})()},children:t=>p(z,{fallback:d=>(j.warn("Failed to render diff view",d),(()=>{var u=P();return x(u,()=>e.diffText),u})()),get children(){return p(G,{get data(){return t()},get diffViewMode(){return V(()=>e.mode==="split")()?$.Split:$.Unified},get diffViewTheme(){return e.theme},diffViewHighlight:!0,get diffViewWrap(){return!!e.wrap},diffViewFontSize:13})}})})),l})()},get children(){var l=q(),n=o;return typeof n=="function"?E(n,l):o=l,D(()=>l.innerHTML=e.cachedHtml),l}})),f})()}export{ne as ToolCallDiffViewer};
2
+ //# sourceMappingURL=diff-viewer-DHy_0NiU.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff-viewer-FNBCogHl.js","sources":["../../../components/diff-viewer.tsx"],"sourcesContent":["import { createMemo, Show, createEffect } from \"solid-js\"\nimport { DiffView, DiffModeEnum } from \"@git-diff-view/solid\"\nimport \"@git-diff-view/solid/styles/diff-view-pure.css\"\nimport { disableCache } from \"@git-diff-view/core\"\nimport type { DiffHighlighterLang } from \"@git-diff-view/core\"\nimport { ErrorBoundary } from \"solid-js\"\nimport { getLanguageFromPath } from \"../lib/text-render-utils\"\nimport { normalizeDiffText } from \"../lib/diff-utils\"\nimport { setCacheEntry } from \"../lib/global-cache\"\nimport type { CacheEntryParams } from \"../lib/global-cache\"\nimport type { DiffViewMode } from \"../stores/preferences\"\nimport { getLogger } from \"../lib/logger\"\nconst log = getLogger(\"session\")\n\n\ndisableCache()\n\ninterface ToolCallDiffViewerProps {\n diffText: string\n filePath?: string\n theme: \"light\" | \"dark\"\n mode: DiffViewMode\n wrap?: boolean\n onRendered?: () => void\n cachedHtml?: string\n cacheEntryParams?: CacheEntryParams\n}\n\ntype DiffData = {\n oldFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null }\n newFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null }\n hunks: string[]\n}\n\nfunction measureTextWidth(container: HTMLElement, text: string, source: HTMLElement) {\n const computed = window.getComputedStyle(source)\n const probe = document.createElement(\"span\")\n probe.textContent = text || \"\"\n probe.style.position = \"absolute\"\n probe.style.visibility = \"hidden\"\n probe.style.pointerEvents = \"none\"\n probe.style.display = \"inline-block\"\n probe.style.width = \"auto\"\n probe.style.maxWidth = \"none\"\n probe.style.whiteSpace = \"nowrap\"\n probe.style.fontFamily = computed.fontFamily\n probe.style.fontSize = computed.fontSize\n probe.style.fontWeight = computed.fontWeight\n probe.style.fontStyle = computed.fontStyle\n probe.style.letterSpacing = computed.letterSpacing\n probe.style.fontVariant = computed.fontVariant\n probe.style.textTransform = computed.textTransform\n probe.style.lineHeight = computed.lineHeight\n container.appendChild(probe)\n const width = Math.ceil(probe.getBoundingClientRect().width)\n probe.remove()\n return width\n}\n\nfunction computeCompactWidth(\n container: HTMLElement,\n entries: Array<{ text: string; source: HTMLElement }>,\n maxWidthPx = 40,\n) {\n const measuredLabelWidthPx = entries.reduce((max, entry) => {\n return Math.max(max, measureTextWidth(container, entry.text, entry.source))\n }, 0)\n const fallbackTextLength = entries.reduce((max, entry) => Math.max(max, entry.text.length), 1)\n const fallbackWidthPx = Math.round(fallbackTextLength * 7 + 4)\n return Math.max(2, Math.min(maxWidthPx, measuredLabelWidthPx > 0 ? measuredLabelWidthPx + 2 : fallbackWidthPx))\n}\n\nfunction applyCompactUnifiedGutter(container: HTMLElement, wrap: boolean) {\n const tableWrapper = container.querySelector<HTMLElement>(\".unified-diff-table-wrapper\")\n const table = container.querySelector<HTMLTableElement>(\".unified-diff-table\")\n const numberCol = container.querySelector<HTMLTableColElement>(\".unified-diff-table-num-col\")\n const gutterRows = container.querySelectorAll<HTMLElement>(\".diff-line-num\")\n const hunkGutters = container.querySelectorAll<HTMLElement>(\".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper\")\n const entries: Array<{ gutter: HTMLElement; label: HTMLElement; text: string }> = []\n\n if (table) {\n if (wrap) {\n table.classList.add(\"table-fixed\")\n table.style.tableLayout = \"fixed\"\n table.style.width = \"100%\"\n table.style.minWidth = \"100%\"\n } else {\n table.classList.remove(\"table-fixed\")\n table.style.tableLayout = \"auto\"\n table.style.width = \"max-content\"\n table.style.minWidth = \"100%\"\n }\n }\n\n gutterRows.forEach((gutter) => {\n const oldSpan = gutter.querySelector<HTMLElement>(\"[data-line-old-num]\")\n const newSpan = gutter.querySelector<HTMLElement>(\"[data-line-new-num]\")\n const spacer = gutter.querySelector<HTMLElement>(\".shrink-0\")\n const flexWrapper = gutter.querySelector<HTMLElement>(\":scope > .flex\")\n const currentLabel = gutter.querySelector<HTMLElement>(\":scope > .tool-call-diff-compact-line-number\")\n\n const oldText = oldSpan?.textContent?.trim() ?? \"\"\n const newText = newSpan?.textContent?.trim() ?? \"\"\n const hasUsableNew = newText.length > 0 && newText !== \"0\"\n const hasUsableOld = oldText.length > 0 && oldText !== \"0\"\n const visibleText = hasUsableNew ? newText : hasUsableOld ? oldText : newText || oldText\n\n if (flexWrapper) flexWrapper.style.display = \"none\"\n if (spacer) spacer.style.display = \"none\"\n if (oldSpan) { oldSpan.style.display = \"none\"; oldSpan.style.width = \"auto\" }\n if (newSpan) { newSpan.style.display = \"none\"; newSpan.style.width = \"auto\" }\n\n gutter.style.paddingLeft = \"1px\"\n gutter.style.paddingRight = \"1px\"\n gutter.style.textAlign = \"left\"\n\n const label = currentLabel ?? document.createElement(\"span\")\n label.className = \"tool-call-diff-compact-line-number\"\n label.textContent = visibleText\n label.setAttribute(\"aria-hidden\", visibleText ? \"false\" : \"true\")\n if (!currentLabel) gutter.appendChild(label)\n\n entries.push({ gutter, label, text: visibleText })\n })\n\n const gutterWidthPx = computeCompactWidth(container, entries.map((entry) => ({ text: entry.text, source: entry.label })))\n const gutterWidth = `${gutterWidthPx}px`\n const compactAsideWidth = `${Math.max(8, gutterWidthPx - 10)}px`\n\n if (tableWrapper) {\n tableWrapper.style.setProperty(\"--diff-aside-width\", compactAsideWidth)\n tableWrapper.style.setProperty(\"--diff-aside-width--\", compactAsideWidth)\n }\n if (numberCol) {\n numberCol.style.width = gutterWidth\n }\n\n entries.forEach(({ gutter, label }) => {\n gutter.style.width = gutterWidth\n gutter.style.minWidth = gutterWidth\n gutter.style.maxWidth = gutterWidth\n label.style.width = \"auto\"\n label.style.maxWidth = \"none\"\n })\n\n hunkGutters.forEach((gutter) => {\n gutter.style.width = gutterWidth\n gutter.style.minWidth = gutterWidth\n gutter.style.maxWidth = gutterWidth\n gutter.style.paddingLeft = \"0\"\n gutter.style.paddingRight = \"0\"\n })\n}\n\nfunction applyCompactSplitGutter(container: HTMLElement) {\n const oldWrapper = container.querySelector<HTMLElement>(\".old-diff-table-wrapper\")\n const newWrapper = container.querySelector<HTMLElement>(\".new-diff-table-wrapper\")\n const numberCells = Array.from(container.querySelectorAll<HTMLElement>(\".diff-line-old-num, .diff-line-new-num\"))\n const hunkActions = Array.from(container.querySelectorAll<HTMLElement>(\".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper\"))\n const numberSpans = numberCells\n .map((cell) => ({ cell, span: cell.querySelector<HTMLElement>(\"[data-line-num]\") }))\n .filter((entry): entry is { cell: HTMLElement; span: HTMLElement } => Boolean(entry.span))\n\n const gutterWidthPx = computeCompactWidth(\n container,\n numberSpans.map(({ span }) => ({ text: span.textContent?.trim() ?? \"\", source: span })),\n 64,\n )\n const gutterWidth = `${gutterWidthPx}px`\n\n ;[oldWrapper, newWrapper].forEach((wrapper) => {\n if (wrapper) {\n wrapper.style.setProperty(\"--diff-aside-width\", gutterWidth)\n }\n })\n\n numberCells.forEach((cell) => {\n cell.style.width = gutterWidth\n cell.style.minWidth = gutterWidth\n cell.style.maxWidth = gutterWidth\n cell.style.paddingLeft = \"2px\"\n cell.style.paddingRight = \"2px\"\n cell.style.textAlign = \"left\"\n cell.style.whiteSpace = \"nowrap\"\n cell.style.overflowWrap = \"normal\"\n cell.style.wordBreak = \"normal\"\n })\n\n numberSpans.forEach(({ span }) => {\n span.style.whiteSpace = \"nowrap\"\n span.style.overflowWrap = \"normal\"\n span.style.wordBreak = \"normal\"\n })\n\n hunkActions.forEach((cell) => {\n cell.style.width = gutterWidth\n cell.style.minWidth = gutterWidth\n cell.style.maxWidth = gutterWidth\n cell.style.paddingLeft = \"0\"\n cell.style.paddingRight = \"0\"\n })\n}\n\nfunction applyCompactDiffLayout(container: HTMLElement, mode: DiffViewMode, wrap = false) {\n if (mode === \"unified\") {\n applyCompactUnifiedGutter(container, wrap)\n return\n }\n if (mode === \"split\") {\n applyCompactSplitGutter(container)\n }\n}\n\nexport function ToolCallDiffViewer(props: ToolCallDiffViewerProps) {\n const diffData = createMemo<DiffData | null>(() => {\n const normalized = normalizeDiffText(props.diffText)\n if (!normalized) {\n return null\n }\n \n const language = getLanguageFromPath(props.filePath) || \"text\"\n const fileName = props.filePath || \"diff\"\n \n return {\n oldFile: {\n fileName,\n fileLang: (language || \"text\") as DiffHighlighterLang | null,\n },\n newFile: {\n fileName,\n fileLang: (language || \"text\") as DiffHighlighterLang | null,\n },\n hunks: [normalized],\n }\n })\n \n let diffContainerRef: HTMLDivElement | undefined\n let lastCapturedKey: string | undefined\n \n const contextKey = createMemo(() => {\n const data = diffData()\n if (!data) return \"\"\n return `${props.theme}|${props.mode}|${props.wrap ? \"wrap\" : \"nowrap\"}|${props.diffText}`\n })\n \n createEffect(() => {\n const cachedHtml = props.cachedHtml\n if (cachedHtml) {\n if (diffContainerRef) {\n applyCompactDiffLayout(diffContainerRef, props.mode, Boolean(props.wrap))\n }\n // When we are given cached HTML, we rely on the caller's cache\n // and simply notify once rendered.\n props.onRendered?.()\n return\n }\n \n const key = contextKey()\n if (!key) return\n if (!diffContainerRef) return\n if (lastCapturedKey === key) return\n\n requestAnimationFrame(() => {\n if (!diffContainerRef) return\n applyCompactDiffLayout(diffContainerRef, props.mode, Boolean(props.wrap))\n const markup = diffContainerRef.innerHTML\n if (!markup) return\n lastCapturedKey = key\n if (props.cacheEntryParams) {\n setCacheEntry(props.cacheEntryParams, {\n text: props.diffText,\n html: markup,\n theme: props.theme,\n mode: props.mode,\n wrap: props.wrap,\n })\n }\n props.onRendered?.()\n })\n })\n\n\n return (\n <div class=\"tool-call-diff-viewer\">\n <Show\n when={props.cachedHtml}\n fallback={\n <div ref={diffContainerRef}>\n <Show\n when={diffData()}\n fallback={<pre class=\"tool-call-diff-fallback\">{props.diffText}</pre>}\n >\n {(data) => (\n <ErrorBoundary fallback={(error) => {\n log.warn(\"Failed to render diff view\", error)\n return <pre class=\"tool-call-diff-fallback\">{props.diffText}</pre>\n }}>\n <DiffView\n data={data()}\n diffViewMode={props.mode === \"split\" ? DiffModeEnum.Split : DiffModeEnum.Unified}\n diffViewTheme={props.theme}\n diffViewHighlight\n diffViewWrap={Boolean(props.wrap)}\n diffViewFontSize={13}\n />\n </ErrorBoundary>\n )}\n </Show>\n </div>\n }\n >\n <div ref={diffContainerRef} innerHTML={props.cachedHtml} />\n </Show>\n </div>\n )\n}\n"],"names":["log","getLogger","disableCache","measureTextWidth","container","text","source","computed","window","getComputedStyle","probe","document","createElement","textContent","style","position","visibility","pointerEvents","display","width","maxWidth","whiteSpace","fontFamily","fontSize","fontWeight","fontStyle","letterSpacing","fontVariant","textTransform","lineHeight","appendChild","Math","ceil","getBoundingClientRect","remove","computeCompactWidth","entries","maxWidthPx","measuredLabelWidthPx","reduce","max","entry","fallbackTextLength","length","fallbackWidthPx","round","min","applyCompactUnifiedGutter","wrap","tableWrapper","querySelector","table","numberCol","gutterRows","querySelectorAll","hunkGutters","classList","add","tableLayout","minWidth","forEach","gutter","oldSpan","newSpan","spacer","flexWrapper","currentLabel","oldText","trim","newText","hasUsableNew","hasUsableOld","visibleText","paddingLeft","paddingRight","textAlign","label","className","setAttribute","push","gutterWidthPx","map","gutterWidth","compactAsideWidth","setProperty","applyCompactSplitGutter","oldWrapper","newWrapper","numberCells","Array","from","hunkActions","numberSpans","cell","span","filter","Boolean","wrapper","overflowWrap","wordBreak","applyCompactDiffLayout","mode","ToolCallDiffViewer","props","diffData","createMemo","normalized","normalizeDiffText","diffText","language","getLanguageFromPath","filePath","fileName","oldFile","fileLang","newFile","hunks","diffContainerRef","lastCapturedKey","contextKey","theme","createEffect","cachedHtml","onRendered","key","requestAnimationFrame","markup","innerHTML","cacheEntryParams","setCacheEntry","html","_el$","_tmpl$2","_$insert","_$createComponent","Show","when","fallback","_el$3","_tmpl$","_ref$2","_$use","_el$4","_tmpl$3","children","data","ErrorBoundary","error","warn","_el$5","DiffView","diffViewMode","_$memo","DiffModeEnum","Split","Unified","diffViewTheme","diffViewHighlight","diffViewWrap","diffViewFontSize","_el$2","_ref$","_$effect"],"mappings":"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"}
1
+ {"version":3,"file":"diff-viewer-DHy_0NiU.js","sources":["../../../components/diff-viewer.tsx"],"sourcesContent":["import { createMemo, Show, createEffect } from \"solid-js\"\nimport { DiffView, DiffModeEnum } from \"@git-diff-view/solid\"\nimport \"@git-diff-view/solid/styles/diff-view-pure.css\"\nimport { disableCache } from \"@git-diff-view/core\"\nimport type { DiffHighlighterLang } from \"@git-diff-view/core\"\nimport { ErrorBoundary } from \"solid-js\"\nimport { getLanguageFromPath } from \"../lib/text-render-utils\"\nimport { normalizeDiffText } from \"../lib/diff-utils\"\nimport { setCacheEntry } from \"../lib/global-cache\"\nimport type { CacheEntryParams } from \"../lib/global-cache\"\nimport type { DiffViewMode } from \"../stores/preferences\"\nimport { getLogger } from \"../lib/logger\"\nconst log = getLogger(\"session\")\n\n\ndisableCache()\n\ninterface ToolCallDiffViewerProps {\n diffText: string\n filePath?: string\n theme: \"light\" | \"dark\"\n mode: DiffViewMode\n wrap?: boolean\n onRendered?: () => void\n cachedHtml?: string\n cacheEntryParams?: CacheEntryParams\n}\n\ntype DiffData = {\n oldFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null }\n newFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null }\n hunks: string[]\n}\n\nfunction measureTextWidth(container: HTMLElement, text: string, source: HTMLElement) {\n const computed = window.getComputedStyle(source)\n const probe = document.createElement(\"span\")\n probe.textContent = text || \"\"\n probe.style.position = \"absolute\"\n probe.style.visibility = \"hidden\"\n probe.style.pointerEvents = \"none\"\n probe.style.display = \"inline-block\"\n probe.style.width = \"auto\"\n probe.style.maxWidth = \"none\"\n probe.style.whiteSpace = \"nowrap\"\n probe.style.fontFamily = computed.fontFamily\n probe.style.fontSize = computed.fontSize\n probe.style.fontWeight = computed.fontWeight\n probe.style.fontStyle = computed.fontStyle\n probe.style.letterSpacing = computed.letterSpacing\n probe.style.fontVariant = computed.fontVariant\n probe.style.textTransform = computed.textTransform\n probe.style.lineHeight = computed.lineHeight\n container.appendChild(probe)\n const width = Math.ceil(probe.getBoundingClientRect().width)\n probe.remove()\n return width\n}\n\nfunction computeCompactWidth(\n container: HTMLElement,\n entries: Array<{ text: string; source: HTMLElement }>,\n maxWidthPx = 40,\n) {\n const measuredLabelWidthPx = entries.reduce((max, entry) => {\n return Math.max(max, measureTextWidth(container, entry.text, entry.source))\n }, 0)\n const fallbackTextLength = entries.reduce((max, entry) => Math.max(max, entry.text.length), 1)\n const fallbackWidthPx = Math.round(fallbackTextLength * 7 + 4)\n return Math.max(2, Math.min(maxWidthPx, measuredLabelWidthPx > 0 ? measuredLabelWidthPx + 2 : fallbackWidthPx))\n}\n\nfunction applyCompactUnifiedGutter(container: HTMLElement, wrap: boolean) {\n const tableWrapper = container.querySelector<HTMLElement>(\".unified-diff-table-wrapper\")\n const table = container.querySelector<HTMLTableElement>(\".unified-diff-table\")\n const numberCol = container.querySelector<HTMLTableColElement>(\".unified-diff-table-num-col\")\n const gutterRows = container.querySelectorAll<HTMLElement>(\".diff-line-num\")\n const hunkGutters = container.querySelectorAll<HTMLElement>(\".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper\")\n const entries: Array<{ gutter: HTMLElement; label: HTMLElement; text: string }> = []\n\n if (table) {\n if (wrap) {\n table.classList.add(\"table-fixed\")\n table.style.tableLayout = \"fixed\"\n table.style.width = \"100%\"\n table.style.minWidth = \"100%\"\n } else {\n table.classList.remove(\"table-fixed\")\n table.style.tableLayout = \"auto\"\n table.style.width = \"max-content\"\n table.style.minWidth = \"100%\"\n }\n }\n\n gutterRows.forEach((gutter) => {\n const oldSpan = gutter.querySelector<HTMLElement>(\"[data-line-old-num]\")\n const newSpan = gutter.querySelector<HTMLElement>(\"[data-line-new-num]\")\n const spacer = gutter.querySelector<HTMLElement>(\".shrink-0\")\n const flexWrapper = gutter.querySelector<HTMLElement>(\":scope > .flex\")\n const currentLabel = gutter.querySelector<HTMLElement>(\":scope > .tool-call-diff-compact-line-number\")\n\n const oldText = oldSpan?.textContent?.trim() ?? \"\"\n const newText = newSpan?.textContent?.trim() ?? \"\"\n const hasUsableNew = newText.length > 0 && newText !== \"0\"\n const hasUsableOld = oldText.length > 0 && oldText !== \"0\"\n const visibleText = hasUsableNew ? newText : hasUsableOld ? oldText : newText || oldText\n\n if (flexWrapper) flexWrapper.style.display = \"none\"\n if (spacer) spacer.style.display = \"none\"\n if (oldSpan) { oldSpan.style.display = \"none\"; oldSpan.style.width = \"auto\" }\n if (newSpan) { newSpan.style.display = \"none\"; newSpan.style.width = \"auto\" }\n\n gutter.style.paddingLeft = \"1px\"\n gutter.style.paddingRight = \"1px\"\n gutter.style.textAlign = \"left\"\n\n const label = currentLabel ?? document.createElement(\"span\")\n label.className = \"tool-call-diff-compact-line-number\"\n label.textContent = visibleText\n label.setAttribute(\"aria-hidden\", visibleText ? \"false\" : \"true\")\n if (!currentLabel) gutter.appendChild(label)\n\n entries.push({ gutter, label, text: visibleText })\n })\n\n const gutterWidthPx = computeCompactWidth(container, entries.map((entry) => ({ text: entry.text, source: entry.label })))\n const gutterWidth = `${gutterWidthPx}px`\n const compactAsideWidth = `${Math.max(8, gutterWidthPx - 10)}px`\n\n if (tableWrapper) {\n tableWrapper.style.setProperty(\"--diff-aside-width\", compactAsideWidth)\n tableWrapper.style.setProperty(\"--diff-aside-width--\", compactAsideWidth)\n }\n if (numberCol) {\n numberCol.style.width = gutterWidth\n }\n\n entries.forEach(({ gutter, label }) => {\n gutter.style.width = gutterWidth\n gutter.style.minWidth = gutterWidth\n gutter.style.maxWidth = gutterWidth\n label.style.width = \"auto\"\n label.style.maxWidth = \"none\"\n })\n\n hunkGutters.forEach((gutter) => {\n gutter.style.width = gutterWidth\n gutter.style.minWidth = gutterWidth\n gutter.style.maxWidth = gutterWidth\n gutter.style.paddingLeft = \"0\"\n gutter.style.paddingRight = \"0\"\n })\n}\n\nfunction applyCompactSplitGutter(container: HTMLElement) {\n const oldWrapper = container.querySelector<HTMLElement>(\".old-diff-table-wrapper\")\n const newWrapper = container.querySelector<HTMLElement>(\".new-diff-table-wrapper\")\n const numberCells = Array.from(container.querySelectorAll<HTMLElement>(\".diff-line-old-num, .diff-line-new-num\"))\n const hunkActions = Array.from(container.querySelectorAll<HTMLElement>(\".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper\"))\n const numberSpans = numberCells\n .map((cell) => ({ cell, span: cell.querySelector<HTMLElement>(\"[data-line-num]\") }))\n .filter((entry): entry is { cell: HTMLElement; span: HTMLElement } => Boolean(entry.span))\n\n const gutterWidthPx = computeCompactWidth(\n container,\n numberSpans.map(({ span }) => ({ text: span.textContent?.trim() ?? \"\", source: span })),\n 64,\n )\n const gutterWidth = `${gutterWidthPx}px`\n\n ;[oldWrapper, newWrapper].forEach((wrapper) => {\n if (wrapper) {\n wrapper.style.setProperty(\"--diff-aside-width\", gutterWidth)\n }\n })\n\n numberCells.forEach((cell) => {\n cell.style.width = gutterWidth\n cell.style.minWidth = gutterWidth\n cell.style.maxWidth = gutterWidth\n cell.style.paddingLeft = \"2px\"\n cell.style.paddingRight = \"2px\"\n cell.style.textAlign = \"left\"\n cell.style.whiteSpace = \"nowrap\"\n cell.style.overflowWrap = \"normal\"\n cell.style.wordBreak = \"normal\"\n })\n\n numberSpans.forEach(({ span }) => {\n span.style.whiteSpace = \"nowrap\"\n span.style.overflowWrap = \"normal\"\n span.style.wordBreak = \"normal\"\n })\n\n hunkActions.forEach((cell) => {\n cell.style.width = gutterWidth\n cell.style.minWidth = gutterWidth\n cell.style.maxWidth = gutterWidth\n cell.style.paddingLeft = \"0\"\n cell.style.paddingRight = \"0\"\n })\n}\n\nfunction applyCompactDiffLayout(container: HTMLElement, mode: DiffViewMode, wrap = false) {\n if (mode === \"unified\") {\n applyCompactUnifiedGutter(container, wrap)\n return\n }\n if (mode === \"split\") {\n applyCompactSplitGutter(container)\n }\n}\n\nexport function ToolCallDiffViewer(props: ToolCallDiffViewerProps) {\n const diffData = createMemo<DiffData | null>(() => {\n const normalized = normalizeDiffText(props.diffText)\n if (!normalized) {\n return null\n }\n \n const language = getLanguageFromPath(props.filePath) || \"text\"\n const fileName = props.filePath || \"diff\"\n \n return {\n oldFile: {\n fileName,\n fileLang: (language || \"text\") as DiffHighlighterLang | null,\n },\n newFile: {\n fileName,\n fileLang: (language || \"text\") as DiffHighlighterLang | null,\n },\n hunks: [normalized],\n }\n })\n \n let diffContainerRef: HTMLDivElement | undefined\n let lastCapturedKey: string | undefined\n \n const contextKey = createMemo(() => {\n const data = diffData()\n if (!data) return \"\"\n return `${props.theme}|${props.mode}|${props.wrap ? \"wrap\" : \"nowrap\"}|${props.diffText}`\n })\n \n createEffect(() => {\n const cachedHtml = props.cachedHtml\n if (cachedHtml) {\n if (diffContainerRef) {\n applyCompactDiffLayout(diffContainerRef, props.mode, Boolean(props.wrap))\n }\n // When we are given cached HTML, we rely on the caller's cache\n // and simply notify once rendered.\n props.onRendered?.()\n return\n }\n \n const key = contextKey()\n if (!key) return\n if (!diffContainerRef) return\n if (lastCapturedKey === key) return\n\n requestAnimationFrame(() => {\n if (!diffContainerRef) return\n applyCompactDiffLayout(diffContainerRef, props.mode, Boolean(props.wrap))\n const markup = diffContainerRef.innerHTML\n if (!markup) return\n lastCapturedKey = key\n if (props.cacheEntryParams) {\n setCacheEntry(props.cacheEntryParams, {\n text: props.diffText,\n html: markup,\n theme: props.theme,\n mode: props.mode,\n wrap: props.wrap,\n })\n }\n props.onRendered?.()\n })\n })\n\n\n return (\n <div class=\"tool-call-diff-viewer\">\n <Show\n when={props.cachedHtml}\n fallback={\n <div ref={diffContainerRef}>\n <Show\n when={diffData()}\n fallback={<pre class=\"tool-call-diff-fallback\">{props.diffText}</pre>}\n >\n {(data) => (\n <ErrorBoundary fallback={(error) => {\n log.warn(\"Failed to render diff view\", error)\n return <pre class=\"tool-call-diff-fallback\">{props.diffText}</pre>\n }}>\n <DiffView\n data={data()}\n diffViewMode={props.mode === \"split\" ? DiffModeEnum.Split : DiffModeEnum.Unified}\n diffViewTheme={props.theme}\n diffViewHighlight\n diffViewWrap={Boolean(props.wrap)}\n diffViewFontSize={13}\n />\n </ErrorBoundary>\n )}\n </Show>\n </div>\n }\n >\n <div ref={diffContainerRef} innerHTML={props.cachedHtml} />\n </Show>\n </div>\n )\n}\n"],"names":["log","getLogger","disableCache","measureTextWidth","container","text","source","computed","window","getComputedStyle","probe","document","createElement","textContent","style","position","visibility","pointerEvents","display","width","maxWidth","whiteSpace","fontFamily","fontSize","fontWeight","fontStyle","letterSpacing","fontVariant","textTransform","lineHeight","appendChild","Math","ceil","getBoundingClientRect","remove","computeCompactWidth","entries","maxWidthPx","measuredLabelWidthPx","reduce","max","entry","fallbackTextLength","length","fallbackWidthPx","round","min","applyCompactUnifiedGutter","wrap","tableWrapper","querySelector","table","numberCol","gutterRows","querySelectorAll","hunkGutters","classList","add","tableLayout","minWidth","forEach","gutter","oldSpan","newSpan","spacer","flexWrapper","currentLabel","oldText","trim","newText","hasUsableNew","hasUsableOld","visibleText","paddingLeft","paddingRight","textAlign","label","className","setAttribute","push","gutterWidthPx","map","gutterWidth","compactAsideWidth","setProperty","applyCompactSplitGutter","oldWrapper","newWrapper","numberCells","Array","from","hunkActions","numberSpans","cell","span","filter","Boolean","wrapper","overflowWrap","wordBreak","applyCompactDiffLayout","mode","ToolCallDiffViewer","props","diffData","createMemo","normalized","normalizeDiffText","diffText","language","getLanguageFromPath","filePath","fileName","oldFile","fileLang","newFile","hunks","diffContainerRef","lastCapturedKey","contextKey","theme","createEffect","cachedHtml","onRendered","key","requestAnimationFrame","markup","innerHTML","cacheEntryParams","setCacheEntry","html","_el$","_tmpl$2","_$insert","_$createComponent","Show","when","fallback","_el$3","_tmpl$","_ref$2","_$use","_el$4","_tmpl$3","children","data","ErrorBoundary","error","warn","_el$5","DiffView","diffViewMode","_$memo","DiffModeEnum","Split","Unified","diffViewTheme","diffViewHighlight","diffViewWrap","diffViewFontSize","_el$2","_ref$","_$effect"],"mappings":"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"}