local-diff-reviewer 2.0.11 → 3.0.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.
Files changed (72) hide show
  1. package/README.md +26 -2
  2. package/dist/cli/start.js +35 -8
  3. package/dist/web/assets/{arc-ChpFy37O.js → arc-BCRWWOYF.js} +1 -1
  4. package/dist/web/assets/{architectureDiagram-3BPJPVTR-Cgaj3a9o.js → architectureDiagram-3BPJPVTR-DHYav7x-.js} +1 -1
  5. package/dist/web/assets/{blockDiagram-GPEHLZMM-DkuAMi3q.js → blockDiagram-GPEHLZMM-BBTDvfqa.js} +1 -1
  6. package/dist/web/assets/{c4Diagram-AAUBKEIU-CDK-buBU.js → c4Diagram-AAUBKEIU-BSsCCONC.js} +1 -1
  7. package/dist/web/assets/channel-DfaOkitd.js +1 -0
  8. package/dist/web/assets/{chunk-2J33WTMH-YbsNyCUW.js → chunk-2J33WTMH-gxgSxUp0.js} +1 -1
  9. package/dist/web/assets/{chunk-3OPIFGDE-DV1vjQ2X.js → chunk-3OPIFGDE-CvdnyK6N.js} +1 -1
  10. package/dist/web/assets/{chunk-4BX2VUAB-DeEc33q3.js → chunk-4BX2VUAB-Drw-i2nM.js} +1 -1
  11. package/dist/web/assets/{chunk-55IACEB6-bZZAUAVd.js → chunk-55IACEB6-DV6wcPr8.js} +1 -1
  12. package/dist/web/assets/{chunk-5ZQYHXKU-DgyqH5XP.js → chunk-5ZQYHXKU-BtkqI0hy.js} +1 -1
  13. package/dist/web/assets/{chunk-727SXJPM-6VWJ2lHJ.js → chunk-727SXJPM-DyK5L1lx.js} +1 -1
  14. package/dist/web/assets/{chunk-AQP2D5EJ-BF8x9XWx.js → chunk-AQP2D5EJ-DjyFoYVP.js} +1 -1
  15. package/dist/web/assets/{chunk-BSJP7CBP-CMr0v6xI.js → chunk-BSJP7CBP-Bv-B6WhM.js} +1 -1
  16. package/dist/web/assets/{chunk-CSCIHK7Q-D2fII9eQ.js → chunk-CSCIHK7Q-B44e1JBV.js} +1 -1
  17. package/dist/web/assets/{chunk-FMBD7UC4-DAlS2A9T.js → chunk-FMBD7UC4-DO7GRO5x.js} +1 -1
  18. package/dist/web/assets/{chunk-KSCS5N6A-MlhfFM2r.js → chunk-KSCS5N6A-qazKtUbg.js} +1 -1
  19. package/dist/web/assets/{chunk-L5ZTLDWV-BEIJ92Sz.js → chunk-L5ZTLDWV-CL2Wbg0I.js} +1 -1
  20. package/dist/web/assets/{chunk-LZXEDZCA-bfYwPq2G.js → chunk-LZXEDZCA-k37XY6Xa.js} +2 -2
  21. package/dist/web/assets/{chunk-ND2GUHAM-BRDrcZAI.js → chunk-ND2GUHAM-BA2wFWbx.js} +1 -1
  22. package/dist/web/assets/{chunk-NZK2D7GU-B6vyhmOT.js → chunk-NZK2D7GU-BucWKMX_.js} +1 -1
  23. package/dist/web/assets/{chunk-O5CBEL6O-c3nB4SYL.js → chunk-O5CBEL6O-Cgf-jrUe.js} +1 -1
  24. package/dist/web/assets/chunk-QZHKN3VN-jXTijF5B.js +1 -0
  25. package/dist/web/assets/chunk-WU5MYG2G-CtQkD8HB.js +1 -0
  26. package/dist/web/assets/{chunk-XPW4576I-lMmkJ4Jc.js → chunk-XPW4576I-D9MYSFVJ.js} +1 -1
  27. package/dist/web/assets/classDiagram-4FO5ZUOK-DLy1WqRU.js +1 -0
  28. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-BsZ-aUoD.js +1 -0
  29. package/dist/web/assets/{cose-bilkent-S5V4N54A-DWeoi84z.js → cose-bilkent-S5V4N54A-1_Y7VE-T.js} +1 -1
  30. package/dist/web/assets/{dagre-BM42HDAG-IfVKs6Da.js → dagre-BM42HDAG-xi-12y5l.js} +1 -1
  31. package/dist/web/assets/{diagram-2AECGRRQ-BXq6JdLK.js → diagram-2AECGRRQ-B3Z1pwqm.js} +1 -1
  32. package/dist/web/assets/{diagram-5GNKFQAL-BNWmXT7I.js → diagram-5GNKFQAL-Dw4cOkhG.js} +1 -1
  33. package/dist/web/assets/{diagram-KO2AKTUF-BtK06IlL.js → diagram-KO2AKTUF-D2u6bia1.js} +1 -1
  34. package/dist/web/assets/{diagram-LMA3HP47-BQDK25Sc.js → diagram-LMA3HP47-DOLa6Wa9.js} +1 -1
  35. package/dist/web/assets/{diagram-OG6HWLK6-Duxtsjxn.js → diagram-OG6HWLK6-ITRaY92p.js} +1 -1
  36. package/dist/web/assets/{dist-DVJJgXED.js → dist-f1ZvJ0ZX.js} +1 -1
  37. package/dist/web/assets/{erDiagram-TEJ5UH35-CFq2Ut7T.js → erDiagram-TEJ5UH35-DcSS5Ih9.js} +1 -1
  38. package/dist/web/assets/{flowDiagram-I6XJVG4X-Ddk8q5oz.js → flowDiagram-I6XJVG4X-C_LclUbz.js} +1 -1
  39. package/dist/web/assets/{ganttDiagram-6RSMTGT7-DNp0Oq1N.js → ganttDiagram-6RSMTGT7-D_ibFFLf.js} +1 -1
  40. package/dist/web/assets/{gitGraphDiagram-PVQCEYII-C7VYErCd.js → gitGraphDiagram-PVQCEYII-JBBG2xqG.js} +1 -1
  41. package/dist/web/assets/{index-msD3nmMF.js → index-CjqBr-4l.js} +19 -19
  42. package/dist/web/assets/index-DDhTur_z.css +1 -0
  43. package/dist/web/assets/{infoDiagram-5YYISTIA-Ci4wm7CG.js → infoDiagram-5YYISTIA-ye8o5cn0.js} +1 -1
  44. package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-SUihQfsH.js → ishikawaDiagram-YF4QCWOH-BoivB3K7.js} +1 -1
  45. package/dist/web/assets/{journeyDiagram-JHISSGLW-BrrRTv6l.js → journeyDiagram-JHISSGLW-DoiT2btg.js} +1 -1
  46. package/dist/web/assets/{kanban-definition-UN3LZRKU-CMlg7z3Y.js → kanban-definition-UN3LZRKU-rPLxmwVs.js} +1 -1
  47. package/dist/web/assets/{line-CIhu9AHH.js → line-BPbMyUR_.js} +1 -1
  48. package/dist/web/assets/{linear-z1b-Q4rf.js → linear-D2y_hUES.js} +1 -1
  49. package/dist/web/assets/{mermaid-parser.core-8oj6cPO6.js → mermaid-parser.core-BkcqBOzJ.js} +1 -1
  50. package/dist/web/assets/{mermaid.core-CuDXPsl1.js → mermaid.core-Dcb_H2og.js} +3 -3
  51. package/dist/web/assets/{mindmap-definition-RKZ34NQL-RNKXmHdf.js → mindmap-definition-RKZ34NQL-BmQ6AtW3.js} +1 -1
  52. package/dist/web/assets/{pieDiagram-4H26LBE5-D-I8XGuG.js → pieDiagram-4H26LBE5-YiBeVKvu.js} +1 -1
  53. package/dist/web/assets/{quadrantDiagram-W4KKPZXB-BjmgapTa.js → quadrantDiagram-W4KKPZXB-DMx-0K_c.js} +1 -1
  54. package/dist/web/assets/{requirementDiagram-4Y6WPE33-D5HjLxw4.js → requirementDiagram-4Y6WPE33-B91ulROJ.js} +1 -1
  55. package/dist/web/assets/{sankeyDiagram-5OEKKPKP-SeolUewM.js → sankeyDiagram-5OEKKPKP-D7Tbgr4t.js} +1 -1
  56. package/dist/web/assets/{sequenceDiagram-3UESZ5HK-tVOjosKL.js → sequenceDiagram-3UESZ5HK-u7O9kAXb.js} +1 -1
  57. package/dist/web/assets/{src-DiU4xI_J.js → src-Z-w_Bw8O.js} +1 -1
  58. package/dist/web/assets/{stateDiagram-AJRCARHV-Df9qxfpJ.js → stateDiagram-AJRCARHV-DBQZPg7N.js} +1 -1
  59. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-CkRknB63.js +1 -0
  60. package/dist/web/assets/{timeline-definition-PNZ67QCA-DkURJqbS.js → timeline-definition-PNZ67QCA-SAlYtznA.js} +1 -1
  61. package/dist/web/assets/{vennDiagram-CIIHVFJN-CoNHo8pC.js → vennDiagram-CIIHVFJN-7VCkpay-.js} +1 -1
  62. package/dist/web/assets/{wardleyDiagram-YWT4CUSO-CH4FV8ak.js → wardleyDiagram-YWT4CUSO-D5c0N7zD.js} +1 -1
  63. package/dist/web/assets/{xychartDiagram-2RQKCTM6-CSRcrz5n.js → xychartDiagram-2RQKCTM6-A8A2NFsw.js} +1 -1
  64. package/dist/web/index.html +2 -2
  65. package/package.json +1 -1
  66. package/dist/web/assets/channel-ghHSFeG0.js +0 -1
  67. package/dist/web/assets/chunk-QZHKN3VN-rD5TgXB4.js +0 -1
  68. package/dist/web/assets/chunk-WU5MYG2G-DxdquN1E.js +0 -1
  69. package/dist/web/assets/classDiagram-4FO5ZUOK-BTNrfCfJ.js +0 -1
  70. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-B1gib5e9.js +0 -1
  71. package/dist/web/assets/index-B2gz8YY8.css +0 -1
  72. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-B-pGRn7s.js +0 -1
