comprehende 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@ pnpm dev -- --help
|
|
|
35
35
|
|
|
36
36
|
`comprehende serve` and `comprehende export` share one UI and one git payload layer. Serve computes those payloads on each request. Export writes the same JSON (and image bytes) next to the UI so any static file server can host the review.
|
|
37
37
|
|
|
38
|
-
`pnpm dev` and `pnpm exec` run with this package as cwd, so they only make sense when _this_ repo is the one under review. To review a different project from a checkout, `cd` into it and run `npx comprehende@0.4.
|
|
38
|
+
`pnpm dev` and `pnpm exec` run with this package as cwd, so they only make sense when _this_ repo is the one under review. To review a different project from a checkout, `cd` into it and run `npx comprehende@0.4.1` (or `node /path/to/comprehende/dist/cli/main.js` after `pnpm build`).
|
|
39
39
|
|
|
40
40
|
## Release
|
|
41
41
|
|
|
@@ -1595,4 +1595,4 @@ XID_Start XIDS`.split(/\s/).map(e=>[dd(e),e])),KP=new Map([["s",mt(383)],[mt(383
|
|
|
1595
1595
|
minmax(0, var(--comprehende-split-right, 1fr)) !important;
|
|
1596
1596
|
}
|
|
1597
1597
|
`,B1=.2,F1=.8;function _p(e){return Math.min(F1,Math.max(B1,e))}function U6(e){const t=O.useMemo(()=>{const r=typeof navigator>"u"?4:Math.max(1,navigator.hardwareConcurrency||4);return{workerFactory:()=>new H6,poolSize:Math.max(2,Math.min(6,Math.floor(r/2)))}},[]),n=O.useMemo(()=>({theme:tg,tokenizeMaxLineLength:1e3,useTokenTransformer:!0,lineDiffType:"none"}),[]);return A.jsx(D6,{poolOptions:t,highlighterOptions:n,children:e.children})}function j6(e){if(e.trim()!=="")try{return NM(e,`comprehende:${e.length}`)[0]?.files[0]}catch{return}}const V6=O.memo(function(t){const n=O.useMemo(()=>({theme:tg,themeType:t.themeType,diffStyle:t.split?"split":"unified",overflow:t.wrap?"wrap":"scroll",disableFileHeader:!0,stickyHeader:!1,lineDiffType:"none",unsafeCSS:V1}),[t.split,t.themeType,t.wrap]);return A.jsx(P6,{className:"block w-full",fileDiff:t.fileDiff,options:n})}),B6=O.memo(function(t){const n=O.useMemo(()=>({name:t.path,contents:t.contents,cacheKey:`${t.path}:${t.contents.length}:${t.contents.slice(0,32)}:${t.annotations?.length??0}`}),[t.annotations?.length,t.contents,t.path]),r=O.useMemo(()=>({theme:tg,themeType:t.themeType,overflow:t.wrap?"wrap":"scroll",disableFileHeader:!0,stickyHeader:!1,unsafeCSS:V1}),[t.themeType,t.wrap]);return A.jsx(I6,{className:"block w-full",file:n,options:r,lineAnnotations:t.annotations,renderAnnotation:t.annotations===void 0?void 0:F6})});function F6(e){const t=e.metadata,n=new Date(t.timestamp*1e3).toISOString().slice(0,10);return A.jsxs("div",{className:"flex min-w-0 items-baseline gap-2 px-2 py-1 font-sans text-[11px] text-muted-foreground",children:[A.jsx("code",{className:"text-primary",children:t.sha.slice(0,7)}),A.jsx("span",{className:"min-w-0 truncate",children:t.author}),A.jsx("span",{className:"shrink-0 tabular-nums",children:n}),t.lines>1?A.jsxs("span",{className:"shrink-0 tabular-nums",children:[t.lines," lines"]}):null]})}function ux(e){const{resolved:t}=ng();return A.jsx("div",{className:"min-h-0 min-w-0",children:A.jsx(B6,{path:e.path,contents:e.contents,wrap:e.wrap,themeType:t,annotations:e.annotations})})}function G6(e){const{patch:t,split:n,wrap:r,splitRatio:a,onSplitRatio:s}=e,{resolved:u}=ng(),f=O.useMemo(()=>j6(t),[t]);return f===void 0?A.jsx("p",{className:"px-3 py-2 text-xs text-warn",children:"Could not render this git patch."}):A.jsxs("div",{className:"relative min-w-0",style:{"--comprehende-split-left":`${a}fr`,"--comprehende-split-right":`${1-a}fr`},children:[A.jsx(V6,{fileDiff:f,split:n,wrap:r,themeType:u}),n?A.jsx($6,{ratio:a,onRatio:s}):null]})}function $6(e){const t=O.useRef(null),n=s=>{const u=s.currentTarget.parentElement;u!==null&&(s.preventDefault(),s.currentTarget.setPointerCapture(s.pointerId),t.current={startX:s.clientX,start:e.ratio,width:u.getBoundingClientRect().width})},r=s=>{const u=t.current;u===null||u.width===0||e.onRatio(_p(u.start+(s.clientX-u.startX)/u.width))},a=()=>{t.current=null};return A.jsx("div",{role:"separator","aria-orientation":"vertical","aria-label":"Resize split diff","aria-valuemin":Math.round(B1*100),"aria-valuemax":Math.round(F1*100),"aria-valuenow":Math.round(e.ratio*100),tabIndex:0,className:Qe("absolute inset-y-0 z-10 flex w-3 -translate-x-1/2 cursor-col-resize touch-none items-center justify-center select-none","after:absolute after:inset-y-0 after:w-px after:bg-border hover:after:bg-primary/70 motion-safe:after:transition-colors"),style:{left:`${e.ratio*100}%`},onPointerDown:n,onPointerMove:r,onPointerUp:a,onPointerCancel:a,onDoubleClick:()=>e.onRatio(.5),onKeyDown:s=>{s.key==="ArrowLeft"?(s.preventDefault(),e.onRatio(_p(e.ratio-.05))):s.key==="ArrowRight"?(s.preventDefault(),e.onRatio(_p(e.ratio+.05))):(s.key==="Home"||s.key==="Enter")&&(s.preventDefault(),e.onRatio(.5))},children:A.jsx("div",{className:"z-10 flex h-8 w-3 items-center justify-center rounded-sm border border-border bg-card",children:A.jsx(Bx,{className:"size-2.5 text-muted-foreground"})})})}var q6=Object.defineProperty,G1=(e,t)=>q6(e,"name",{value:t,configurable:!0}),cx="horizontal",W6=["horizontal","vertical"],Y6=O.forwardRef(G1(function(t,n){const{decorative:r,orientation:a=cx,...s}=t,u=$1(a)?a:cx,d=r?{role:"none"}:{"aria-orientation":u==="vertical"?u:void 0,role:"separator"};return A.jsx(yo.div,{"data-orientation":u,...d,...s,ref:n})},"Separator"));function $1(e){return W6.includes(e)}G1($1,"isValidOrientation");var K6=Y6;function X6({className:e,orientation:t="horizontal",decorative:n=!0,...r}){return A.jsx(K6,{"data-slot":"separator",decorative:n,orientation:t,className:Qe("shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",e),...r})}function Q6(e){const{inspector:t,wrap:n,setInspector:r,onClose:a}=e,s=lM(t.path),[u,f]=O.useState(""),[d,h]=O.useState(null),[p,m]=O.useState(null),[y,b]=O.useState(!0),S=O.useMemo(()=>d===null?"":d.map(w=>w.text).join(`
|
|
1598
|
-
`),[d]),_=O.useMemo(()=>{if(d!==null)return uM(d).map(w=>({lineNumber:w.lineNumber,metadata:{sha:w.sha,author:w.author,timestamp:w.timestamp,lines:w.lines}}))},[d]);return O.useEffect(()=>{let w=!1;if(m(null),b(!0),f(""),h(null),s){b(!1);return}return t.mode==="file"?vA(t.path,t.side).then(C=>{w||(f(C.content),b(!1))}).catch(C=>{w||(m(C instanceof Error?C.message:String(C)),b(!1))}):yA(t.path,t.side).then(C=>{w||(h(C.lines),b(!1))}).catch(C=>{w||(m(C instanceof Error?C.message:String(C)),b(!1))}),()=>{w=!0}},[s,t]),A.jsxs("div",{className:"review-inspector flex h-full min-h-0 flex-col","aria-busy":y,children:[A.jsxs("div",{className:"flex flex-wrap items-center gap-3 px-8 pt-6 pb-4",children:[A.jsxs(Qn,{children:[A.jsx(Zn,{asChild:!0,children:A.jsxs(Dt,{type:"button",size:"sm",variant:"outline",onClick:a,children:["Back",A.jsx(uc,{children:"esc"})]})}),A.jsx(Jn,{children:"Back to the diff"})]}),A.jsx("strong",{className:"min-w-0 truncate font-mono text-sm font-medium",children:t.path}),A.jsxs("div",{className:"ml-auto flex items-center gap-1",children:[A.jsx(Dt,{type:"button",size:"sm",variant:t.mode==="file"?"secondary":"ghost",onClick:()=>r({...t,mode:"file"}),children:"File"}),s?null:A.jsx(Dt,{type:"button",size:"sm",variant:t.mode==="blame"?"secondary":"ghost",onClick:()=>r({...t,mode:"blame"}),children:"Blame"}),A.jsx(X6,{orientation:"vertical",className:"mx-1 h-6"}),A.jsx(Dt,{type:"button",size:"sm",variant:t.side==="old"?"secondary":"ghost",onClick:()=>r({...t,side:"old"}),children:"Old"}),A.jsx(Dt,{type:"button",size:"sm",variant:t.side==="new"?"secondary":"ghost",onClick:()=>r({...t,side:"new"}),children:"New"})]})]}),p!==null?A.jsx("p",{className:"px-8 text-warn",children:p}):null,y&&p===null&&!s?A.jsx("div",{className:"px-8 pt-2",children:A.jsx(il,{label:t.mode==="file"?ao.file:ao.blame})}):null,s?A.jsx("div",{className:"min-h-0 flex-1 overflow-auto px-8 pb-8",children:A.jsx("img",{src:Tp({kind:"image",path:t.path,side:t.side}),alt:`${t.side} ${t.path}`,className:"h-auto max-w-full bg-[var(--diff-canvas)]"})}):null,!s&&t.mode==="file"&&p===null&&!y?A.jsx("div",{className:"min-h-0 flex-1 overflow-auto px-4 pb-8",children:A.jsx(ux,{path:t.path,contents:u,wrap:n})}):null,!s&&t.mode==="blame"&&p===null&&!y&&d!==null?A.jsx("div",{className:"min-h-0 flex-1 overflow-auto px-4 pb-8",children:A.jsx(ux,{path:t.path,contents:S,wrap:n,annotations:_})}):null]})}function Z6(e){return/^(@@ -\d+(?:,\d+)? \+\d+(?:,\d+)? @@)/.exec(e)?.[1]??e}function J6(e){const t=[],n=/^(?:export\s+)?(?:async\s+)?(?:function|class|type|interface|enum)\s+([A-Za-z_][\w]*)/;for(const r of e){const s=n.exec(r.trim())?.[1];s!==void 0&&!t.includes(s)&&t.push(s)}return t}function e3(e){let t=0,n=0;for(const r of e)r.kind==="add"?t+=1:r.kind==="del"&&(n+=1);return{added:t,removed:n}}const t3=.35,n3=8;function i3(e,t,n,r,a=n3){const s=n*r,u=new Uint8ClampedArray(s*4);let f=0;for(let d=0;d<s;d+=1){const h=d*4,p=e[h+3]??0,m=t[h+3]??0,y=p===0&&m===0,b=Math.abs((e[h]??0)-(t[h]??0)),S=Math.abs((e[h+1]??0)-(t[h+1]??0)),_=Math.abs((e[h+2]??0)-(t[h+2]??0)),w=Math.abs(p-m),C=Math.max(b,S,_,w);if(y||C<=a){const E=r3(t[h]??0,t[h+1]??0,t[h+2]??0),L=Math.round(E*t3);u[h]=L,u[h+1]=L,u[h+2]=L,u[h+3]=255;continue}if(f+=1,p===0&&m>0){u[h]=26,u[h+1]=127,u[h+2]=55,u[h+3]=255;continue}if(m===0&&p>0){u[h]=207,u[h+1]=34,u[h+2]=46,u[h+3]=255;continue}u[h]=200,u[h+1]=40,u[h+2]=160,u[h+3]=255}return{pixels:u,changed:f,total:s}}function r3(e,t,n){return Math.round(.2126*e+.7152*t+.0722*n)}function q1(e,t,n,r){if(e<=0||t<=0||n<=0||r<=0)return{width:0,height:0,scale:1};const a=Math.min(1,n/e,r/t);return{width:Math.max(1,Math.round(e*a)),height:Math.max(1,Math.round(t*a)),scale:a}}function o3(e,t,n,r){return q1(e,t,Math.floor(Math.max(0,n-1)/2),r)}function a3(e,t,n){const r=`${e} × ${t}`;return n>=.995?r:`${r} at ${Math.round(n*100)}%`}function s3(e){return`${e}%`}function l3(e){const{path:t,status:n}=e,r=n!=="added",a=n!=="deleted",s=r?Tp({kind:"image",path:t,side:"old"}):void 0,u=a?Tp({kind:"image",path:t,side:"new"}):void 0,f=s!==void 0&&u!==void 0,d=dx(s),h=dx(u),p=d3(),[m,y]=O.useState("side-by-side"),[b,S]=O.useState(50),_=Math.max(d.naturalWidth,h.naturalWidth),w=Math.max(d.naturalHeight,h.naturalHeight),E=m==="side-by-side"||!f?o3(_,w,p.width,p.maxHeight):q1(_,w,p.width,p.maxHeight),L=E.width>0&&(d.ok||h.ok),R=d.error&&h.error?"These images are not in this clone. Fetch Git LFS objects, then refresh.":d.error?"The old image is not in this clone. Fetch Git LFS objects, then refresh.":h.error?"The new image is not in this clone. Fetch Git LFS objects, then refresh.":null;return A.jsxs("div",{ref:p.ref,className:"min-w-0",children:[A.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 border-b border-border px-3 py-2",children:[f?A.jsxs("div",{className:"flex overflow-hidden rounded-md border border-input",children:[A.jsx(xp,{active:m==="side-by-side",onClick:()=>y("side-by-side"),hint:"Old and new at the same size",children:"Side by side"}),A.jsx(xp,{active:m==="slider",onClick:()=>y("slider"),hint:"Drag to reveal new over old",children:"Slider"}),A.jsx(xp,{active:m==="diff",onClick:()=>y("diff"),hint:"Pixels that differ",children:"Diff"})]}):A.jsx("span",{className:"font-mono text-[11px] text-muted-foreground",children:n==="added"?"Added":"Deleted"}),L?A.jsx("span",{className:"ml-auto font-mono text-[11px] tabular-nums text-muted-foreground",children:a3(_,w,E.scale)}):null]}),R!==null?A.jsx("p",{className:"px-3 py-2 text-sm text-warn",children:R}):null,!L&&R===null?A.jsx("p",{className:"px-3 py-2 text-sm text-muted-foreground",children:"Reading image…"}):null,A.jsxs("div",{className:"flex w-full justify-center",children:[L&&(m==="side-by-side"||!f)?A.jsxs("div",{className:"flex",children:[r?A.jsx(tc,{label:"Old",width:E.width,height:E.height,rule:a,children:s!==void 0&&!d.error?A.jsx(qc,{src:s,alt:"Old",width:E.width,height:E.height}):A.jsx(nc,{})}):A.jsx(tc,{label:"Old",width:E.width,height:E.height,children:A.jsx(nc,{text:"Added — no old image"})}),a?A.jsx(tc,{label:"New",width:E.width,height:E.height,children:u!==void 0&&!h.error?A.jsx(qc,{src:u,alt:"New",width:E.width,height:E.height}):A.jsx(nc,{})}):A.jsx(tc,{label:"New",width:E.width,height:E.height,children:A.jsx(nc,{text:"Deleted — no new image"})})]}):null,L&&m==="slider"&&f&&s!==void 0&&u!==void 0?A.jsx(u3,{oldUrl:s,newUrl:u,width:E.width,height:E.height,wipe:b,onWipe:S}):null,L&&m==="diff"&&f&&d.element!==null&&h.element!==null?A.jsx(c3,{oldImage:d.element,newImage:h.element,naturalWidth:_,naturalHeight:w,width:E.width,height:E.height}):null]})]})}function xp(e){return A.jsxs(Qn,{children:[A.jsx(Zn,{asChild:!0,children:A.jsx(Dt,{type:"button",size:"sm",variant:e.active?"secondary":"ghost",className:"rounded-none border-0","aria-pressed":e.active,onClick:e.onClick,children:e.children})}),A.jsx(Jn,{children:e.hint})]})}function tc(e){return A.jsxs("figure",{className:Qe("w-fit shrink-0",e.rule===!0&&"border-r border-border"),children:[A.jsx("figcaption",{className:"border-b border-border px-3 py-1 font-mono text-[11px] text-muted-foreground",children:e.label}),A.jsx(Cg,{width:e.width,height:e.height,children:e.children})]})}function Cg(e){return A.jsx("div",{ref:e.ref,className:Qe("image-stage relative shrink-0 overflow-hidden",e.className),style:{width:e.width,height:e.height},onPointerDown:e.onPointerDown,onPointerMove:e.onPointerMove,children:e.children})}function qc(e){return A.jsx("img",{src:e.src,alt:e.alt,width:e.width,height:e.height,className:"absolute top-0 left-0 max-w-none",style:{width:e.width,height:e.height,objectFit:"contain",objectPosition:"left top"}})}function nc(e){return A.jsx("p",{className:"flex h-full items-center px-3 text-sm text-muted-foreground",children:e.text??"Image missing"})}function u3(e){const{oldUrl:t,newUrl:n,width:r,height:a,wipe:s,onWipe:u}=e,f=O.useId(),d=O.useRef(null),h=y=>{const b=d.current;if(b===null)return;const S=b.getBoundingClientRect();S.width!==0&&u(Math.min(100,Math.max(0,(y-S.left)/S.width*100)))},p=y=>{y.preventDefault(),y.currentTarget.setPointerCapture(y.pointerId),h(y.clientX)},m=y=>{y.buttons!==0&&h(y.clientX)};return A.jsxs("figure",{className:"mx-auto w-fit shrink-0",children:[A.jsxs(Cg,{ref:d,width:r,height:a,className:"cursor-col-resize touch-none",onPointerDown:p,onPointerMove:m,children:[A.jsx(qc,{src:t,alt:"Old",width:r,height:a}),A.jsx("div",{className:"absolute inset-y-0 left-0 overflow-hidden",style:{width:s3(s)},children:A.jsx(qc,{src:n,alt:"New",width:r,height:a})}),A.jsxs("div",{className:"pointer-events-none absolute inset-y-0",style:{left:`${s}%`},"aria-hidden":!0,children:[A.jsx("span",{className:"absolute inset-y-0 left-0 w-px -translate-x-1/2 bg-primary"}),A.jsx("span",{className:"absolute top-1/2 left-0 size-2.5 -translate-x-1/2 -translate-y-1/2 rounded-full border border-primary bg-card"})]})]}),A.jsxs("label",{className:"flex w-full items-center gap-3 px-3 py-2 font-mono text-[11px] text-muted-foreground",htmlFor:f,children:["Old",A.jsx("input",{id:f,type:"range",min:0,max:100,value:s,"aria-label":"Wipe between old and new",className:"min-w-0 flex-1 accent-primary",onChange:y=>u(Number(y.target.value))}),"New"]})]})}function c3(e){const t=O.useRef(null),[n,r]=O.useState(null);return O.useEffect(()=>{const a=t.current;if(a===null)return;const s=e.naturalWidth,u=e.naturalHeight;a.width=s,a.height=u;const f=a.getContext("2d");if(f===null)return;const d=fx(e.oldImage,s,u),h=fx(e.newImage,s,u),p=i3(d,h,s,u),m=f.createImageData(s,u);m.data.set(p.pixels),f.putImageData(m,0,0),r({changed:p.changed,total:p.total})},[e.naturalHeight,e.naturalWidth,e.newImage,e.oldImage]),A.jsxs("figure",{className:"mx-auto w-fit shrink-0",children:[A.jsx(Cg,{width:e.width,height:e.height,children:A.jsx("canvas",{ref:t,className:"block size-full"})}),n!==null?A.jsxs("figcaption",{className:"px-3 py-2 font-mono text-[11px] tabular-nums text-muted-foreground",children:[n.changed.toLocaleString()," of ",n.total.toLocaleString()," pixels differ"]}):null]})}function dx(e){const[t,n]=O.useState({ok:!1,error:!1,element:null,naturalWidth:0,naturalHeight:0});return O.useEffect(()=>{if(e===void 0){n({ok:!1,error:!1,element:null,naturalWidth:0,naturalHeight:0});return}let r=!1;return n({ok:!1,error:!1,element:null,naturalWidth:0,naturalHeight:0}),f3(e).then(a=>{r||n({ok:!0,error:!1,element:a,naturalWidth:a.naturalWidth,naturalHeight:a.naturalHeight})}).catch(()=>{r||n({ok:!1,error:!0,element:null,naturalWidth:0,naturalHeight:0})}),()=>{r=!0}},[e]),t}function d3(){const e=O.useRef(null),[t,n]=O.useState({width:0,maxHeight:0});return O.useLayoutEffect(()=>{const r=e.current;if(r===null)return;const a=()=>{const u=Math.floor(r.clientWidth),f=Math.max(120,Math.round(window.innerHeight*.7));n(d=>d.width===u&&d.maxHeight===f?d:{width:u,maxHeight:f})};a();const s=new ResizeObserver(a);return s.observe(r),window.addEventListener("resize",a),()=>{s.disconnect(),window.removeEventListener("resize",a)}},[]),{ref:e,width:t.width,maxHeight:t.maxHeight}}function f3(e){return new Promise((t,n)=>{const r=new Image;r.onload=()=>t(r),r.onerror=()=>n(new Error("image load failed")),r.src=e})}function fx(e,t,n){const r=document.createElement("canvas");r.width=t,r.height=n;const a=r.getContext("2d");return a===null?new Uint8ClampedArray(t*n*4):(a.clearRect(0,0,t,n),a.drawImage(e,0,0),a.getImageData(0,0,t,n).data)}const h3=eC("inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-colors focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 [&>svg]:pointer-events-none [&>svg]:size-3",{variants:{variant:{default:"bg-primary text-primary-foreground",secondary:"bg-secondary text-secondary-foreground",destructive:"bg-destructive/20 text-destructive",outline:"border-border text-foreground",ghost:"text-muted-foreground"}},defaultVariants:{variant:"default"}});function p3({className:e,variant:t="default",asChild:n=!1,...r}){const a=n?$x:"span";return A.jsx(a,{"data-slot":"badge",className:Qe(h3({variant:t}),e),...r})}function m3(e){const{file:t,active:n,index:r,split:a,splitRatio:s,wrap:u,viewed:f,onSplitRatio:d,onOpen:h,onViewed:p}=e,m=t.kind==="lockfile",[y,b]=O.useState(f||m),[S,_]=O.useState(t.patch),[w,C]=O.useState(null),E=t.hunks[0],L=J6(t.hunks.flatMap(I=>I.lines.filter(H=>H.kind==="add").map(H=>H.text))),R=t.oldPath!==void 0?`${t.oldPath} → ${t.path}`:t.path,D=O.useId();O.useEffect(()=>{b(f||m)},[m,f]),O.useEffect(()=>{if(y||!m||S!==""||w!==null)return;let I=!1;return gA(t.path).then(H=>{I||_(H.patch)}).catch(H=>{I||C(H instanceof Error?H.message:String(H))}),()=>{I=!0}},[y,m,t.path,S,w]);const M=I=>{I.target instanceof Element&&I.target.closest("button, input, label, a")!==null||b(H=>!H)};return A.jsxs("article",{className:Qe("hunk-card overflow-hidden rounded-lg border bg-card",n?"border-primary":"border-border"),"data-hunk":r,children:[A.jsxs("header",{className:Qe("sticky top-0 z-10 flex cursor-pointer flex-wrap items-center gap-x-3 gap-y-1 bg-card px-3 py-2",y?null:"border-b border-border"),onClick:M,children:[A.jsx(Dt,{type:"button",variant:"ghost",size:"icon-sm",className:"size-6","aria-expanded":!y,"aria-controls":D,"aria-label":y?"Expand file":"Collapse file",onClick:()=>b(I=>!I),children:A.jsx(kA,{className:Qe("hunk-chevron size-4",y&&"-rotate-90")})}),A.jsxs(Qn,{children:[A.jsx(Zn,{asChild:!0,children:A.jsx(Dt,{type:"button",variant:"link",className:Qe("file-path h-auto p-0 font-mono text-sm",f&&"text-muted-foreground"),onClick:()=>h(t.path),children:R})}),A.jsx(Jn,{children:"Open file"})]}),A.jsx("code",{className:"font-mono text-xs text-muted-foreground",children:t.kind==="image"?"image":t.kind==="lockfile"?"lockfile":t.hunkCount===1&&E!==void 0?Z6(E.header):`${t.hunkCount} hunks`}),t.kind==="image"?A.jsx("span",{className:"font-mono text-[11px] text-muted-foreground",children:t.status}):A.jsxs("span",{className:"font-mono text-[11px] tabular-nums",children:[A.jsxs("span",{className:"text-del",children:["−",t.removed]})," ",A.jsxs("span",{className:"text-add",children:["+",t.added]})]}),L.length>0?L.map(I=>A.jsx(p3,{variant:"outline",className:"font-mono font-normal",children:I},I)):null,A.jsxs(Qn,{children:[A.jsx(Zn,{asChild:!0,children:A.jsxs("label",{className:"ml-auto flex shrink-0 cursor-pointer items-center gap-1.5 text-xs text-muted-foreground select-none",children:[A.jsx("input",{type:"checkbox",className:"size-3.5 accent-primary",checked:f,onChange:I=>p(t.path,I.target.checked)}),"Viewed"]})}),A.jsxs(Jn,{children:[f?"Mark as not viewed":"Mark as viewed"," (v)"]})]})]}),A.jsx("div",{id:D,hidden:y,children:y?null:t.kind==="image"?A.jsx(l3,{path:t.path,status:t.status}):w!==null?A.jsx("p",{className:"px-3 py-2 text-sm text-warn",children:w}):m&&S===""?A.jsx(il,{label:ao.lockfile}):A.jsx(G6,{patch:S,split:a,wrap:u,splitRatio:s,onSplitRatio:d})})]})}function Rm(e){return A.jsxs("div",{className:Qe("max-w-[68ch]",e.className),children:[e.kicker!==void 0?A.jsx("p",{className:"mb-2 font-mono text-[11px] tracking-wide text-muted-foreground",children:e.kicker}):null,A.jsx("h1",{className:"mb-3 font-serif text-[1.75rem] leading-snug text-foreground",children:e.title}),e.children]})}function g3(e){const{group:t,index:n,groups:r,partTitle:a,onOpenLayer:s}=e;return A.jsxs(Rm,{kicker:a!==void 0?`${a} · ${Ms(n)}`:Ms(n),title:t.title,children:[A.jsx("p",{className:"mb-2 font-mono text-[11px] tracking-wide text-muted-foreground",children:"Why"}),A.jsx("p",{className:"mb-6 font-serif text-lg leading-relaxed text-foreground",children:t.why}),A.jsx("p",{className:"mb-2 font-mono text-[11px] tracking-wide text-muted-foreground",children:"What"}),A.jsx("p",{className:"mb-5 leading-relaxed text-foreground",children:t.summary}),t.dependsOn.length>0?A.jsxs("p",{className:"mb-5 text-muted-foreground",children:["Depends on"," ",t.dependsOn.map((u,f)=>{const d=r.find(p=>p.id===u),h=d!==void 0?`${Ms(Ux(r,u))} ${d.title}`:u;return A.jsxs("span",{children:[f>0?", ":"",A.jsx(Dt,{type:"button",variant:"link",className:"h-auto p-0",onClick:()=>s(u),children:h})]},u)})]}):null,t.lookFor.length>0?A.jsx("ul",{className:"mb-2 list-disc space-y-2 pl-5 leading-relaxed",children:t.lookFor.map(u=>A.jsx("li",{children:u},u))}):null,t.staleCount>0?A.jsxs("p",{className:"mt-4 text-warn",children:[t.staleCount," hunk ref",t.staleCount===1?"":"s"," no longer match live git. Git wins; the pointer is flagged, not replaced."]}):null]})}function v3(e){const{group:t,bucket:n,groups:r,mixed:a,strandColor:s,loading:u,hunkError:f,files:d,activeHunk:h,split:p,splitRatio:m,wrap:y,viewedPaths:b}=e;return A.jsxs(A.Fragment,{children:[A.jsxs("div",{className:"review-brief",children:[s!==void 0?A.jsx("span",{className:"review-brief-strand",style:{backgroundColor:s},"aria-hidden":!0}):null,A.jsx("div",{className:"review-brief-copy",children:t!==null?A.jsx(g3,{group:t,index:Ux(r,t.id),groups:r,partTitle:a?t.part:void 0,onOpenLayer:e.onOpenLayer}):n==="lockfiles"?A.jsx(Rm,{kicker:"Lockfiles",title:"Generated lockfiles"}):A.jsx(Rm,{kicker:"Unassigned",title:"Not in any layer",children:A.jsx("p",{className:"font-serif text-lg leading-relaxed text-foreground",children:"These hunks are in git and in no layer. Fix the review document — never the diff."})})})]}),f!==null?A.jsx("p",{className:"mt-4 text-warn",children:f}):null,u?A.jsx("article",{className:"hunk-card mt-8 overflow-hidden rounded-lg border border-border bg-card",children:A.jsx(il,{label:ao.layer})}):null,!u&&d.length===0&&f===null?A.jsx("p",{className:"mt-8 text-muted-foreground",children:"No hunks in this layer."}):null,!u&&d.length>0?A.jsxs("p",{className:"mt-8 font-mono text-xs tabular-nums text-muted-foreground",children:[d.filter(S=>b.has(S.path)).length," of ",d.length," files viewed"]}):null,!u&&d.length>0?A.jsx("div",{className:"mt-4 space-y-8",children:d.map(S=>A.jsx(m3,{file:S,active:h>=S.firstIndex&&h<S.firstIndex+S.hunkCount,index:S.firstIndex,split:p,splitRatio:m,wrap:y,viewed:b.has(S.path),onSplitRatio:e.onSplitRatio,onOpen:e.onOpenFile,onViewed:e.onViewed},S.path))}):null]})}const W1=6;function y3(e){const t=new Map(e.map(s=>[s.id,s.suggestedOrder]));if(!e.some(s=>s.part!==void 0))return[{colorIndex:0,layerIds:hx(e.map(s=>s.id),t)}];const r=new Map;for(const s of e){const u=s.part??`\0${s.id}`,f=r.get(u)??[];f.push(s.id),r.set(u,f)}const a=[...r.entries()].map(([s,u])=>{const f=hx(u,t);return{title:s.startsWith("\0")?void 0:s,layerIds:f,minOrder:t.get(f[0]??"")??0,sortKey:f[0]??""}});return a.sort((s,u)=>s.minOrder-u.minOrder||(s.title??s.sortKey).localeCompare(u.title??u.sortKey)),a.map((s,u)=>({colorIndex:u%W1,layerIds:s.layerIds,...s.title!==void 0?{title:s.title}:{}}))}function Y1(e){const t=new Map;for(const n of e)for(const r of n.layerIds)t.set(r,n.colorIndex);return t}function gd(e){return`var(--strand-${e%W1})`}function Eg(e){return e.length>1}function hx(e,t){return[...e].sort((n,r)=>(t.get(n)??0)-(t.get(r)??0)||n.localeCompare(r))}function b3(e){const{meta:t,parts:n,onOpenLayer:r}=e,a=Eg(n),s=new Map(t.groups.map(h=>[h.id,h])),u=t.document.tickets??[],f=t.document.why,d=u.length>0?A.jsx(S3,{tickets:u,mixed:a,parts:n}):null;return A.jsxs("div",{className:"review-overview mb-8",children:[f!==void 0?A.jsxs("section",{className:"mb-12 max-w-[68ch]","aria-labelledby":"review-why",children:[A.jsx("p",{id:"review-why",className:"mb-2 font-mono text-[11px] tracking-wide text-muted-foreground",children:"Why"}),A.jsx("h1",{className:"mb-4 font-serif text-[1.75rem] leading-snug text-foreground",children:f}),d]}):d!==null?A.jsx("div",{className:"mb-8 max-w-[68ch]",children:d}):null,A.jsxs("section",{"aria-labelledby":"review-what",children:[A.jsxs("p",{id:"review-what",className:"mb-2 font-mono text-[11px] tracking-wide text-muted-foreground",children:["What · ",jx(t.document.size)," · ",t.files.length," files"]}),f!==void 0?A.jsx("p",{className:"mb-8 max-w-[68ch] font-serif text-lg leading-relaxed text-foreground",children:t.document.summary}):A.jsx("h1",{className:"mb-8 max-w-[68ch] font-serif text-[1.75rem] leading-snug text-foreground",children:t.document.summary}),A.jsx("div",{className:a?"grid grid-flow-col auto-cols-[minmax(16rem,1fr)] items-start gap-4 overflow-x-auto pb-1":void 0,children:n.map(h=>A.jsx(_3,{part:h,mixed:a,groups:t.groups,byId:s,onOpenLayer:r},h.layerIds.join("\0")))})]})]})}function S3(e){const{tickets:t,mixed:n,parts:r}=e;return A.jsx("ul",{className:"space-y-1 font-mono text-[11px] tracking-wide text-muted-foreground",children:t.map(a=>{const s=n?r.find(u=>u.title===a.part):void 0;return A.jsxs("li",{className:"flex items-center gap-2",children:[s!==void 0?A.jsx("span",{"aria-hidden":!0,className:"size-2 shrink-0 rounded-full",style:{backgroundColor:gd(s.colorIndex)}}):null,a.url!==void 0?A.jsx("a",{className:"text-primary hover:underline",href:a.url,target:"_blank",rel:"noreferrer",children:a.id}):A.jsx("span",{children:a.id}),a.title!==void 0?A.jsx("span",{children:a.title}):null,a.part!==void 0?A.jsxs("span",{children:["· ",a.part]}):null]},a.id)})})}function _3(e){const{part:t,mixed:n,groups:r,byId:a,onOpenLayer:s}=e,u=gd(t.colorIndex);return A.jsxs("section",{className:Qe("min-w-0",n&&"rounded-md border border-border py-2"),style:n?x3(u):void 0,"aria-label":t.title,children:[n&&t.title!==void 0?A.jsxs("p",{className:"mb-1 flex items-center gap-2 px-4 pt-2 font-mono text-[11px] tracking-wide text-muted-foreground",children:[A.jsx("span",{"aria-hidden":!0,className:"size-2 shrink-0 rounded-full",style:{backgroundColor:u}}),t.title]}):null,A.jsx("ol",{className:"m-0 list-none p-0",children:t.layerIds.map(f=>{const d=a.get(f);if(d===void 0)return null;const h=r.findIndex(p=>p.id===f)+1;return A.jsx("li",{className:"mb-2 last:mb-0",children:A.jsxs(Dt,{type:"button",variant:"ghost",className:"h-auto w-full min-w-0 items-start justify-start gap-4 rounded-md px-4 py-4 text-left font-normal whitespace-normal",onClick:()=>s(d.id),children:[A.jsx("span",{className:"mt-0.5 shrink-0 font-mono text-[11px] text-muted-foreground tabular-nums",children:Ms(h)}),A.jsxs("span",{className:"min-w-0 flex-1",children:[A.jsx("strong",{className:"block font-medium text-foreground",children:d.title}),A.jsx("span",{className:"mt-1 block leading-relaxed text-muted-foreground",children:d.summary})]})]})},d.id)})})]})}function x3(e){return{"--strand":e,borderLeftWidth:3,borderLeftColor:e,backgroundColor:`color-mix(in srgb, ${e} 8%, var(--card))`}}function C3(e){const{meta:t,selection:n,parts:r,onSelect:a}=e,u=Eg(r)?Y1(r):new Map;return A.jsx("nav",{className:"h-full overflow-auto py-6",children:A.jsxs("div",{className:"stack",children:[A.jsx("span",{className:"stack-selection","aria-hidden":!0}),A.jsx("ul",{className:"mb-6 list-none p-0",children:A.jsx("li",{children:A.jsx(ic,{active:n?.kind==="overview",onClick:()=>a({kind:"overview"}),title:"Overview",count:jx(t.document.size)})})}),A.jsxs("ul",{className:"mb-6 list-none p-0",children:[t.groups.map((f,d)=>A.jsx("li",{children:A.jsx(ic,{active:n?.kind==="group"&&n.id===f.id,onClick:()=>a({kind:"group",id:f.id}),index:Ms(d+1),title:f.title,count:f.staleCount>0?`${f.staleCount} stale`:void 0,colorIndex:u.get(f.id)})},f.id)),t.unassigned.hunkCount>0?A.jsx("li",{children:A.jsx(ic,{active:n?.kind==="unassigned",onClick:()=>a({kind:"unassigned"}),title:"Unassigned",count:String(t.unassigned.hunkCount),warn:!0})}):null,t.lockfiles.fileCount>0?A.jsx("li",{children:A.jsx(ic,{active:n?.kind==="lockfiles",onClick:()=>a({kind:"lockfiles"}),title:"Lockfiles",count:String(t.lockfiles.fileCount)})}):null]})]})})}function ic(e){const t=e.colorIndex,n=t!==void 0||e.active;return A.jsxs(Dt,{type:"button",variant:"ghost",onClick:e.onClick,style:t!==void 0?{"--strand":gd(t)}:void 0,className:Qe("stack-item relative z-1 mx-3 mb-1 h-auto w-[calc(100%-24px)] min-w-0 items-start justify-start gap-2.5 rounded-md px-3 py-2 text-left font-normal whitespace-normal hover:bg-transparent",e.active&&"stack-item-active text-foreground",e.warn&&"text-warn hover:text-warn"),children:[n?A.jsx("span",{className:Qe("stack-strand",t!==void 0&&!e.active&&"opacity-45"),"aria-hidden":!0}):null,e.index!==void 0?A.jsx("span",{className:"mt-px w-5 shrink-0 font-mono text-[11px] text-muted-foreground tabular-nums",children:e.index}):null,A.jsx("span",{className:"min-w-0 flex-1 text-left leading-snug",children:e.title}),e.count!==void 0?A.jsx("span",{className:Qe("shrink-0 text-[11px] tabular-nums text-muted-foreground",e.warn&&"text-warn"),children:e.count}):null]})}function rc(e){let t=0;return e.map(n=>{const r=e3(n.hunks.flatMap(s=>s.lines)),a={path:n.path,kind:n.kind??"text",status:n.status??"modified",patch:n.patch,added:n.added??r.added,removed:n.removed??r.removed,hunkCount:Math.max(n.hunks.length,1),firstIndex:t,hunks:n.hunks};return n.oldPath!==void 0&&(a.oldPath=n.oldPath),t+=a.hunkCount,a})}function Cp(e,t){return e.findIndex(n=>t>=n.firstIndex&&t<n.firstIndex+n.hunkCount)}let Ep=0;function E3(){return typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches}function w3(e){const t=E3(),n=typeof document>"u"?void 0:document.startViewTransition;return!t&&typeof n=="function"}function wp(e,t){if(!w3()){e();return}const n=document.startViewTransition;if(typeof n!="function"){e();return}const r=document.documentElement,a=++Ep;r.dataset.motion=t;try{n.call(document,()=>{Yc.flushSync(e)}).finished.finally(()=>{a===Ep&&delete r.dataset.motion})}catch{a===Ep&&delete r.dataset.motion,e()}}function oc(e){return e.groups.length>0?{kind:"overview"}:{kind:"unassigned"}}function K1(e,t){return`comprehende.layer.${e}.${t}`}function k3(e){if(e===null||e==="")return null;try{const t=JSON.parse(e);return typeof t!="object"||t===null||!("kind"in t)?null:t.kind==="overview"?{kind:"overview"}:t.kind==="unassigned"?{kind:"unassigned"}:t.kind==="lockfiles"?{kind:"lockfiles"}:t.kind==="group"&&"id"in t&&typeof t.id=="string"&&t.id!==""?{kind:"group",id:t.id}:null}catch{return null}}function L3(e){return JSON.stringify(e)}function T3(e,t){return t===null||t.kind==="group"&&!e.groups.some(n=>n.id===t.id)||t.kind==="unassigned"&&e.unassigned.hunkCount===0&&e.groups.length>0||t.kind==="lockfiles"&&(e.lockfiles?.fileCount??0)===0?oc(e):t}function A3(e){return T3(e,O3(e.resolved.baseSha,e.resolved.headSha))}function R3(e,t){D3(e.resolved.baseSha,e.resolved.headSha,t)}function O3(e,t){try{return k3(sessionStorage.getItem(K1(e,t)))}catch{return null}}function D3(e,t,n){try{sessionStorage.setItem(K1(e,t),L3(n))}catch{}}function M3(e){const t=[{kind:"overview"},...e.groups.map(n=>({kind:"group",id:n.id}))];return e.unassigned.hunkCount>0&&t.push({kind:"unassigned"}),(e.lockfiles?.fileCount??0)>0&&t.push({kind:"lockfiles"}),t}function px(e,t,n,r){if(e===null)return;const a=M3(e),s=a.findIndex(f=>X1(f,t)),u=a[(s+r+a.length)%a.length];u!==void 0&&n(u)}function X1(e,t){return t===null?!1:e.kind==="overview"?t.kind==="overview":e.kind==="unassigned"?t.kind==="unassigned":e.kind==="lockfiles"?t.kind==="lockfiles":t.kind==="group"&&t.id===e.id}function N3(e,t){return`comprehende.viewed.${e}.${t}`}function I3(e){if(e===null||e==="")return new Set;try{const t=JSON.parse(e);return!Array.isArray(t)||t.some(n=>typeof n!="string")?new Set:new Set(t)}catch{return new Set}}function z3(e){return JSON.stringify([...e].sort())}function P3(e,t,n){const r=new Set(e);return n?r.add(t):r.delete(t),r}function mx(e){try{return Q1(e),I3(sessionStorage.getItem(e))}catch{return new Set}}function H3(e,t){try{Q1(e),sessionStorage.setItem(e,z3(t))}catch{}}function Q1(e){try{localStorage.removeItem(e)}catch{}}function U3(e,t){const n=e!==void 0&&t!==void 0?N3(e,t):null,[r,a]=O.useState(()=>n===null?new Set:mx(n));O.useEffect(()=>{a(n===null?new Set:mx(n))},[n]);const s=O.useCallback((u,f)=>{n!==null&&a(d=>{const h=P3(d,u,f);return H3(n,h),h})},[n]);return{viewedPaths:r,setFileViewed:s}}function j3({className:e,...t}){return A.jsx(Ix,{"data-slot":"resizable-panel-group",className:Qe("flex h-full w-full aria-[orientation=vertical]:flex-col",e),...t})}function gx({...e}){return A.jsx(zx,{"data-slot":"resizable-panel",...e})}function V3({withHandle:e=!1,className:t,...n}){return A.jsx(Px,{"data-slot":"resizable-handle",className:Qe("relative flex w-2 items-center justify-center bg-transparent after:absolute after:inset-y-0 after:left-1/2 after:w-px after:-translate-x-1/2 after:bg-border hover:after:bg-primary/60 focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-hidden aria-[orientation=horizontal]:h-2 aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-px aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2",t),...n,children:e?A.jsx("div",{className:"bg-border z-10 flex h-8 w-3 items-center justify-center rounded-sm border border-border",children:A.jsx(Bx,{className:"size-2.5 text-muted-foreground"})}):null})}function B3(){const[e,t]=O.useState(null),[n,r]=O.useState(null),[a,s]=O.useState(null),[u,f]=O.useState([]),[d,h]=O.useState(null),[p,m]=O.useState(null),[y,b]=O.useState(!1),[S,_]=O.useState(!1),[w,C]=O.useState(.5),[E,L]=O.useState(0),[R,D]=O.useState(null),[M,I]=O.useState(!0),H=O.useRef(null),{defaultLayout:W,onLayoutChanged:ee}=uA({id:"comprehende-shell-overlay",panelIds:["stack","main"],onlySaveAfterUserInteractions:!0}),te=O.useCallback(async()=>{I(!0),r(null);try{const re=await pA();t(re),s(ce=>ce??A3(re))}catch(re){r(re instanceof Error?re.message:String(re))}finally{I(!1)}},[]);O.useEffect(()=>{te()},[te]),O.useEffect(()=>{e===null||a===null||R3(e,a)},[e,a]);const V=a?.kind==="group"?a.id:a?.kind==="unassigned"?"unassigned":a?.kind==="lockfiles"?"lockfiles":null;O.useEffect(()=>{if(V===null){f([]),h(null);return}let re=!1;return m(null),mA(V).then(ce=>{re||(f(ce.files),h(V),L(0))}).catch(ce=>{re||(f([]),h(V),m(ce instanceof Error?ce.message:String(ce)))}),()=>{re=!0}},[V]);const Z=V!==null&&V!==d,ie=O.useCallback(re=>{if(X1(re,a)&&R===null)return;wp(()=>{s(re),D(null)},R!==null?"scene":"layer")},[R,a]),se=O.useCallback(re=>{wp(()=>{D({path:re,mode:"file",side:"new"})},"scene")},[]),z=O.useCallback(()=>{R!==null&&wp(()=>D(null),"scene")},[R]),{viewedPaths:G,setFileViewed:X}=U3(e?.resolved.baseSha,e?.resolved.headSha),ue=O.useCallback(re=>{L(re),requestAnimationFrame(()=>{document.querySelector(`[data-hunk="${re}"]`)?.scrollIntoView({block:"nearest"})})},[]);O.useEffect(()=>{const re=ce=>{if(ce.metaKey||ce.ctrlKey||ce.altKey)return;const ke=ce.target;if(!(ke instanceof HTMLElement&&(ke.isContentEditable||ke.closest("input, textarea, select")!==null)))if(ce.key==="w")b(fe=>!fe);else if(ce.key==="s")_(fe=>(fe||C(.5),!fe));else if(ce.key==="r")te();else if(ce.key==="o")ie({kind:"overview"});else if(ce.key==="u")ie({kind:"unassigned"});else if(ce.key==="Escape")z();else if(ce.key==="[")px(e,a,ie,-1);else if(ce.key==="]")px(e,a,ie,1);else{if(R!==null)return;if(ce.key==="j"){const fe=rc(u),Fe=Cp(fe,E),Ge=fe[Math.min(fe.length-1,Math.max(Fe,0)+1)];Ge!==void 0&&ue(Ge.firstIndex)}else if(ce.key==="k"){const fe=rc(u),Fe=Cp(fe,E),Ge=fe[Math.max(0,(Fe===-1?0:Fe)-1)];Ge!==void 0&&ue(Ge.firstIndex)}else if(ce.key==="v"){const fe=rc(u),Fe=fe[Math.max(0,Cp(fe,E))];Fe!==void 0&&X(Fe.path,!G.has(Fe.path))}}};return window.addEventListener("keydown",re),()=>window.removeEventListener("keydown",re)},[E,z,R,u,te,e,ue,ie,a,X,G]),O.useEffect(()=>{H.current?.scrollTo({top:0})},[a]);const Y=O.useMemo(()=>e===null||a?.kind!=="group"?null:e.groups.find(re=>re.id===a.id)??null,[e,a]),N=O.useMemo(()=>rc(u),[u]),q=O.useMemo(()=>y3(e?.groups??[]),[e]),oe=O.useMemo(()=>Y1(q),[q]),le=Eg(q),de=le&&Y!==null?oe.get(Y.id):void 0;return M&&e===null?A.jsxs(vx,{children:[A.jsx("p",{className:"mb-5 font-serif text-lg leading-none text-foreground",children:"Comprehende"}),A.jsx(il,{layout:"page",label:ao.review})]}):n!==null&&e===null?A.jsx(vx,{className:"text-warn",children:n}):e===null?null:A.jsx(WD,{children:A.jsxs("div",{className:"flex h-full min-h-0 flex-col","aria-busy":M||Z,children:[A.jsx(nM,{meta:e,wrap:y,split:S,onWrap:()=>b(re=>!re),onUnified:()=>_(!1),onSplit:()=>{_(!0),S||C(.5)},onRefresh:()=>{te()},busy:M}),A.jsxs(j3,{className:"min-h-0 flex-1",defaultLayout:W,onLayoutChanged:ee,children:[A.jsx(gx,{id:"stack",defaultSize:"20",minSize:"14%",className:"min-h-0 min-w-0",children:A.jsx(C3,{meta:e,selection:a,parts:q,onSelect:ie})}),A.jsx(V3,{withHandle:!0}),A.jsx(gx,{id:"main",defaultSize:"80",minSize:"40%",className:"min-h-0 min-w-0",children:A.jsx("div",{className:"review-scene h-full min-h-0",children:R!==null?A.jsx(Q6,{inspector:R,wrap:y,setInspector:D,onClose:z}):A.jsx("main",{ref:H,className:"review-main h-full overflow-auto px-10 py-8","aria-busy":Z,children:a?.kind==="overview"?A.jsx(b3,{meta:e,parts:q,onOpenLayer:re=>ie({kind:"group",id:re})}):A.jsx(v3,{group:Y,bucket:a?.kind==="lockfiles"?"lockfiles":a?.kind==="unassigned"?"unassigned":void 0,groups:e.groups,mixed:le,strandColor:de!==void 0?gd(de):void 0,loading:Z,hunkError:p,files:Z?[]:N,activeHunk:E,split:S,splitRatio:w,wrap:y,viewedPaths:G,onOpenLayer:re=>ie({kind:"group",id:re}),onOpenFile:se,onSplitRatio:C,onViewed:X})})})})]})]})})}function vx(e){return A.jsx("div",{className:Qe("px-10 py-8 text-muted-foreground",e.className),children:e.children})}const Z1=document.getElementById("root");if(Z1===null)throw new Error("missing #root");OT.createRoot(Z1).render(A.jsx(O.StrictMode,{children:A.jsx(eM,{children:A.jsx(U6,{children:A.jsx(B3,{})})})}));
|
|
1598
|
+
`),[d]),_=O.useMemo(()=>{if(d!==null)return uM(d).map(w=>({lineNumber:w.lineNumber,metadata:{sha:w.sha,author:w.author,timestamp:w.timestamp,lines:w.lines}}))},[d]);return O.useEffect(()=>{let w=!1;if(m(null),b(!0),f(""),h(null),s){b(!1);return}return t.mode==="file"?vA(t.path,t.side).then(C=>{w||(f(C.content),b(!1))}).catch(C=>{w||(m(C instanceof Error?C.message:String(C)),b(!1))}):yA(t.path,t.side).then(C=>{w||(h(C.lines),b(!1))}).catch(C=>{w||(m(C instanceof Error?C.message:String(C)),b(!1))}),()=>{w=!0}},[s,t]),A.jsxs("div",{className:"review-inspector flex h-full min-h-0 flex-col","aria-busy":y,children:[A.jsxs("div",{className:"flex flex-wrap items-center gap-3 px-8 pt-6 pb-4",children:[A.jsxs(Qn,{children:[A.jsx(Zn,{asChild:!0,children:A.jsxs(Dt,{type:"button",size:"sm",variant:"outline",onClick:a,children:["Back",A.jsx(uc,{children:"esc"})]})}),A.jsx(Jn,{children:"Back to the diff"})]}),A.jsx("strong",{className:"min-w-0 truncate font-mono text-sm font-medium",children:t.path}),A.jsxs("div",{className:"ml-auto flex items-center gap-1",children:[A.jsx(Dt,{type:"button",size:"sm",variant:t.mode==="file"?"secondary":"ghost",onClick:()=>r({...t,mode:"file"}),children:"File"}),s?null:A.jsx(Dt,{type:"button",size:"sm",variant:t.mode==="blame"?"secondary":"ghost",onClick:()=>r({...t,mode:"blame"}),children:"Blame"}),A.jsx(X6,{orientation:"vertical",className:"mx-1 h-6"}),A.jsx(Dt,{type:"button",size:"sm",variant:t.side==="old"?"secondary":"ghost",onClick:()=>r({...t,side:"old"}),children:"Old"}),A.jsx(Dt,{type:"button",size:"sm",variant:t.side==="new"?"secondary":"ghost",onClick:()=>r({...t,side:"new"}),children:"New"})]})]}),p!==null?A.jsx("p",{className:"px-8 text-warn",children:p}):null,y&&p===null&&!s?A.jsx("div",{className:"px-8 pt-2",children:A.jsx(il,{label:t.mode==="file"?ao.file:ao.blame})}):null,s?A.jsx("div",{className:"min-h-0 flex-1 overflow-auto px-8 pb-8",children:A.jsx("img",{src:Tp({kind:"image",path:t.path,side:t.side}),alt:`${t.side} ${t.path}`,className:"h-auto max-w-full bg-[var(--diff-canvas)]"})}):null,!s&&t.mode==="file"&&p===null&&!y?A.jsx("div",{className:"min-h-0 flex-1 overflow-auto px-4 pb-8",children:A.jsx(ux,{path:t.path,contents:u,wrap:n})}):null,!s&&t.mode==="blame"&&p===null&&!y&&d!==null?A.jsx("div",{className:"min-h-0 flex-1 overflow-auto px-4 pb-8",children:A.jsx(ux,{path:t.path,contents:S,wrap:n,annotations:_})}):null]})}function Z6(e){return/^(@@ -\d+(?:,\d+)? \+\d+(?:,\d+)? @@)/.exec(e)?.[1]??e}function J6(e){const t=[],n=/^(?:export\s+)?(?:async\s+)?(?:function|class|type|interface|enum)\s+([A-Za-z_][\w]*)/;for(const r of e){const s=n.exec(r.trim())?.[1];s!==void 0&&!t.includes(s)&&t.push(s)}return t}function e3(e){let t=0,n=0;for(const r of e)r.kind==="add"?t+=1:r.kind==="del"&&(n+=1);return{added:t,removed:n}}const t3=.35,n3=8;function i3(e,t,n,r,a=n3){const s=n*r,u=new Uint8ClampedArray(s*4);let f=0;for(let d=0;d<s;d+=1){const h=d*4,p=e[h+3]??0,m=t[h+3]??0,y=p===0&&m===0,b=Math.abs((e[h]??0)-(t[h]??0)),S=Math.abs((e[h+1]??0)-(t[h+1]??0)),_=Math.abs((e[h+2]??0)-(t[h+2]??0)),w=Math.abs(p-m),C=Math.max(b,S,_,w);if(y||C<=a){const E=r3(t[h]??0,t[h+1]??0,t[h+2]??0),L=Math.round(E*t3);u[h]=L,u[h+1]=L,u[h+2]=L,u[h+3]=255;continue}if(f+=1,p===0&&m>0){u[h]=26,u[h+1]=127,u[h+2]=55,u[h+3]=255;continue}if(m===0&&p>0){u[h]=207,u[h+1]=34,u[h+2]=46,u[h+3]=255;continue}u[h]=200,u[h+1]=40,u[h+2]=160,u[h+3]=255}return{pixels:u,changed:f,total:s}}function r3(e,t,n){return Math.round(.2126*e+.7152*t+.0722*n)}function q1(e,t,n,r){if(e<=0||t<=0||n<=0||r<=0)return{width:0,height:0,scale:1};const a=Math.min(1,n/e,r/t);return{width:Math.max(1,Math.round(e*a)),height:Math.max(1,Math.round(t*a)),scale:a}}function o3(e,t,n,r){return q1(e,t,Math.floor(Math.max(0,n-1)/2),r)}function a3(e,t,n){const r=`${e} × ${t}`;return n>=.995?r:`${r} at ${Math.round(n*100)}%`}function s3(e){return`${e}%`}function l3(e){const{path:t,status:n}=e,r=n!=="added",a=n!=="deleted",s=r?Tp({kind:"image",path:t,side:"old"}):void 0,u=a?Tp({kind:"image",path:t,side:"new"}):void 0,f=s!==void 0&&u!==void 0,d=dx(s),h=dx(u),p=d3(),[m,y]=O.useState("side-by-side"),[b,S]=O.useState(50),_=Math.max(d.naturalWidth,h.naturalWidth),w=Math.max(d.naturalHeight,h.naturalHeight),E=m==="side-by-side"||!f?o3(_,w,p.width,p.maxHeight):q1(_,w,p.width,p.maxHeight),L=E.width>0&&(d.ok||h.ok),R=d.error&&h.error?"These images are not in this clone. Fetch Git LFS objects, then refresh.":d.error?"The old image is not in this clone. Fetch Git LFS objects, then refresh.":h.error?"The new image is not in this clone. Fetch Git LFS objects, then refresh.":null;return A.jsxs("div",{ref:p.ref,className:"min-w-0",children:[A.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 border-b border-border px-3 py-2",children:[f?A.jsxs("div",{className:"flex overflow-hidden rounded-md border border-input",children:[A.jsx(xp,{active:m==="side-by-side",onClick:()=>y("side-by-side"),hint:"Old and new at the same size",children:"Side by side"}),A.jsx(xp,{active:m==="slider",onClick:()=>y("slider"),hint:"Drag to reveal new over old",children:"Slider"}),A.jsx(xp,{active:m==="diff",onClick:()=>y("diff"),hint:"Pixels that differ",children:"Diff"})]}):A.jsx("span",{className:"font-mono text-[11px] text-muted-foreground",children:n==="added"?"Added":"Deleted"}),L?A.jsx("span",{className:"ml-auto font-mono text-[11px] tabular-nums text-muted-foreground",children:a3(_,w,E.scale)}):null]}),R!==null?A.jsx("p",{className:"px-3 py-2 text-sm text-warn",children:R}):null,!L&&R===null?A.jsx("p",{className:"px-3 py-2 text-sm text-muted-foreground",children:"Reading image…"}):null,A.jsxs("div",{className:"flex w-full justify-center",children:[L&&(m==="side-by-side"||!f)?A.jsxs("div",{className:"flex",children:[r?A.jsx(tc,{label:"Old",width:E.width,height:E.height,rule:a,children:s!==void 0&&!d.error?A.jsx(qc,{src:s,alt:"Old",width:E.width,height:E.height}):A.jsx(nc,{})}):A.jsx(tc,{label:"Old",width:E.width,height:E.height,children:A.jsx(nc,{text:"Added — no old image"})}),a?A.jsx(tc,{label:"New",width:E.width,height:E.height,children:u!==void 0&&!h.error?A.jsx(qc,{src:u,alt:"New",width:E.width,height:E.height}):A.jsx(nc,{})}):A.jsx(tc,{label:"New",width:E.width,height:E.height,children:A.jsx(nc,{text:"Deleted — no new image"})})]}):null,L&&m==="slider"&&f&&s!==void 0&&u!==void 0?A.jsx(u3,{oldUrl:s,newUrl:u,width:E.width,height:E.height,wipe:b,onWipe:S}):null,L&&m==="diff"&&f&&d.element!==null&&h.element!==null?A.jsx(c3,{oldImage:d.element,newImage:h.element,naturalWidth:_,naturalHeight:w,width:E.width,height:E.height}):null]})]})}function xp(e){return A.jsxs(Qn,{children:[A.jsx(Zn,{asChild:!0,children:A.jsx(Dt,{type:"button",size:"sm",variant:e.active?"secondary":"ghost",className:"rounded-none border-0","aria-pressed":e.active,onClick:e.onClick,children:e.children})}),A.jsx(Jn,{children:e.hint})]})}function tc(e){return A.jsxs("figure",{className:Qe("w-fit shrink-0",e.rule===!0&&"border-r border-border"),children:[A.jsx("figcaption",{className:"border-b border-border px-3 py-1 font-mono text-[11px] text-muted-foreground",children:e.label}),A.jsx(Cg,{width:e.width,height:e.height,children:e.children})]})}function Cg(e){return A.jsx("div",{ref:e.ref,className:Qe("image-stage relative shrink-0 overflow-hidden",e.className),style:{width:e.width,height:e.height},onPointerDown:e.onPointerDown,onPointerMove:e.onPointerMove,children:e.children})}function qc(e){return A.jsx("img",{src:e.src,alt:e.alt,width:e.width,height:e.height,className:"absolute top-0 left-0 max-w-none",style:{width:e.width,height:e.height,objectFit:"contain",objectPosition:"left top"}})}function nc(e){return A.jsx("p",{className:"flex h-full items-center px-3 text-sm text-muted-foreground",children:e.text??"Image missing"})}function u3(e){const{oldUrl:t,newUrl:n,width:r,height:a,wipe:s,onWipe:u}=e,f=O.useId(),d=O.useRef(null),h=y=>{const b=d.current;if(b===null)return;const S=b.getBoundingClientRect();S.width!==0&&u(Math.min(100,Math.max(0,(y-S.left)/S.width*100)))},p=y=>{y.preventDefault(),y.currentTarget.setPointerCapture(y.pointerId),h(y.clientX)},m=y=>{y.buttons!==0&&h(y.clientX)};return A.jsxs("figure",{className:"mx-auto w-fit shrink-0",children:[A.jsxs(Cg,{ref:d,width:r,height:a,className:"cursor-col-resize touch-none",onPointerDown:p,onPointerMove:m,children:[A.jsx(qc,{src:t,alt:"Old",width:r,height:a}),A.jsx("div",{className:"absolute inset-y-0 left-0 overflow-hidden",style:{width:s3(s)},children:A.jsx(qc,{src:n,alt:"New",width:r,height:a})}),A.jsxs("div",{className:"pointer-events-none absolute inset-y-0",style:{left:`${s}%`},"aria-hidden":!0,children:[A.jsx("span",{className:"absolute inset-y-0 left-0 w-px -translate-x-1/2 bg-primary"}),A.jsx("span",{className:"absolute top-1/2 left-0 size-2.5 -translate-x-1/2 -translate-y-1/2 rounded-full border border-primary bg-card"})]})]}),A.jsxs("label",{className:"flex w-full items-center gap-3 px-3 py-2 font-mono text-[11px] text-muted-foreground",htmlFor:f,children:["Old",A.jsx("input",{id:f,type:"range",min:0,max:100,value:s,"aria-label":"Wipe between old and new",className:"min-w-0 flex-1 accent-primary",onChange:y=>u(Number(y.target.value))}),"New"]})]})}function c3(e){const t=O.useRef(null),[n,r]=O.useState(null);return O.useEffect(()=>{const a=t.current;if(a===null)return;const s=e.naturalWidth,u=e.naturalHeight;a.width=s,a.height=u;const f=a.getContext("2d");if(f===null)return;const d=fx(e.oldImage,s,u),h=fx(e.newImage,s,u),p=i3(d,h,s,u),m=f.createImageData(s,u);m.data.set(p.pixels),f.putImageData(m,0,0),r({changed:p.changed,total:p.total})},[e.naturalHeight,e.naturalWidth,e.newImage,e.oldImage]),A.jsxs("figure",{className:"mx-auto w-fit shrink-0",children:[A.jsx(Cg,{width:e.width,height:e.height,children:A.jsx("canvas",{ref:t,className:"block size-full"})}),n!==null?A.jsxs("figcaption",{className:"px-3 py-2 font-mono text-[11px] tabular-nums text-muted-foreground",children:[n.changed.toLocaleString()," of ",n.total.toLocaleString()," pixels differ"]}):null]})}function dx(e){const[t,n]=O.useState({ok:!1,error:!1,element:null,naturalWidth:0,naturalHeight:0});return O.useEffect(()=>{if(e===void 0){n({ok:!1,error:!1,element:null,naturalWidth:0,naturalHeight:0});return}let r=!1;return n({ok:!1,error:!1,element:null,naturalWidth:0,naturalHeight:0}),f3(e).then(a=>{r||n({ok:!0,error:!1,element:a,naturalWidth:a.naturalWidth,naturalHeight:a.naturalHeight})}).catch(()=>{r||n({ok:!1,error:!0,element:null,naturalWidth:0,naturalHeight:0})}),()=>{r=!0}},[e]),t}function d3(){const e=O.useRef(null),[t,n]=O.useState({width:0,maxHeight:0});return O.useLayoutEffect(()=>{const r=e.current;if(r===null)return;const a=()=>{const u=Math.floor(r.clientWidth),f=Math.max(120,Math.round(window.innerHeight*.7));n(d=>d.width===u&&d.maxHeight===f?d:{width:u,maxHeight:f})};a();const s=new ResizeObserver(a);return s.observe(r),window.addEventListener("resize",a),()=>{s.disconnect(),window.removeEventListener("resize",a)}},[]),{ref:e,width:t.width,maxHeight:t.maxHeight}}function f3(e){return new Promise((t,n)=>{const r=new Image;r.onload=()=>t(r),r.onerror=()=>n(new Error("image load failed")),r.src=e})}function fx(e,t,n){const r=document.createElement("canvas");r.width=t,r.height=n;const a=r.getContext("2d");return a===null?new Uint8ClampedArray(t*n*4):(a.clearRect(0,0,t,n),a.drawImage(e,0,0),a.getImageData(0,0,t,n).data)}const h3=eC("inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-colors focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 [&>svg]:pointer-events-none [&>svg]:size-3",{variants:{variant:{default:"bg-primary text-primary-foreground",secondary:"bg-secondary text-secondary-foreground",destructive:"bg-destructive/20 text-destructive",outline:"border-border text-foreground",ghost:"text-muted-foreground"}},defaultVariants:{variant:"default"}});function p3({className:e,variant:t="default",asChild:n=!1,...r}){const a=n?$x:"span";return A.jsx(a,{"data-slot":"badge",className:Qe(h3({variant:t}),e),...r})}function m3(e){const{file:t,active:n,index:r,split:a,splitRatio:s,wrap:u,viewed:f,onSplitRatio:d,onOpen:h,onViewed:p}=e,m=t.kind==="lockfile",[y,b]=O.useState(f||m),[S,_]=O.useState(t.patch),[w,C]=O.useState(null),E=t.hunks[0],L=J6(t.hunks.flatMap(I=>I.lines.filter(H=>H.kind==="add").map(H=>H.text))),R=t.oldPath!==void 0?`${t.oldPath} → ${t.path}`:t.path,D=O.useId();O.useEffect(()=>{b(f||m)},[m,f]),O.useEffect(()=>{if(y||!m||S!==""||w!==null)return;let I=!1;return gA(t.path).then(H=>{I||_(H.patch)}).catch(H=>{I||C(H instanceof Error?H.message:String(H))}),()=>{I=!0}},[y,m,t.path,S,w]);const M=I=>{I.target instanceof Element&&I.target.closest("button, input, label, a")!==null||b(H=>!H)};return A.jsxs("article",{className:Qe("hunk-card overflow-hidden rounded-lg border bg-card",n?"border-primary":"border-border"),"data-hunk":r,children:[A.jsxs("header",{className:Qe("sticky top-0 z-10 flex cursor-pointer flex-wrap items-center gap-x-3 gap-y-1 bg-card px-3 py-2",y?null:"border-b border-border"),onClick:M,children:[A.jsx(Dt,{type:"button",variant:"ghost",size:"icon-sm",className:"size-6","aria-expanded":!y,"aria-controls":D,"aria-label":y?"Expand file":"Collapse file",onClick:()=>b(I=>!I),children:A.jsx(kA,{className:Qe("hunk-chevron size-4",y&&"-rotate-90")})}),A.jsxs(Qn,{children:[A.jsx(Zn,{asChild:!0,children:A.jsx(Dt,{type:"button",variant:"link",className:Qe("file-path h-auto p-0 font-mono text-sm",f&&"text-muted-foreground"),onClick:()=>h(t.path),children:R})}),A.jsx(Jn,{children:"Open file"})]}),A.jsx("code",{className:"font-mono text-xs text-muted-foreground",children:t.kind==="image"?"image":t.kind==="lockfile"?"lockfile":t.hunkCount===1&&E!==void 0?Z6(E.header):`${t.hunkCount} hunks`}),t.kind==="image"?A.jsx("span",{className:"font-mono text-[11px] text-muted-foreground",children:t.status}):A.jsxs("span",{className:"font-mono text-[11px] tabular-nums",children:[A.jsxs("span",{className:"text-del",children:["−",t.removed]})," ",A.jsxs("span",{className:"text-add",children:["+",t.added]})]}),L.length>0?L.map(I=>A.jsx(p3,{variant:"outline",className:"font-mono font-normal",children:I},I)):null,A.jsxs(Qn,{children:[A.jsx(Zn,{asChild:!0,children:A.jsxs("label",{className:"ml-auto flex shrink-0 cursor-pointer items-center gap-1.5 text-xs text-muted-foreground select-none",children:[A.jsx("input",{type:"checkbox",className:"size-3.5 accent-primary",checked:f,onChange:I=>p(t.path,I.target.checked)}),"Viewed"]})}),A.jsxs(Jn,{children:[f?"Mark as not viewed":"Mark as viewed"," (v)"]})]})]}),A.jsx("div",{id:D,hidden:y,children:y?null:t.kind==="image"?A.jsx(l3,{path:t.path,status:t.status}):w!==null?A.jsx("p",{className:"px-3 py-2 text-sm text-warn",children:w}):m&&S===""?A.jsx(il,{label:ao.lockfile}):A.jsx(G6,{patch:S,split:a,wrap:u,splitRatio:s,onSplitRatio:d})})]})}function Rm(e){return A.jsxs("div",{className:Qe("max-w-[68ch]",e.className),children:[e.kicker!==void 0?A.jsx("p",{className:"mb-2 font-mono text-[11px] tracking-wide text-muted-foreground",children:e.kicker}):null,A.jsx("h1",{className:"mb-3 font-serif text-[1.75rem] leading-snug text-foreground",children:e.title}),e.children]})}function g3(e){const{group:t,index:n,groups:r,partTitle:a,onOpenLayer:s}=e;return A.jsxs(Rm,{kicker:a!==void 0?`${a} · ${Ms(n)}`:Ms(n),title:t.title,children:[A.jsx("p",{className:"mb-2 font-mono text-[11px] tracking-wide text-muted-foreground",children:"Why"}),A.jsx("p",{className:"mb-6 font-serif text-lg leading-relaxed text-foreground",children:t.why}),A.jsx("p",{className:"mb-2 font-mono text-[11px] tracking-wide text-muted-foreground",children:"What"}),A.jsx("p",{className:"mb-5 leading-relaxed text-foreground",children:t.summary}),t.dependsOn.length>0?A.jsxs("p",{className:"mb-5 text-muted-foreground",children:["Depends on"," ",t.dependsOn.map((u,f)=>{const d=r.find(p=>p.id===u),h=d!==void 0?`${Ms(Ux(r,u))} ${d.title}`:u;return A.jsxs("span",{children:[f>0?", ":"",A.jsx(Dt,{type:"button",variant:"link",className:"h-auto p-0",onClick:()=>s(u),children:h})]},u)})]}):null,t.lookFor.length>0?A.jsx("ul",{className:"mb-2 list-disc space-y-2 pl-5 leading-relaxed",children:t.lookFor.map(u=>A.jsx("li",{children:u},u))}):null,t.staleCount>0?A.jsxs("p",{className:"mt-4 text-warn",children:[t.staleCount," hunk ref",t.staleCount===1?"":"s"," no longer match live git. Git wins; the pointer is flagged, not replaced."]}):null]})}function v3(e){const{group:t,bucket:n,groups:r,mixed:a,strandColor:s,loading:u,hunkError:f,files:d,activeHunk:h,split:p,splitRatio:m,wrap:y,viewedPaths:b}=e,S=n==="lockfiles",_=s!==void 0||S;return A.jsxs(A.Fragment,{children:[A.jsxs("div",{className:"review-brief",children:[_?A.jsx("span",{className:"review-brief-strand",style:s!==void 0?{backgroundColor:s}:void 0,"aria-hidden":!0}):null,A.jsx("div",{className:"review-brief-copy",children:t!==null?A.jsx(g3,{group:t,index:Ux(r,t.id),groups:r,partTitle:a?t.part:void 0,onOpenLayer:e.onOpenLayer}):S?A.jsx(Rm,{kicker:"Lockfiles",title:"Generated lockfiles"}):A.jsx(Rm,{kicker:"Unassigned",title:"Not in any layer",children:A.jsx("p",{className:"font-serif text-lg leading-relaxed text-foreground",children:"These hunks are in git and in no layer. Fix the review document — never the diff."})})})]}),f!==null?A.jsx("p",{className:"mt-4 text-warn",children:f}):null,u?A.jsx("article",{className:"hunk-card mt-8 overflow-hidden rounded-lg border border-border bg-card",children:A.jsx(il,{label:ao.layer})}):null,!u&&d.length===0&&f===null?A.jsx("p",{className:"mt-8 text-muted-foreground",children:"No hunks in this layer."}):null,!u&&d.length>0?A.jsxs("p",{className:"mt-8 font-mono text-xs tabular-nums text-muted-foreground",children:[d.filter(w=>b.has(w.path)).length," of ",d.length," files viewed"]}):null,!u&&d.length>0?A.jsx("div",{className:"mt-4 space-y-8",children:d.map(w=>A.jsx(m3,{file:w,active:h>=w.firstIndex&&h<w.firstIndex+w.hunkCount,index:w.firstIndex,split:p,splitRatio:m,wrap:y,viewed:b.has(w.path),onSplitRatio:e.onSplitRatio,onOpen:e.onOpenFile,onViewed:e.onViewed},w.path))}):null]})}const W1=6;function y3(e){const t=new Map(e.map(s=>[s.id,s.suggestedOrder]));if(!e.some(s=>s.part!==void 0))return[{colorIndex:0,layerIds:hx(e.map(s=>s.id),t)}];const r=new Map;for(const s of e){const u=s.part??`\0${s.id}`,f=r.get(u)??[];f.push(s.id),r.set(u,f)}const a=[...r.entries()].map(([s,u])=>{const f=hx(u,t);return{title:s.startsWith("\0")?void 0:s,layerIds:f,minOrder:t.get(f[0]??"")??0,sortKey:f[0]??""}});return a.sort((s,u)=>s.minOrder-u.minOrder||(s.title??s.sortKey).localeCompare(u.title??u.sortKey)),a.map((s,u)=>({colorIndex:u%W1,layerIds:s.layerIds,...s.title!==void 0?{title:s.title}:{}}))}function Y1(e){const t=new Map;for(const n of e)for(const r of n.layerIds)t.set(r,n.colorIndex);return t}function gd(e){return`var(--strand-${e%W1})`}function Eg(e){return e.length>1}function hx(e,t){return[...e].sort((n,r)=>(t.get(n)??0)-(t.get(r)??0)||n.localeCompare(r))}function b3(e){const{meta:t,parts:n,onOpenLayer:r}=e,a=Eg(n),s=new Map(t.groups.map(h=>[h.id,h])),u=t.document.tickets??[],f=t.document.why,d=u.length>0?A.jsx(S3,{tickets:u,mixed:a,parts:n}):null;return A.jsxs("div",{className:"review-overview mb-8",children:[f!==void 0?A.jsxs("section",{className:"mb-12 max-w-[68ch]","aria-labelledby":"review-why",children:[A.jsx("p",{id:"review-why",className:"mb-2 font-mono text-[11px] tracking-wide text-muted-foreground",children:"Why"}),A.jsx("h1",{className:"mb-4 font-serif text-[1.75rem] leading-snug text-foreground",children:f}),d]}):d!==null?A.jsx("div",{className:"mb-8 max-w-[68ch]",children:d}):null,A.jsxs("section",{"aria-labelledby":"review-what",children:[A.jsxs("p",{id:"review-what",className:"mb-2 font-mono text-[11px] tracking-wide text-muted-foreground",children:["What · ",jx(t.document.size)," · ",t.files.length," files"]}),f!==void 0?A.jsx("p",{className:"mb-8 max-w-[68ch] font-serif text-lg leading-relaxed text-foreground",children:t.document.summary}):A.jsx("h1",{className:"mb-8 max-w-[68ch] font-serif text-[1.75rem] leading-snug text-foreground",children:t.document.summary}),A.jsx("div",{className:a?"grid grid-flow-col auto-cols-[minmax(16rem,1fr)] items-start gap-4 overflow-x-auto pb-1":void 0,children:n.map(h=>A.jsx(_3,{part:h,mixed:a,groups:t.groups,byId:s,onOpenLayer:r},h.layerIds.join("\0")))})]})]})}function S3(e){const{tickets:t,mixed:n,parts:r}=e;return A.jsx("ul",{className:"space-y-1 font-mono text-[11px] tracking-wide text-muted-foreground",children:t.map(a=>{const s=n?r.find(u=>u.title===a.part):void 0;return A.jsxs("li",{className:"flex items-center gap-2",children:[s!==void 0?A.jsx("span",{"aria-hidden":!0,className:"size-2 shrink-0 rounded-full",style:{backgroundColor:gd(s.colorIndex)}}):null,a.url!==void 0?A.jsx("a",{className:"text-primary hover:underline",href:a.url,target:"_blank",rel:"noreferrer",children:a.id}):A.jsx("span",{children:a.id}),a.title!==void 0?A.jsx("span",{children:a.title}):null,a.part!==void 0?A.jsxs("span",{children:["· ",a.part]}):null]},a.id)})})}function _3(e){const{part:t,mixed:n,groups:r,byId:a,onOpenLayer:s}=e,u=gd(t.colorIndex);return A.jsxs("section",{className:Qe("min-w-0",n&&"rounded-md border border-border py-2"),style:n?x3(u):void 0,"aria-label":t.title,children:[n&&t.title!==void 0?A.jsxs("p",{className:"mb-1 flex items-center gap-2 px-4 pt-2 font-mono text-[11px] tracking-wide text-muted-foreground",children:[A.jsx("span",{"aria-hidden":!0,className:"size-2 shrink-0 rounded-full",style:{backgroundColor:u}}),t.title]}):null,A.jsx("ol",{className:"m-0 list-none p-0",children:t.layerIds.map(f=>{const d=a.get(f);if(d===void 0)return null;const h=r.findIndex(p=>p.id===f)+1;return A.jsx("li",{className:"mb-2 last:mb-0",children:A.jsxs(Dt,{type:"button",variant:"ghost",className:"h-auto w-full min-w-0 items-start justify-start gap-4 rounded-md px-4 py-4 text-left font-normal whitespace-normal",onClick:()=>s(d.id),children:[A.jsx("span",{className:"mt-0.5 shrink-0 font-mono text-[11px] text-muted-foreground tabular-nums",children:Ms(h)}),A.jsxs("span",{className:"min-w-0 flex-1",children:[A.jsx("strong",{className:"block font-medium text-foreground",children:d.title}),A.jsx("span",{className:"mt-1 block leading-relaxed text-muted-foreground",children:d.summary})]})]})},d.id)})})]})}function x3(e){return{"--strand":e,borderLeftWidth:3,borderLeftColor:e,backgroundColor:`color-mix(in srgb, ${e} 8%, var(--card))`}}function C3(e){const{meta:t,selection:n,parts:r,onSelect:a}=e,u=Eg(r)?Y1(r):new Map;return A.jsx("nav",{className:"h-full overflow-auto py-6",children:A.jsxs("div",{className:"stack",children:[A.jsx("span",{className:"stack-selection","aria-hidden":!0}),A.jsx("ul",{className:"mb-6 list-none p-0",children:A.jsx("li",{children:A.jsx(ic,{active:n?.kind==="overview",onClick:()=>a({kind:"overview"}),title:"Overview",count:jx(t.document.size)})})}),A.jsxs("ul",{className:"mb-6 list-none p-0",children:[t.groups.map((f,d)=>A.jsx("li",{children:A.jsx(ic,{active:n?.kind==="group"&&n.id===f.id,onClick:()=>a({kind:"group",id:f.id}),index:Ms(d+1),title:f.title,count:f.staleCount>0?`${f.staleCount} stale`:void 0,colorIndex:u.get(f.id)})},f.id)),t.unassigned.hunkCount>0?A.jsx("li",{children:A.jsx(ic,{active:n?.kind==="unassigned",onClick:()=>a({kind:"unassigned"}),title:"Unassigned",count:String(t.unassigned.hunkCount),warn:!0})}):null,t.lockfiles.fileCount>0?A.jsx("li",{children:A.jsx(ic,{active:n?.kind==="lockfiles",onClick:()=>a({kind:"lockfiles"}),title:"Lockfiles",count:String(t.lockfiles.fileCount),muted:!0})}):null]})]})})}function ic(e){const t=e.colorIndex,n=t!==void 0||e.active,r=t!==void 0?gd(t):e.muted?"var(--muted-foreground)":void 0;return A.jsxs(Dt,{type:"button",variant:"ghost",onClick:e.onClick,style:r!==void 0?{"--strand":r}:void 0,className:Qe("stack-item relative z-1 mx-3 mb-1 h-auto w-[calc(100%-24px)] min-w-0 items-start justify-start gap-2.5 rounded-md px-3 py-2 text-left font-normal whitespace-normal hover:bg-transparent",e.active&&"stack-item-active text-foreground",e.warn&&"text-warn hover:text-warn"),children:[n?A.jsx("span",{className:Qe("stack-strand",t!==void 0&&!e.active&&"opacity-45"),"aria-hidden":!0}):null,e.index!==void 0?A.jsx("span",{className:"mt-px w-5 shrink-0 font-mono text-[11px] text-muted-foreground tabular-nums",children:e.index}):null,A.jsx("span",{className:"min-w-0 flex-1 text-left leading-snug",children:e.title}),e.count!==void 0?A.jsx("span",{className:Qe("shrink-0 text-[11px] tabular-nums text-muted-foreground",e.warn&&"text-warn"),children:e.count}):null]})}function rc(e){let t=0;return e.map(n=>{const r=e3(n.hunks.flatMap(s=>s.lines)),a={path:n.path,kind:n.kind??"text",status:n.status??"modified",patch:n.patch,added:n.added??r.added,removed:n.removed??r.removed,hunkCount:Math.max(n.hunks.length,1),firstIndex:t,hunks:n.hunks};return n.oldPath!==void 0&&(a.oldPath=n.oldPath),t+=a.hunkCount,a})}function Cp(e,t){return e.findIndex(n=>t>=n.firstIndex&&t<n.firstIndex+n.hunkCount)}let Ep=0;function E3(){return typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches}function w3(e){const t=E3(),n=typeof document>"u"?void 0:document.startViewTransition;return!t&&typeof n=="function"}function wp(e,t){if(!w3()){e();return}const n=document.startViewTransition;if(typeof n!="function"){e();return}const r=document.documentElement,a=++Ep;r.dataset.motion=t;try{n.call(document,()=>{Yc.flushSync(e)}).finished.finally(()=>{a===Ep&&delete r.dataset.motion})}catch{a===Ep&&delete r.dataset.motion,e()}}function oc(e){return e.groups.length>0?{kind:"overview"}:{kind:"unassigned"}}function K1(e,t){return`comprehende.layer.${e}.${t}`}function k3(e){if(e===null||e==="")return null;try{const t=JSON.parse(e);return typeof t!="object"||t===null||!("kind"in t)?null:t.kind==="overview"?{kind:"overview"}:t.kind==="unassigned"?{kind:"unassigned"}:t.kind==="lockfiles"?{kind:"lockfiles"}:t.kind==="group"&&"id"in t&&typeof t.id=="string"&&t.id!==""?{kind:"group",id:t.id}:null}catch{return null}}function L3(e){return JSON.stringify(e)}function T3(e,t){return t===null||t.kind==="group"&&!e.groups.some(n=>n.id===t.id)||t.kind==="unassigned"&&e.unassigned.hunkCount===0&&e.groups.length>0||t.kind==="lockfiles"&&(e.lockfiles?.fileCount??0)===0?oc(e):t}function A3(e){return T3(e,O3(e.resolved.baseSha,e.resolved.headSha))}function R3(e,t){D3(e.resolved.baseSha,e.resolved.headSha,t)}function O3(e,t){try{return k3(sessionStorage.getItem(K1(e,t)))}catch{return null}}function D3(e,t,n){try{sessionStorage.setItem(K1(e,t),L3(n))}catch{}}function M3(e){const t=[{kind:"overview"},...e.groups.map(n=>({kind:"group",id:n.id}))];return e.unassigned.hunkCount>0&&t.push({kind:"unassigned"}),(e.lockfiles?.fileCount??0)>0&&t.push({kind:"lockfiles"}),t}function px(e,t,n,r){if(e===null)return;const a=M3(e),s=a.findIndex(f=>X1(f,t)),u=a[(s+r+a.length)%a.length];u!==void 0&&n(u)}function X1(e,t){return t===null?!1:e.kind==="overview"?t.kind==="overview":e.kind==="unassigned"?t.kind==="unassigned":e.kind==="lockfiles"?t.kind==="lockfiles":t.kind==="group"&&t.id===e.id}function N3(e,t){return`comprehende.viewed.${e}.${t}`}function I3(e){if(e===null||e==="")return new Set;try{const t=JSON.parse(e);return!Array.isArray(t)||t.some(n=>typeof n!="string")?new Set:new Set(t)}catch{return new Set}}function z3(e){return JSON.stringify([...e].sort())}function P3(e,t,n){const r=new Set(e);return n?r.add(t):r.delete(t),r}function mx(e){try{return Q1(e),I3(sessionStorage.getItem(e))}catch{return new Set}}function H3(e,t){try{Q1(e),sessionStorage.setItem(e,z3(t))}catch{}}function Q1(e){try{localStorage.removeItem(e)}catch{}}function U3(e,t){const n=e!==void 0&&t!==void 0?N3(e,t):null,[r,a]=O.useState(()=>n===null?new Set:mx(n));O.useEffect(()=>{a(n===null?new Set:mx(n))},[n]);const s=O.useCallback((u,f)=>{n!==null&&a(d=>{const h=P3(d,u,f);return H3(n,h),h})},[n]);return{viewedPaths:r,setFileViewed:s}}function j3({className:e,...t}){return A.jsx(Ix,{"data-slot":"resizable-panel-group",className:Qe("flex h-full w-full aria-[orientation=vertical]:flex-col",e),...t})}function gx({...e}){return A.jsx(zx,{"data-slot":"resizable-panel",...e})}function V3({withHandle:e=!1,className:t,...n}){return A.jsx(Px,{"data-slot":"resizable-handle",className:Qe("relative flex w-2 items-center justify-center bg-transparent after:absolute after:inset-y-0 after:left-1/2 after:w-px after:-translate-x-1/2 after:bg-border hover:after:bg-primary/60 focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-hidden aria-[orientation=horizontal]:h-2 aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-px aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2",t),...n,children:e?A.jsx("div",{className:"bg-border z-10 flex h-8 w-3 items-center justify-center rounded-sm border border-border",children:A.jsx(Bx,{className:"size-2.5 text-muted-foreground"})}):null})}function B3(){const[e,t]=O.useState(null),[n,r]=O.useState(null),[a,s]=O.useState(null),[u,f]=O.useState([]),[d,h]=O.useState(null),[p,m]=O.useState(null),[y,b]=O.useState(!1),[S,_]=O.useState(!1),[w,C]=O.useState(.5),[E,L]=O.useState(0),[R,D]=O.useState(null),[M,I]=O.useState(!0),H=O.useRef(null),{defaultLayout:W,onLayoutChanged:ee}=uA({id:"comprehende-shell-overlay",panelIds:["stack","main"],onlySaveAfterUserInteractions:!0}),te=O.useCallback(async()=>{I(!0),r(null);try{const re=await pA();t(re),s(ce=>ce??A3(re))}catch(re){r(re instanceof Error?re.message:String(re))}finally{I(!1)}},[]);O.useEffect(()=>{te()},[te]),O.useEffect(()=>{e===null||a===null||R3(e,a)},[e,a]);const V=a?.kind==="group"?a.id:a?.kind==="unassigned"?"unassigned":a?.kind==="lockfiles"?"lockfiles":null;O.useEffect(()=>{if(V===null){f([]),h(null);return}let re=!1;return m(null),mA(V).then(ce=>{re||(f(ce.files),h(V),L(0))}).catch(ce=>{re||(f([]),h(V),m(ce instanceof Error?ce.message:String(ce)))}),()=>{re=!0}},[V]);const Z=V!==null&&V!==d,ie=O.useCallback(re=>{if(X1(re,a)&&R===null)return;wp(()=>{s(re),D(null)},R!==null?"scene":"layer")},[R,a]),se=O.useCallback(re=>{wp(()=>{D({path:re,mode:"file",side:"new"})},"scene")},[]),z=O.useCallback(()=>{R!==null&&wp(()=>D(null),"scene")},[R]),{viewedPaths:G,setFileViewed:X}=U3(e?.resolved.baseSha,e?.resolved.headSha),ue=O.useCallback(re=>{L(re),requestAnimationFrame(()=>{document.querySelector(`[data-hunk="${re}"]`)?.scrollIntoView({block:"nearest"})})},[]);O.useEffect(()=>{const re=ce=>{if(ce.metaKey||ce.ctrlKey||ce.altKey)return;const ke=ce.target;if(!(ke instanceof HTMLElement&&(ke.isContentEditable||ke.closest("input, textarea, select")!==null)))if(ce.key==="w")b(fe=>!fe);else if(ce.key==="s")_(fe=>(fe||C(.5),!fe));else if(ce.key==="r")te();else if(ce.key==="o")ie({kind:"overview"});else if(ce.key==="u")ie({kind:"unassigned"});else if(ce.key==="Escape")z();else if(ce.key==="[")px(e,a,ie,-1);else if(ce.key==="]")px(e,a,ie,1);else{if(R!==null)return;if(ce.key==="j"){const fe=rc(u),Fe=Cp(fe,E),Ge=fe[Math.min(fe.length-1,Math.max(Fe,0)+1)];Ge!==void 0&&ue(Ge.firstIndex)}else if(ce.key==="k"){const fe=rc(u),Fe=Cp(fe,E),Ge=fe[Math.max(0,(Fe===-1?0:Fe)-1)];Ge!==void 0&&ue(Ge.firstIndex)}else if(ce.key==="v"){const fe=rc(u),Fe=fe[Math.max(0,Cp(fe,E))];Fe!==void 0&&X(Fe.path,!G.has(Fe.path))}}};return window.addEventListener("keydown",re),()=>window.removeEventListener("keydown",re)},[E,z,R,u,te,e,ue,ie,a,X,G]),O.useEffect(()=>{H.current?.scrollTo({top:0})},[a]);const Y=O.useMemo(()=>e===null||a?.kind!=="group"?null:e.groups.find(re=>re.id===a.id)??null,[e,a]),N=O.useMemo(()=>rc(u),[u]),q=O.useMemo(()=>y3(e?.groups??[]),[e]),oe=O.useMemo(()=>Y1(q),[q]),le=Eg(q),de=le&&Y!==null?oe.get(Y.id):void 0;return M&&e===null?A.jsxs(vx,{children:[A.jsx("p",{className:"mb-5 font-serif text-lg leading-none text-foreground",children:"Comprehende"}),A.jsx(il,{layout:"page",label:ao.review})]}):n!==null&&e===null?A.jsx(vx,{className:"text-warn",children:n}):e===null?null:A.jsx(WD,{children:A.jsxs("div",{className:"flex h-full min-h-0 flex-col","aria-busy":M||Z,children:[A.jsx(nM,{meta:e,wrap:y,split:S,onWrap:()=>b(re=>!re),onUnified:()=>_(!1),onSplit:()=>{_(!0),S||C(.5)},onRefresh:()=>{te()},busy:M}),A.jsxs(j3,{className:"min-h-0 flex-1",defaultLayout:W,onLayoutChanged:ee,children:[A.jsx(gx,{id:"stack",defaultSize:"20",minSize:"14%",className:"min-h-0 min-w-0",children:A.jsx(C3,{meta:e,selection:a,parts:q,onSelect:ie})}),A.jsx(V3,{withHandle:!0}),A.jsx(gx,{id:"main",defaultSize:"80",minSize:"40%",className:"min-h-0 min-w-0",children:A.jsx("div",{className:"review-scene h-full min-h-0",children:R!==null?A.jsx(Q6,{inspector:R,wrap:y,setInspector:D,onClose:z}):A.jsx("main",{ref:H,className:"review-main h-full overflow-auto px-10 py-8","aria-busy":Z,children:a?.kind==="overview"?A.jsx(b3,{meta:e,parts:q,onOpenLayer:re=>ie({kind:"group",id:re})}):A.jsx(v3,{group:Y,bucket:a?.kind==="lockfiles"?"lockfiles":a?.kind==="unassigned"?"unassigned":void 0,groups:e.groups,mixed:le,strandColor:de!==void 0?gd(de):void 0,loading:Z,hunkError:p,files:Z?[]:N,activeHunk:E,split:S,splitRatio:w,wrap:y,viewedPaths:G,onOpenLayer:re=>ie({kind:"group",id:re}),onOpenFile:se,onSplitRatio:C,onViewed:X})})})})]})]})})}function vx(e){return A.jsx("div",{className:Qe("px-10 py-8 text-muted-foreground",e.className),children:e.children})}const Z1=document.getElementById("root");if(Z1===null)throw new Error("missing #root");OT.createRoot(Z1).render(A.jsx(O.StrictMode,{children:A.jsx(eM,{children:A.jsx(U6,{children:A.jsx(B3,{})})})}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-greek-400-normal-_efipK4i.woff2) format("woff2"),url(./ibm-plex-sans-greek-400-normal-D9ESIMu3.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-400-normal-RBey6euL.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-latin-400-normal-CDDApCn2.woff2) format("woff2"),url(./ibm-plex-sans-latin-400-normal-CYLoc0-x.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-greek-500-normal-JMMifIXV.woff2) format("woff2"),url(./ibm-plex-sans-greek-500-normal-CuWXN6rf.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-500-normal-BEb3_waV.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-latin-500-normal-6ng42L7E.woff2) format("woff2"),url(./ibm-plex-sans-latin-500-normal-BgVn5rGT.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2) format("woff2"),url(./ibm-plex-sans-greek-600-normal-D-CqTdkO.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-600-normal-DgdngZtN.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-600-normal-DIrixKbi.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2) format("woff2"),url(./ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2) format("woff2"),url(./ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2) format("woff2"),url(./ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2) format("woff2"),url(./ibm-plex-mono-latin-400-normal-CvHOgSBP.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2) format("woff2"),url(./ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2) format("woff2"),url(./ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2) format("woff2"),url(./ibm-plex-mono-latin-500-normal-CB9ihrfo.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(./source-serif-4-cyrillic-ext-400-normal-CWV284fw.woff2) format("woff2"),url(./source-serif-4-cyrillic-ext-400-normal-DLkyKLvH.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(./source-serif-4-cyrillic-400-normal-C44pakCn.woff2) format("woff2"),url(./source-serif-4-cyrillic-400-normal-B8Z6Jvzv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(./source-serif-4-greek-400-normal-Cw5-AHNN.woff2) format("woff2"),url(./source-serif-4-greek-400-normal-BccYJ-vZ.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(./source-serif-4-vietnamese-400-normal-BbG3LG1A.woff2) format("woff2"),url(./source-serif-4-vietnamese-400-normal-DR1UuFon.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(./source-serif-4-latin-ext-400-normal-Cp7z-ARB.woff2) format("woff2"),url(./source-serif-4-latin-ext-400-normal-CEpydyUl.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(./source-serif-4-latin-400-normal-DJ5YJwmz.woff2) format("woff2"),url(./source-serif-4-latin-400-normal-Dn3IlU-Z.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(./source-serif-4-cyrillic-ext-600-normal-D_E8FDgP.woff2) format("woff2"),url(./source-serif-4-cyrillic-ext-600-normal-DiT2IGQm.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(./source-serif-4-cyrillic-600-normal-BDP5YDHD.woff2) format("woff2"),url(./source-serif-4-cyrillic-600-normal-DFnC3vAY.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(./source-serif-4-greek-600-normal-DdRkKr-1.woff2) format("woff2"),url(./source-serif-4-greek-600-normal-DhXQw1Kl.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(./source-serif-4-vietnamese-600-normal-CznyfUKR.woff2) format("woff2"),url(./source-serif-4-vietnamese-600-normal-B0WJbuqT.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(./source-serif-4-latin-ext-600-normal-0sIUyHMO.woff2) format("woff2"),url(./source-serif-4-latin-ext-600-normal-C6NNqpJh.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(./source-serif-4-latin-600-normal-DouSKlru.woff2) format("woff2"),url(./source-serif-4-latin-600-normal-DMD1h6_f.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@keyframes wait-walk{0%{top:-40%}to{top:100%}}@media(prefers-reduced-motion:no-preference){.wait-gutter-walker{animation:wait-walk 1.7s var(--motion-ease) infinite}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:"IBM Plex Sans", ui-sans-serif, system-ui, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-normal:400;--font-weight-medium:500;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:"IBM Plex Sans", ui-sans-serif, system-ui, sans-serif;--default-mono-font-family:"IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border)}html,body,#root{height:100%}html{view-transition-name:none}body{background-color:var(--background);color:var(--foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:IBM Plex Sans,ui-sans-serif,system-ui,sans-serif;font-size:14px;line-height:1.55}code,pre,kbd{font-family:var(--font-mono)}.image-stage{background-color:var(--diff-canvas);background-image:repeating-conic-gradient(var(--muted) 0% 25%,var(--diff-canvas) 0% 50%);box-shadow:inset 0 0 0 1px var(--border);background-size:12px 12px}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1\/2{top:50%}.top-\[28\%\]{top:28%}.left-0{left:0}.z-1{z-index:1}.z-10{z-index:10}.z-50{z-index:50}.m-0{margin:0}.mx-1{margin-inline:var(--spacing)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-px{margin-top:1px}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-12{margin-bottom:calc(var(--spacing) * 12)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-full{width:100%;height:100%}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-\[1\.1rem\]{height:1.1rem}.h-\[44\%\]{height:44%}.h-auto{height:auto}.h-full{height:100%}.min-h-0{min-height:0}.w-0\.5{width:calc(var(--spacing) * .5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-5{width:calc(var(--spacing) * 5)}.w-\[3px\]{width:3px}.w-\[calc\(100\%-24px\)\]{width:calc(100% - 24px)}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\[68ch\]{max-width:68ch}.max-w-full{max-width:100%}.max-w-none{max-width:none}.min-w-0{min-width:0}.min-w-8{min-width:calc(var(--spacing) * 8)}.min-w-9{min-width:calc(var(--spacing) * 9)}.min-w-10{min-width:calc(var(--spacing) * 10)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.auto-cols-\[minmax\(16rem\,1fr\)\]{grid-auto-columns:minmax(16rem,1fr)}.grid-flow-col{grid-auto-flow:column}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-0{gap:0}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-\[0\.28rem\]{gap:.28rem}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-1{row-gap:var(--spacing)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-\[1px\]{border-radius:1px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:calc(var(--radius) * 1.3)}.rounded-md{border-radius:var(--radius)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) * .7)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-border{border-color:var(--border)}.border-input{border-color:var(--input)}.border-primary{border-color:var(--primary)}.border-transparent{border-color:#0000}.bg-\[var\(--diff-canvas\)\]{background-color:var(--diff-canvas)}.bg-add,.bg-add\/38{background-color:var(--add)}@supports (color:color-mix(in lab,red,red)){.bg-add\/38{background-color:color-mix(in oklab,var(--add) 38%,transparent)}}.bg-background{background-color:var(--background)}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-del,.bg-del\/38{background-color:var(--del)}@supports (color:color-mix(in lab,red,red)){.bg-del\/38{background-color:color-mix(in oklab,var(--del) 38%,transparent)}}.bg-destructive,.bg-destructive\/20{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/20{background-color:color-mix(in oklab,var(--destructive) 20%,transparent)}}.bg-foreground{background-color:var(--foreground)}.bg-primary{background-color:var(--primary)}.bg-secondary{background-color:var(--secondary)}.bg-transparent{background-color:#0000}.p-0{padding:0}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-10{padding-inline:calc(var(--spacing) * 10)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pb-1{padding-bottom:var(--spacing)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-left{text-align:left}.font-mono{font-family:IBM Plex Mono,ui-monospace,SF Mono,Menlo,monospace}.font-sans{font-family:IBM Plex Sans,ui-sans-serif,system-ui,sans-serif}.font-serif{font-family:"Source Serif 4",Iowan Old Style,Georgia,serif}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[1\.75rem\]{font-size:1.75rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.text-add{color:var(--add)}.text-background{color:var(--background)}.text-del{color:var(--del)}.text-destructive{color:var(--destructive)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-warn{color:var(--warn)}.text-white{color:var(--color-white)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:var(--primary)}.opacity-45{opacity:.45}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-y-0:after{content:var(--tw-content);inset-block:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-px:after{content:var(--tw-content);width:1px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.after\:bg-border:after{content:var(--tw-content);background-color:var(--border)}.last\:mb-0:last-child{margin-bottom:0}@media(hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary) 90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-muted-foreground:hover{color:var(--muted-foreground)}.hover\:text-warn:hover{color:var(--warn)}.hover\:underline:hover{text-decoration-line:underline}.hover\:after\:bg-primary\/60:hover:after{content:var(--tw-content);background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:after\:bg-primary\/60:hover:after{background-color:color-mix(in oklab,var(--primary) 60%,transparent)}}.hover\:after\:bg-primary\/70:hover:after{content:var(--tw-content);background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:after\:bg-primary\/70:hover:after{background-color:color-mix(in oklab,var(--primary) 70%,transparent)}}}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.aria-\[orientation\=horizontal\]\:h-2[aria-orientation=horizontal]{height:calc(var(--spacing) * 2)}.aria-\[orientation\=horizontal\]\:w-full[aria-orientation=horizontal]{width:100%}.aria-\[orientation\=horizontal\]\:after\:left-0[aria-orientation=horizontal]:after{content:var(--tw-content);left:0}.aria-\[orientation\=horizontal\]\:after\:h-px[aria-orientation=horizontal]:after{content:var(--tw-content);height:1px}.aria-\[orientation\=horizontal\]\:after\:w-full[aria-orientation=horizontal]:after{content:var(--tw-content);width:100%}.aria-\[orientation\=horizontal\]\:after\:translate-x-0[aria-orientation=horizontal]:after{content:var(--tw-content);--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.aria-\[orientation\=horizontal\]\:after\:-translate-y-1\/2[aria-orientation=horizontal]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.aria-\[orientation\=vertical\]\:flex-col[aria-orientation=vertical]{flex-direction:column}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=delayed-open\]\:animate-in[data-state=delayed-open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=delayed-open\]\:fade-in-0[data-state=delayed-open]{--tw-enter-opacity:0}.data-\[state\=instant-open\]\:animate-in[data-state=instant-open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=instant-open\]\:fade-in-0[data-state=instant-open]{--tw-enter-opacity:0}.data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--accent)}.data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--accent-foreground)}@media(prefers-reduced-motion:no-preference){.motion-safe\:after\:transition-colors:after{content:var(--tw-content);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{color-scheme:light;--motion:.18s;--motion-brief:.5s;--motion-brief-gap:50ms;--motion-ease:cubic-bezier(.2, .8, .2, 1);--radius:.45rem;--background:#f4f6f8;--foreground:#171b22;--card:#fff;--card-foreground:#171b22;--popover:#fff;--popover-foreground:#171b22;--primary:#3d4fd8;--primary-foreground:#fff;--secondary:#e8ecf1;--secondary-foreground:#171b22;--muted:#e8ecf1;--muted-foreground:#5c6570;--accent:#e4e8f4;--accent-foreground:#171b22;--destructive:#cf222e;--border:#d5dbe3;--input:#d5dbe3;--ring:#3d4fd8;--add:#1a7f37;--del:#cf222e;--warn:#9a6700;--add-bg:#1a7f3729;--del-bg:#cf222e29;--diff-canvas:#fff;--diff-fg:#1f2328;--diff-add-line:#e6ffec;--diff-add-num:#ccffd8;--diff-add-word:#abf2bc;--diff-del-line:#ffebe9;--diff-del-num:#ffd7d5;--diff-del-word:#ff818266;--diff-hunk:#ddf4ff;--diff-hover:#f6f8fa;--strand-0:#2458b5;--strand-1:#9a5b00;--strand-2:#6b3d96;--strand-3:#0b6e78;--strand-4:#9a356e;--strand-5:#3a5366}.dark{color-scheme:dark;--background:#12151c;--foreground:#e6eaf0;--card:#1a1e27;--card-foreground:#e6eaf0;--popover:#1a1e27;--popover-foreground:#e6eaf0;--primary:#8b9cff;--primary-foreground:#12151c;--secondary:#252a33;--secondary-foreground:#e6eaf0;--muted:#252a33;--muted-foreground:#8b939e;--accent:#2a3148;--accent-foreground:#e6eaf0;--destructive:#f85149;--border:#2c3340;--input:#2c3340;--ring:#8b9cff;--add:#3fb950;--del:#f85149;--warn:#d4a017;--add-bg:#3fb95029;--del-bg:#f8514929;--diff-canvas:#0d1117;--diff-fg:#e6edf3;--diff-add-line:#2ea04326;--diff-add-num:#2ea04366;--diff-add-word:#2ea04366;--diff-del-line:#f8514926;--diff-del-num:#f8514966;--diff-del-word:#f8514966;--diff-hunk:#388bfd1a;--diff-hover:#161b22;--strand-0:#8fb4f0;--strand-1:#e0a64a;--strand-2:#c9a3e8;--strand-3:#6ed0d6;--strand-4:#e399c0;--strand-5:#9ab0c2}@media(prefers-reduced-motion:no-preference){[data-slot=button],[data-slot=toggle],[data-slot=badge]{transition-property:color,background-color,border-color,box-shadow,opacity;transition-duration:var(--motion);transition-timing-function:var(--motion-ease)}.review-main{scroll-behavior:smooth}.hunk-card{transition:border-color var(--motion) var(--motion-ease)}.hunk-chevron{transition:transform var(--motion) var(--motion-ease)}.file-path{transition:color var(--motion) var(--motion-ease)}.stack-strand{transition:opacity var(--motion) var(--motion-ease)}.stack-selection{transition-property:top,left,width,height;transition-duration:var(--motion);transition-timing-function:var(--motion-ease)}[data-slot=resizable-handle]:after{transition:background-color var(--motion) var(--motion-ease)}}html[data-motion=layer] .review-brief-strand{view-transition-name:review-strand}html[data-motion=layer] .review-brief-copy{view-transition-name:review-copy}html[data-motion=layer] .review-overview{view-transition-name:review-overview}html[data-motion=scene] .review-scene{view-transition-name:review-scene}.review-brief{align-items:stretch;gap:1rem;margin-bottom:2rem;display:flex}.review-brief-strand{border-radius:1px;flex:none;width:3px}.review-brief-copy{flex:1;min-width:0}::view-transition-old(review-strand){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-new(review-strand){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-old(review-copy){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-new(review-copy){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-old(review-overview){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-new(review-overview){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-old(review-scene){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-new(review-scene){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-old(review-strand){height:100%;animation-duration:var(--motion-brief);overflow:clip}::view-transition-new(review-strand){height:100%;animation-duration:var(--motion-brief);overflow:clip}::view-transition-old(review-strand){animation-name:motion-fade-out}::view-transition-new(review-strand){animation-name:motion-fade-in}::view-transition-group(review-strand){animation-duration:var(--motion-brief);animation-timing-function:var(--motion-ease)}::view-transition-image-pair(review-strand){isolation:isolate}::view-transition-old(review-copy){animation-name:motion-slide-down-out;animation-duration:calc((var(--motion-brief) - var(--motion-brief-gap)) / 2)}::view-transition-new(review-copy){animation-name:motion-slide-up-in;animation-duration:calc((var(--motion-brief) - var(--motion-brief-gap)) / 2);animation-delay:calc((var(--motion-brief) + var(--motion-brief-gap)) / 2)}::view-transition-group(review-copy){animation:none}::view-transition-old(review-overview){animation-name:motion-fade-out;animation-duration:var(--motion-brief)}::view-transition-new(review-overview){animation-name:motion-fade-in;animation-duration:var(--motion-brief)}::view-transition-group(review-overview){animation:none}::view-transition-old(review-scene){animation-name:motion-fade-out;animation-duration:var(--motion)}::view-transition-new(review-scene){animation-name:motion-fade-in;animation-duration:var(--motion)}::view-transition-group(review-scene){animation-duration:var(--motion);animation-timing-function:var(--motion-ease)}::view-transition-image-pair(review-scene){isolation:isolate}.stack{position:relative}.stack-item-active{background-color:var(--accent)}.stack-selection{display:none}.stack-strand{pointer-events:none;z-index:1;background-color:var(--strand,var(--primary));border-radius:9999px;width:.125rem;position:absolute;inset:.375rem auto .375rem 0}.stack-item:hover:not(.stack-item-active){background-color:var(--accent)}@supports (anchor-name:--stack-active){.stack-item-active{anchor-name:--stack-active;background-color:#0000}.stack-selection{pointer-events:none;z-index:0;position-anchor:--stack-active;top:anchor(top);left:anchor(left);width:anchor-size(width);height:anchor-size(height);border-radius:var(--radius);background-color:var(--accent);display:block;position:absolute}}@keyframes motion-fade-out{to{opacity:0}}@keyframes motion-fade-in{0%{opacity:0}}@keyframes motion-slide-down-out{to{opacity:0;translate:0 .75rem}}@keyframes motion-slide-up-in{0%{opacity:0;translate:0 .75rem}}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}
|
|
1
|
+
@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-greek-400-normal-_efipK4i.woff2) format("woff2"),url(./ibm-plex-sans-greek-400-normal-D9ESIMu3.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-400-normal-RBey6euL.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-latin-400-normal-CDDApCn2.woff2) format("woff2"),url(./ibm-plex-sans-latin-400-normal-CYLoc0-x.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-greek-500-normal-JMMifIXV.woff2) format("woff2"),url(./ibm-plex-sans-greek-500-normal-CuWXN6rf.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-500-normal-BEb3_waV.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-latin-500-normal-6ng42L7E.woff2) format("woff2"),url(./ibm-plex-sans-latin-500-normal-BgVn5rGT.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2) format("woff2"),url(./ibm-plex-sans-greek-600-normal-D-CqTdkO.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-600-normal-DgdngZtN.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-600-normal-DIrixKbi.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2) format("woff2"),url(./ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2) format("woff2"),url(./ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2) format("woff2"),url(./ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2) format("woff2"),url(./ibm-plex-mono-latin-400-normal-CvHOgSBP.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2) format("woff2"),url(./ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2) format("woff2"),url(./ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2) format("woff2"),url(./ibm-plex-mono-latin-500-normal-CB9ihrfo.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(./source-serif-4-cyrillic-ext-400-normal-CWV284fw.woff2) format("woff2"),url(./source-serif-4-cyrillic-ext-400-normal-DLkyKLvH.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(./source-serif-4-cyrillic-400-normal-C44pakCn.woff2) format("woff2"),url(./source-serif-4-cyrillic-400-normal-B8Z6Jvzv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(./source-serif-4-greek-400-normal-Cw5-AHNN.woff2) format("woff2"),url(./source-serif-4-greek-400-normal-BccYJ-vZ.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(./source-serif-4-vietnamese-400-normal-BbG3LG1A.woff2) format("woff2"),url(./source-serif-4-vietnamese-400-normal-DR1UuFon.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(./source-serif-4-latin-ext-400-normal-Cp7z-ARB.woff2) format("woff2"),url(./source-serif-4-latin-ext-400-normal-CEpydyUl.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(./source-serif-4-latin-400-normal-DJ5YJwmz.woff2) format("woff2"),url(./source-serif-4-latin-400-normal-Dn3IlU-Z.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(./source-serif-4-cyrillic-ext-600-normal-D_E8FDgP.woff2) format("woff2"),url(./source-serif-4-cyrillic-ext-600-normal-DiT2IGQm.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(./source-serif-4-cyrillic-600-normal-BDP5YDHD.woff2) format("woff2"),url(./source-serif-4-cyrillic-600-normal-DFnC3vAY.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(./source-serif-4-greek-600-normal-DdRkKr-1.woff2) format("woff2"),url(./source-serif-4-greek-600-normal-DhXQw1Kl.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(./source-serif-4-vietnamese-600-normal-CznyfUKR.woff2) format("woff2"),url(./source-serif-4-vietnamese-600-normal-B0WJbuqT.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(./source-serif-4-latin-ext-600-normal-0sIUyHMO.woff2) format("woff2"),url(./source-serif-4-latin-ext-600-normal-C6NNqpJh.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:600;src:url(./source-serif-4-latin-600-normal-DouSKlru.woff2) format("woff2"),url(./source-serif-4-latin-600-normal-DMD1h6_f.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@keyframes wait-walk{0%{top:-40%}to{top:100%}}@media(prefers-reduced-motion:no-preference){.wait-gutter-walker{animation:wait-walk 1.7s var(--motion-ease) infinite}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:"IBM Plex Sans", ui-sans-serif, system-ui, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-normal:400;--font-weight-medium:500;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:"IBM Plex Sans", ui-sans-serif, system-ui, sans-serif;--default-mono-font-family:"IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border)}html,body,#root{height:100%}html{view-transition-name:none}body{background-color:var(--background);color:var(--foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:IBM Plex Sans,ui-sans-serif,system-ui,sans-serif;font-size:14px;line-height:1.55}code,pre,kbd{font-family:var(--font-mono)}.image-stage{background-color:var(--diff-canvas);background-image:repeating-conic-gradient(var(--muted) 0% 25%,var(--diff-canvas) 0% 50%);box-shadow:inset 0 0 0 1px var(--border);background-size:12px 12px}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1\/2{top:50%}.top-\[28\%\]{top:28%}.left-0{left:0}.z-1{z-index:1}.z-10{z-index:10}.z-50{z-index:50}.m-0{margin:0}.mx-1{margin-inline:var(--spacing)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-px{margin-top:1px}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-12{margin-bottom:calc(var(--spacing) * 12)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-full{width:100%;height:100%}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-\[1\.1rem\]{height:1.1rem}.h-\[44\%\]{height:44%}.h-auto{height:auto}.h-full{height:100%}.min-h-0{min-height:0}.w-0\.5{width:calc(var(--spacing) * .5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-5{width:calc(var(--spacing) * 5)}.w-\[3px\]{width:3px}.w-\[calc\(100\%-24px\)\]{width:calc(100% - 24px)}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\[68ch\]{max-width:68ch}.max-w-full{max-width:100%}.max-w-none{max-width:none}.min-w-0{min-width:0}.min-w-8{min-width:calc(var(--spacing) * 8)}.min-w-9{min-width:calc(var(--spacing) * 9)}.min-w-10{min-width:calc(var(--spacing) * 10)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.auto-cols-\[minmax\(16rem\,1fr\)\]{grid-auto-columns:minmax(16rem,1fr)}.grid-flow-col{grid-auto-flow:column}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-0{gap:0}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-\[0\.28rem\]{gap:.28rem}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-1{row-gap:var(--spacing)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-\[1px\]{border-radius:1px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:calc(var(--radius) * 1.3)}.rounded-md{border-radius:var(--radius)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) * .7)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-border{border-color:var(--border)}.border-input{border-color:var(--input)}.border-primary{border-color:var(--primary)}.border-transparent{border-color:#0000}.bg-\[var\(--diff-canvas\)\]{background-color:var(--diff-canvas)}.bg-add,.bg-add\/38{background-color:var(--add)}@supports (color:color-mix(in lab,red,red)){.bg-add\/38{background-color:color-mix(in oklab,var(--add) 38%,transparent)}}.bg-background{background-color:var(--background)}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-del,.bg-del\/38{background-color:var(--del)}@supports (color:color-mix(in lab,red,red)){.bg-del\/38{background-color:color-mix(in oklab,var(--del) 38%,transparent)}}.bg-destructive,.bg-destructive\/20{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/20{background-color:color-mix(in oklab,var(--destructive) 20%,transparent)}}.bg-foreground{background-color:var(--foreground)}.bg-primary{background-color:var(--primary)}.bg-secondary{background-color:var(--secondary)}.bg-transparent{background-color:#0000}.p-0{padding:0}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-10{padding-inline:calc(var(--spacing) * 10)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pb-1{padding-bottom:var(--spacing)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-left{text-align:left}.font-mono{font-family:IBM Plex Mono,ui-monospace,SF Mono,Menlo,monospace}.font-sans{font-family:IBM Plex Sans,ui-sans-serif,system-ui,sans-serif}.font-serif{font-family:"Source Serif 4",Iowan Old Style,Georgia,serif}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[1\.75rem\]{font-size:1.75rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.text-add{color:var(--add)}.text-background{color:var(--background)}.text-del{color:var(--del)}.text-destructive{color:var(--destructive)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-warn{color:var(--warn)}.text-white{color:var(--color-white)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:var(--primary)}.opacity-45{opacity:.45}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-y-0:after{content:var(--tw-content);inset-block:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-px:after{content:var(--tw-content);width:1px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.after\:bg-border:after{content:var(--tw-content);background-color:var(--border)}.last\:mb-0:last-child{margin-bottom:0}@media(hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary) 90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-muted-foreground:hover{color:var(--muted-foreground)}.hover\:text-warn:hover{color:var(--warn)}.hover\:underline:hover{text-decoration-line:underline}.hover\:after\:bg-primary\/60:hover:after{content:var(--tw-content);background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:after\:bg-primary\/60:hover:after{background-color:color-mix(in oklab,var(--primary) 60%,transparent)}}.hover\:after\:bg-primary\/70:hover:after{content:var(--tw-content);background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:after\:bg-primary\/70:hover:after{background-color:color-mix(in oklab,var(--primary) 70%,transparent)}}}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.aria-\[orientation\=horizontal\]\:h-2[aria-orientation=horizontal]{height:calc(var(--spacing) * 2)}.aria-\[orientation\=horizontal\]\:w-full[aria-orientation=horizontal]{width:100%}.aria-\[orientation\=horizontal\]\:after\:left-0[aria-orientation=horizontal]:after{content:var(--tw-content);left:0}.aria-\[orientation\=horizontal\]\:after\:h-px[aria-orientation=horizontal]:after{content:var(--tw-content);height:1px}.aria-\[orientation\=horizontal\]\:after\:w-full[aria-orientation=horizontal]:after{content:var(--tw-content);width:100%}.aria-\[orientation\=horizontal\]\:after\:translate-x-0[aria-orientation=horizontal]:after{content:var(--tw-content);--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.aria-\[orientation\=horizontal\]\:after\:-translate-y-1\/2[aria-orientation=horizontal]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.aria-\[orientation\=vertical\]\:flex-col[aria-orientation=vertical]{flex-direction:column}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=delayed-open\]\:animate-in[data-state=delayed-open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=delayed-open\]\:fade-in-0[data-state=delayed-open]{--tw-enter-opacity:0}.data-\[state\=instant-open\]\:animate-in[data-state=instant-open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=instant-open\]\:fade-in-0[data-state=instant-open]{--tw-enter-opacity:0}.data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--accent)}.data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--accent-foreground)}@media(prefers-reduced-motion:no-preference){.motion-safe\:after\:transition-colors:after{content:var(--tw-content);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{color-scheme:light;--motion:.18s;--motion-brief:.5s;--motion-brief-gap:50ms;--motion-ease:cubic-bezier(.2, .8, .2, 1);--radius:.45rem;--background:#f4f6f8;--foreground:#171b22;--card:#fff;--card-foreground:#171b22;--popover:#fff;--popover-foreground:#171b22;--primary:#3d4fd8;--primary-foreground:#fff;--secondary:#e8ecf1;--secondary-foreground:#171b22;--muted:#e8ecf1;--muted-foreground:#5c6570;--accent:#e4e8f4;--accent-foreground:#171b22;--destructive:#cf222e;--border:#d5dbe3;--input:#d5dbe3;--ring:#3d4fd8;--add:#1a7f37;--del:#cf222e;--warn:#9a6700;--add-bg:#1a7f3729;--del-bg:#cf222e29;--diff-canvas:#fff;--diff-fg:#1f2328;--diff-add-line:#e6ffec;--diff-add-num:#ccffd8;--diff-add-word:#abf2bc;--diff-del-line:#ffebe9;--diff-del-num:#ffd7d5;--diff-del-word:#ff818266;--diff-hunk:#ddf4ff;--diff-hover:#f6f8fa;--strand-0:#2458b5;--strand-1:#9a5b00;--strand-2:#6b3d96;--strand-3:#0b6e78;--strand-4:#9a356e;--strand-5:#3a5366}.dark{color-scheme:dark;--background:#12151c;--foreground:#e6eaf0;--card:#1a1e27;--card-foreground:#e6eaf0;--popover:#1a1e27;--popover-foreground:#e6eaf0;--primary:#8b9cff;--primary-foreground:#12151c;--secondary:#252a33;--secondary-foreground:#e6eaf0;--muted:#252a33;--muted-foreground:#8b939e;--accent:#2a3148;--accent-foreground:#e6eaf0;--destructive:#f85149;--border:#2c3340;--input:#2c3340;--ring:#8b9cff;--add:#3fb950;--del:#f85149;--warn:#d4a017;--add-bg:#3fb95029;--del-bg:#f8514929;--diff-canvas:#0d1117;--diff-fg:#e6edf3;--diff-add-line:#2ea04326;--diff-add-num:#2ea04366;--diff-add-word:#2ea04366;--diff-del-line:#f8514926;--diff-del-num:#f8514966;--diff-del-word:#f8514966;--diff-hunk:#388bfd1a;--diff-hover:#161b22;--strand-0:#8fb4f0;--strand-1:#e0a64a;--strand-2:#c9a3e8;--strand-3:#6ed0d6;--strand-4:#e399c0;--strand-5:#9ab0c2}@media(prefers-reduced-motion:no-preference){[data-slot=button],[data-slot=toggle],[data-slot=badge]{transition-property:color,background-color,border-color,box-shadow,opacity;transition-duration:var(--motion);transition-timing-function:var(--motion-ease)}.review-main{scroll-behavior:smooth}.hunk-card{transition:border-color var(--motion) var(--motion-ease)}.hunk-chevron{transition:transform var(--motion) var(--motion-ease)}.file-path{transition:color var(--motion) var(--motion-ease)}.stack-strand{transition:opacity var(--motion) var(--motion-ease)}.stack-selection{transition-property:top,left,width,height;transition-duration:var(--motion);transition-timing-function:var(--motion-ease)}[data-slot=resizable-handle]:after{transition:background-color var(--motion) var(--motion-ease)}}html[data-motion=layer] .review-brief-strand{view-transition-name:review-strand}html[data-motion=layer] .review-brief-copy{view-transition-name:review-copy}html[data-motion=layer] .review-overview{view-transition-name:review-overview}html[data-motion=scene] .review-scene{view-transition-name:review-scene}.review-brief{align-items:stretch;gap:1rem;margin-bottom:2rem;display:flex}.review-brief-strand{background-color:var(--muted-foreground);border-radius:1px;flex:none;width:3px}.review-brief-copy{flex:1;min-width:0}::view-transition-old(review-strand){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-new(review-strand){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-old(review-copy){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-new(review-copy){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-old(review-overview){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-new(review-overview){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-old(review-scene){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-new(review-scene){mix-blend-mode:normal;animation-timing-function:var(--motion-ease);animation-fill-mode:both}::view-transition-old(review-strand){height:100%;animation-duration:var(--motion-brief);overflow:clip}::view-transition-new(review-strand){height:100%;animation-duration:var(--motion-brief);overflow:clip}::view-transition-old(review-strand){animation-name:motion-fade-out}::view-transition-new(review-strand){animation-name:motion-fade-in}::view-transition-group(review-strand){animation-duration:var(--motion-brief);animation-timing-function:var(--motion-ease)}::view-transition-image-pair(review-strand){isolation:isolate}::view-transition-old(review-copy){animation-name:motion-slide-down-out;animation-duration:calc((var(--motion-brief) - var(--motion-brief-gap)) / 2)}::view-transition-new(review-copy){animation-name:motion-slide-up-in;animation-duration:calc((var(--motion-brief) - var(--motion-brief-gap)) / 2);animation-delay:calc((var(--motion-brief) + var(--motion-brief-gap)) / 2)}::view-transition-group(review-copy){animation:none}::view-transition-old(review-overview){animation-name:motion-fade-out;animation-duration:var(--motion-brief)}::view-transition-new(review-overview){animation-name:motion-fade-in;animation-duration:var(--motion-brief)}::view-transition-group(review-overview){animation:none}::view-transition-old(review-scene){animation-name:motion-fade-out;animation-duration:var(--motion)}::view-transition-new(review-scene){animation-name:motion-fade-in;animation-duration:var(--motion)}::view-transition-group(review-scene){animation-duration:var(--motion);animation-timing-function:var(--motion-ease)}::view-transition-image-pair(review-scene){isolation:isolate}.stack{position:relative}.stack-item-active{background-color:var(--accent)}.stack-selection{display:none}.stack-strand{pointer-events:none;z-index:1;background-color:var(--strand,var(--primary));border-radius:9999px;width:.125rem;position:absolute;inset:.375rem auto .375rem 0}.stack-item:hover:not(.stack-item-active){background-color:var(--accent)}@supports (anchor-name:--stack-active){.stack-item-active{anchor-name:--stack-active;background-color:#0000}.stack-selection{pointer-events:none;z-index:0;position-anchor:--stack-active;top:anchor(top);left:anchor(left);width:anchor-size(width);height:anchor-size(height);border-radius:var(--radius);background-color:var(--accent);display:block;position:absolute}}@keyframes motion-fade-out{to{opacity:0}}@keyframes motion-fade-in{0%{opacity:0}}@keyframes motion-slide-down-out{to{opacity:0;translate:0 .75rem}}@keyframes motion-slide-up-in{0%{opacity:0;translate:0 .75rem}}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}
|
package/dist/ui/index.html
CHANGED
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
}
|
|
19
19
|
})();
|
|
20
20
|
</script>
|
|
21
|
-
<script type="module" crossorigin src="./assets/index-
|
|
22
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
21
|
+
<script type="module" crossorigin src="./assets/index-CcecgzMY.js"></script>
|
|
22
|
+
<link rel="stylesheet" crossorigin href="./assets/index-CukSNLbz.css">
|
|
23
23
|
</head>
|
|
24
24
|
<body>
|
|
25
25
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -24,7 +24,7 @@ The review document is interpretation only: groups, summaries, hunk pointers. Ne
|
|
|
24
24
|
Run the published CLI at the pinned version, inside the repository under review.
|
|
25
25
|
|
|
26
26
|
```sh
|
|
27
|
-
npx comprehende@0.4.
|
|
27
|
+
npx comprehende@0.4.1 <command>
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
Do not use a git checkout path, `pnpm dev`, or an unpinned install.
|
|
@@ -32,7 +32,7 @@ Do not use a git checkout path, `pnpm dev`, or an unpinned install.
|
|
|
32
32
|
## Workflow
|
|
33
33
|
|
|
34
34
|
1. Resolve the git range. Three-dot (`base...head`) is the merge-request / branch diff. Use the refs the user named. If the change is already on the default branch, use the request's base and head SHAs, or the merge-base. Do not use current default-branch `HEAD`. Fetch if the refs are missing from the local clone.
|
|
35
|
-
2. Run `npx comprehende@0.4.
|
|
35
|
+
2. Run `npx comprehende@0.4.1 index [--base <ref>] [--head <ref>]` and keep the JSON. This lists hunk refs (path plus `@@` ranges), image files, and skipped files. Image files use `oldStart`/`newStart` 0. Lockfiles and non-image binaries are in `skipped`. It contains no line content and no image bytes. Do not write the index into the work tree.
|
|
36
36
|
3. Recover the why and write the what. Copy tickets from the request. If the user named a pull request or merge request, read its description. Read commit subjects and bodies with `git log --format='%s%n%n%b' --end-of-options <base>...<head>`. If you have a coding-agent transcript for this change, read the human's stated reason. Do not copy commit text, the request description, or the transcript into `review.json`. Then read `git diff --stat <base>...<head>` and the diffs. Group by review concern. Write a document `summary` for the whole change. Write a `why` on each layer. Write a document `why` when a ticket, issue, request description, or transcript names why this work exists. A second part does not cancel it. Index is not enough to group. Log is not enough to group.
|
|
37
37
|
4. Create a temporary directory outside the repository. Write `review.json` there. Copy hunk objects from the index into groups. Set `size` from review burden, not from `git diff --stat`. Do not reconstruct `oldStart` / `newStart` from memory. Do not paste patch text. Do not write this file into the work tree. Do not add gitignore entries. Pass the absolute path to `--data`.
|
|
38
38
|
|
|
@@ -48,8 +48,8 @@ Do not use a git checkout path, `pnpm dev`, or an unpinned install.
|
|
|
48
48
|
# write $REVIEW_DIR/review.json
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
5. Run `npx comprehende@0.4.
|
|
52
|
-
6. Run `npx comprehende@0.4.
|
|
51
|
+
5. Run `npx comprehende@0.4.1 validate --data "$REVIEW_DIR/review.json"`. On failure, fix groups or coverage. Never the diff.
|
|
52
|
+
6. Run `npx comprehende@0.4.1 serve --data "$REVIEW_DIR/review.json" --open` and give the user the localhost URL (`127.0.0.1` only).
|
|
53
53
|
|
|
54
54
|
Default `--head` is `HEAD`. Default `--base` is `origin/HEAD`, falling back to `main` or `master`.
|
|
55
55
|
|