@computesdk/loops 0.1.12 → 0.1.14

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 (69) hide show
  1. package/README.md +11 -0
  2. package/bin/pi-default-extension.mjs +47 -0
  3. package/bin/pi-rpc.mjs +14 -0
  4. package/dist/assets/{abnfDiagram-VCTEODGH-D2bigoxc.js → abnfDiagram-VCTEODGH-qdPdc5cJ.js} +1 -1
  5. package/dist/assets/{arc-BZl7sgf7.js → arc-B5s27enr.js} +1 -1
  6. package/dist/assets/{architectureDiagram-5GKGNRK7-BEVh04as.js → architectureDiagram-5GKGNRK7-p1NVRrt0.js} +1 -1
  7. package/dist/assets/{blockDiagram-I7D4REHJ-BXHXs9X2.js → blockDiagram-I7D4REHJ-BZqHVOpZ.js} +1 -1
  8. package/dist/assets/{c4Diagram-7LVT6UL2-BDJNDCcc.js → c4Diagram-7LVT6UL2-mLDUouj9.js} +1 -1
  9. package/dist/assets/channel-BGUNLmZt.js +1 -0
  10. package/dist/assets/{chunk-2Q5K7J3B-BdUkLQYN.js → chunk-2Q5K7J3B-DTS6gxv4.js} +1 -1
  11. package/dist/assets/{chunk-5VM5RSS4-3N4vBacE.js → chunk-5VM5RSS4-MMDSgds0.js} +1 -1
  12. package/dist/assets/{chunk-F27PBJKO-ByjH2OJK.js → chunk-F27PBJKO-DqVc9l1w.js} +1 -1
  13. package/dist/assets/{chunk-IMKFNOWR-D8jAt4ka.js → chunk-IMKFNOWR-Cbfv3aoe.js} +1 -1
  14. package/dist/assets/{chunk-JWPE2WC7-B7DWQYA4.js → chunk-JWPE2WC7-DtWPMgun.js} +1 -1
  15. package/dist/assets/{chunk-POPQ4Y6H-D5nv_lqi.js → chunk-POPQ4Y6H-irFcqhW1.js} +1 -1
  16. package/dist/assets/{chunk-SVP7TREG-CBg3GrIs.js → chunk-SVP7TREG-CWwPMoLf.js} +1 -1
  17. package/dist/assets/{chunk-TICWLB2K-BL_wE86-.js → chunk-TICWLB2K-DqXSfE-s.js} +1 -1
  18. package/dist/assets/{chunk-XXDRQBXY-ipZwP-Tw.js → chunk-XXDRQBXY-Dm7Kp9k-.js} +1 -1
  19. package/dist/assets/classDiagram-ZZMXUADV-CCqHF3n0.js +1 -0
  20. package/dist/assets/classDiagram-v2-VYDZK3BY-CCqHF3n0.js +1 -0
  21. package/dist/assets/{cose-bilkent-JH36ORCC-tIdDJe7h.js → cose-bilkent-JH36ORCC-CuFYPMp8.js} +1 -1
  22. package/dist/assets/{cynefin-OW5HDTMX-C5BZ6yCh.js → cynefin-OW5HDTMX-CioEu6eR.js} +1 -1
  23. package/dist/assets/{cynefinDiagram-5FMLGOSQ-KZkQ_Fs5.js → cynefinDiagram-5FMLGOSQ-Cuesqxrs.js} +1 -1
  24. package/dist/assets/{dagre-GXQ25YYZ-8g1xXz_z.js → dagre-GXQ25YYZ-B5iXLlFl.js} +1 -1
  25. package/dist/assets/{diagram-S7CK7UJ4-Civ7O2b1.js → diagram-S7CK7UJ4-DcyUnvBU.js} +1 -1
  26. package/dist/assets/{diagram-UQ7AKVKN-CsiklyIt.js → diagram-UQ7AKVKN-BtMcIPZa.js} +1 -1
  27. package/dist/assets/{diagram-VSXAHHWV-eXAMoOzJ.js → diagram-VSXAHHWV-wDxuhJ7h.js} +1 -1
  28. package/dist/assets/{diagram-VX7I27RA-Bb913WNj.js → diagram-VX7I27RA-w4ic2Szq.js} +1 -1
  29. package/dist/assets/{diagram-Z3DM3KII-CiGD7-UB.js → diagram-Z3DM3KII-DsC9H7Xp.js} +1 -1
  30. package/dist/assets/{ebnfDiagram-PWID7BFC-DFPxxkTf.js → ebnfDiagram-PWID7BFC-DSEj9Oii.js} +1 -1
  31. package/dist/assets/{erDiagram-RLTQ6QDP-DkPhQteJ.js → erDiagram-RLTQ6QDP-C5Mm3sKV.js} +1 -1
  32. package/dist/assets/{flowDiagram-HODETNUW-B8DTvq1w.js → flowDiagram-HODETNUW-B6g_b-Eh.js} +1 -1
  33. package/dist/assets/{ganttDiagram-EL5Y4UJY-DPfnHIkg.js → ganttDiagram-EL5Y4UJY-DbuvbyqO.js} +1 -1
  34. package/dist/assets/{gitGraphDiagram-WWUBYQGX-BzYuJVan.js → gitGraphDiagram-WWUBYQGX-D1blFMM4.js} +1 -1
  35. package/dist/assets/{highlighted-body-JLMTFACH-D3y_nfFu.js → highlighted-body-JLMTFACH-BMLeaV-C.js} +1 -1
  36. package/dist/assets/index-DEUIefd3.css +1 -0
  37. package/dist/assets/{index-DvyWv1zp.js → index-MkCYb0h5.js} +181 -181
  38. package/dist/assets/{infoDiagram-27XIBGKW-BCF2o-MF.js → infoDiagram-27XIBGKW-jvcFDFAg.js} +1 -1
  39. package/dist/assets/{ishikawaDiagram-5VMMS53U-CNe6ETgR.js → ishikawaDiagram-5VMMS53U-DSNUbD_2.js} +1 -1
  40. package/dist/assets/{journeyDiagram-3NMN7TZE-BVF1wnNZ.js → journeyDiagram-3NMN7TZE-DV3Zzw_m.js} +1 -1
  41. package/dist/assets/{kanban-definition-UXKFOSKX-CiWrBpoV.js → kanban-definition-UXKFOSKX-BneSvgwW.js} +1 -1
  42. package/dist/assets/{layout-B2YGfZNT.js → layout-BrHYeI6l.js} +1 -1
  43. package/dist/assets/{linear-CecQQcNl.js → linear-2IWRGtG6.js} +1 -1
  44. package/dist/assets/{mindmap-definition-YA3MSWOX-CTRfx8rM.js → mindmap-definition-YA3MSWOX-DC2sSkZy.js} +1 -1
  45. package/dist/assets/{pegDiagram-XKGWAZYB-BW5JUykP.js → pegDiagram-XKGWAZYB-B-92vl2f.js} +1 -1
  46. package/dist/assets/{pieDiagram-E7YTZNPT-rtJftIcC.js → pieDiagram-E7YTZNPT-DC5laTpV.js} +1 -1
  47. package/dist/assets/{quadrantDiagram-AXDQQJYC-C2DaPj2w.js → quadrantDiagram-AXDQQJYC-BlOhRjzp.js} +1 -1
  48. package/dist/assets/{railroadDiagram-O6MQD6OU-CcPfXEFl.js → railroadDiagram-O6MQD6OU-CYoEL1OC.js} +1 -1
  49. package/dist/assets/{requirementDiagram-BXWQKSXE-ozaClcIW.js → requirementDiagram-BXWQKSXE-ChXeJnr7.js} +1 -1
  50. package/dist/assets/{sankeyDiagram-P5KCCOFB-74tHF7mP.js → sankeyDiagram-P5KCCOFB-BrGNKe_z.js} +1 -1
  51. package/dist/assets/{sequenceDiagram-WJ2MYXX4-CTexKnGo.js → sequenceDiagram-WJ2MYXX4-DNBebA9n.js} +1 -1
  52. package/dist/assets/{sizeCapture-INFHLROL-2kVX0pT9.js → sizeCapture-INFHLROL-CRCJmnlW.js} +1 -1
  53. package/dist/assets/{stateDiagram-D77RDMKH-CgAkifQk.js → stateDiagram-D77RDMKH-Do1usTgC.js} +1 -1
  54. package/dist/assets/stateDiagram-v2-MP3YSRHH-BIB0ws_U.js +1 -0
  55. package/dist/assets/{swimlanes-42K2YHIH-B-p2fQK8.js → swimlanes-42K2YHIH-q_5ZYmG4.js} +1 -1
  56. package/dist/assets/swimlanesDiagram-VR7AAH4N-kNJoaINN.js +8 -0
  57. package/dist/assets/{timeline-definition-24CTP7MA-DhfUmVud.js → timeline-definition-24CTP7MA-BhSAG5n0.js} +1 -1
  58. package/dist/assets/{vennDiagram-4TSXK5OY-ubMqyg9F.js → vennDiagram-4TSXK5OY-ObiSo0PY.js} +1 -1
  59. package/dist/assets/{wardleyDiagram-VM6X3IG4-DGDiyaT7.js → wardleyDiagram-VM6X3IG4-Dvtkfbej.js} +1 -1
  60. package/dist/assets/{xychartDiagram-S5SC5T6Z-Cj_dbVk_.js → xychartDiagram-S5SC5T6Z-G2W2bVrv.js} +1 -1
  61. package/dist/index.html +2 -2
  62. package/dist/server.mjs +47 -2
  63. package/package.json +3 -3
  64. package/dist/assets/channel-C47Lbhx6.js +0 -1
  65. package/dist/assets/classDiagram-ZZMXUADV-BkejU3Ym.js +0 -1
  66. package/dist/assets/classDiagram-v2-VYDZK3BY-BkejU3Ym.js +0 -1
  67. package/dist/assets/index-vH6Ei526.css +0 -1
  68. package/dist/assets/stateDiagram-v2-MP3YSRHH-CH_iWHXT.js +0 -1
  69. package/dist/assets/swimlanesDiagram-VR7AAH4N-BVcRccxJ.js +0 -8