package/README.md CHANGED
@@ -29,8 +29,12 @@ npx skills add Mone-Lee/diff-review
29
29
 
30
30
  - 查看当前工作区 diff、staged diff、指定 revision diff。
31
31
  - 代码文件使用 GitHub 风格 unified diff。
32
- - Markdown 文件只展示 Preview,不提供 Diff / Preview 切换。
32
+ - Markdown 文件支持 `Preview / Code diff` 切换;`Code diff` 当前只支持 side-by-side,不支持 inline。
33
33
  - 支持文件级评论、代码行级评论、Markdown source line 评论。
34
+ - Markdown 评论在两种视图间会按视图能力降级展示:
35
+ - `Preview` 中的新评论按块级锚定;`Code diff` 中可精确到行。
36
+ - 从 `Code diff` 当前文本一侧创建的评论,会归并展示到对应的 Markdown 块;同一块内的多条评论目前会集中显示在块级内容底部。
37
+ - 对于只存在于旧版本一侧的评论,`Preview` 无法精确展示;定位这类评论时会切换到 `Code diff`。
34
38
  - 支持 submit / replied / resolved 评论状态。
35
39
  - 一条 thread 下可以包含多条 comment;同一锚点的新评论会追加到已有 thread。
36
40
  - 支持通过内部 `--comment` 参数预置 agent findings / replies。
