@hachej/boring-ui-cli 0.1.30 → 0.1.32

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 (92) hide show
  1. package/README.md +7 -4
  2. package/dist/server/cli.js +35 -233
  3. package/dist/server/pluginFrontRuntime.js +183 -23
  4. package/package.json +7 -6
  5. package/public/assets/DebugDrawer-DB9C3tZz.js +1 -0
  6. package/public/assets/{_baseUniq-2WvYsyyQ.js → _baseUniq-BHrtLO8W.js} +1 -1
  7. package/public/assets/{arc-BfQMEcaD.js → arc-BTJHwuiF.js} +1 -1
  8. package/public/assets/architectureDiagram-Q4EWVU46-CJMeSZx6.js +36 -0
  9. package/public/assets/{blockDiagram-DXYQGD6D-BwO0KFc4.js → blockDiagram-DXYQGD6D-D_iRmbs0.js} +5 -5
  10. package/public/assets/{c4Diagram-AHTNJAMY-3ZfOXc8v.js → c4Diagram-AHTNJAMY-DqJK-oCk.js} +1 -1
  11. package/public/assets/channel-t1oMFJWT.js +1 -0
  12. package/public/assets/{chunk-4BX2VUAB-CRl1YiJJ.js → chunk-4BX2VUAB-DBqhw0eR.js} +1 -1
  13. package/public/assets/{chunk-4TB4RGXK-DrpTwphl.js → chunk-4TB4RGXK-BEbQ9ff5.js} +2 -2
  14. package/public/assets/chunk-55IACEB6-sdAV4otZ.js +1 -0
  15. package/public/assets/{chunk-EDXVE4YY-BC7-AFdu.js → chunk-EDXVE4YY-BGeNOj7f.js} +1 -1
  16. package/public/assets/{chunk-FMBD7UC4-DsK26d_T.js → chunk-FMBD7UC4-DwD_gBy0.js} +1 -1
  17. package/public/assets/{chunk-OYMX7WX6-BeikaWZm.js → chunk-OYMX7WX6-CjMCkDF3.js} +1 -1
  18. package/public/assets/{chunk-QZHKN3VN-BwxHokKH.js → chunk-QZHKN3VN-Cot2XaAR.js} +1 -1
  19. package/public/assets/{chunk-YZCP3GAM-BbZ8wRWB.js → chunk-YZCP3GAM-CGX-4Jvn.js} +1 -1
  20. package/public/assets/classDiagram-6PBFFD2Q-BgSBQBOf.js +1 -0
  21. package/public/assets/classDiagram-v2-HSJHXN6E-BgSBQBOf.js +1 -0
  22. package/public/assets/clone-BBHYjbBI.js +1 -0
  23. package/public/assets/{cose-bilkent-S5V4N54A-C3HWuNVz.js → cose-bilkent-S5V4N54A-CDntEO8X.js} +1 -1
  24. package/public/assets/{dagre-KV5264BT-DOVky5l9.js → dagre-KV5264BT-ZOVUZI--.js} +2 -2
  25. package/public/assets/diagram-5BDNPKRD-LdjTY2br.js +10 -0
  26. package/public/assets/diagram-G4DWMVQ6-BWxGregh.js +24 -0
  27. package/public/assets/diagram-MMDJMWI5-CxtOYZMd.js +43 -0
  28. package/public/assets/diagram-TYMM5635-ChD56z2q.js +24 -0
  29. package/public/assets/{erDiagram-SMLLAGMA-wZ_XblND.js → erDiagram-SMLLAGMA-B8zSJysM.js} +2 -2
  30. package/public/assets/{flowDiagram-DWJPFMVM-of3iiuJI.js → flowDiagram-DWJPFMVM-Dqqy7UJT.js} +1 -1
  31. package/public/assets/{ganttDiagram-T4ZO3ILL-CiIxc0v4.js → ganttDiagram-T4ZO3ILL-Dn_EJlMH.js} +1 -1
  32. package/public/assets/gitGraphDiagram-UUTBAWPF-BVuaJiec.js +106 -0
  33. package/public/assets/{graph-CandW0gD.js → graph-Dj5mmSf2.js} +1 -1
  34. package/public/assets/highlighted-body-OFNGDK62-Cn9lWz0x.js +1 -0
  35. package/public/assets/index-Ciaf_ynY.css +1 -0
  36. package/public/assets/{index-CtdAhKdF.js → index-CrmEpxcy.js} +423 -398
  37. package/public/assets/{infoDiagram-42DDH7IO-B4MJKAr8.js → infoDiagram-42DDH7IO-DawFXMLo.js} +1 -1
  38. package/public/assets/{ishikawaDiagram-UXIWVN3A-Bl2J6bvs.js → ishikawaDiagram-UXIWVN3A-DBxt-riO.js} +4 -4
  39. package/public/assets/{journeyDiagram-VCZTEJTY-JYysqMwv.js → journeyDiagram-VCZTEJTY-D50mNLlL.js} +4 -4
  40. package/public/assets/{kanban-definition-6JOO6SKY-B0wB13fQ.js → kanban-definition-6JOO6SKY-CFBUjJCs.js} +6 -6
  41. package/public/assets/{layout-DYl8UnAo.js → layout-DEdejLi9.js} +1 -1
  42. package/public/assets/{linear-Dj3asvOm.js → linear-BXKtVmEh.js} +1 -1
  43. package/public/assets/{min-Cbw7dpzS.js → min-DY1T79Si.js} +1 -1
  44. package/public/assets/{mindmap-definition-QFDTVHPH-DLl-2gHB.js → mindmap-definition-QFDTVHPH-DbCBDJgc.js} +9 -9
  45. package/public/assets/pieDiagram-DEJITSTG-DYgefMzu.js +30 -0
  46. package/public/assets/{quadrantDiagram-34T5L4WZ-CqkG9t9_.js → quadrantDiagram-34T5L4WZ-552sDLt-.js} +2 -2
  47. package/public/assets/{requirementDiagram-MS252O5E-D_SkRDmv.js → requirementDiagram-MS252O5E-DNzvM72W.js} +1 -1
  48. package/public/assets/{sankeyDiagram-XADWPNL6-BoQxjHkJ.js → sankeyDiagram-XADWPNL6-DKy6TNHm.js} +6 -6
  49. package/public/assets/{sequenceDiagram-FGHM5R23-BDGOIizo.js → sequenceDiagram-FGHM5R23-BQCY2Zf9.js} +5 -5
  50. package/public/assets/{stateDiagram-FHFEXIEX-SYaFpYZC.js → stateDiagram-FHFEXIEX-D7T4Km3f.js} +1 -1
  51. package/public/assets/stateDiagram-v2-QKLJ7IA2-CYjKpaa0.js +1 -0
  52. package/public/assets/{timeline-definition-GMOUNBTQ-DKLze3x4.js → timeline-definition-GMOUNBTQ-CqlaVFMe.js} +8 -8
  53. package/public/assets/{vennDiagram-DHZGUBPP-SSE-F6n3.js → vennDiagram-DHZGUBPP-D4C7VzEp.js} +5 -5
  54. package/public/assets/{wardley-RL74JXVD-S0ICuT1a.js → wardley-RL74JXVD-BYxilceB.js} +1 -1
  55. package/public/assets/{wardleyDiagram-NUSXRM2D-DMA7ZjAO.js → wardleyDiagram-NUSXRM2D-B5Zztop3.js} +2 -2
  56. package/public/assets/{xychartDiagram-5P7HB3ND-CZZ9juBQ.js → xychartDiagram-5P7HB3ND-CAK4X6lJ.js} +4 -4
  57. package/public/index.html +2 -2
  58. package/dist/server/scaffoldPlugin.js +0 -72
  59. package/dist/server/verifyPlugin.js +0 -235
  60. package/public/assets/DebugDrawer-C-v1B1vW.js +0 -1
  61. package/public/assets/architectureDiagram-Q4EWVU46-Bj_s6upX.js +0 -36
  62. package/public/assets/channel-DLeWkql2.js +0 -1
  63. package/public/assets/chunk-55IACEB6-D5vTVeAc.js +0 -1
  64. package/public/assets/classDiagram-6PBFFD2Q-CVe-3aSj.js +0 -1
  65. package/public/assets/classDiagram-v2-HSJHXN6E-CVe-3aSj.js +0 -1
  66. package/public/assets/clone-Dkncs6zh.js +0 -1
  67. package/public/assets/diagram-5BDNPKRD-DnAM93VO.js +0 -10
  68. package/public/assets/diagram-G4DWMVQ6-CcYjwbKm.js +0 -24
  69. package/public/assets/diagram-MMDJMWI5-B6xlqXbp.js +0 -43
  70. package/public/assets/diagram-TYMM5635-B9ak5QMP.js +0 -24
  71. package/public/assets/gitGraphDiagram-UUTBAWPF-IAJs2Nmr.js +0 -106
  72. package/public/assets/highlighted-body-OFNGDK62-DAnjqfIm.js +0 -1
  73. package/public/assets/index-iIIavXI3.css +0 -1
  74. package/public/assets/pieDiagram-DEJITSTG-CMC6SqWn.js +0 -30
  75. package/public/assets/stateDiagram-v2-QKLJ7IA2-BmucXGxE.js +0 -1
  76. package/templates/front-canonical.tsx +0 -64
  77. package/templates/package-canonical.json +0 -19
  78. package/templates/plugin/README.md +0 -64
  79. package/templates/plugin/package.json +0 -67
  80. package/templates/plugin/src/front/__tests__/samplePlugin.test.ts +0 -53
  81. package/templates/plugin/src/front/index.ts +0 -45
  82. package/templates/plugin/src/front/panels.tsx +0 -8
  83. package/templates/plugin/src/front/surfaceResolver.ts +0 -19
  84. package/templates/plugin/src/server/index.ts +0 -29
  85. package/templates/plugin/src/shared/constants.ts +0 -2
  86. package/templates/plugin/src/shared/index.ts +0 -2
  87. package/templates/plugin/src/shared/types.ts +0 -3
  88. package/templates/plugin/src/test-setup.ts +0 -43
  89. package/templates/plugin/tsconfig.json +0 -23
  90. package/templates/plugin/tsup.config.ts +0 -21
  91. package/templates/plugin/vitest.config.ts +0 -20
  92. package/templates/server-canonical.ts +0 -42
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { builtinModules } from "node:module";
2
+ import { builtinModules, createRequire } from "node:module";
3
3
  import { existsSync, lstatSync, readdirSync, readFileSync, statSync } from "node:fs";