package/README.md CHANGED
@@ -74,6 +74,12 @@ their former key-only panel now opens the shared provider dialog.
74
74
  | the brief / approve card | the extension's `ctx.ui.select`, as an `extension_ui_request` |
75
75
  | diffs, screenshots, sheets | read-only routes over the run's worktrees and archived shots under `.pi/loops/` |
76
76
 
77
+ Visual previews wait for actual screenshot files rather than treating configured output paths as images.
78
+ Unavailable or failed images show an explicit state and Retry; retrying an image does not rerun the loop.
79
+ Attempt details show archived captures without requiring a live server or applying the candidate.
80
+ Use the capture selector for the actual desktop/mobile screenshots, and Open screenshot to inspect full size.
81
+ Live pages use a sandboxed iframe only when a real live URL exists.
82
+
77
83
  Outcome questions belong to their exact run and round. Later execution can supersede them (including a recorded
78
84
  same-round retry); expired/superseded cards leave Needs you but remain in the conversation with their reason.
79
85
  This is derived from Pi's entries, including existing histories, never a manufactured human answer. Generic asks
@@ -195,6 +201,11 @@ The default runner uses Pi 1.4.0's own CLI with a narrow, in-memory compatibilit
195
201
  before awaiting startup extensions, handle their answers immediately, and hold ordinary commands until setup finishes.