@@ -78,7 +82,7 @@ local-diff-reviewer --repo /path/to/project staged
78
82
  项目 B /diff-review -> http://127.0.0.1:<空闲端口> -> 项目 B diff
79
83
  ```
80
84
 
81
- 页面打开后,代码 diff Markdown 预览会固定为当前审查快照;工作区继续变动不会自行改写页面内容。再次执行 `local-diff-reviewer` 或 `/diff-review` 会让默认页面自动同步到新快照;使用 `--new-session` 打开的独立页面继续保留旧快照。评论线程与其创建时的 diff 快照绑定:旧线程会在评论侧栏中保留并标记为历史快照,但不会因另一份快照中恰好有相同行号而贴到错误代码上。
85
+ 页面打开后,代码 diff Markdown `Preview / Code diff` 视图都会固定为当前审查快照;工作区继续变动不会自行改写页面内容。再次执行 `local-diff-reviewer` 或 `/diff-review` 会让默认页面自动同步到新快照;使用 `--new-session` 打开的独立页面继续保留旧快照。评论线程与其创建时的 diff 快照绑定:旧线程会在评论侧栏中保留并标记为历史快照,但不会因另一份快照中恰好有相同行号而贴到错误代码上。
82
86
 
83
87
  评论、快照、代码行之间的绑定关系及页面更新判断详见
84
88
  [`docs/comment-snapshot-binding.md`](docs/comment-snapshot-binding.md)。
@@ -141,6 +145,26 @@ npx --yes local-diff-reviewer \
141
145
 
142
146
  当 agent 收到从 UI 复制出的 `[thread:<id>]` prompt 并完成处理后,应使用 `type: "reply"` 把处理结果写回原 thread,作为 `author: "agent"` 的 comment 保留在评论流里。回复内容应简要说明已修改什么,或说明为什么没有修改。
143
147
 
148
+ 从 UI 复制出的 prompt 示例:
149
+
150
+ ```text
151
+ [thread:33fdc4a2-3cfa-419f-9aa4-b1ae4f662241]
152
+ test.md:41
153
+ markdown评论
154
+
155
+ [thread:4f053318-5922-45d0-99e2-377071942422]
156
+ test.md:new:37
157
+ new行内评论
158
+
159
+ [thread:82546c3b-52b5-42be-9358-c685b2ad1693]
160
+ test.md:old:57
161
+ old行内评论
162
+
163
+ [thread:86fca351-f2c7-4d41-810c-f810fe066ca4]
164
+ src/core/prompt.ts
165
+ 文件级评论
166
+ ```
167
+
144
168
  评论状态含义:
145
169
 
146
170
  - `submit`:只有用户提交的评论,还没有 agent finding / reply。
package/dist/cli/start.js CHANGED
@@ -722,10 +722,10 @@ function buildMarkdownBlocks(content) {
722
722
  blocks.push(makeBlock("blockquote", start2, index, collected2.join("\n"), slugger));
723
723
  continue;
724
724
  }
725
- if (/^\s*([-*+]|\d+\.)\s+/.test(line)) {
725
+ if (isListLine(line)) {
726
726
  const start2 = lineNumber;
727
727
  const collected2 = [];
728
- while (index < lines.length && (lines[index].trim() === "" || /^\s*([-*+]|\d+\.)\s+/.test(lines[index]))) {
728
+ while (index < lines.length && isListBlockLine(lines[index])) {
729
729
  collected2.push(lines[index]);
730
730
  index += 1;
731
731
  }
@@ -744,7 +744,11 @@ function buildMarkdownBlocks(content) {
744
744
  }
745
745
  const start = lineNumber;
746
746
  const collected = [];
747
- while (index < lines.length && lines[index].trim() !== "") {
747
+ while (index < lines.length && lines[index].trim() !== "" && !startsNewMarkdownBlock(lines[index], lines[index + 1])) {
748
+ collected.push(lines[index]);
749
+ index += 1;
750
+ }
751
+ if (index < lines.length && lines[index].trim() !== "") {
748
752
  collected.push(lines[index]);
749
753
  index += 1;
750
754
  }
@@ -752,6 +756,29 @@ function buildMarkdownBlocks(content) {
752
756
  }
753
757
  return blocks;
754
758
  }
759
+ function isListLine(line) {
760
+ return /^\s*([-*+]|\d+\.)\s+/.test(line);
761
+ }
762
+ function isIndentedContinuationLine(line) {
763
+ return /^\s{2,}\S/.test(line);
764
+ }
765
+ function isTableStartLine(line, nextLine) {
766
+ return line.includes("|") && Boolean(nextLine) && /^\s*\|?[\s:-]+\|/.test(nextLine ?? "");
767
+ }
768
+ function startsNewMarkdownBlock(line, nextLine) {
769
+ if (!line.trim()) return false;
770
+ if (/^```/.test(line.trim())) return true;
771
+ if (/^#{1,6}\s+/.test(line)) return true;
772
+ if (/^\s*>/.test(line)) return true;
773
+ if (isListLine(line)) return true;
774
+ if (isTableStartLine(line, nextLine)) return true;
775
+ return false;
776
+ }
777
+ function isListBlockLine(line) {
778
+ if (!line.trim()) return true;
779
+ if (isListLine(line)) return true;
780
+ return isIndentedContinuationLine(line);
781
+ }
755
782
  function makeBlock(type, startLine, endLine, text, slugger) {
756
783
  const seed = `${type}-${startLine}-${text.slice(0, 80)}`;
757
784
  return {
@@ -766,8 +793,7 @@ function makeBlock(type, startLine, endLine, text, slugger) {
766
793
  // src/core/prompt.ts
767
794
  function formatPrompt(threads) {
768
795
  return threads.map((thread) => {
769
- const line = getAnchorLine(thread);
770
- const location = line ? `${thread.filePath}:${line}` : thread.filePath;
796
+ const location = getThreadLocation(thread);
771
797
  const [firstComment, ...replies] = thread.comments;
772
798
  const replyText = replies.map((comment, index) => {
773
799
  const author = comment.author === "agent" ? "Agent" : "User";
@@ -777,9 +803,10 @@ ${comment.body.trim()}`;
777
803
  return [`[thread:${thread.id}]`, location, firstComment?.body.trim(), replyText].filter(Boolean).join("\n");
778
804
  }).join("\n\n");
779
805
  }
780
- function getAnchorLine(thread) {
781
- if (thread.anchor.type === "file") return void 0;
782
- return thread.anchor.lineNumber;
806
+ function getThreadLocation(thread) {
807
+ if (thread.anchor.type === "file") return thread.filePath;
808
+ if (thread.anchor.type === "diff-line") return `${thread.filePath}:${thread.anchor.side}:${thread.anchor.lineNumber}`;
809
+ return `${thread.filePath}:${thread.anchor.lineNumber}`;
783
810
  }
784
811
 
785
812
  // src/server/index.ts
@@ -1 +1 @@
1
- import{n as e,t}from"./path-BJQEcSo7.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-DVJJgXED.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i)if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
1
+ import{n as e,t}from"./path-BJQEcSo7.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-f1ZvJ0ZX.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i)if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};