4
4
  import { readFile, realpath, stat } from "node:fs/promises";
5
5
  import { dirname, extname, isAbsolute, posix, relative, resolve as resolvePath } from "node:path";
@@ -9,7 +9,7 @@ import { ErrorCode } from "@hachej/boring-agent/shared";
9
9
  import ts from "typescript";
10
10
  import { createServer } from "vite";
11
11
  const PLUGIN_FRONT_RUNTIME_BASE_PATH = "/api/v1/agent-plugins/runtime";
12
- const HOST_SINGLETON_MODULES = [
12
+ const HOST_VIRTUAL_SINGLETON_MODULES = [
13
13
  "react",
14
14
  "react-dom",
15
15
  "react-dom/client",
@@ -19,6 +19,21 @@ const HOST_SINGLETON_MODULES = [
19
19
  "@hachej/boring-workspace/plugin",
20
20
  "@hachej/boring-workspace/events"
21
21
  ];
22
+ const HOST_SINGLETON_MODULES = HOST_VIRTUAL_SINGLETON_MODULES;
23
+ const HOST_PROVIDED_MODULES = [
24
+ ...HOST_SINGLETON_MODULES,
25
+ // Host-provided design-system package. It is resolved via the host Vite
26
+ // alias/dedupe path instead of plugin-local node_modules, but it is not a
27
+ // virtual global singleton because it has many component exports and no
28
+ // React identity/state boundary like React/workspace do.
29
+ "@hachej/boring-ui-kit"
30
+ ];
31
+ function isHostVirtualSingletonModule(source) {
32
+ return HOST_VIRTUAL_SINGLETON_MODULES.includes(source);
33
+ }
34
+ function isHostProvidedModule(source) {
35
+ return HOST_PROVIDED_MODULES.includes(source);
36
+ }
22
37
  const DEFAULT_MAX_TRANSFORM_CONCURRENCY = 8;
23
38
  const RUNTIME_PREFIX = "[plugin-front-runtime]";
24
39
  const NODE_BUILTIN_MODULES = new Set(builtinModules.flatMap((name) => [name, `node:${name}`]));
@@ -47,6 +62,7 @@ const DIRECTORY_INDEX_CANDIDATES = [
47
62
  ];
48
63
  const SAFE_SEGMENT_RE = /^[A-Za-z0-9_][A-Za-z0-9._:-]*$/;
49
64
  const RUNTIME_SINGLETON_ID_PREFIX = "\0boring-runtime-singleton:";
65
+ const PLUGIN_DEPENDENCY_ID_PREFIX = "\0boring-plugin-dependency:";
50
66
  const RUNTIME_SINGLETON_GLOBAL = "__BORING_RUNTIME_SINGLETONS__";
51
67
  const WORKSPACE_ROOT_SINGLETON_EXPORTS = [
52
68
  "bootstrap",
@@ -67,6 +83,7 @@ const WORKSPACE_ROOT_SINGLETON_EXPORTS = [
67
83
  "useApiBaseUrl",
68
84
  "useHasWorkspaceFilesProvider",
69
85
  "useWorkspaceRequestId",
86
+ "readFileRecords",
70
87
  "filesystemEvents",
71
88
  "cn",
72
89
  "PanelRegistry",
@@ -121,6 +138,9 @@ const WORKSPACE_ROOT_SINGLETON_EXPORTS = [
121
138
  "createBridgeClient",
122
139
  "postUiCommand",
123
140
  "UI_COMMAND_EVENT",
141
+ "WorkspaceLink",
142
+ "workspaceLinkCommand",
143
+ "workspaceLinkHref",
124
144
  "openFileSchema",
125
145
  "openPanelSchema",
126
146
  "closePanelSchema",
@@ -407,6 +427,16 @@ function rewriteViteSupportSpecifier(specifier, basePath) {
407
427
  const singletonSource = optimizedDependencySingletonSource(specifier);
408
428
  return singletonSource ? buildViteSingletonUrl(basePath, singletonSource) : buildViteProxyUrl(basePath, specifier);
409
429
  }
430
+ function assertNoUnsafeFsSupportReference(code, context) {
431
+ if (!code.includes("/@fs/")) return;
432
+ throw new PluginFrontRuntimeError(
433
+ ErrorCode.enum.PLUGIN_RUNTIME_UNSAFE_IMPORT,
434
+ 400,
435
+ "transform",
436
+ "plugin runtime transform produced an unsafe Vite /@fs reference",
437
+ context
438
+ );
439
+ }
410
440
  function rewriteViteSupportUrls(code, basePath) {
411
441
  const sourceFile = ts.createSourceFile("runtime-plugin-output.js", code, ts.ScriptTarget.Latest, true, ts.ScriptKind.JS);
412
442
  const replacements = [];
@@ -589,6 +619,89 @@ async function resolveImportSubpath(record, importerPath, source) {
589
619
  source
590
620
  });
591
621
  }
622
+ function packageNameFromBareSpecifier(source) {
623
+ const parts = source.split("/");
624
+ return source.startsWith("@") && parts.length >= 2 ? `${parts[0]}/${parts[1]}` : parts[0];
625
+ }
626
+ function pluginDependencyVirtualId(record, resolvedPath) {
627
+ return `${PLUGIN_DEPENDENCY_ID_PREFIX}${encodeURIComponent(record.workspaceId)}:${encodeURIComponent(record.pluginId)}:${record.revision}:${encodeURIComponent(resolvedPath)}`;
628
+ }
629
+ function parsePluginDependencyVirtualId(id) {
630
+ const raw = id.startsWith(PLUGIN_DEPENDENCY_ID_PREFIX) ? id.slice(PLUGIN_DEPENDENCY_ID_PREFIX.length) : null;
631
+ if (!raw) return null;
632
+ const parts = raw.split(":");
633
+ if (parts.length < 4) return null;
634
+ const [workspaceIdRaw, pluginIdRaw, revisionRaw, ...pathParts] = parts;
635
+ const revision = Number(revisionRaw);
636
+ if (!Number.isInteger(revision) || revision < 1) return null;
637
+ return {
638
+ workspaceId: decodeURIComponent(workspaceIdRaw),
639
+ pluginId: decodeURIComponent(pluginIdRaw),
640
+ revision,
641
+ resolvedPath: decodeURIComponent(pathParts.join(":"))
642
+ };
643
+ }
644
+ async function ensurePluginDependencyPath(record, source, importer, resolvedPath) {
645
+ const nodeModulesDir = resolvePath(record.rootDir, "node_modules");
646
+ if (!existsSync(nodeModulesDir)) {
647
+ throw new PluginFrontRuntimeError(
648
+ ErrorCode.enum.PATH_NOT_FOUND,
649
+ 404,
650
+ "resolve",
651
+ "runtime plugin dependency is not installed; run npm install in the plugin directory",
652
+ { source, importer, pluginRoot: record.rootDir }
653
+ );
654
+ }
655
+ const nodeModulesReal = await resolveRealLike(nodeModulesDir);
656
+ const resolvedReal = await resolveRealLike(resolvedPath);
657
+ if (!isWithin(nodeModulesReal, resolvedReal)) {
658
+ throw new PluginFrontRuntimeError(
659
+ ErrorCode.enum.PLUGIN_RUNTIME_UNSAFE_IMPORT,
660
+ 400,
661
+ "resolve",
662
+ "runtime plugin dependency resolved outside the plugin-local node_modules directory",
663
+ { source, importer, resolvedPath, pluginNodeModules: nodeModulesDir }
664
+ );
665
+ }
666
+ return resolvedReal;
667
+ }
668
+ async function resolvePluginLocalBareImport(record, source, importer, importerFile = resolvePath(record.rootDir, "package.json")) {
669
+ let resolvedPath;
670
+ try {
671
+ resolvedPath = createRequire(importerFile).resolve(source);
672
+ } catch (error) {
673
+ const message = error instanceof Error ? error.message : String(error);
674
+ throw new PluginFrontRuntimeError(
675
+ ErrorCode.enum.PATH_NOT_FOUND,
676
+ 404,
677
+ "resolve",
678
+ "runtime plugin dependency could not be resolved from the plugin directory",
679
+ { source, importer, pluginRoot: record.rootDir, message, installHint: `cd ${record.rootDir} && npm install ${packageNameFromBareSpecifier(source)}` }
680
+ );
681
+ }
682
+ return pluginDependencyVirtualId(record, await ensurePluginDependencyPath(record, source, importer, resolvedPath));
683
+ }
684
+ async function resolvePluginLocalRelativeDependencyImport(record, source, context) {
685
+ const rawTarget = resolvePath(dirname(context.resolvedPath), source);
686
+ const candidates = /* @__PURE__ */ new Set();
687
+ candidates.add(rawTarget);
688
+ if (extname(rawTarget) === "") {
689
+ for (const suffix of IMPORT_RESOLVE_EXTENSIONS) {
690
+ if (suffix) candidates.add(`${rawTarget}${suffix}`);
691
+ }
692
+ for (const indexFile of DIRECTORY_INDEX_CANDIDATES) {
693
+ candidates.add(resolvePath(rawTarget, indexFile));
694
+ }
695
+ }
696
+ for (const candidate of candidates) {
697
+ if (!existsSync(candidate)) continue;
698
+ return pluginDependencyVirtualId(record, await ensurePluginDependencyPath(record, source, context.resolvedPath, candidate));
699
+ }
700
+ throw new PluginFrontRuntimeError(ErrorCode.enum.PATH_NOT_FOUND, 404, "resolve", "plugin dependency import not found in plugin-local node_modules", {
701
+ importer: context.resolvedPath,
702
+ source
703
+ });
704
+ }
592
705
  function parseRevision(raw) {
593
706
  const revision = typeof raw === "number" ? raw : Number(raw);
594
707
  if (!Number.isInteger(revision) || revision < 1) {
@@ -611,6 +724,11 @@ function isUnsafeAbsoluteImport(source, basePath) {
611
724
  function isBareImport(source) {
612
725
  return !source.startsWith(".") && !source.startsWith("/") && !source.startsWith("file://");
613
726
  }
727
+ function isUnsupportedHostProvidedSubpath(source) {
728
+ if (!isBareImport(source) || isHostProvidedModule(source)) return false;
729
+ const packageName = packageNameFromBareSpecifier(source);
730
+ return HOST_PROVIDED_MODULES.some((moduleName) => packageNameFromBareSpecifier(moduleName) === packageName);
731
+ }
614
732
  function stripBlockComments(sourceText) {
615
733
  return sourceText.replace(/\/\*[\s\S]*?\*\//g, (match) => match.replace(/[^\n]/g, " "));
616
734
  }
@@ -660,7 +778,7 @@ function validateSourceImports(sourceText, importer, basePath) {
660
778
  { importer, source }
661
779
  );
662
780
  };
663
- const isUnsafeSpecifier = (specifier) => specifier.startsWith("node:") || NODE_BUILTIN_MODULES.has(specifier) || isUnsafeAbsoluteImport(specifier, basePath) || isBareImport(specifier) && !HOST_SINGLETON_MODULES.includes(specifier);
781
+ const isUnsafeSpecifier = (specifier) => specifier.startsWith("node:") || NODE_BUILTIN_MODULES.has(specifier) || isUnsafeAbsoluteImport(specifier, basePath) || isUnsupportedHostProvidedSubpath(specifier);
664
782
  const isImportMetaGlobCall = (expression) => {
665
783
  if (!ts.isPropertyAccessExpression(expression)) return false;
666
784
  if (expression.name.text !== "glob" && expression.name.text !== "globEager") return false;
@@ -675,6 +793,11 @@ function validateSourceImports(sourceText, importer, basePath) {
675
793
  const specifier = cssMatch[1] ?? cssMatch[2] ?? cssMatch[3] ?? "";
676
794
  if (isUnsafeSpecifier(specifier)) reject(specifier);
677
795
  }
796
+ const cssUrlPattern = /\burl\(\s*(?:["']([^"']+)["']|([^\s)"']+))\s*\)/gm;
797
+ while ((cssMatch = cssUrlPattern.exec(sanitizedCss)) !== null) {
798
+ const specifier = cssMatch[1] ?? cssMatch[2] ?? "";
799
+ if (isUnsafeSpecifier(specifier)) reject(specifier);
800
+ }
678
801
  return;
679
802
  }
680
803
  const sourceFile = ts.createSourceFile(importer, sourceText, ts.ScriptTarget.Latest, true, scriptKindForPath(importer));
@@ -721,7 +844,7 @@ function virtualSingletonId(source) {
721
844
  function sourceFromVirtualSingletonId(id) {
722
845
  if (!id.startsWith(RUNTIME_SINGLETON_ID_PREFIX)) return void 0;
723
846
  const source = id.slice(RUNTIME_SINGLETON_ID_PREFIX.length);
724
- return HOST_SINGLETON_MODULES.includes(source) ? source : void 0;
847
+ return isHostVirtualSingletonModule(source) ? source : void 0;
725
848
  }
726
849
  function runtimeSingletonExportExpression(source, name) {
727
850
  const key = JSON.stringify(name);
@@ -757,14 +880,15 @@ function runtimeSingletonModuleCode(source) {
757
880
  ].join("\n");
758
881
  }
759
882
  function __testingRuntimeSingletonModuleCode(source) {
760
- return runtimeSingletonModuleCode(source);
883
+ return isHostVirtualSingletonModule(source) ? runtimeSingletonModuleCode(source) : void 0;
761
884
  }
762
885
  function createRuntimeSingletonResolve(repoRoot) {
763
886
  const alias = [];
764
887
  const localWorkspaceAliases = [
765
888
  ["@hachej/boring-workspace/plugin", resolvePath(repoRoot, "packages", "workspace", "dist", "plugin.js"), resolvePath(repoRoot, "packages", "workspace", "src", "plugin.ts")],
766
889
  ["@hachej/boring-workspace/events", resolvePath(repoRoot, "packages", "workspace", "dist", "events.js"), resolvePath(repoRoot, "packages", "workspace", "src", "front", "events", "index.ts")],
767
- ["@hachej/boring-workspace", resolvePath(repoRoot, "packages", "workspace", "dist", "workspace.js"), resolvePath(repoRoot, "packages", "workspace", "src", "index.ts")]
890
+ ["@hachej/boring-workspace", resolvePath(repoRoot, "packages", "workspace", "dist", "workspace.js"), resolvePath(repoRoot, "packages", "workspace", "src", "index.ts")],
891
+ ["@hachej/boring-ui-kit", resolvePath(repoRoot, "packages", "ui", "dist", "index.js"), resolvePath(repoRoot, "packages", "ui", "src", "index.ts")]
768
892
  ];
769
893
  for (const [specifier, builtReplacement, sourceReplacement] of localWorkspaceAliases) {
770
894
  const replacement = existsSync(builtReplacement) ? builtReplacement : sourceReplacement;
@@ -772,7 +896,7 @@ function createRuntimeSingletonResolve(repoRoot) {
772
896
  }
773
897
  return {
774
898
  alias,
775
- dedupe: ["react", "react-dom"]
899
+ dedupe: ["react", "react-dom", "@hachej/boring-ui-kit"]
776
900
  };
777
901
  }
778
902
  class TransformLimiter {
@@ -836,8 +960,10 @@ async function createPluginFrontRuntimeHost(options = {}) {
836
960
  if (isRuntimePathImport(source, basePath)) {
837
961
  return stripCacheBustSearch(source);
838
962
  }
963
+ const dependencyContext = importer ? parsePluginDependencyVirtualId(importer) : null;
839
964
  const importerContext = importer ? parseRuntimeContext(importer, basePath) : null;
840
- if (!importerContext) return null;
965
+ const context = dependencyContext ?? importerContext;
966
+ if (!context) return null;
841
967
  if (source.startsWith("node:") || NODE_BUILTIN_MODULES.has(source)) {
842
968
  throw new PluginFrontRuntimeError(
843
969
  ErrorCode.enum.PLUGIN_RUNTIME_UNSAFE_IMPORT,
@@ -857,20 +983,31 @@ async function createPluginFrontRuntimeHost(options = {}) {
857
983
  );
858
984
  }
859
985
  if (isBareImport(source)) {
860
- if (HOST_SINGLETON_MODULES.includes(source)) {
861
- const code = runtimeSingletonModuleCode(source);
862
- return code ? virtualSingletonId(source) : source;
986
+ if (isHostVirtualSingletonModule(source)) {
987
+ return virtualSingletonId(source);
863
988
  }
864
- throw new PluginFrontRuntimeError(
865
- ErrorCode.enum.PLUGIN_RUNTIME_UNSAFE_IMPORT,
866
- 400,
867
- "resolve",
868
- "runtime plugin fronts may only import allowlisted host singleton packages",
869
- { source, importer }
870
- );
989
+ if (isHostProvidedModule(source)) {
990
+ return source;
991
+ }
992
+ const packageName = packageNameFromBareSpecifier(source);
993
+ if (HOST_PROVIDED_MODULES.some((moduleName) => packageNameFromBareSpecifier(moduleName) === packageName)) {
994
+ throw new PluginFrontRuntimeError(
995
+ ErrorCode.enum.PLUGIN_RUNTIME_UNSAFE_IMPORT,
996
+ 400,
997
+ "resolve",
998
+ "runtime plugin import targets an unsupported host-provided package subpath",
999
+ { source, importer, packageName }
1000
+ );
1001
+ }
1002
+ const tracked2 = getTrackedPluginRevision(context.workspaceId, context.pluginId, context.revision);
1003
+ const importerFile = dependencyContext?.resolvedPath ?? resolvePath(tracked2.rootDir, "package.json");
1004
+ return await resolvePluginLocalBareImport(tracked2, source, importer, importerFile);
871
1005
  }
872
1006
  if (!source.startsWith(".") && !source.startsWith("..")) return null;
873
- const tracked = getTrackedPluginRevision(importerContext.workspaceId, importerContext.pluginId, importerContext.revision);
1007
+ const tracked = getTrackedPluginRevision(context.workspaceId, context.pluginId, context.revision);
1008
+ if (dependencyContext) {
1009
+ return await resolvePluginLocalRelativeDependencyImport(tracked, source, dependencyContext);
1010
+ }
874
1011
  const importedSubpath = await resolveImportSubpath(tracked, importerContext.subpath, source);
875
1012
  const url = buildRuntimeUrl(basePath, tracked.workspaceId, tracked.pluginId, importerContext.revision, importedSubpath);
876
1013
  return RUNTIME_ASSET_EXTENSIONS.has(extname(importedSubpath).toLowerCase()) ? `${url}?module` : url;
@@ -878,6 +1015,17 @@ async function createPluginFrontRuntimeHost(options = {}) {
878
1015
  async load(id) {
879
1016
  const singletonSource = sourceFromVirtualSingletonId(id);
880
1017
  if (singletonSource) return runtimeSingletonModuleCode(singletonSource) ?? null;
1018
+ const dependencyContext = parsePluginDependencyVirtualId(id);
1019
+ if (dependencyContext) {
1020
+ const tracked2 = getTrackedPluginRevision(dependencyContext.workspaceId, dependencyContext.pluginId, dependencyContext.revision);
1021
+ const resolvedPath2 = await ensurePluginDependencyPath(tracked2, dependencyContext.resolvedPath, id, dependencyContext.resolvedPath);
1022
+ if (RUNTIME_ASSET_EXTENSIONS.has(extname(resolvedPath2).toLowerCase())) {
1023
+ return runtimeAssetModuleCode(resolvedPath2, await readFile(resolvedPath2));
1024
+ }
1025
+ const sourceText2 = await readFile(resolvedPath2, "utf8");
1026
+ validateSourceImports(sourceText2, resolvedPath2, basePath);
1027
+ return sourceText2;
1028
+ }
881
1029
  const context = parseRuntimeContext(id, basePath);
882
1030
  if (!context) return null;
883
1031
  const tracked = getTrackedPluginRevision(context.workspaceId, context.pluginId, context.revision);
@@ -906,7 +1054,11 @@ async function createPluginFrontRuntimeHost(options = {}) {
906
1054
  },
907
1055
  server: {
908
1056
  middlewareMode: true,
909
- hmr: false
1057
+ hmr: false,
1058
+ // Runtime plugin modules are served from immutable revision snapshots
1059
+ // plus explicit plugin-local dependency virtual ids. Watching the whole
1060
+ // monorepo is useless here and can exhaust CI file-watch limits.
1061
+ watch: null
910
1062
  }
911
1063
  });
912
1064
  function getTrackedPlugin(workspaceId, pluginId) {
@@ -1147,6 +1299,13 @@ async function createPluginFrontRuntimeHost(options = {}) {
1147
1299
  durationMs: Date.now() - transformStartedAt
1148
1300
  });
1149
1301
  const rewritten = rewriteViteSupportUrls(transformed.code, basePath);
1302
+ assertNoUnsafeFsSupportReference(rewritten.code, {
1303
+ runtimeId: runtimeRequest.runtimeId,
1304
+ workspaceId: runtimeRequest.workspaceId,
1305
+ pluginId: runtimeRequest.pluginId,
1306
+ revision: runtimeRequest.revision,
1307
+ path: runtimeRequest.requestedPath
1308
+ });
1150
1309
  recordMintedSupportPaths(runtimeRequest.cacheKey, rewritten.mintedPaths);
1151
1310
  return {
1152
1311
  body: rewritten.code,
@@ -1271,8 +1430,7 @@ async function createPluginFrontRuntimeHost(options = {}) {
1271
1430
  return reply.code(apiError.statusCode).send(apiError.body);
1272
1431
  }
1273
1432
  const source = decodeURIComponent(encodedSource);
1274
- const singletonSource = HOST_SINGLETON_MODULES.includes(source) ? source : void 0;
1275
- const code = singletonSource ? runtimeSingletonModuleCode(singletonSource) : void 0;
1433
+ const code = isHostVirtualSingletonModule(source) ? runtimeSingletonModuleCode(source) : void 0;
1276
1434
  if (!code) {
1277
1435
  const apiError = toApiError(new PluginFrontRuntimeError(
1278
1436
  ErrorCode.enum.PLUGIN_RUNTIME_UNSAFE_IMPORT,
@@ -1310,9 +1468,11 @@ async function createPluginFrontRuntimeHost(options = {}) {
1310
1468
  return reply.code(apiError.statusCode).send(apiError.body);
1311
1469
  }
1312
1470
  const search = request.raw.url?.includes("?") ? request.raw.url.slice(request.raw.url.indexOf("?")) : "";
1313
- const transformed = await vite.transformRequest(`${targetPath}${normalizeSearch(search)}`);
1471
+ const viteTargetPath = targetPath.startsWith("/@id/__x00__") ? `\0${targetPath.slice("/@id/__x00__".length)}` : targetPath;
1472
+ const transformed = await vite.transformRequest(`${viteTargetPath}${normalizeSearch(search)}`);
1314
1473
  if (transformed?.code) {
1315
1474
  const rewritten = rewriteViteSupportUrls(transformed.code, basePath);
1475
+ assertNoUnsafeFsSupportReference(rewritten.code, { targetPath });
1316
1476
  recordMintedSupportPaths(`support:${mintedPath}`, rewritten.mintedPaths);
1317
1477
  return reply.type("application/javascript; charset=utf-8").send(rewritten.code);
1318
1478
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hachej/boring-ui-cli",
3
- "version": "0.1.30",
3
+ "version": "0.1.32",
4
4
  "description": "Turn an agent into an app",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -9,19 +9,20 @@
9
9
  },
10
10
  "files": [
11
11
  "dist/",
12
- "public/",
13
- "templates/"
12
+ "public/"
14
13
  ],
15
14
  "dependencies": {
15
+ "@fastify/compress": "^8.3.1",
16
16
  "@fastify/static": "^9.1.1",
17
17
  "@vitejs/plugin-react": "^4.0.0",
18
18
  "fastify": "^5.4.0",
19
19
  "lucide-react": "^1.8.0",
20
20
  "typescript": "^5.8.3",
21
21
  "vite": "^6.0.0",
22
- "@hachej/boring-agent": "0.1.30",
23
- "@hachej/boring-ui-kit": "0.1.30",
24
- "@hachej/boring-workspace": "0.1.30"
22
+ "@hachej/boring-agent": "0.1.32",
23
+ "@hachej/boring-ui-plugin-cli": "0.1.32",
24
+ "@hachej/boring-workspace": "0.1.32",
25
+ "@hachej/boring-ui-kit": "0.1.32"
25
26
  },
26
27
  "devDependencies": {
27
28
  "@tailwindcss/vite": "^4.0.0",
@@ -0,0 +1 @@
1
+ import{r as c,j as e,T as N,a as y,b as T,c as b,d as k,I as w,R as S,B as C,C as R,e as E,f as M,g as I,h as D}from"./index-CrmEpxcy.js";function $({value:o,label:s}){const[n,t]=c.useState(!1),l=c.useCallback(()=>{M(o).then(x=>{x&&(t(!0),window.setTimeout(()=>t(!1),1200))})},[o]);return e.jsx(w,{type:"button",variant:"ghost",size:"icon-xs",onClick:l,className:"text-muted-foreground/60","aria-label":s,title:s,children:n?e.jsx(I,{className:"h-3 w-3"}):e.jsx(D,{className:"h-3 w-3"})})}function j({label:o,value:s}){return e.jsxs("div",{className:"rounded-md border border-border/40 bg-muted/20 p-2",children:[e.jsxs("div",{className:"mb-1 flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-[10px] font-medium uppercase tracking-[0.16em] text-muted-foreground/80",children:o}),e.jsx($,{value:s,label:`Copy ${o}`})]}),e.jsx("code",{className:"block break-all font-mono text-[11px] leading-relaxed text-foreground dark:text-zinc-100",children:s})]})}function _({sessionId:o}){const s=`pi --session ${o}`;return e.jsxs("div",{className:"flex flex-col gap-3 overflow-auto p-3 text-[11px] text-muted-foreground dark:text-zinc-300",children:[e.jsx("p",{className:"text-muted-foreground dark:text-zinc-300",children:"This web chat is backed by a pi session. Use the id below from the workspace root to resume the same conversation in a terminal."}),e.jsx(j,{label:"Pi session id",value:o}),e.jsx(j,{label:"Resume command",value:s}),e.jsxs("p",{className:"rounded-md border border-border/30 bg-muted/10 p-2 text-[10px] leading-relaxed text-muted-foreground/75 dark:text-zinc-300",children:["Tip: ",e.jsx("code",{className:"font-mono text-foreground/80",children:"pi --continue"})," ","opens the most recent session for the current working directory. The explicit command above targets this session directly."]})]})}const L=2500,v=20;function z({sessionId:o,requestHeaders:s}){const[n,t]=c.useState({kind:"loading"}),[l,x]=c.useState(0),r=c.useRef(0),d=c.useCallback(()=>{r.current=0,x(a=>a+1)},[]);return c.useEffect(()=>{let a=!1,m=null;t({kind:"loading"});const g=s?{headers:s}:void 0;return fetch(`/api/v1/agent/sessions/${encodeURIComponent(o)}/system-prompt`,g).then(async i=>{var f;if(a)return;if(i.ok){const h=await i.json();if(typeof h.systemPrompt=="string"){r.current=0,t({kind:"ok",text:h.systemPrompt});return}}const u=await i.json().catch(()=>null),p=((f=u==null?void 0:u.error)==null?void 0:f.message)??`HTTP ${i.status}`;i.status===404&&r.current<v?(t({kind:"empty",reason:p}),m=setTimeout(()=>{a||(r.current++,x(h=>h+1))},L)):t(i.status===404?{kind:"empty",reason:p}:{kind:"error",reason:p})}).catch(i=>{a||t({kind:"error",reason:i instanceof Error?i.message:String(i)})}),()=>{a=!0,m&&clearTimeout(m)}},[o,s,l]),e.jsxs("div",{className:"flex flex-col h-full min-h-0",children:[e.jsxs("div",{className:"shrink-0 flex items-center justify-between px-3 pt-2 pb-1 border-b border-border/40",children:[e.jsx("span",{className:"text-[10px] text-muted-foreground/80 font-mono",children:n.kind==="ok"?`${n.text.length.toLocaleString()} chars`:n.kind==="loading"?"loading…":n.kind==="empty"?`waiting for session · retry ${r.current}/${v}`:"error"}),n.kind!=="loading"&&e.jsx(w,{type:"button",variant:"ghost",size:"icon-xs",onClick:d,className:"text-muted-foreground/60","aria-label":"Refresh system prompt",children:e.jsx(S,{className:"h-3 w-3"})})]}),(n.kind==="loading"||n.kind==="empty")&&e.jsx("p",{className:"text-[11px] text-muted-foreground p-3",children:n.kind==="loading"?"Loading…":n.reason}),n.kind==="error"&&e.jsx("p",{className:"text-[11px] text-destructive p-3",children:n.reason}),n.kind==="ok"&&e.jsx("pre",{className:"flex-1 overflow-auto px-3 py-2 font-mono text-[11px] leading-relaxed text-foreground whitespace-pre-wrap break-words",children:n.text})]})}function A(o){const s=o,n=(s==null?void 0:s.type)??"?";if(n==="text"){const t=String(s.text??"");return t.slice(0,80)+(t.length>80?"…":"")}if(n==="tool-invocation"){const t=s.toolInvocation,l=String((t==null?void 0:t.state)??"");return`${(t==null?void 0:t.toolName)??"?"}() · ${l}`}if(n==="reasoning"){const t=String(s.text??s.reasoning??"");return t.slice(0,80)+(t.length>80?"…":"")}return n}function B(o){const s=[];for(let n=0;n<o.length;n++){const t=o[n],l=t,x=l.createdAt?new Date(l.createdAt).toISOString().slice(11,23):null;for(let r=0;r<t.parts.length;r++){const d=t.parts[r];s.push({msgId:t.id,msgIndex:n,role:t.role,time:x,partIndex:r,partType:(d==null?void 0:d.type)??"unknown",part:d})}}return s}function P({messages:o}){const s=B(o),[n,t]=c.useState(null),l=c.useRef(null),x=c.useRef(s.length);return c.useEffect(()=>{var r;s.length!==x.current&&((r=l.current)==null||r.scrollIntoView({behavior:"smooth"}),x.current=s.length)},[s.length]),s.length===0?e.jsx("p",{className:"text-[11px] text-muted-foreground p-3",children:"No messages yet."}):e.jsxs("div",{className:"flex flex-col h-full min-h-0",children:[e.jsxs("div",{className:"shrink-0 px-3 pt-2 pb-1 text-[10px] text-muted-foreground/80 font-mono border-b border-border/40",children:[o.length," msg · ",s.length," parts"]}),e.jsxs("div",{className:"flex-1 overflow-auto",children:[s.map(r=>{const d=`${r.msgId}:${r.partIndex}`,a=n===d;return e.jsxs("div",{className:"border-b border-border/30 last:border-0",children:[e.jsxs(C,{type:"button",variant:"ghost",onClick:()=>t(a?null:d),className:"h-auto w-full justify-start gap-1.5 rounded-none px-2 py-1.5 text-left",children:[e.jsx("span",{className:"mt-0.5 shrink-0 text-muted-foreground/40",children:a?e.jsx(R,{className:"h-3 w-3"}):e.jsx(E,{className:"h-3 w-3"})}),e.jsx("span",{className:"font-mono text-[10px] shrink-0 w-20",children:r.time?e.jsx("span",{className:"text-muted-foreground/60",children:r.time}):e.jsxs("span",{className:"text-muted-foreground/30",children:["m",r.msgIndex]})}),e.jsx("span",{className:k("shrink-0 font-mono text-[10px] w-14",r.role==="user"?"text-accent":"text-muted-foreground"),children:r.role}),e.jsx("span",{className:"shrink-0 font-mono text-[10px] text-muted-foreground/60 w-24",children:r.partType}),e.jsx("span",{className:"flex-1 min-w-0 font-mono text-[11px] text-foreground truncate",children:A(r.part)})]}),a&&e.jsx("pre",{className:"px-3 pb-2 font-mono text-[10px] leading-relaxed text-foreground/80 whitespace-pre-wrap break-words bg-muted/20",children:JSON.stringify(r.part,null,2)})]},d)}),e.jsx("div",{ref:l})]})]})}const X=[{id:"session",label:"Session"},{id:"prompt",label:"System prompt"},{id:"messages",label:"Messages"}],U=280,V=800;function O({sessionId:o,messages:s,requestHeaders:n,width:t,onWidthChange:l}){const[x,r]=c.useState("session"),d=c.useCallback(a=>{a.preventDefault();const m=a.clientX,g=t,i=p=>{const f=m-p.clientX;l(Math.min(V,Math.max(U,g+f)))},u=()=>{window.removeEventListener("mousemove",i),window.removeEventListener("mouseup",u)};window.addEventListener("mousemove",i),window.addEventListener("mouseup",u)},[t,l]);return e.jsxs(e.Fragment,{children:[e.jsx("div",{onMouseDown:d,className:"w-1 shrink-0 cursor-col-resize hover:bg-accent/40 active:bg-accent/60 transition-colors","aria-hidden":!0}),e.jsx("aside",{style:{width:t},className:k("flex h-full shrink-0 flex-col border-l border-border/60","bg-[oklch(from_var(--background)_calc(l-0.01)_c_h)]"),children:e.jsxs(N,{value:x,onValueChange:a=>r(a),className:"flex flex-col flex-1 min-h-0 overflow-hidden",children:[e.jsx("header",{className:"flex shrink-0 items-center gap-0 border-b border-border/60 px-1",children:e.jsx(y,{variant:"line",className:"h-auto gap-0 p-0 w-full",children:X.map(({id:a,label:m})=>e.jsx(T,{value:a,className:"h-8 flex-none px-3 py-2 text-[11px] font-medium data-[state=active]:after:bg-[color:var(--accent)]",children:m},a))})}),e.jsx(b,{value:"session",forceMount:!0,className:"flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden",children:e.jsx(_,{sessionId:o})}),e.jsx(b,{value:"prompt",forceMount:!0,className:"flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden",children:e.jsx(z,{sessionId:o,requestHeaders:n})}),e.jsx(b,{value:"messages",forceMount:!0,className:"flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden",children:e.jsx(P,{messages:s})})]})})]})}export{O as DebugDrawer};
@@ -1 +1 @@
1
- import{bd as S,bD as ln,aY as A,bb as P,aX as W,bE as gn,bF as dn,bG as hn,bH as z,bI as pn,bJ as An,bK as m,be as N,bj as K,bm as T,bL as _n,bh as on,bM as wn,bN as bn,aZ as V,bO as On,bP as R}from"./index-CtdAhKdF.js";var Pn="[object Symbol]";function x(n){return typeof n=="symbol"||S(n)&&ln(n)==Pn}function vn(n,r){for(var e=-1,i=n==null?0:n.length,f=Array(i);++e<i;)f[e]=r(n[e],e,n);return f}var U=P?P.prototype:void 0,B=U?U.toString:void 0;function j(n){if(typeof n=="string")return n;if(A(n))return vn(n,j)+"";if(x(n))return B?B.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function yn(){}function En(n,r){for(var e=-1,i=n==null?0:n.length;++e<i&&r(n[e],e,n)!==!1;);return n}function cn(n,r,e,i){for(var f=n.length,t=e+-1;++t<f;)if(r(n[t],t,n))return t;return-1}function Tn(n){return n!==n}function In(n,r,e){for(var i=e-1,f=n.length;++i<f;)if(n[i]===r)return i;return-1}function Rn(n,r,e){return r===r?In(n,r,e):cn(n,Tn,e)}function Ln(n,r){var e=n==null?0:n.length;return!!e&&Rn(n,r,0)>-1}function M(n){return W(n)?gn(n):dn(n)}var Sn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xn=/^\w*$/;function $(n,r){if(A(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||x(n)?!0:xn.test(n)||!Sn.test(n)||r!=null&&n in Object(r)}var Mn=500;function $n(n){var r=hn(n,function(i){return e.size===Mn&&e.clear(),i}),e=r.cache;return r}var Cn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Dn=/\\(\\)?/g,Fn=$n(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(Cn,function(e,i,f,t){r.push(f?t.replace(Dn,"$1"):i||e)}),r});function Gn(n){return n==null?"":j(n)}function k(n,r){return A(n)?n:$(n,r)?[n]:Fn(Gn(n))}function I(n){if(typeof n=="string"||x(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function nn(n,r){r=k(r,n);for(var e=0,i=r.length;n!=null&&e<i;)n=n[I(r[e++])];return e&&e==i?n:void 0}function mn(n,r,e){var i=n==null?void 0:nn(n,r);return i===void 0?e:i}function rn(n,r){for(var e=-1,i=r.length,f=n.length;++e<i;)n[f+e]=r[e];return n}var H=P?P.isConcatSpreadable:void 0;function Nn(n){return A(n)||z(n)||!!(H&&n&&n[H])}function Hr(n,r,e,i,f){var t=-1,s=n.length;for(e||(e=Nn),f||(f=[]);++t<s;){var u=n[t];e(u)?rn(f,u):i||(f[f.length]=u)}return f}function Kn(n,r,e,i){var f=-1,t=n==null?0:n.length;for(i&&t&&(e=n[++f]);++f<t;)e=r(e,n[f],f,n);return e}function en(n,r){for(var e=-1,i=n==null?0:n.length,f=0,t=[];++e<i;){var s=n[e];r(s,e,n)&&(t[f++]=s)}return t}function Un(){return[]}var Bn=Object.prototype,Hn=Bn.propertyIsEnumerable,Z=Object.getOwnPropertySymbols,Zn=Z?function(n){return n==null?[]:(n=Object(n),en(Z(n),function(r){return Hn.call(n,r)}))}:Un;function qn(n,r,e){var i=r(n);return A(n)?i:rn(i,e(n))}function q(n){return qn(n,M,Zn)}var Yn="__lodash_hash_undefined__";function Xn(n){return this.__data__.set(n,Yn),this}function Jn(n){return this.__data__.has(n)}function v(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new pn;++r<e;)this.add(n[r])}v.prototype.add=v.prototype.push=Xn;v.prototype.has=Jn;function Qn(n,r){for(var e=-1,i=n==null?0:n.length;++e<i;)if(r(n[e],e,n))return!0;return!1}function tn(n,r){return n.has(r)}var Wn=1,zn=2;function fn(n,r,e,i,f,t){var s=e&Wn,u=n.length,a=r.length;if(u!=a&&!(s&&a>u))return!1;var h=t.get(n),g=t.get(r);if(h&&g)return h==r&&g==n;var l=-1,d=!0,o=e&zn?new v:void 0;for(t.set(n,r),t.set(r,n);++l<u;){var p=n[l],_=r[l];if(i)var w=s?i(_,p,l,r,n,t):i(p,_,l,n,r,t);if(w!==void 0){if(w)continue;d=!1;break}if(o){if(!Qn(r,function(b,O){if(!tn(o,O)&&(p===b||f(p,b,e,i,t)))return o.push(O)})){d=!1;break}}else if(!(p===_||f(p,_,e,i,t))){d=!1;break}}return t.delete(n),t.delete(r),d}function Vn(n){var r=-1,e=Array(n.size);return n.forEach(function(i,f){e[++r]=[f,i]}),e}function C(n){var r=-1,e=Array(n.size);return n.forEach(function(i){e[++r]=i}),e}var jn=1,kn=2,nr="[object Boolean]",rr="[object Date]",er="[object Error]",ir="[object Map]",tr="[object Number]",fr="[object RegExp]",sr="[object Set]",ur="[object String]",ar="[object Symbol]",lr="[object ArrayBuffer]",gr="[object DataView]",Y=P?P.prototype:void 0,L=Y?Y.valueOf:void 0;function dr(n,r,e,i,f,t,s){switch(e){case gr:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case lr:return!(n.byteLength!=r.byteLength||!t(new m(n),new m(r)));case nr:case rr:case tr:return An(+n,+r);case er:return n.name==r.name&&n.message==r.message;case fr:case ur:return n==r+"";case ir:var u=Vn;case sr:var a=i&jn;if(u||(u=C),n.size!=r.size&&!a)return!1;var h=s.get(n);if(h)return h==r;i|=kn,s.set(n,r);var g=fn(u(n),u(r),i,f,t,s);return s.delete(n),g;case ar:if(L)return L.call(n)==L.call(r)}return!1}var hr=1,pr=Object.prototype,Ar=pr.hasOwnProperty;function _r(n,r,e,i,f,t){var s=e&hr,u=q(n),a=u.length,h=q(r),g=h.length;if(a!=g&&!s)return!1;for(var l=a;l--;){var d=u[l];if(!(s?d in r:Ar.call(r,d)))return!1}var o=t.get(n),p=t.get(r);if(o&&p)return o==r&&p==n;var _=!0;t.set(n,r),t.set(r,n);for(var w=s;++l<a;){d=u[l];var b=n[d],O=r[d];if(i)var G=s?i(O,b,d,r,n,t):i(b,O,d,n,r,t);if(!(G===void 0?b===O||f(b,O,e,i,t):G)){_=!1;break}w||(w=d=="constructor")}if(_&&!w){var y=n.constructor,E=r.constructor;y!=E&&"constructor"in n&&"constructor"in r&&!(typeof y=="function"&&y instanceof y&&typeof E=="function"&&E instanceof E)&&(_=!1)}return t.delete(n),t.delete(r),_}var or=1,X="[object Arguments]",J="[object Array]",c="[object Object]",wr=Object.prototype,Q=wr.hasOwnProperty;function br(n,r,e,i,f,t){var s=A(n),u=A(r),a=s?J:N(n),h=u?J:N(r);a=a==X?c:a,h=h==X?c:h;var g=a==c,l=h==c,d=a==h;if(d&&K(n)){if(!K(r))return!1;s=!0,g=!1}if(d&&!g)return t||(t=new T),s||_n(n)?fn(n,r,e,i,f,t):dr(n,r,a,e,i,f,t);if(!(e&or)){var o=g&&Q.call(n,"__wrapped__"),p=l&&Q.call(r,"__wrapped__");if(o||p){var _=o?n.value():n,w=p?r.value():r;return t||(t=new T),f(_,w,e,i,t)}}return d?(t||(t=new T),_r(n,r,e,i,f,t)):!1}function D(n,r,e,i,f){return n===r?!0:n==null||r==null||!S(n)&&!S(r)?n!==n&&r!==r:br(n,r,e,i,D,f)}var Or=1,Pr=2;function vr(n,r,e,i){var f=e.length,t=f;if(n==null)return!t;for(n=Object(n);f--;){var s=e[f];if(s[2]?s[1]!==n[s[0]]:!(s[0]in n))return!1}for(;++f<t;){s=e[f];var u=s[0],a=n[u],h=s[1];if(s[2]){if(a===void 0&&!(u in n))return!1}else{var g=new T,l;if(!(l===void 0?D(h,a,Or|Pr,i,g):l))return!1}}return!0}function sn(n){return n===n&&!on(n)}function yr(n){for(var r=M(n),e=r.length;e--;){var i=r[e],f=n[i];r[e]=[i,f,sn(f)]}return r}function un(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function Er(n){var r=yr(n);return r.length==1&&r[0][2]?un(r[0][0],r[0][1]):function(e){return e===n||vr(e,n,r)}}function cr(n,r){return n!=null&&r in Object(n)}function Tr(n,r,e){r=k(r,n);for(var i=-1,f=r.length,t=!1;++i<f;){var s=I(r[i]);if(!(t=n!=null&&e(n,s)))break;n=n[s]}return t||++i!=f?t:(f=n==null?0:n.length,!!f&&wn(f)&&bn(s,f)&&(A(n)||z(n)))}function Ir(n,r){return n!=null&&Tr(n,r,cr)}var Rr=1,Lr=2;function Sr(n,r){return $(n)&&sn(r)?un(I(n),r):function(e){var i=mn(e,n);return i===void 0&&i===r?Ir(e,n):D(r,i,Rr|Lr)}}function xr(n){return function(r){return r==null?void 0:r[n]}}function Mr(n){return function(r){return nn(r,n)}}function $r(n){return $(n)?xr(I(n)):Mr(n)}function an(n){return typeof n=="function"?n:n==null?V:typeof n=="object"?A(n)?Sr(n[0],n[1]):Er(n):$r(n)}function Cr(n,r){return n&&On(n,r,M)}function Dr(n,r){return function(e,i){if(e==null)return e;if(!W(e))return n(e,i);for(var f=e.length,t=-1,s=Object(e);++t<f&&i(s[t],t,s)!==!1;);return e}}var F=Dr(Cr);function Fr(n){return typeof n=="function"?n:V}function Zr(n,r){var e=A(n)?En:F;return e(n,Fr(r))}function Gr(n,r){var e=[];return F(n,function(i,f,t){r(i,f,t)&&e.push(i)}),e}function qr(n,r){var e=A(n)?en:Gr;return e(n,an(r))}function mr(n,r,e,i,f){return f(n,function(t,s,u){e=i?(i=!1,t):r(e,t,s,u)}),e}function Yr(n,r,e){var i=A(n)?Kn:mr,f=arguments.length<3;return i(n,an(r),e,f,F)}var Nr=1/0,Kr=R&&1/C(new R([,-0]))[1]==Nr?function(n){return new R(n)}:yn,Ur=200;function Xr(n,r,e){var i=-1,f=Ln,t=n.length,s=!0,u=[],a=u;if(t>=Ur){var h=r?null:Kr(n);if(h)return C(h);s=!1,f=tn,a=new v}else a=r?[]:u;n:for(;++i<t;){var g=n[i],l=r?r(g):g;if(g=g!==0?g:0,s&&l===l){for(var d=a.length;d--;)if(a[d]===l)continue n;r&&a.push(l),u.push(g)}else f(a,l,e)||(a!==u&&a.push(l),u.push(g))}return u}export{F as a,Hr as b,an as c,vn as d,rn as e,qn as f,Zn as g,En as h,x as i,q as j,M as k,Xr as l,qr as m,Zr as n,cn as o,Fr as p,Cr as q,Yr as r,Un as s,Tr as t,k as u,I as v,nn as w,Ir as x,Gn as y};
1
+ import{be as S,bE as ln,aZ as A,bc as P,aY as W,bF as gn,bG as dn,bH as hn,bI as z,bJ as pn,bK as An,bL as N,bf as m,bk as K,bn as T,bM as _n,bi as on,bN as wn,bO as On,a_ as V,bP as bn,bQ as R}from"./index-CrmEpxcy.js";var Pn="[object Symbol]";function x(n){return typeof n=="symbol"||S(n)&&ln(n)==Pn}function vn(n,r){for(var e=-1,i=n==null?0:n.length,f=Array(i);++e<i;)f[e]=r(n[e],e,n);return f}var U=P?P.prototype:void 0,B=U?U.toString:void 0;function k(n){if(typeof n=="string")return n;if(A(n))return vn(n,k)+"";if(x(n))return B?B.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function yn(){}function En(n,r){for(var e=-1,i=n==null?0:n.length;++e<i&&r(n[e],e,n)!==!1;);return n}function cn(n,r,e,i){for(var f=n.length,t=e+-1;++t<f;)if(r(n[t],t,n))return t;return-1}function Tn(n){return n!==n}function In(n,r,e){for(var i=e-1,f=n.length;++i<f;)if(n[i]===r)return i;return-1}function Rn(n,r,e){return r===r?In(n,r,e):cn(n,Tn,e)}function Ln(n,r){var e=n==null?0:n.length;return!!e&&Rn(n,r,0)>-1}function M(n){return W(n)?gn(n):dn(n)}var Sn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xn=/^\w*$/;function $(n,r){if(A(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||x(n)?!0:xn.test(n)||!Sn.test(n)||r!=null&&n in Object(r)}var Mn=500;function $n(n){var r=hn(n,function(i){return e.size===Mn&&e.clear(),i}),e=r.cache;return r}var Cn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Fn=/\\(\\)?/g,Gn=$n(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(Cn,function(e,i,f,t){r.push(f?t.replace(Fn,"$1"):i||e)}),r});function Dn(n){return n==null?"":k(n)}function j(n,r){return A(n)?n:$(n,r)?[n]:Gn(Dn(n))}function I(n){if(typeof n=="string"||x(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function nn(n,r){r=j(r,n);for(var e=0,i=r.length;n!=null&&e<i;)n=n[I(r[e++])];return e&&e==i?n:void 0}function Nn(n,r,e){var i=n==null?void 0:nn(n,r);return i===void 0?e:i}function rn(n,r){for(var e=-1,i=r.length,f=n.length;++e<i;)n[f+e]=r[e];return n}var H=P?P.isConcatSpreadable:void 0;function mn(n){return A(n)||z(n)||!!(H&&n&&n[H])}function Hr(n,r,e,i,f){var t=-1,s=n.length;for(e||(e=mn),f||(f=[]);++t<s;){var u=n[t];e(u)?rn(f,u):i||(f[f.length]=u)}return f}function Kn(n,r,e,i){var f=-1,t=n==null?0:n.length;for(i&&t&&(e=n[++f]);++f<t;)e=r(e,n[f],f,n);return e}function en(n,r){for(var e=-1,i=n==null?0:n.length,f=0,t=[];++e<i;){var s=n[e];r(s,e,n)&&(t[f++]=s)}return t}function Un(){return[]}var Bn=Object.prototype,Hn=Bn.propertyIsEnumerable,Z=Object.getOwnPropertySymbols,Zn=Z?function(n){return n==null?[]:(n=Object(n),en(Z(n),function(r){return Hn.call(n,r)}))}:Un;function qn(n,r,e){var i=r(n);return A(n)?i:rn(i,e(n))}function q(n){return qn(n,M,Zn)}var Yn="__lodash_hash_undefined__";function Jn(n){return this.__data__.set(n,Yn),this}function Qn(n){return this.__data__.has(n)}function v(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new pn;++r<e;)this.add(n[r])}v.prototype.add=v.prototype.push=Jn;v.prototype.has=Qn;function Xn(n,r){for(var e=-1,i=n==null?0:n.length;++e<i;)if(r(n[e],e,n))return!0;return!1}function tn(n,r){return n.has(r)}var Wn=1,zn=2;function fn(n,r,e,i,f,t){var s=e&Wn,u=n.length,a=r.length;if(u!=a&&!(s&&a>u))return!1;var h=t.get(n),g=t.get(r);if(h&&g)return h==r&&g==n;var l=-1,d=!0,o=e&zn?new v:void 0;for(t.set(n,r),t.set(r,n);++l<u;){var p=n[l],_=r[l];if(i)var w=s?i(_,p,l,r,n,t):i(p,_,l,n,r,t);if(w!==void 0){if(w)continue;d=!1;break}if(o){if(!Xn(r,function(O,b){if(!tn(o,b)&&(p===O||f(p,O,e,i,t)))return o.push(b)})){d=!1;break}}else if(!(p===_||f(p,_,e,i,t))){d=!1;break}}return t.delete(n),t.delete(r),d}function Vn(n){var r=-1,e=Array(n.size);return n.forEach(function(i,f){e[++r]=[f,i]}),e}function C(n){var r=-1,e=Array(n.size);return n.forEach(function(i){e[++r]=i}),e}var kn=1,jn=2,nr="[object Boolean]",rr="[object Date]",er="[object Error]",ir="[object Map]",tr="[object Number]",fr="[object RegExp]",sr="[object Set]",ur="[object String]",ar="[object Symbol]",lr="[object ArrayBuffer]",gr="[object DataView]",Y=P?P.prototype:void 0,L=Y?Y.valueOf:void 0;function dr(n,r,e,i,f,t,s){switch(e){case gr:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case lr:return!(n.byteLength!=r.byteLength||!t(new N(n),new N(r)));case nr:case rr:case tr:return An(+n,+r);case er:return n.name==r.name&&n.message==r.message;case fr:case ur:return n==r+"";case ir:var u=Vn;case sr:var a=i&kn;if(u||(u=C),n.size!=r.size&&!a)return!1;var h=s.get(n);if(h)return h==r;i|=jn,s.set(n,r);var g=fn(u(n),u(r),i,f,t,s);return s.delete(n),g;case ar:if(L)return L.call(n)==L.call(r)}return!1}var hr=1,pr=Object.prototype,Ar=pr.hasOwnProperty;function _r(n,r,e,i,f,t){var s=e&hr,u=q(n),a=u.length,h=q(r),g=h.length;if(a!=g&&!s)return!1;for(var l=a;l--;){var d=u[l];if(!(s?d in r:Ar.call(r,d)))return!1}var o=t.get(n),p=t.get(r);if(o&&p)return o==r&&p==n;var _=!0;t.set(n,r),t.set(r,n);for(var w=s;++l<a;){d=u[l];var O=n[d],b=r[d];if(i)var D=s?i(b,O,d,r,n,t):i(O,b,d,n,r,t);if(!(D===void 0?O===b||f(O,b,e,i,t):D)){_=!1;break}w||(w=d=="constructor")}if(_&&!w){var y=n.constructor,E=r.constructor;y!=E&&"constructor"in n&&"constructor"in r&&!(typeof y=="function"&&y instanceof y&&typeof E=="function"&&E instanceof E)&&(_=!1)}return t.delete(n),t.delete(r),_}var or=1,J="[object Arguments]",Q="[object Array]",c="[object Object]",wr=Object.prototype,X=wr.hasOwnProperty;function Or(n,r,e,i,f,t){var s=A(n),u=A(r),a=s?Q:m(n),h=u?Q:m(r);a=a==J?c:a,h=h==J?c:h;var g=a==c,l=h==c,d=a==h;if(d&&K(n)){if(!K(r))return!1;s=!0,g=!1}if(d&&!g)return t||(t=new T),s||_n(n)?fn(n,r,e,i,f,t):dr(n,r,a,e,i,f,t);if(!(e&or)){var o=g&&X.call(n,"__wrapped__"),p=l&&X.call(r,"__wrapped__");if(o||p){var _=o?n.value():n,w=p?r.value():r;return t||(t=new T),f(_,w,e,i,t)}}return d?(t||(t=new T),_r(n,r,e,i,f,t)):!1}function F(n,r,e,i,f){return n===r?!0:n==null||r==null||!S(n)&&!S(r)?n!==n&&r!==r:Or(n,r,e,i,F,f)}var br=1,Pr=2;function vr(n,r,e,i){var f=e.length,t=f;if(n==null)return!t;for(n=Object(n);f--;){var s=e[f];if(s[2]?s[1]!==n[s[0]]:!(s[0]in n))return!1}for(;++f<t;){s=e[f];var u=s[0],a=n[u],h=s[1];if(s[2]){if(a===void 0&&!(u in n))return!1}else{var g=new T,l;if(!(l===void 0?F(h,a,br|Pr,i,g):l))return!1}}return!0}function sn(n){return n===n&&!on(n)}function yr(n){for(var r=M(n),e=r.length;e--;){var i=r[e],f=n[i];r[e]=[i,f,sn(f)]}return r}function un(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function Er(n){var r=yr(n);return r.length==1&&r[0][2]?un(r[0][0],r[0][1]):function(e){return e===n||vr(e,n,r)}}function cr(n,r){return n!=null&&r in Object(n)}function Tr(n,r,e){r=j(r,n);for(var i=-1,f=r.length,t=!1;++i<f;){var s=I(r[i]);if(!(t=n!=null&&e(n,s)))break;n=n[s]}return t||++i!=f?t:(f=n==null?0:n.length,!!f&&wn(f)&&On(s,f)&&(A(n)||z(n)))}function Ir(n,r){return n!=null&&Tr(n,r,cr)}var Rr=1,Lr=2;function Sr(n,r){return $(n)&&sn(r)?un(I(n),r):function(e){var i=Nn(e,n);return i===void 0&&i===r?Ir(e,n):F(r,i,Rr|Lr)}}function xr(n){return function(r){return r==null?void 0:r[n]}}function Mr(n){return function(r){return nn(r,n)}}function $r(n){return $(n)?xr(I(n)):Mr(n)}function an(n){return typeof n=="function"?n:n==null?V:typeof n=="object"?A(n)?Sr(n[0],n[1]):Er(n):$r(n)}function Cr(n,r){return n&&bn(n,r,M)}function Fr(n,r){return function(e,i){if(e==null)return e;if(!W(e))return n(e,i);for(var f=e.length,t=-1,s=Object(e);++t<f&&i(s[t],t,s)!==!1;);return e}}var G=Fr(Cr);function Gr(n){return typeof n=="function"?n:V}function Zr(n,r){var e=A(n)?En:G;return e(n,Gr(r))}function Dr(n,r){var e=[];return G(n,function(i,f,t){r(i,f,t)&&e.push(i)}),e}function qr(n,r){var e=A(n)?en:Dr;return e(n,an(r))}function Nr(n,r,e,i,f){return f(n,function(t,s,u){e=i?(i=!1,t):r(e,t,s,u)}),e}function Yr(n,r,e){var i=A(n)?Kn:Nr,f=arguments.length<3;return i(n,an(r),e,f,G)}var mr=1/0,Kr=R&&1/C(new R([,-0]))[1]==mr?function(n){return new R(n)}:yn,Ur=200;function Jr(n,r,e){var i=-1,f=Ln,t=n.length,s=!0,u=[],a=u;if(t>=Ur){var h=r?null:Kr(n);if(h)return C(h);s=!1,f=tn,a=new v}else a=r?[]:u;n:for(;++i<t;){var g=n[i],l=r?r(g):g;if(g=g!==0?g:0,s&&l===l){for(var d=a.length;d--;)if(a[d]===l)continue n;r&&a.push(l),u.push(g)}else f(a,l,e)||(a!==u&&a.push(l),u.push(g))}return u}export{G as a,Hr as b,an as c,vn as d,rn as e,qn as f,Zn as g,En as h,x as i,q as j,M as k,Jr as l,qr as m,Zr as n,cn as o,Gr as p,Cr as q,Yr as r,Un as s,Tr as t,j as u,I as v,nn as w,Ir as x,Dn as y};
@@ -1 +1 @@
1
- import{a3 as ln,a4 as an,a5 as H,a6 as q,a7 as B,a8 as un,a9 as g,aa as tn,ab as L,ac as _,ad as rn,ae as o,af as on,ag as sn,ah as fn}from"./index-CtdAhKdF.js";function cn(l){return l.innerRadius}function gn(l){return l.outerRadius}function yn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<g))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,y=c-s,R=m*m+y*y,T=v-A,P=u*c-f*s,S=(y<0?-1:1)*L(on(0,T*T*R-P*P)),j=(P*y-m*S)/R,z=(-P*m-y*S)/R,w=(P*y+m*S)/R,p=(-P*m+y*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=gn,I=B(0),D=null,v=yn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,F=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>g))a.moveTo(0,0);else if(F>tn-g)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>g&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,y=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>g&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>g){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>g?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>g?(M*=t?1:-1,m+=M,y-=M):(S=0,m=y=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>g){var U=s*H(y),V=s*q(y),X=u*H(R),Y=u*q(R),E;if(F<an)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(fn((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>g?x>g?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,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(J,K),a.arc(0,0,s,m,y,!t)):a.moveTo(J,K),!(u>g)||!(P>g)?a.lineTo(N,Q):p>g?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,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-an/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{a4 as ln,a5 as an,a6 as H,a7 as q,a8 as B,a9 as un,aa as g,ab as tn,ac as L,ad as _,ae as rn,af as o,ag as on,ah as sn,ai as fn}from"./index-CrmEpxcy.js";function cn(l){return l.innerRadius}function gn(l){return l.outerRadius}function yn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<g))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,y=c-s,R=m*m+y*y,T=v-A,P=u*c-f*s,S=(y<0?-1:1)*L(on(0,T*T*R-P*P)),j=(P*y-m*S)/R,z=(-P*m-y*S)/R,w=(P*y+m*S)/R,p=(-P*m+y*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=gn,I=B(0),D=null,v=yn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,F=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>g))a.moveTo(0,0);else if(F>tn-g)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>g&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,y=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>g&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>g){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>g?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>g?(M*=t?1:-1,m+=M,y-=M):(S=0,m=y=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>g){var U=s*H(y),V=s*q(y),X=u*H(R),Y=u*q(R),E;if(F<an)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(fn((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>g?x>g?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,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(J,K),a.arc(0,0,s,m,y,!t)):a.moveTo(J,K),!(u>g)||!(P>g)?a.lineTo(N,Q):p>g?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,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-an/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};