196
202
  It verifies the pinned version and exact upstream source before applying the fix; no global Pi files are modified.
197
203
  Pi still owns the session, extensions, model configuration, and all decisions.
204
+
205
+ The bundled Loops extension is a fallback: if Pi's enabled, trusted packages already supply
206
+ `@computesdk/pi-loops`, the default runner uses that installation instead of loading a second copy.
207
+ Other extensions remain enabled, and genuine conflicts still fail. This selection is also SHA-pinned
208
+ to Pi 1.4.0's resource loader; explicit `--extensions` or `--pi` retain normal Pi loading semantics.
198
209
  Failed answer submissions remain visible with a retryable error; Loops never accepts or declines an integration for you.
199
210
  An explicit `--pi` bypasses this compatibility runner, so that executable must support startup dialogs itself.
200
211
 
@@ -0,0 +1,47 @@
1
+ // The UI supplies Loops only as a fallback. Let Pi's own enabled-resource and
2
+ // trust resolution choose a workspace/user installation before loading code.
3
+ import { createHash } from 'node:crypto';
4
+ import { readFileSync, realpathSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+
7
+ const expected = 'ad50235884ea6d5ee14cdae1efcfe6afef58b22b18ce574e81886d57ca9f4642';
8
+ const canonical = (path) => {
9
+ try { return realpathSync(path); } catch { return path; }
10
+ };
11
+
12
+ export function filterDefaultLoopsExtension(paths, metadataByPath, fallback, bootstrap = false) {
13
+ const fallbackPath = canonical(fallback);
14
+ // The app's fallback is not a trust provider. Defer it until Pi has made its
15
+ // trust decision, otherwise its factory can run before a project copy wins.
16
+ if (bootstrap) return paths.filter((path) => canonical(path) !== fallbackPath);
17
+ const hasInstalledLoops = paths.some((path) => {
18
+ if (canonical(path) === fallbackPath) return false;
19
+ // Do not infer identity from a filename, tool name, or package source string.
20
+ // Only roots already discovered by Pi as a package are eligible.
21
+ const root = metadataByPath.get(path)?.packageRoot;
22
+ if (!root) return false;
23
+ try {
24
+ return JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')).name === '@computesdk/pi-loops';
25
+ } catch { return false; }
26
+ });
27
+ return hasInstalledLoops ? paths.filter((path) => canonical(path) !== fallbackPath) : paths;
28
+ }
29
+
30
+ export function patchDefaultLoopsExtension(source, fallback) {
31
+ if (createHash('sha256').update(source).digest('hex') !== expected) {
32
+ throw new Error('Unsupported Pi resource loader source; default Loops compatibility patch requires Pi 1.4.0');
33
+ }
34
+ // extensionsOverride runs after extension execution and conflict detection.
35
+ // Filter only our implicit CLI fallback, before either operation, in both the
36
+ // untrusted bootstrap pass and the final trusted/untrusted resource pass.
37
+ const declaration = 'const extensionPaths = (this.noExtensions ? cliEnabledExtensions : this.mergePaths(cliEnabledExtensions, enabledExtensions))';
38
+ const warnings = ' const packageWarnings = collectExtensionPackageWarnings(extensionPaths, metadataByPath);';
39
+ const bootstrapMethod = ' async loadCurrentExtensionSet(options) {';
40
+ if (source.split(declaration).length !== 3 || source.split(warnings).length !== 3 || source.split(bootstrapMethod).length !== 2) {
41
+ throw new Error('Pi default Loops patch anchor mismatch');
42
+ }
43
+ source = source.replaceAll(declaration, declaration.replace('extensionPaths', 'discoveredExtensionPaths'));
44
+ source = source.split(bootstrapMethod).map((part, index) => part.replace(warnings,
45
+ ` const extensionPaths = filterDefaultLoopsExtension(discoveredExtensionPaths, metadataByPath, ${JSON.stringify(fallback)}, ${index === 1});\n${warnings}`)).join(bootstrapMethod);
46
+ return `import { filterDefaultLoopsExtension } from ${JSON.stringify(import.meta.url)};\n${source}`;
47
+ }
package/bin/pi-rpc.mjs CHANGED
@@ -5,6 +5,7 @@ import { readFileSync, realpathSync } from 'node:fs';
5
5
  import { dirname, join } from 'node:path';
6
6
  import { fileURLToPath, pathToFileURL } from 'node:url';
7
7
  import { patchRpcStartup } from './pi-rpc-startup.mjs';
8
+ import { patchDefaultLoopsExtension } from './pi-default-extension.mjs';
8
9
 
9
10
  const main = fileURLToPath(import.meta.resolve('@earendil-works/pi-coding-agent'));
10
11
  const root = dirname(dirname(main));
@@ -13,14 +14,27 @@ if (pkg.name !== '@earendil-works/pi-coding-agent' || pkg.version !== '1.4.0') {
13
14
  throw new Error('Pi RPC runner requires @earendil-works/pi-coding-agent 1.4.0');
14
15
  }
15
16
  const target = realpathSync(join(root, 'dist/modes/rpc/rpc-mode.js'));
17
+ // This private runner flag is supplied only for the app's implicit default.
18
+ // Explicit --extensions and custom Pi executables retain normal CLI semantics.
19
+ const defaultIndex = process.argv.indexOf('--loops-default-extension');
20
+ const fallback = defaultIndex < 0 ? undefined : process.argv[defaultIndex + 1];
21
+ if (defaultIndex >= 0) {
22
+ if (!fallback || fallback.startsWith('-')) throw new Error('--loops-default-extension requires a path');
23
+ process.argv.splice(defaultIndex, 2, '-e', fallback);
24
+ }
25
+ const resourceTarget = fallback ? realpathSync(join(root, 'dist/core/resource-loader.js')) : undefined;
16
26
  // Validate before the CLI starts, including when a future CLI stops loading RPC.
17
27
  patchRpcStartup(readFileSync(target, 'utf8'));
28
+ if (resourceTarget) patchDefaultLoopsExtension(readFileSync(resourceTarget, 'utf8'), fallback);
18
29
  registerHooks({
19
30
  load(url, context, nextLoad) {
20
31
  const result = nextLoad(url, context);
21
32
  if (url.startsWith('file:') && fileURLToPath(url) === target) {
22
33
  return { ...result, source: patchRpcStartup(String(result.source)) };
23
34
  }
35
+ if (resourceTarget && url.startsWith('file:') && fileURLToPath(url) === resourceTarget) {
36
+ return { ...result, source: patchDefaultLoopsExtension(String(result.source), fallback) };
37
+ }
24
38
  return result;
25
39
  },
26
40
  });
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-SVP7TREG-CBg3GrIs.js";import{p as f}from"./chunk-JWPE2WC7-B7DWQYA4.js";import{_ as n,l as o}from"./index-DvyWv1zp.js";import{M as c,b as d}from"./cynefin-OW5HDTMX-C5BZ6yCh.js";var v=d().RailroadAbnf.parser.LangiumParser,l=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),i=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:i,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return l(e.element);case"AbnfOptionalGroup":return{type:"optional",element:l(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:l(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},w={parser:R,db:a,renderer:u,styles:p};export{w as diagram};
1
+ import{g as p,r as u,d as a}from"./chunk-SVP7TREG-CWwPMoLf.js";import{p as f}from"./chunk-JWPE2WC7-DtWPMgun.js";import{_ as n,l as o}from"./index-MkCYb0h5.js";import{M as c,b as d}from"./cynefin-OW5HDTMX-CioEu6eR.js";var v=d().RailroadAbnf.parser.LangiumParser,l=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),i=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:i,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return l(e.element);case"AbnfOptionalGroup":return{type:"optional",element:l(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:l(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},w={parser:R,db:a,renderer:u,styles:p};export{w as diagram};
@@ -1 +1 @@
1
- import{K as ln,L as an,M as y,N as tn,O as X,P as O,Q as _,S as un,T as rn,V as $,X as o,Y as M,Z as sn,$ as on,a0 as fn}from"./index-DvyWv1zp.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,D,S,v,A,N,a){var E=D-l,i=S-h,n=N-v,d=a-A,u=d*E-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*E,h+u*i]}function G(l,h,D,S,v,A,N){var a=l-D,E=h-S,i=(N?A:-A)/$(a*a+E*E),n=i*E,d=-i*a,u=l+n,s=h+d,f=D+n,c=S+d,Q=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,I=(g<0?-1:1)*$(fn(0,T*T*R-P*P)),K=(P*g-m*I)/R,L=(-P*m-g*I)/R,w=(P*g+m*I)/R,p=(-P*m+g*I)/R,x=K-Q,e=L-t,r=w-Q,V=p-t;return x*x+e*e>r*r+V*V&&(K=w,L=p),{cx:K,cy:L,x01:-n,y01:-d,x11:K*(v/T-1),y11:L*(v/T-1)}}function hn(){var l=cn,h=yn,D=M(0),S=null,v=gn,A=dn,N=mn,a=null,E=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,Q=un(c-f),t=c>f;if(a||(a=n=E()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(Q>tn-y)a.moveTo(s*X(f),s*O(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*X(c),u*O(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=Q,I=Q,K=N.apply(this,arguments)/2,L=K>y&&(S?+S.apply(this,arguments):$(u*u+s*s)),w=_(un(s-u)/2,+D.apply(this,arguments)),p=w,x=w,e,r;if(L>y){var V=sn(L/u*O(K)),j=sn(L/s*O(K));(P-=V*2)>y?(V*=t?1:-1,R+=V,T-=V):(P=0,R=T=(f+c)/2),(I-=j*2)>y?(j*=t?1:-1,m+=j,g-=j):(I=0,m=g=(f+c)/2)}var Y=s*X(m),Z=s*O(m),z=u*X(T),B=u*O(T);if(w>y){var C=s*X(g),F=s*O(g),H=u*X(R),J=u*O(R),q;if(Q<rn)if(q=pn(Y,Z,H,J,C,F,z,B)){var U=Y-q[0],W=Z-q[1],k=C-q[0],b=F-q[1],nn=1/O(on((U*k+W*b)/($(U*U+W*W)*$(k*k+b*b)))/2),en=$(q[0]*q[0]+q[1]*q[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}I>y?x>y?(e=G(H,J,Y,Z,s,x,t),r=G(C,F,z,B,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(Y,Z),a.arc(0,0,s,m,g,!t)):a.moveTo(Y,Z),!(u>y)||!(P>y)?a.lineTo(z,B):p>y?(e=G(z,B,C,F,u,-p,t),r=G(Y,Z,H,J,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[X(d)*n,O(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:M(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:M(+n),i):h},i.cornerRadius=function(n){return arguments.length?(D=typeof n=="function"?n:M(+n),i):D},i.padRadius=function(n){return arguments.length?(S=n==null?null:typeof n=="function"?n:M(+n),i):S},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:M(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:M(+n),i):A},i.padAngle=function(n){return arguments.length?(N=typeof n=="function"?n:M(+n),i):N},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{K as ln,L as an,M as y,N as tn,O as X,P as O,Q as _,S as un,T as rn,V as $,X as o,Y as M,Z as sn,$ as on,a0 as fn}from"./index-MkCYb0h5.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,D,S,v,A,N,a){var E=D-l,i=S-h,n=N-v,d=a-A,u=d*E-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*E,h+u*i]}function G(l,h,D,S,v,A,N){var a=l-D,E=h-S,i=(N?A:-A)/$(a*a+E*E),n=i*E,d=-i*a,u=l+n,s=h+d,f=D+n,c=S+d,Q=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,I=(g<0?-1:1)*$(fn(0,T*T*R-P*P)),K=(P*g-m*I)/R,L=(-P*m-g*I)/R,w=(P*g+m*I)/R,p=(-P*m+g*I)/R,x=K-Q,e=L-t,r=w-Q,V=p-t;return x*x+e*e>r*r+V*V&&(K=w,L=p),{cx:K,cy:L,x01:-n,y01:-d,x11:K*(v/T-1),y11:L*(v/T-1)}}function hn(){var l=cn,h=yn,D=M(0),S=null,v=gn,A=dn,N=mn,a=null,E=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,Q=un(c-f),t=c>f;if(a||(a=n=E()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(Q>tn-y)a.moveTo(s*X(f),s*O(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*X(c),u*O(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=Q,I=Q,K=N.apply(this,arguments)/2,L=K>y&&(S?+S.apply(this,arguments):$(u*u+s*s)),w=_(un(s-u)/2,+D.apply(this,arguments)),p=w,x=w,e,r;if(L>y){var V=sn(L/u*O(K)),j=sn(L/s*O(K));(P-=V*2)>y?(V*=t?1:-1,R+=V,T-=V):(P=0,R=T=(f+c)/2),(I-=j*2)>y?(j*=t?1:-1,m+=j,g-=j):(I=0,m=g=(f+c)/2)}var Y=s*X(m),Z=s*O(m),z=u*X(T),B=u*O(T);if(w>y){var C=s*X(g),F=s*O(g),H=u*X(R),J=u*O(R),q;if(Q<rn)if(q=pn(Y,Z,H,J,C,F,z,B)){var U=Y-q[0],W=Z-q[1],k=C-q[0],b=F-q[1],nn=1/O(on((U*k+W*b)/($(U*U+W*W)*$(k*k+b*b)))/2),en=$(q[0]*q[0]+q[1]*q[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}I>y?x>y?(e=G(H,J,Y,Z,s,x,t),r=G(C,F,z,B,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(Y,Z),a.arc(0,0,s,m,g,!t)):a.moveTo(Y,Z),!(u>y)||!(P>y)?a.lineTo(z,B):p>y?(e=G(z,B,C,F,u,-p,t),r=G(Y,Z,H,J,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[X(d)*n,O(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:M(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:M(+n),i):h},i.cornerRadius=function(n){return arguments.length?(D=typeof n=="function"?n:M(+n),i):D},i.padRadius=function(n){return arguments.length?(S=n==null?null:typeof n=="function"?n:M(+n),i):S},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:M(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:M(+n),i):A},i.padAngle=function(n){return arguments.length?(N=typeof n=="function"?n:M(+n),i):N},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};