@preventive/triage 1.0.0-alpha.52 → 1.0.0-alpha.54

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 (112) hide show
  1. package/common/bundle-compare-diff.js +28 -9
  2. package/common/bundle-compare-inputs.d.ts +1 -0
  3. package/common/bundle-compare-inputs.js +91 -15
  4. package/common/bundle-comparison.js +14 -7
  5. package/common/default-scan-models.ts +3 -0
  6. package/common/dependency-reviews.d.ts +1 -1
  7. package/common/dependency-reviews.js +1 -1
  8. package/common/managed/finding-detail.d.ts +4 -2
  9. package/common/managed/finding-detail.js +27 -15
  10. package/common/managed/team-app.d.ts +9 -0
  11. package/common/managed/team-app.js +59 -6
  12. package/common/workspace-app.js +38 -6
  13. package/out/activity.js +4 -4
  14. package/out/chunk-4EMM6UCD.js +1 -0
  15. package/out/chunk-4ISO5F7Y.js +7 -0
  16. package/out/chunk-4XIH7YTX.js +1 -0
  17. package/out/chunk-6W5BMATD.js +1 -0
  18. package/out/{chunk-WFYLMF6Z.js → chunk-74AEKRES.js} +1 -1
  19. package/out/chunk-DEVAORP2.js +1 -0
  20. package/out/{chunk-KOGNQDSJ.js → chunk-DTM47KGS.js} +1 -1
  21. package/out/chunk-E3LFSUDJ.js +9 -0
  22. package/out/chunk-FHIVVVUA.js +6 -0
  23. package/out/chunk-G3LY2FV4.js +1 -0
  24. package/out/chunk-HAZKDK4M.js +4 -0
  25. package/out/chunk-HOB3YPS5.js +1 -0
  26. package/out/chunk-I47TYPXO.js +52 -0
  27. package/out/chunk-J7A5OSZE.js +244 -0
  28. package/out/chunk-JFL7WLRV.js +1 -0
  29. package/out/chunk-JMG5DXII.js +2 -0
  30. package/out/chunk-JOXLZXMI.js +1 -0
  31. package/out/chunk-L4CTEMRG.js +2 -0
  32. package/out/chunk-M37X4LCF.js +14 -0
  33. package/out/chunk-M3Y6SLC4.js +1 -0
  34. package/out/chunk-NXATZJQ2.js +1 -0
  35. package/out/{chunk-MYGJBYYJ.js → chunk-ORIP5INC.js} +1 -1
  36. package/out/chunk-PAD2JHZT.js +1 -0
  37. package/out/chunk-QMVOEBWC.js +13 -0
  38. package/out/{chunk-SXV2T5C4.js → chunk-QRKFPLA4.js} +1 -1
  39. package/out/chunk-RRBIJL2B.js +1 -0
  40. package/out/{chunk-GDPCLSOS.js → chunk-SYXT3SFP.js} +1 -1
  41. package/out/chunk-TOXMUOIW.js +5 -0
  42. package/out/chunk-UBOCLLF2.js +1 -0
  43. package/out/chunk-UCP3JRE2.js +1 -0
  44. package/out/{chunk-NCN3M5EP.js → chunk-VC72ZO3P.js} +2 -2
  45. package/out/chunk-VRX2APNA.js +9 -0
  46. package/out/{chunk-IMM274IW.js → chunk-VZMELPVL.js} +4 -3
  47. package/out/{chunk-CHRBUGVN.js → chunk-WHVXTJHK.js} +1 -1
  48. package/out/chunk-WMFDQS2L.js +11 -0
  49. package/out/chunk-WNSVBOSO.js +41 -0
  50. package/out/chunk-WREU7JAG.js +1 -0
  51. package/out/chunk-Y5ZHFNBD.js +2 -0
  52. package/out/chunk-YF4M5OCI.js +1 -0
  53. package/out/chunk-Z667U2UJ.js +1 -0
  54. package/out/chunk-ZQHLECTI.js +1 -0
  55. package/out/client-managed-import.js +1 -1
  56. package/out/client-managed.js +27 -26
  57. package/out/compare.js +14 -14
  58. package/out/dialogs.js +36 -51
  59. package/out/graph.js +17 -15
  60. package/out/index.html +26 -10
  61. package/out/prism.js +1 -1
  62. package/out/scan.js +2 -2
  63. package/out/terminal.js +232 -232
  64. package/out/view.css +1 -1
  65. package/out/view.js +15 -15
  66. package/package.json +12 -7
  67. package/risk/actions/resolve.js +36 -5
  68. package/risk/index.d.ts +20 -2
  69. package/risk/npm/malware.js +6 -4
  70. package/risk/npm/registry.js +8 -6
  71. package/server-managed/bundle-advisories.ts +56 -74
  72. package/server-managed/bundle-build-worker.js +61 -4
  73. package/server-managed/bundle-build.ts +13 -4
  74. package/server-managed/bundle-dependency-reviews.ts +74 -0
  75. package/server-managed/bundle-validation.ts +32 -0
  76. package/server-managed/db-methods.ts +51 -16
  77. package/server-managed/db-neon.ts +18 -2
  78. package/server-managed/db.ts +11 -2
  79. package/server-managed/github-issue-links.ts +151 -47
  80. package/server-managed/github-pulls.ts +34 -15
  81. package/server-managed/history-windows.ts +172 -0
  82. package/server-managed/http.ts +227 -12
  83. package/server-managed/index.ts +13 -1
  84. package/server-managed/managed-issues.ts +29 -15
  85. package/server-managed/npm-insights.ts +4 -3
  86. package/server-managed/npm-kept.ts +4 -0
  87. package/server-managed/package-entry-points.ts +37 -9
  88. package/server-managed/pretty-print.ts +7 -5
  89. package/server-managed/public-workspace.ts +2 -2
  90. package/server-managed/repository-actions.ts +7 -4
  91. package/server-managed/repository-browser.ts +11 -4
  92. package/server-managed/repository-history.ts +2 -2
  93. package/server-managed/repository-pulse.ts +11 -2
  94. package/server-managed/repository-risk-audit.ts +4 -5
  95. package/server-managed/repository-risk.ts +4 -4
  96. package/server-managed/sql.ts +2 -1
  97. package/server-managed/stasis-config.ts +46 -0
  98. package/server-managed/team-app-summaries.ts +54 -0
  99. package/server-managed/team-app.ts +52 -31
  100. package/server-managed/team-reports.ts +34 -13
  101. package/server-managed/upstream-cache.ts +41 -32
  102. package/server-managed/workspace-shares.ts +3 -1
  103. package/out/chunk-2ZDZWLFY.js +0 -1
  104. package/out/chunk-7VAWINQF.js +0 -6
  105. package/out/chunk-FMXWXDR4.js +0 -36
  106. package/out/chunk-IZ7POWI3.js +0 -18
  107. package/out/chunk-LJ7XRXFU.js +0 -52
  108. package/out/chunk-OGAYMEER.js +0 -232
  109. package/out/chunk-QB4CBOX2.js +0 -1
  110. package/out/chunk-TQJDYHVE.js +0 -2
  111. package/out/chunk-VH4XMZIW.js +0 -2
  112. package/out/chunk-WYLQWYLA.js +0 -1
package/out/graph.js CHANGED
@@ -1,17 +1,19 @@
1
- import"./chunk-VFWMQ3LG.js";import{a as e}from"./chunk-R5O6FAW4.js";import{C as t,F as n,a as r,d as i,e as a,fa as o,ga as s,ha as c,oa as l,pa as u,ta as d,va as f,wa as p,xa as m,ya as h}from"./chunk-FMXWXDR4.js";import"./chunk-2K6UN3PC.js";import{e as g}from"./chunk-WCPJDAYA.js";import{e as _}from"./chunk-IYPY47MC.js";import{a as v,d as y}from"./chunk-PWFUOLZK.js";import"./chunk-HT2SSA3V.js";import{j as b}from"./chunk-SXV2T5C4.js";import{d as x,l as S,m as C,n as w,o as T}from"./chunk-WFYLMF6Z.js";import"./chunk-C4Z6ZBXV.js";import{a as E,c as D,i as O,j as k}from"./chunk-2XUEZHIP.js";import"./chunk-TUII34K2.js";import"./chunk-OOJM4CTU.js";var A=`*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:host{display:grid;grid-template-columns:1fr 300px;grid-template-rows:auto 1fr;grid-template-areas:"topbar right" "stage right";min-height:0;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);overflow:hidden;background:var(--graph-canvas-bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,sans-serif;font-size:12px}.graph2-layout{display:contents}:host([matrix]){grid-template-columns:minmax(0,1fr) 300px}.graph2-topbar{grid-area:topbar;display:flex;flex-direction:column;gap:.5rem;padding:var(--graph-topbar-padding, .6rem .75rem .6rem var(--graph-topbar-left-padding, .75rem));font-size:.825rem;background:var(--surface);backdrop-filter:var(--glass-blur);border-bottom:1px solid var(--graph-divider)}.graph2-topbar-row{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;padding:0}.graph2-topbar .g2-spacer{flex:1}.graph2-topbar-row-pinned{flex-wrap:nowrap;align-items:flex-start}.graph2-topbar-row-pinned>#g2-fullscreen{margin-top:2px}.g2-topbar-controls{display:flex;flex:1;flex-wrap:wrap;align-items:center;gap:.75rem;min-width:0}.g2-topbar-controls>.g2-reason-scope,.g2-topbar-controls>.g2-issues-switch{margin-left:auto}.g2-topbar-controls>.g2-reason-scope+.g2-issues-switch{margin-left:0}.g2-topbar-controls .g2-path-filter-wrap{flex:1 1 8rem;min-width:0;max-width:12rem}.g2-matrix-controls{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:11px;& button{height:30px;padding:4px 7px;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--surface);color:var(--text);font:inherit}& button:hover,button[aria-pressed=true]{background:var(--graph-hover-bg);border-color:var(--muted)}}.graph2-topbar triage-selector{margin-left:auto}.g2-icon-btn{width:28px;height:28px;border-radius:var(--ui-radius, 5px);background:var(--graph-hover-bg);border:1px solid var(--border);color:var(--muted);display:grid;place-items:center;font-family:inherit;&:hover{color:var(--accent);border-color:var(--accent)}}.g2-path-filter-wrap{position:relative;flex:0 0 12rem;padding-right:22px}.g2-path-filter-wrap .g2-path-filter-clear{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:grid;place-items:center;width:18px;height:18px;background:transparent;border:0;border-radius:var(--ui-radius, 50%);color:var(--muted);font:400 10px/1 inherit;font-family:inherit;&:hover{color:var(--text);background:var(--surface-active)}}.g2-path-filter:placeholder-shown~.g2-path-filter-clear{display:none}.g2-layout-tabs{display:inline-flex;flex-shrink:0;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:2px;gap:2px;& button{position:relative;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:var(--ui-radius, 4px);background:transparent;color:var(--muted);font:inherit;font-size:11px;padding:5px 7px}& button[aria-pressed=true]{background:var(--graph-hover-bg);color:var(--text);box-shadow:var(--graph-layout-active-shadow, inset 0 0 0 1px var(--border))}}.g2-reason-scope{--scope-height: 30px}.graph2-right{grid-area:right;border-left:1px solid var(--graph-divider);background:var(--surface);backdrop-filter:var(--glass-blur);display:flex;flex-direction:column;overflow:hidden;padding:14px}.g2-panel-title{font-family:inherit;font-weight:600;font-size:11px;line-height:1;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);opacity:.85;margin:14px 0 8px;display:flex;align-items:baseline;gap:6px;&:first-child{margin-top:0}}.g2-panel-title-row{justify-content:space-between;gap:8px}#g2-top-pkgs-block{margin-top:14px;flex:1 1 0;min-height:0;display:flex;flex-direction:column}.g2-mini-tabs{display:flex;gap:1px;background:var(--graph-mini-tabs-bg, var(--graph-divider));border-radius:var(--ui-radius, 4px);overflow:hidden}.g2-mini-tab{background:transparent;border:0;color:var(--muted);font-family:inherit;font-weight:500;font-size:11px;line-height:1.4;text-transform:none;letter-spacing:0;padding:2px 7px;&:hover{color:var(--text);background:var(--graph-hover-bg)}&.on{background:var(--surface-active);color:var(--accent);text-decoration:var(--graph-mini-tab-active-decoration, none);text-underline-offset:.2em}}.graph2-stage{grid-area:stage;position:relative;background:var(--graph-canvas-bg);overflow:hidden;cursor:default;&:active{cursor:default}& canvas{position:absolute;inset:0;width:100%;height:100%;display:block}}.g2-stage-overlay{position:absolute;top:12px;left:12px;z-index:3;display:flex;flex-direction:column;gap:4px;pointer-events:none;max-width:calc(100% - 60px)}.g2-stage-overlay>*{pointer-events:auto}.g2-stage-stats{position:absolute;bottom:10px;left:12px;z-index:2;display:flex;flex-wrap:wrap;gap:2px 14px;font:500 10px/1.4 ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;color:var(--muted);opacity:.7;text-transform:uppercase;letter-spacing:.06em;pointer-events:none;max-width:calc(100% - 80px);& b{font-weight:600;color:var(--text);opacity:1}}.g2-stage-overlay-tr{position:absolute;top:12px;right:12px;z-index:3;pointer-events:auto}.g2-focus-pkg-btn{width:28px;height:28px;display:grid;place-items:center;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);color:var(--accent);box-shadow:var(--shadow-glass);&:hover{border-color:var(--accent);background:var(--surface-active)}& svg{display:block}}.g2-back-btn{display:inline-flex;align-items:center;gap:4px;padding:6px 11px;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);color:var(--accent);font:500 11px/1 inherit;font-family:inherit;box-shadow:var(--shadow-glass);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;align-self:flex-start;&:hover{border-color:var(--accent);background:var(--surface-active)}}.g2-tooltip{position:absolute;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 7px);padding:9px 11px;pointer-events:none;min-width:170px;max-width:260px;opacity:0;transition:opacity .12s;z-index:10;box-shadow:var(--shadow-glass);&.show{opacity:1}}.g2-tt-path{font:500 11px/1.3 ui-monospace,monospace;color:var(--text);word-break:break-all;margin-bottom:4px}.g2-tt-head{display:flex;align-items:center;gap:6px;margin-bottom:6px;flex-wrap:wrap}.g2-tt-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.g2-tt-pkg{font-size:10px;color:var(--muted);word-break:break-all}.g2-tooltip .tree-count-chips{margin-top:6px}:host-context(body.theme-light) .graph2-right .tree-count-chip.medium,:host-context(body.theme-light) .g2-tooltip .tree-count-chip.medium{color:#fff}.g2-selection-card{background:var(--graph-hover-bg);border:1px solid var(--border);border-radius:var(--ui-radius, 8px);overflow:hidden}.g2-sel-head{padding:11px 13px;border-bottom:1px solid var(--graph-divider);display:flex;align-items:center;gap:8px}.g2-sel-file-head{padding:11px 13px;border-bottom:1px solid var(--graph-divider);display:flex;flex-direction:column;gap:6px}.g2-sel-path{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;font-weight:600;font-size:12px;line-height:1.3;color:var(--text);word-break:break-all}.g2-sel-pkg-row{display:flex;align-items:center;gap:6px;min-width:0}.g2-sel-pkg{font-size:11px;color:var(--muted);word-break:break-all;min-width:0}.g2-sel-fullpath{padding:7px 13px;border-bottom:1px solid var(--graph-divider);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;font-size:10px;line-height:1.3;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.g2-sel-size{padding:5px 13px 7px;border-bottom:1px solid var(--graph-divider);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;font-size:10px;line-height:1.3;color:var(--muted);font-variant-numeric:tabular-nums}.g2-sel-dot{width:11px;height:11px;border-radius:50%;box-shadow:0 0 0 3px color-mix(in srgb,var(--dot) 22%,transparent);flex-shrink:0}.g2-sel-id{font:600 12px/1 ui-monospace,monospace;color:var(--text);word-break:break-all;flex:1;min-width:0}.g2-sel-grp{font:500 9px/1 ui-monospace,monospace;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;flex-shrink:0}.g2-sel-body{padding:11px 13px}.g2-sel-row{display:flex;justify-content:space-between;gap:12px;font-size:11px;padding:5px 0;border-bottom:1px solid var(--graph-divider);&:last-child{border-bottom:0}.k{color:var(--muted);flex-shrink:0}.v{color:var(--text);font-family:ui-monospace,monospace;word-break:break-all;text-align:right;min-width:0}}.g2-sel-section{padding:9px 13px;border-top:1px solid var(--graph-divider)}.g2-sel-section-label{font-family:inherit;font-weight:600;font-size:11px;line-height:1;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);opacity:.85;margin-bottom:5px}.g2-sel-section-empty{color:var(--muted);opacity:.55;font-size:11px;font-style:italic}.g2-sel-versions{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;font-size:11px;line-height:1.4;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.g2-sel-jumps{padding:11px 13px;display:flex;gap:5px;flex-wrap:wrap;border-top:1px solid var(--graph-divider)}.g2-sel-jump{background:var(--surface-active);border:1px solid var(--border);color:var(--accent);border-radius:var(--ui-radius, 4px);padding:2px 8px;font-family:inherit;font-weight:500;font-size:11px;line-height:1.3;&:hover{border-color:var(--accent)}}.g2-sel-file-list{list-style:none;margin:0;padding:0;max-height:110px;overflow:hidden auto;-webkit-app-region:no-drag;app-region:no-drag;&::-webkit-scrollbar{width:4px}&::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}& li{padding:0}}.g2-sel-file-link{display:flex;align-items:center;gap:6px;width:100%;background:transparent;border:0;border-radius:var(--ui-radius, 3px);padding:2px 6px;min-height:20.5px;font:400 11px/1.4 ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;color:var(--accent);text-align:left;&:hover{background:var(--graph-hover-bg)}.g2-sel-file-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.g2-sel-file-path{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}.g2-empty-state,.g2-sel-section-empty,.g2-dist-empty{cursor:default;user-select:none;-webkit-user-select:none}.g2-empty-state{background:var(--graph-hover-bg);border:1px dashed var(--border);border-radius:var(--ui-radius, 8px);padding:18px 14px;text-align:center;color:var(--muted);font-size:11px;line-height:1.5;& strong{color:var(--text);display:block;margin-bottom:4px;font-weight:500}}.g2-dist-bar{width:100%;height:5px;border-radius:3px;overflow:hidden;display:flex;background:var(--surface-active);margin-bottom:8px;>span{display:block;height:100%}}.g2-dist-list{display:flex;flex-direction:column;gap:0;flex:1 1 0;min-height:0;overflow-y:auto;overscroll-behavior:none;-webkit-app-region:no-drag;app-region:no-drag;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:var(--border) transparent;&::-webkit-scrollbar{width:5px}&::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}}.g2-dist-empty{color:var(--muted);opacity:.55;font-size:10px;font-style:italic;padding:6px 0;text-align:center}@media print{:host{display:none!important}}
2
- `,j=`.g2-dist-item{display:grid;grid-template-columns:8px 1fr auto auto;gap:8px;align-items:center;font-size:10px;padding:2px 6px;min-height:20.5px;margin:0 -6px;background:transparent;border:0;border-radius:var(--ui-radius, 4px);font-family:inherit;text-align:left;width:calc(100% + 12px);&:hover{background:var(--graph-hover-bg)}&.on{background:var(--surface-active);.g2-dist-name{color:var(--accent)}}.g2-dist-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.g2-dist-name{color:var(--muted);font-family:ui-monospace,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.g2-dist-count{font-family:ui-monospace,monospace;color:var(--text)}.g2-dist-pct{font-family:ui-monospace,monospace;color:var(--muted);width:36px;text-align:right;opacity:.85}}:host-context(body.theme-w95) *{overscroll-behavior:none}
3
- `,M=`.g2-zoom-ctrl{position:absolute;right:12px;bottom:12px;display:flex;flex-direction:column;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);overflow:hidden;z-index:3;box-shadow:var(--shadow-glass);& button{width:28px;height:28px;margin:0;padding:0;background:transparent;border:0;border-radius:0;color:var(--muted);border-bottom:1px solid var(--graph-divider);display:grid;place-items:center;font-family:inherit;font-size:13px;&:last-child{border-bottom:0}&:hover:not(:disabled){color:var(--accent);background:var(--surface-active)}&:disabled{opacity:.35}}}.g2-zoom-pct{font:500 9px/1 ui-monospace,monospace;color:var(--muted);padding:5px 0;text-align:center;border-bottom:1px solid var(--graph-divider)}.g2-zoom-ctrl .g2-zoom-fit-btn{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;font-weight:600;font-size:9px;line-height:1;letter-spacing:-.02em;text-transform:lowercase}
4
- `,N=`.tree-count-chips{display:inline-flex;gap:.25rem;flex-wrap:wrap}.tree-count-chip{display:inline-block;font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:.1rem .4rem;border-radius:3px;line-height:1.3;&.critical{background:var(--critical);color:#fff}&.high{background:var(--high);color:#fff}&.medium{background:var(--medium);color:#000}&.low{background:var(--low);color:var(--badge-low-text)}&.high_bug{background:var(--high-bug);color:#fff}&.bug{background:var(--bug);color:#fff}&.informational{background:var(--info);color:#fff}}
5
- `,P=`.toolbar{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem;padding:.6rem .75rem;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 10px);box-shadow:var(--shadow-glass);font-size:.825rem;& select{height:30px;box-sizing:border-box;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);padding:.25rem .4rem;font-size:.8rem;&:focus{border-color:var(--accent);outline:none}}& select.sort-select{padding:.3rem 1.7rem .3rem .55rem;min-width:8.5rem;font-weight:500;appearance:none;-webkit-appearance:none;background:transparent}:is(revalidate-filter,findings-sort){position:relative;display:inline-block;&:after{content:"";position:absolute;right:.7rem;top:50%;width:.35rem;height:.35rem;border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);transform:translateY(-70%) rotate(45deg);pointer-events:none}}& repo-filter{display:inline-block;min-width:0;max-width:100%}& analyzer-select{position:relative;display:inline-block}.analyzer-btn{display:inline-flex;align-items:center;gap:.45rem;height:30px;box-sizing:border-box;padding:.3rem .55rem;min-width:8.5rem;background:transparent;color:var(--text);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);font-family:inherit;font-size:.8rem;font-weight:500;&:hover{border-color:var(--accent)}&:focus-visible{border-color:var(--accent);outline:none}&.active{color:var(--accent)}.analyzer-btn-label{flex:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:18rem}& svg{color:var(--muted);flex-shrink:0}}& range-slider{color:var(--accent);margin:0 .25rem}.conf-vals{color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;font-variant-numeric:tabular-nums;.dash{color:var(--muted);margin:0 .15rem}}& conf-filter{position:relative;display:inline-flex;align-items:center;height:30px;box-sizing:border-box;padding:0 .55rem;gap:.5rem;background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);.conf-range-label{color:var(--muted);font-size:.7rem;font-weight:500;letter-spacing:.04em}& range-slider{margin:0}.conf-range{display:inline-flex;align-items:center;gap:.5rem}:is(.conf-range,.conf-range-label).replaced{visibility:hidden}:is(.conf-range,.conf-range-label).disabled{opacity:.35}& revalidate-filter{position:relative;display:inline-flex;align-items:center;flex:none;width:1.4rem;.sort-select{width:100%;border:0;height:auto;min-width:0;padding:0 .95rem 0 .2rem;font-size:.72rem;color:var(--muted);cursor:default;&:hover{color:var(--text)}}&:after{right:.25rem}&.replaces{position:static;.sort-select{position:absolute;inset:0 .55rem;width:auto;padding-left:0;color:var(--text)}&:after{right:.8rem}}.partial-cycle{position:absolute;right:1.75rem;top:50%;transform:translateY(-50%);z-index:1;padding:.1rem .3rem;border-radius:var(--ui-radius, 3px);font:inherit;font-size:.66rem;line-height:1.4;white-space:nowrap;cursor:default;--chip: var(--muted);color:var(--chip);border:1px solid rgb(from var(--chip) r g b / .45);background:rgb(from var(--chip) r g b / .1);&.included{--chip: var(--green)}&.excluded{--chip: var(--critical)}&.only{--chip: var(--yellow)}&:hover{background:rgb(from var(--chip) r g b / .22)}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px}}}}& input[type=text]{background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);padding:.25rem .4rem;font-size:.8rem;flex:1;min-width:8rem;&:focus{border-color:var(--accent);outline:none}}.result-count{color:var(--muted);margin-left:auto}}.analyzer-menu[popover]{position:fixed;inset:auto;margin:0;align-items:stretch;gap:.35rem;padding:.3rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);box-shadow:0 4px 12px #00000040;font-size:.825rem;-webkit-app-region:no-drag;app-region:no-drag}.analyzer-menu[popover]:not(:popover-open){display:none}.analyzer-menu[popover]:popover-open{display:flex}.analyzer-menu-sep{border-left:1px solid var(--border)}.analyzer-menu-col{display:flex;flex-direction:column;gap:1px;min-width:9rem;max-height:60vh;overflow-y:auto}.analyzer-menu-head{padding:.25rem .5rem .2rem;color:var(--muted);font-size:.68rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase}.analyzer-menu-item{display:flex;align-items:center;gap:.45rem;background:transparent;border:0;border-radius:var(--ui-radius, 3px);padding:.3rem .5rem;color:var(--text);text-align:left;font-family:inherit;font-size:.78rem;&:before{content:"";width:.8rem;flex-shrink:0}&.active:before{content:"\\2713";color:var(--accent)}&:hover{background:var(--surface)}&.zero{opacity:.45}.analyzer-menu-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:16rem}.analyzer-menu-count{color:var(--muted);font-size:.7rem;font-weight:600;font-variant-numeric:tabular-nums}}download-button{display:contents}.toolbar-export-btn{height:30px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;padding:0 .55rem;background:transparent;color:var(--muted);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);font-family:inherit;transition:background .12s,color .12s;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}& svg{display:block}}triage-selector,slide-triage-tabs{display:inline-flex;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden}.toolbar triage-selector{margin-left:auto}.toolbar-end{display:flex;align-items:center;gap:.75rem;margin-left:auto;&:not(:has(.toolbar-export-btn,annotation-filter,revalidation-switch)){display:none}}revalidation-switch{display:inline-flex;align-items:center;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden}.revalidation-toggle{height:100%;&:has(+.revalidation-detail){border-right:1px solid var(--border)}}.revalidation-conflicts{padding:0 .6rem;background:transparent;border:none;color:var(--text);font:inherit;font-size:.78rem;cursor:default;&:focus-visible{outline:1px solid var(--accent);outline-offset:-2px}}.revalidation-detail{display:inline-flex;align-items:center;justify-content:center;width:30px;height:100%;box-sizing:border-box;padding:0;background:transparent;border:none;color:var(--muted);cursor:default;transition:background .12s,color .12s,opacity .12s;&:hover:not(:disabled){color:var(--text);background:rgb(from var(--text) r g b / .06)}&.on{color:var(--accent);background:var(--surface-active)}&:disabled{opacity:.4;cursor:default}&:focus-visible{outline:1px solid var(--accent);outline-offset:-2px}}.revalidation-upstream{display:inline-flex;align-items:center;justify-content:center;width:30px;height:100%;box-sizing:border-box;padding:0;background:transparent;border:none;color:var(--muted);cursor:default;transition:background .12s,color .12s;&:not(:first-child){border-left:1px solid var(--border)}&:hover:not(:disabled){color:var(--text);background:rgb(from var(--text) r g b / .06)}&.on{color:var(--accent);background:var(--surface-active)}&:disabled{opacity:.4;cursor:default}&:focus-visible{outline:1px solid var(--accent);outline-offset:-2px}}triage-selector.is-empty{display:none}.triage-state-btn{background:transparent;border:none;color:var(--muted);padding:0 .55rem;display:inline-flex;align-items:center;gap:.35rem;transition:background .12s,color .12s;font-family:inherit;font-size:.8rem;cursor:default;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.active{background:var(--surface-active)}}.triage-state-btn.active.triage-state-deleted{color:var(--critical)}.triage-state-btn.active.triage-state-fixed{color:var(--green, #4ade80)}.triage-state-btn.active.triage-state-inprogress{color:var(--warning, #d97706)}.triage-state-btn.active.triage-state-invalid{color:var(--muted)}.triage-state-btn.active.triage-state-ignored{color:var(--accent, #2563eb)}entity-search{display:contents}view-mode-buttons{display:inline-flex;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden;.view-mode-btn{background:transparent;border:none;color:var(--muted);padding:.28rem .5rem;display:inline-flex;align-items:center;justify-content:center;transition:background .12s,color .12s;font-family:inherit;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.active{color:var(--accent);background:var(--surface-active)}& svg{display:block}}}:is(.revalidation-detail,.revalidation-upstream,.view-mode-btn){position:relative}:is(.revalidation-detail.on,.revalidation-upstream.on,.view-mode-btn.active,.g2-layout-tabs button[aria-pressed=true],.activity-views button[aria-pressed=true]):before{content:var(--selected-icon-ring-content, none);position:absolute;left:50%;top:50%;width:22px;height:22px;box-sizing:border-box;border:1px solid currentcolor;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none}source-filter{display:inline-flex;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden;.source-chip{background:transparent;border:none;color:var(--muted);padding:0 .55rem;display:inline-flex;align-items:center;transition:background .12s,color .12s;font-family:inherit;font-size:.75rem;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.active{color:var(--accent);background:var(--surface-active)}}}severity-mode-switch{display:inline-flex;align-items:center;gap:.4rem;height:30px;box-sizing:border-box;.severity-mode-label{color:var(--muted);font-size:.7rem;font-weight:500;letter-spacing:.04em}.severity-mode-chips{display:inline-flex;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden}.severity-mode-chip{background:transparent;border:none;color:var(--muted);padding:0 .55rem;display:inline-flex;align-items:center;transition:background .12s,color .12s;font-family:inherit;font-size:.75rem;cursor:default;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.active{color:var(--accent);background:var(--surface-active)}}}annotation-filter{display:inline-flex;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden;.annotation-chip{position:relative;background:transparent;border:none;color:var(--muted);padding:0 .45rem;display:inline-flex;align-items:center;transition:background .12s,color .12s;cursor:default;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.sel-with,&.sel-without{color:var(--accent);background:var(--surface-active)}&.sel-with .flag-cloth{fill:var(--accent)}&.sel-without:after{content:"";position:absolute;left:18%;right:18%;top:50%;height:1.5px;background:currentcolor;border-radius:1px;transform:rotate(-20deg);transform-origin:center;pointer-events:none}& svg{display:block}}}.toolbar-row{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center}.search-row{display:inline-flex;align-items:center;gap:.65rem;flex:1 1 14rem;min-width:12rem}toolbar-search,.toolbar-search{display:inline-flex;align-items:center;gap:.5rem;flex:1;min-width:0;height:30px;box-sizing:border-box;padding:0 .65rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);&:has(input:focus){border-color:var(--accent)}>svg{color:var(--muted);flex-shrink:0}&[kind] input[type=text],&.toolbar-search input[type=text]{flex:1;min-width:0;background:transparent;border:0;outline:none;color:var(--text);font:inherit;font-size:.8rem;padding:0;&:focus{border:0}&::placeholder{color:var(--muted)}&:focus::placeholder{color:transparent}&::-webkit-search-cancel-button{display:none}}}.search-negate-btn{flex-shrink:0;width:20px;height:20px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 3px);padding:0;transition:background .12s,color .12s;& svg{width:13px;height:13px}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .08)}&.active{color:var(--accent);background:rgb(from var(--text) r g b / .1)}}@media(width<=1200px){.toolbar-row.sev-row .search-row{flex-basis:100%}}severity-chips{display:inline-flex;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden}severity-chips>.sev-chip{display:inline-flex;align-items:center;gap:.35rem;background:transparent;border:0;padding:0 .4rem;color:var(--muted);font-family:inherit;font-size:.8rem;transition:background .12s,color .12s;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}.sd{width:8px;height:8px;border-radius:2px;flex-shrink:0;background:currentcolor}}:is(.sev-chip,.triage-state-btn,.team-slide-tab){.n{align-self:flex-start;margin:1px -5px 0;color:var(--muted);font-variant-numeric:tabular-nums;font-size:8.5px;font-weight:600;background:var(--bg);border-radius:999px;padding:0 3px;min-width:11px;text-align:center;line-height:11px}&.active .n{color:var(--text)}}.team-slide-tab .n{margin-top:calc(1px - .35rem)}severity-chips>button.sev-chip{&.active{color:var(--text)}&.critical .sd{background:var(--critical)}&.high .sd{background:var(--high)}&.medium .sd{background:var(--medium)}&.low .sd{background:var(--low)}&.high_bug .sd{background:var(--high-bug)}&.bug .sd{background:var(--bug)}&.informational .sd{background:var(--info)}&.critical.active{background:rgb(from var(--critical) r g b / .25)}&.high.active{background:rgb(from var(--high) r g b / .25)}&.medium.active{background:rgb(from var(--medium) r g b / .25)}&.low.active{background:rgb(from var(--low) r g b / .25)}&.high_bug.active{background:rgb(from var(--high-bug) r g b / .25)}&.bug.active{background:rgb(from var(--bug) r g b / .25)}&.informational.active{background:rgb(from var(--info) r g b / .25)}}triage-filter{display:inline-flex;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:3px;height:30px;gap:1px;& button{width:22px;height:22px;background:transparent;border:0;border-radius:var(--ui-radius, 4px);padding:0;display:grid;place-items:center;position:relative;transition:background .12s;&:hover{background:rgb(from var(--text) r g b / .06)}&.active{background:rgb(from var(--text) r g b / .08);box-shadow:0 0 0 1px var(--border)}}.td{width:12px;height:12px;border-radius:50%;border:1.5px solid currentcolor;background:transparent;transition:background .12s}& button.active .td{background:currentcolor}.td.none{border-style:dashed;color:var(--muted)}.td.r{color:#fc5855}.td.b{color:#30aff8}.td.g{color:#68c36d}.td.x{color:#6e7278}.count{position:absolute;top:-2px;right:-2px;background:var(--bg);color:var(--muted);font-size:8.5px;font-weight:600;border-radius:999px;padding:0 3px;min-width:11px;text-align:center;line-height:11px;font-variant-numeric:tabular-nums}}
6
- `;function F(e){let t=new Map;for(let n=0;n<e.length;n++){let r=e[n];t.has(r.a)||t.set(r.a,[]),t.has(r.b)||t.set(r.b,[]),t.get(r.a).push(n),t.get(r.b).push(n)}return t}function I(e){if(!e)return null;for(let t of b)if((e[t]??0)>0)return t;return null}function L(e,t,n,r,i,a,o,s={}){let c=s.pkgOf??u,d=new Set(t),f=new Map,p=new Map;for(let n of t){let t=(e[n].imports??[]).filter(e=>d.has(e));f.set(n,t);for(let e of t)p.has(e)||p.set(e,[]),p.get(e).push(n)}let m=t.map(t=>{let u=n.get(t),d=r?.get(t)??null,f=l(u),p=c(t)??`__own__`,m=I(u);return{id:t,file:t,pkg:p,packageInfo:s.packageInfoOf?.(t),x:0,y:0,deg:0,issue:m,totalIssues:f,own:u,subtree:d,size:typeof e[t]?.size==`number`?e[t].size:null,severitySet:i?.get(t)??null,colorSet:a?.get(t)??null,findings:o?.get(t)??null,isHub:!1,label:t.split(`/`).pop()??t}}),h=new Map(m.map(e=>[e.file,e])),g=new Map;for(let e of t)for(let t of f.get(e)??[]){let[n,r]=e<t?[e,t]:[t,e],i=`${n}\0${r}`,a=g.get(i);if(!a){let e=h.get(n),t=h.get(r);if(!e||!t)continue;a={a:n,b:r,cross:e.pkg!==t.pkg,fromLo:!1,fromHi:!1},g.set(i,a),e.deg++,t.deg++}e===n?a.fromLo=!0:a.fromHi=!0}let _=[...g.values()],v=F(_),y=new Map;for(let e of m)y.set(e.pkg,(y.get(e.pkg)??0)+1);let b=[...y.entries()].toSorted((e,t)=>t[1]-e[1]).map(([e])=>e),x=new Map;for(let e of m)x.has(e.pkg)||x.set(e.pkg,[]),x.get(e.pkg).push(e);let S={files:t,nodes:m,nodeByFile:h,edges:_,adj:v,importsOf:f,importedBy:p,packages:b,pkgCount:y,byPkg:x};return R(S),S}function R(e){for(let t of e.nodes)t.isHub=!1;for(let t of e.edges)t.cross&&(t.fromLo&&(e.nodeByFile.get(t.b).isHub=!0),t.fromHi&&(e.nodeByFile.get(t.a).isHub=!0));for(let t of e.nodes){let n=e.importedBy.get(t.file);(!n||n.length===0)&&(t.isHub=!0)}}function ee(e){let t=e.packages.map(t=>{let n=e.byPkg.get(t)??[],r={};for(let e of b)r[e]=0;let i=new Set,a=new Set,o=[],s=0,c=0,l=!1;for(let e of n){if(s+=e.totalIssues,e.own)for(let t of b)r[t]+=e.own[t]??0;if(e.severitySet)for(let t of e.severitySet)i.add(t);if(e.colorSet)for(let t of e.colorSet)a.add(t);typeof e.size==`number`&&(c+=e.size,l=!0),o.push(e.file)}return{file:t,pkg:t,label:z(t),fileCount:n.length,size:l?c:null,own:r,totalIssues:s,issue:I(r),severitySet:i.size>0?i:null,colorSet:a.size>0?a:null,pathText:o.join(`
7
- `).toLowerCase(),isHub:!0,x:0,y:0,deg:0}}),n=new Map(t.map(e=>[e.pkg,e])),r=new Map;for(let t of e.edges){if(!t.cross)continue;let i=e.nodeByFile.get(t.a)?.pkg,a=e.nodeByFile.get(t.b)?.pkg;if(!i||!a||i===a)continue;let[o,s]=i<a?[i,a]:[a,i],c=`${o}\0${s}`,l=r.get(c);l||(l={a:o,b:s,cross:!0,count:0,fromLo:!1,fromHi:!1},r.set(c,l),n.get(o).deg++,n.get(s).deg++),l.count++;let u=i===o;t.fromLo&&(u?l.fromLo=!0:l.fromHi=!0),t.fromHi&&(u?l.fromHi=!0:l.fromLo=!0)}let i=[...r.values()],a=F(i),o=new Map(t.map(e=>[e.pkg,[]]));for(let e of i)e.fromLo&&o.get(e.a).push(e.b),e.fromHi&&o.get(e.b).push(e.a);return{nodes:t,byPkg:n,nodeByFile:n,edges:i,adj:a,importsOf:o,ownSourcePackages:e.ownSourcePackages,entryPackages:e.entryPackages}}function te(e,t){if(t.size===0)return e;let n=e.nodes.filter(e=>!t.has(e.pkg)),r=new Map(n.map(e=>[e.file,e])),i=e=>r.has(e),a=e.edges.filter(e=>i(e.a)&&i(e.b)),o=e=>new Map([...e].filter(([e])=>i(e)).map(([e,t])=>[e,t.filter(i)])),s=e.packages.filter(e=>!t.has(e));return{...e,files:e.files.filter(i),nodes:n,nodeByFile:r,edges:a,adj:F(a),importsOf:o(e.importsOf),importedBy:o(e.importedBy),packages:s,pkgCount:new Map(s.map(t=>[t,e.pkgCount.get(t)])),byPkg:new Map(s.map(t=>[t,e.byPkg.get(t)]))}}function z(e){return _(e)}var B={links:`imports`,cellLinks:`file imports`,link:`Import`,linked:`imports`,members:`files`,mostImported:`Most imported`,outgoing:`Imports`,incoming:`Imported by`,importers:`importers`,cellHeading:`File imports`},V={links:`dependencies`,cellLinks:`dependencies`,link:`Dependency`,linked:`depends on`,members:`versions`,mostImported:`Most depended on`,outgoing:`Dependencies`,incoming:`Dependents`,importers:`dependents`,cellHeading:`Copies`},ne=e=>e.packagesOnly?V:B;function re(e,t){let n=new Set;for(let r of e.byPkg.get(t)??[])r.packageInfo?.version!==void 0&&n.add(r.packageInfo.version);return[...n].toSorted((e,t)=>e.localeCompare(t,`en`,{numeric:!0}))}function ie(e,n){if(!n||n===`/`||n===`__own__`)return e;for(let r of[`node_modules`,`dependencies`,t()]){let t=r+`/`+n+`/`,i=e.indexOf(t);if(i>=0)return e.slice(i+t.length)}return e.startsWith(n+`/`)?e.slice(n.length+1):e}var H=new Set([`@babel/runtime`,`minimalistic-assert`,`react`,`reselect`]),ae=300,oe=100;function U(e,t){return new Set([...e].filter(([,e])=>e>t).map(([e])=>e))}function W(e,t){let n=new Map;for(let[t,r]of e)t!==r&&H.has(r)&&n.set(r,(n.get(r)??0)+1);return U(n,t)}function se(e,t){let n=new Map,r=(t,r)=>{let i=e.nodeByFile.get(r)?.pkg;e.nodeByFile.get(t)?.pkg!==i&&H.has(i)&&n.set(i,(n.get(i)??0)+1)};for(let t of e.edges)t.fromLo&&r(t.a,t.b),t.fromHi&&r(t.b,t.a);return U(n,t)}var ce=new WeakMap,le=new WeakMap;function ue(e,t){return!e.packagesOnly&&e.nodes.length<=100&&!t}function de(e,t,n){let r=W([...e.importsOf].flatMap(([e,t])=>t.map(t=>[n(e),n(t)])),t);if(r.size===0)return e;let i=e=>!r.has(n(e)),a=e.nodes.filter(e=>i(e.file));return{...e,nodes:a,nodeByFile:new Map(a.map(e=>[e.file,e])),importsOf:new Map([...e.importsOf].filter(([e])=>i(e)).map(([e,t])=>[e,t.filter(i)])),cycleImportsOf:new Map([...e.cycleImportsOf].filter(([e])=>i(e)).map(([e,t])=>[e,new Set([...t].filter(i))]))}}function fe(e,t){if(!ue(e,t))return pe(e);if(le.has(e))return le.get(e);let n=new Map(e.nodes.map(t=>[t.file,[...new Set(e.importsOf.get(t.file)??[])]])),r=de({...e,importsOf:n,cycleImportsOf:p(e),fileLevel:!0},ae,t=>e.nodeByFile.get(t)?.pkg);r.directedEdges=[];for(let[e,t]of r.importsOf)for(let n of t)r.directedEdges.push({from:e,to:n});return le.set(e,r),r}function pe(e){if(ce.has(e))return ce.get(e);let t=ee(e);if(t.cycleImportsOf=p(e,e=>e.pkg),e.layerRoots?.appImports?.length>0){if(!t.byPkg.has(`__own__`)){let e={file:`__own__`,pkg:`__own__`,label:`own source`,fileCount:0,size:null,totalIssues:0,deg:0,x:0,y:0};t.nodes.push(e),t.byPkg.set(e.pkg,e)}t.importsOf.set(`__own__`,[...new Set([...t.importsOf.get(`__own__`)??[],...e.layerRoots.appImports])].filter(e=>e!==`__own__`&&t.byPkg.has(e))),t.cycleImportsOf.set(`__own__`,new Set([...t.cycleImportsOf.get(`__own__`)??[],...e.layerRoots.appImports].filter(e=>e!==`__own__`&&t.byPkg.has(e))))}t=de(t,oe,e=>e),t.byPkg=t.nodeByFile,t.importedBy=new Map(t.nodes.map(e=>[e.pkg,[]])),t.directedEdges=[];for(let[e,n]of t.importsOf)for(let r of n)t.importedBy.get(r).push(e),t.directedEdges.push({from:e,to:r});for(let e of t.nodes)e.deg=(t.importsOf.get(e.pkg)?.length??0)+t.importedBy.get(e.pkg).length;return ce.set(e,t),t}var me=[[`graph`,`Graph`,x(S)],[`layers`,`Layers`,x(C)],[`matrix`,`Matrix`,x(w)],[`dependencies`,`Dependencies`,x(T)],[`flow`,`Size flow`,D`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M3 3h18M3 10h7m4 0h7M3 20h6m3 0h9M5 3v7m13-7v7M6 10c0 5 10 5 10 10m2-10c0 5-12 5-12 10"/></svg>`]];function he(e,t,n=null,r={}){let a=t.showBundleLayouts&&i.bundleLayout===`layers`,o=t.showBundleLayouts&&i.bundleLayout===`matrix`,s=t.showBundleLayouts&&i.bundleLayout===`dependencies`,c=t.showBundleLayouts&&i.bundleLayout===`flow`,l=a?`layers`:o?`matrix`:s?`dependencies`:c?`flow`:`graph`,u=t.showBundleLayouts?D`<div class="g2-layout-tabs" role="group" aria-label="Bundle layout">${me.filter(([e])=>t.layouts?.includes(e)??!0).map(([e,t,n])=>D`<button type="button" data-g2-layout="${e}" aria-label="${t}" aria-pressed="${String(e===l)}">${n}</button>`)}</div>`:null,d=t.extraTopRow,f=t.hideAllFiles??!1,p=t.triageCounts??{inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},m=t.triageStates??[`inprogress`,`fixed`,`invalid`,`deleted`,`ignored`],h={};for(let e of b)h[e]=0;for(let t of e.nodes)if(t.severitySet)for(let e of t.severitySet)h[e]!==void 0&&h[e]++;let g=b.some(e=>h[e]>0||i.selectedSeverities.has(e)),_=[`none`,`red`,`blue`,`green`,`gray`],v={none:0,red:0,blue:0,green:0,gray:0};for(let t of e.nodes)if(t.colorSet)for(let e of t.colorSet)v[e]!==void 0&&v[e]++;let y=_.some(e=>v[e]>0||i.selectedColors.has(e)),x=D`<triage-selector variant="graph" .counts="${p}" .states="${m}"></triage-selector>`,S=f?null:D`<mode-switch label="All files" .checked="${i.showAll}" data-g2-show-all></mode-switch>`,C=!e.packagesOnly&&(c||(s?e.nodes.length<=100:!a&&!o&&(t.showPackagesView??!1)))?D`<mode-switch label="Packages" .checked="${c?i.flowPackagesView:s?i.dependencyPackagesView:i.packagesView}" data-g2-packages-view></mode-switch>`:null,w=e.reasons?.length>0?D`<bundle-scope-selector class="g2-reason-scope" .reasons="${e.reasons.map(e=>({id:`reason:${e}`,label:e}))}" .value="${i.bundleReason?`reason:${i.bundleReason}`:``}" label="Filter files" @scope-change="${e=>e.currentTarget.dispatchEvent(new CustomEvent(`bundle-graph-reason-change`,{detail:{reason:e.detail.value.replace(/^reason:/u,``)||null},bubbles:!0,composed:!0}))}"></bundle-scope-selector>`:null,T=g?D`<severity-chips .counts="${h}" .selected="${[...i.selectedSeverities]}" kind="graph"></severity-chips>`:null,E=y?D`<triage-filter .counts="${v}" .selected="${[...i.selectedColors]}" kind="graph"></triage-filter>`:null,O=D`<div class="toolbar-search g2-path-filter-wrap"><svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg> <input type="text" class="g2-path-filter" id="g2-path-filter" placeholder="filter path/package…" .value="${i.pathFilter}"> <button type="button" class="g2-path-filter-clear" id="g2-path-filter-clear" aria-label="Clear filter">✕</button></div>`,k=D`<button type="button" class="g2-icon-btn" id="g2-fullscreen" aria-label="Toggle fullscreen">⛶</button>`;if(t.showBundleLayouts){let e=(t.hasIssues??!1)&&i.bundleIssues,a=t.hasIssues?D`<mode-switch class="g2-issues-switch" label="Issues" .checked="${i.bundleIssues}" data-g2-bundle-issues></mode-switch>`:null,o=a&&r.issuesWrapped;return D`<div class="graph2-topbar"><div class="graph2-topbar-row graph2-topbar-row-main graph2-topbar-row-pinned toolbar-row"><div class="g2-topbar-controls">${u} ${O} ${C} ${n} ${w} ${o?null:a}</div>${k}</div>${e||o?D`<div class="graph2-topbar-row graph2-topbar-row-issues toolbar-row sev-row">${o?a:null} ${e?D`${T}${E}${x}`:null}</div>`:null}</div>`}return D`<div class="graph2-topbar">${d?D`<div class="graph2-topbar-row graph2-topbar-row-extra toolbar-row">${d} ${S} ${C}<div class="g2-spacer"></div>${x}</div>`:null}<div class="graph2-topbar-row graph2-topbar-row-main toolbar-row sev-row">${u} ${w} ${T} ${E} ${O} ${d?null:S} ${d?null:C} ${n}<div class="g2-spacer"></div>${d?null:x} ${k}</div></div>`}function ge(e,t){let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean),i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i++;let a=n.length-i,o=r.slice(i).join(`/`);return a===0?`./`+o:`../`.repeat(a)+o}function G(e,t){if(!t&&t!==``)return e;let n=ge(t,e);return n.length<e.length?n:e}function _e(e,t,n,r){let i=n.length;if(i===0)return D`<div class="g2-sel-section"><div class="g2-sel-section-label">${t} (${i})</div><div class="g2-sel-section-empty">none</div></div>`;let a=n.map(e=>({file:e,display:G(e,r)}));return a.sort((e,t)=>e.display.localeCompare(t.display)),D`<div class="g2-sel-section"><div class="g2-sel-section-label">${t} (${i})</div><ul class="g2-sel-file-list">${a.map(({file:t,display:n})=>{let r=e.nodeByFile.get(t),i=r?d(r.pkg):`#666`;return D`<li><button type="button" class="g2-sel-file-link" data-g2-select="${t}"><span class="g2-sel-file-dot" style="${v({background:i})}"></span> <span class="g2-sel-file-path" data-tooltip-truncated data-tooltip="${t}">${n}</span></button></li>`})}</ul></div>`}function ve(e){if(!e)return D`<div class="g2-sel-section-empty">none</div>`;let t=[`critical`,`high`,`medium`,`low`,`high_bug`,`bug`,`informational`].filter(t=>(e[t]??0)>0);return t.length===0?D`<div class="g2-sel-section-empty">none</div>`:D`<div class="tree-count-chips">${t.map(t=>D`<span class="${`tree-count-chip ${t}`}">${e[t]} ${t.replaceAll(`_`,` `)}</span>`)}</div>`}function K(e){let t=0;for(let n of e.edges)n.cross&&t++;let n=e.edges.length-t,r=0;for(let t of e.nodes)r+=t.totalIssues;let a=e.supportsLayers&&(e.packagesOnly||i.bundleLayout===`dependencies`)&&!i.focusedPkg?fe(e,i.dependencyPackagesView):null,o=a?.nodes.length??e.nodes.length,s=a?.directedEdges.length??e.edges.length,c=o===0?`0.0`:(s*2/o).toFixed(1),l=z(i.focusedPkg);return D`<main class="graph2-stage"><canvas id="g2-canvas"></canvas>${i.focusedPkg?D`<div class="g2-stage-overlay"><button type="button" class="g2-back-btn" id="g2-back-to-full">← ${l}</button></div>`:null}<div id="g2-focus-overlay-slot" class="g2-stage-overlay-tr"></div><div class="g2-stage-stats">${!a||a.fileLevel?D`<span><b>${e.nodes.length}</b> files</span>`:null} <span><b>${a&&!a.fileLevel?a.nodes.length:e.packages.length}</b> packages</span> <span><b>${s}</b> ${a?`dependencies`:D`edges (${n} intra · ${t} cross)`}</span> ${e.issuesHidden?null:D`<span><b>${r}</b> issues</span>`} <span>avg degree <b>${c}</b></span></div><div class="g2-zoom-ctrl"><button id="g2-zoom-in" aria-label="Zoom in">+</button><div class="g2-zoom-pct" id="g2-zoom-pct">100%</div><button id="g2-zoom-out" aria-label="Zoom out">−</button> <button id="g2-zoom-fit" class="g2-zoom-fit-btn" aria-label="Fit to view">fit</button></div><div class="g2-tooltip" id="g2-tooltip"></div></main>`}function ye(e){if(e.packagesOnly||e.supportsLayers&&i.bundleLayout===`dependencies`)return null;let t=null;if(i.selected){let n=e.nodeByFile.get(i.selected);n&&(t=n.pkg)}else i.solo&&(t=i.solo);if(!t||(e.pkgCount.get(t)??0)<=1||i.focusedPkg===t)return null;let n=z(t);return D`<button type="button" class="g2-focus-pkg-btn" data-g2-focus-pkg="${t}" aria-label="${`Focus on ${n}'s graph`}" data-tooltip="${`Focus on ${n}'s graph`}"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M8 4.6 L4 11 M8 4.6 L12 11 M5 11.4 L11 11.4" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/><circle cx="8" cy="3.6" r="2" fill="currentColor"/><circle cx="3.6" cy="11.4" r="2" fill="currentColor"/><circle cx="12.4" cy="11.4" r="2" fill="currentColor"/></svg></button>`}function be(){return D`<aside class="graph2-right"><div class="g2-panel-title">Selection</div><div id="g2-selection-area"></div><div id="g2-top-pkgs-block"></div></aside>`}function xe(e){if(Te(e)){let t=pe(e),n=t.nodes.toSorted((e,n)=>t.importedBy.get(n.pkg).length-t.importedBy.get(e.pkg).length||e.pkg.localeCompare(n.pkg)).map(e=>e.pkg);return D`<div class="g2-panel-title">Packages · ${ne(e).importers}</div>${Ee(t,n,!0)}`}let t=i.showAll&&e.nodes.length>0&&e.nodes.every(e=>typeof e.size==`number`),n=e.nodes.some(e=>e.totalIssues>0),a=i.topPkgsTab;return a===`size`&&!t&&(a=`files`),a===`issues`&&!n&&(a=`files`),D`<div class="g2-panel-title g2-panel-title-row"><span>Packages</span><div class="g2-mini-tabs">${n?D`<button type="button" class="${r({"g2-mini-tab":!0,on:a===`issues`})}" data-g2-top-pkgs="issues">Issues</button>`:null} <button type="button" class="${r({"g2-mini-tab":!0,on:a===`files`})}" data-g2-top-pkgs="files">Files</button> ${t?D`<button type="button" class="${r({"g2-mini-tab":!0,on:a===`size`})}" data-g2-top-pkgs="size">Size</button>`:null}</div></div>${we(e,a)}`}function q(e,t={}){if(Te(e))return J(e,pe(e),i.solo);let n=i.selected;if(n){let r=e.nodeByFile.get(n);return r?Se(e,r,n,t):D`<div class="g2-empty-state"><strong>File not in current view</strong>Adjust filters or pick another file.</div>`}return i.solo?i.solo===`__own__`&&!e.pkgCount.has(`__own__`)&&e.layerRoots?.appImports.length>0?D`<div class="g2-empty-state"><strong>App</strong>App source is not included in this view. Connections come from its recorded imports.</div>`:Ce(e,i.solo):D`<div class="g2-empty-state">Click a node or a package row to inspect.</div>`}function Se(e,t,r,i){let a=d(t.pkg),o=z(t.pkg),s=ie(r,t.pkg),c=e.importedBy.get(r)??[],l=e.importsOf.get(r)??[],u=r.lastIndexOf(`/`),f=u>=0?r.slice(0,u):``;return D`<div class="g2-selection-card"><div class="g2-sel-file-head"><div class="g2-sel-path">${s}</div><div class="g2-sel-pkg-row"><span class="g2-sel-dot" style="${v({"--dot":a,background:a})}"></span> <span class="g2-sel-pkg">${o}</span></div></div><div class="g2-sel-fullpath" data-tooltip-truncated data-tooltip="${r}">${r}</div>${n(t.size)?D`<div class="g2-sel-size">${n(t.size)}</div>`:null}<div class="g2-sel-section"><div class="g2-sel-section-label">Own findings</div>${ve(t.own)}</div><div class="g2-sel-section"><div class="g2-sel-section-label">Subtree findings</div>${ve(t.subtree)}</div><div class="g2-sel-jumps">${t.totalIssues>0&&i.findingsJump!==!1?D`<button type="button" class="g2-sel-jump" data-g2-jump-findings="${r}">Findings →</button>`:null} ${i.isBundleContext?t.origFile?D`<button type="button" class="g2-sel-jump" data-bundle-view-source="${t.origFile}">View source →</button>`:null:D`<button type="button" class="g2-sel-jump" data-g2-jump-file="${r}">Files →</button>`}</div>${_e(e,`Imported by`,c,f)} ${_e(e,`Imports`,l,f)}</div>`}function Ce(e,t){let n=e.nodes.filter(e=>e.pkg===t),r=n.length;if(r===0)return D`<div class="g2-empty-state"><strong>Package has no files in view</strong> Toggle "All files" to widen the file set, or pick another package.</div>`;let i=d(t),a=z(t),o={};for(let e of b)o[e]=0;for(let e of n)if(e.own)for(let t of b)o[t]+=e.own[t]??0;let s=0,c=0;for(let n of e.edges){let r=e.nodeByFile.get(n.a),i=e.nodeByFile.get(n.b);!r||!i||(r.pkg===t&&i.pkg===t?c++:(r.pkg===t||i.pkg===t)&&s++)}let l=0;for(let e of n)e.isHub&&l++;let u=new Set;for(let r of n)for(let n of e.importedBy.get(r.file)??[]){let r=e.nodeByFile.get(n);r&&r.pkg!==t&&u.add(n)}return D`<div class="g2-selection-card"><div class="g2-sel-head"><span class="g2-sel-dot" style="${v({"--dot":i,background:i})}"></span> <span class="g2-sel-id">${a}</span> <span class="g2-sel-grp">package</span></div><div class="g2-sel-body"><div class="g2-sel-row"><span class="k">Files</span><span class="v">${r}</span></div><div class="g2-sel-row"><span class="k">Hubs</span><span class="v">${l}</span></div><div class="g2-sel-row"><span class="k">Intra edges</span><span class="v">${c}</span></div><div class="g2-sel-row"><span class="k">Cross edges</span><span class="v">${s}</span></div></div><div class="g2-sel-section"><div class="g2-sel-section-label">Findings</div>${ve(o)}</div>${_e(e,`Imported by`,[...u])}</div>`}function we(e,t){let a=e.nodes.length||1,o=t??i.topPkgsTab,s=i.selectedSeverities,c=i.selectedColors,l=!e.issuesHidden&&s.size>0,u=!e.issuesHidden&&c.size>0,f=l||u,p=new Map,m=new Map,h=0,g=0;for(let t of e.nodes){let e;if(f){if(e=0,t.findings)for(let n of t.findings)l&&!s.has(n.severity)||u&&!c.has(n.color)||e++}else e=t.totalIssues;p.set(t.pkg,(p.get(t.pkg)??0)+e),h+=e,typeof t.size==`number`&&(m.set(t.pkg,(m.get(t.pkg)??0)+t.size),g+=t.size)}let _;_=o===`issues`?e.packages.filter(e=>(p.get(e)??0)>0).toSorted((t,n)=>{let r=p.get(t)??0,i=p.get(n)??0;return i===r?(e.pkgCount.get(n)??0)-(e.pkgCount.get(t)??0):i-r}):o===`size`?e.packages.filter(e=>(m.get(e)??0)>0).toSorted((t,n)=>{let r=m.get(t)??0,i=m.get(n)??0;return i===r?(e.pkgCount.get(n)??0)-(e.pkgCount.get(t)??0):i-r}):[...e.packages].toSorted((t,n)=>{let r=e.pkgCount.get(t)??0,i=e.pkgCount.get(n)??0;return i===r?(p.get(n)??0)-(p.get(t)??0):i-r});let b=t=>o===`issues`?h>0?((p.get(t)??0)/h*100).toFixed(2):`0`:o===`size`?g>0?((m.get(t)??0)/g*100).toFixed(2):`0`:(e.pkgCount.get(t)/a*100).toFixed(2),x=o===`issues`?`No packages with issues`:o===`size`?`No packages with size`:`No packages`;return D`<div class="g2-dist-bar">${e.packages.map(e=>{let t=d(e);return D`<span style="${v({background:t,width:`${b(e)}%`})}"></span>`})}</div><div class="g2-dist-list">${_.length===0?D`<div class="g2-dist-empty">${x}</div>`:null} ${y(_,e=>e,t=>{let s=d(t),c=e.pkgCount.get(t)??0,l=p.get(t)??0,u=m.get(t)??0,f=o===`issues`?l:o===`size`?n(u):c,_=o===`issues`?h>0?(l/h*100).toFixed(1):`0.0`:o===`size`?g>0?(u/g*100).toFixed(1):`0.0`:(c/a*100).toFixed(1),y=z(t),b=i.solo===t;return D`<button type="button" class="${r({"g2-dist-item":!0,on:b})}" data-g2-pkg="${t}"><span class="g2-dist-dot" style="${v({background:s})}"></span><span class="g2-dist-name" data-tooltip-truncated data-tooltip="${y}">${y}</span><span class="g2-dist-count">${f}</span><span class="g2-dist-pct">${_}%</span></button>`})}</div>`}function Te(e){return(e.packagesOnly||e.supportsLayers&&i.bundleLayout===`dependencies`&&!i.focusedPkg)&&!ue(e,i.dependencyPackagesView)}function Ee(e,t,n=!1){return D`<div class="g2-dist-list">${y(t,e=>e,t=>D`<button type="button" class="${r({"g2-dist-item":!0,on:i.solo===t})}" data-g2-pkg="${t}"><span class="g2-dist-dot" style="${v({background:d(t)})}"></span> <span class="g2-dist-name">${z(t)}</span> ${n?D`<span class="g2-dist-count">${e.importedBy.get(t).length}</span>`:null}</button>`)}</div>`}function J(e,t,n){let r=t.byPkg.get(n),i=ne(e);if(!r)return D`<div class="g2-empty-state">Select a package to trace its ${i.links}.</div>`;let a=t.importedBy.get(n)??[],o=t.importsOf.get(n)??[],s=e.packagesOnly?re(e,n):[];return D`<div class="g2-selection-card"><div class="g2-sel-head"><span class="g2-sel-dot" style="${v({background:d(n)})}"></span> <span class="g2-sel-id">${r.label}</span></div>${r.totalIssues?D`<div class="g2-sel-section">${ve(r.own)}</div>`:null} ${s.length>0?D`<div class="g2-sel-section"><div class="g2-sel-section-label">${s.length===1?`Version`:`Versions (${s.length})`}</div><div class="g2-sel-versions">${s.join(`, `)}</div></div>`:null}<div class="g2-sel-section"><div class="g2-sel-section-label">${i.incoming} (${a.length})</div>${Ee(t,a.toSorted())}</div><div class="g2-sel-section"><div class="g2-sel-section-label">Dependencies (${o.length})</div>${Ee(t,o.toSorted())}</div></div>`}function De(e,t,n){return Math.min(24,Math.max(1,t-196-12)/Math.max(1,e),Math.max(1,n-118-12)/Math.max(1,e))}function Oe(e,t,n,r){return Math.max(Math.min(18,De(t,n,r)),Math.min(27,e))}function ke(e,t,n,r){let i=Math.floor((e-196+r.x)/r.cell),a=Math.floor((t-118+r.y)/r.cell);return e<196&&t>=118&&a>=0&&a<n.rows.length?{row:a,col:null}:t<118&&e>=196&&i>=0&&i<n.rows.length?{row:i,col:null}:e>=196&&t>=118&&a>=0&&i>=0&&a<n.rows.length&&i<n.rows.length?{row:a,col:i}:null}function Ae(e){if(!e.file)return e.label;let t=`node_modules/${e.pkg}/`;return e.file.includes(t)?e.file.slice(e.file.indexOf(t)+t.length):e.file}function je(e,t,n,{width:r,height:i,theme:a,colorOf:o,hover:s,selected:c,dimmed:l,rows:u=`importers`}){let{cell:d,x:f,y:p}=n,{rows:m}=t,h=e=>196+e*d-f,g=e=>118+e*d-p,_=Math.max(0,Math.floor(p/d)),v=Math.min(m.length,Math.ceil((i-118+p)/d)),y=Math.max(0,Math.floor(f/d)),b=Math.min(m.length,Math.ceil((r-196+f)/d)),x=s??c;e.clearRect(0,0,r,i),e.fillStyle=a.bg,e.fillRect(0,0,r,i),e.save(),e.beginPath(),e.rect(196,118,r-196,i-118),e.clip();let S=[];for(let e=0;e<m.length;e++){let t=S.at(-1),n=m[e];t&&t.component===n.component?t.end=e+1:S.push({component:n.component,start:e,end:e+1,cyclic:n.cyclic})}for(let t of S)t.cyclic&&(e.strokeStyle=a.cycle+`85`,e.lineWidth=1,e.strokeRect(h(t.start),g(t.start),(t.end-t.start)*d,(t.end-t.start)*d));if(x&&(e.fillStyle=a.highlight,e.fillRect(196,g(x.row),r-196,d),e.fillRect(h(x.col??x.row),118,d,i-118)),e.strokeStyle=a.grid,e.lineWidth=1,d>=9){e.beginPath();for(let t=_;t<=v;t++)e.moveTo(196,g(t)+.5),e.lineTo(r,g(t)+.5);for(let t=y;t<=b;t++)e.moveTo(h(t)+.5,118),e.lineTo(h(t)+.5,i);e.stroke()}let C=t.visibleCells.reduce((e,t)=>Math.max(e,t.count),1),w=d>=8?2:.25;for(let n of t.visibleCells)n.row<_||n.row>=v||n.col<y||n.col>=b||(e.globalAlpha=l(m[n.row])&&l(m[n.col])?.12:.35+.65*Math.log1p(n.count)/Math.log1p(C),e.fillStyle=n.cyclic&&d<10?a.cycle:o(m[n.row].pkg),e.fillRect(h(n.col)+w,g(n.row)+w,Math.max(1,d-2*w),Math.max(1,d-2*w)),n.cyclic&&n.from!==n.to&&d>=10&&(e.fillStyle=a.cycle,e.fillRect(h(n.col)+d-5,g(n.row)+2,3,3)));e.globalAlpha=1,c&&(e.strokeStyle=a.text,e.lineWidth=2,c.col===null?e.strokeRect(197,g(c.row)+1,r-196-2,d-2):e.strokeRect(h(c.col)+1,g(c.row)+1,d-2,d-2)),e.restore(),e.fillStyle=a.surface,e.fillRect(0,0,r,118),e.fillRect(0,0,196,i),e.font=`11px ui-monospace, monospace`,e.textBaseline=`middle`;let T=Math.max(1,Math.ceil(14/d));for(let n=_;n<v;n++){if(n%T&&n!==x?.row)continue;e.save(),e.beginPath(),e.rect(5,111,186,i-118+7),e.clip();let r=g(n)+d/2;n===x?.row&&(e.fillStyle=a.highlight,e.fillRect(0,g(n),196,Math.max(d,14))),e.fillStyle=o(m[n].pkg),e.fillRect(8,r-3,5,6),e.fillStyle=n===x?.row||t.matches.size<t.totalRows&&t.matches.has(m[n].id)?a.text:a.muted,e.fillText(`${m[n].file?` `:``}${Ae(m[n])}`,20,r),e.restore()}let E=Math.max(1,Math.ceil(17/d));for(let t=y;t<b;t++)t%E&&t!==(x?.col??x?.row)||(e.save(),e.beginPath(),e.rect(189,22,r-196+7,96),e.clip(),e.translate(h(t)+d/2,108),e.rotate(-Math.PI/4),e.fillStyle=t===(x?.col??x?.row)?a.text:a.muted,e.fillText(Ae(m[t]),0,0,115),e.restore(),e.fillStyle=o(m[t].pkg),e.fillRect(h(t)+1,114,Math.max(1,d-2),3));e.fillStyle=a.muted,e.font=`10px ui-monospace, monospace`,e.fillText(`${u.toUpperCase()} \u2193`,14,104),e.fillText(`DEPENDENCIES →`,204,12),e.strokeStyle=a.border,e.beginPath(),e.moveTo(195.5,118),e.lineTo(195.5,i),e.moveTo(196,117.5),e.lineTo(r,117.5),e.stroke(),m.length===0&&(e.fillStyle=a.muted,e.fillText(`No matching dependencies`,216,148))}var Y=e=>e.toLocaleString(`en-US`);function Me(e,t,n){return D`<button class="g2-dist-item matrix-row-link" @click="${()=>n(e.id)}"><span class="g2-dist-dot" style="${v({background:d(e.pkg)})}"></span><span class="g2-dist-name" data-tooltip-truncated data-tooltip="${e.label}">${e.label}</span><span class="g2-dist-count">${Y(t)}</span></button>`}function Ne(e,t){return e.packagesOnly?re(e,t.pkg).length:t.files.length}function Pe(e,t,r,{select:i,expand:a,expanded:o,neighborhood:s,focus:c,clear:l}){let u=e.byId.get(r?.from),d=e.byId.get(r?.to),p=t.packagesOnly,m=ne(t),h=e=>t.nodeByFile.get(e)?.origFile??e;if(!u){let n=[...e.rows].toSorted((e,t)=>t.importers-e.importers).slice(0,15),r=p?[...e.byId.values()].reduce((e,t)=>e+t.dependencies,0):e.importCount;return D`<div class="matrix-metrics">${p?null:D`<span><b>${Y(t.nodes.length)}</b>files</span>`}<span><b>${Y(t.packages.length)}</b>packages</span><span><b>${Y(r)}</b>${m.links}</span></div><p class="matrix-empty">Select a row to inspect a package.<br>Select a cell to see the ${m.members} behind a dependency.</p><h4>${m.mostImported}</h4>${n.map(e=>Me(e,e.importers,i))} ${e.cycleCount?D`<h4>Cyclic groups <b>${e.cycleCount}</b></h4>${e.rows.filter(e=>e.cyclic).slice(0,12).map(e=>Me(e,e.outgoing,i))}`:null}`}let g=d?e.cells.get(u.id)?.get(d.id):null,_=g?.cycleCount<g?.count?`${Y(g.cycleCount)} of ${Y(g.count)} ${m.cellLinks} participate in a cycle`:`${m.link} participates in a cycle`,v=Map.groupBy(g?.examples??[],([,e])=>e),y=u.cyclic?[...e.byId.values()].filter(e=>e.component===u.component).length:0,b=[...e.cells.get(u.id)?.values()??[]].filter(e=>e.to!==u.id).toSorted((e,t)=>t.count-e.count),x=[...e.cells.values()].map(e=>e.get(u.id)).filter(e=>e&&e.from!==u.id).toSorted((e,t)=>t.count-e.count),S=(e,t)=>p?D`<span class="matrix-import-copy">${t}</span>`:D`<button data-bundle-view-source="${h(e)}">${t}</button>`,C=p?null:u.file?D`<button @click="${()=>a(u.pkg)}">Collapse package</button><button data-bundle-view-source="${h(u.file)}">View source</button>`:D`<button @click="${()=>a(u.pkg)}">${o.has(u.pkg)?`Collapse files`:`Expand files`}</button>`;return D`<div class="matrix-panel-head"><button class="matrix-selected-name" @click="${()=>i(u.id)}">${u.label}</button><button type="button" class="detail-action" @click="${l}" aria-label="Clear matrix selection">×</button></div>${d?D`<div class="matrix-direction">${m.linked} →</div><button class="matrix-selected-name" @click="${()=>i(d.id)}">${d.label}</button>`:null} ${(d?g?.cyclic:u.cyclic)?D`<span class="matrix-cycle-label">${d?_:`Cyclic group \xB7 ${y} members`}</span>`:null}<div class="matrix-metrics"><span><b>${Y(d?g?.count??0:Ne(t,u))}</b>${d?m.cellLinks:m.members}</span>${p?null:D`<span><b>${n(u.size)}</b>source size</span>`}</div><div class="matrix-actions">${C} <button aria-pressed="${String(s===u.id)}" @click="${()=>c(u.id)}">Neighborhood</button></div>${d?D`<h4>${m.cellHeading}</h4>${v.size>0?[...v].map(([e,n])=>D`<div class="matrix-import-group">${p?D`<span class="matrix-import-copy matrix-import-target" data-tooltip-truncated data-tooltip="${e}">${e}</span>`:D`<button class="matrix-import-target" data-bundle-view-source="${h(e)}" data-tooltip-truncated data-tooltip="${e}">${e}</button>`}<ul class="matrix-import-sources" aria-label="${m.incoming}">${n.map(([n])=>D`<li>${S(n,D`<span aria-hidden="true">←</span><span data-tooltip-truncated data-tooltip="${n}">${n}</span>`)} ${f(h(n),h(e),t.ownSourceFiles?.has(e),t.ownSourceFiles?.has(n))?null:D`<span class="matrix-import-excluded">Excluded from cycles</span>`}</li>`)}</ul></div>`):D`<p class="matrix-empty">No direct ${m.links} in this direction.</p>`} ${g&&g.count>g.examples.length?D`<p class="matrix-empty">Showing ${g.examples.length} of ${Y(g.count)} ${m.links}.</p>`:null} ${d.id!==u.id&&e.cells.get(d.id)?.has(u.id)?D`<h4>Reverse direction</h4><button class="g2-dist-item matrix-reverse-link" @click="${()=>i(d.id,u.id)}">← ${Y(e.cells.get(d.id).get(u.id).count)} ${m.cellLinks}</button>`:null}`:D`<h4>${m.outgoing} <b>${b.length}</b></h4>${b.slice(0,60).map(t=>Me(e.byId.get(t.to),t.count,e=>i(u.id,e)))} ${b.length>60?D`<p class="matrix-empty">Showing the 60 strongest of ${b.length} dependencies.</p>`:null}<h4>${m.incoming} <b>${x.length}</b></h4>${x.slice(0,60).map(t=>Me(e.byId.get(t.from),t.count,e=>i(e,u.id)))} ${x.length>60?D`<p class="matrix-empty">Showing the 60 strongest of ${x.length} ${m.importers}.</p>`:null}`}`}var Fe=`:host{display:contents}*{box-sizing:border-box}button,select{font:inherit;color:var(--text);border:1px solid var(--border);background:var(--surface);border-radius:var(--ui-radius, 4px);padding:4px 7px;cursor:default}button:hover,button[aria-pressed=true]{background:var(--graph-hover-bg);border-color:var(--muted)}button:focus-visible,select:focus-visible,canvas:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.matrix-layout{display:contents;color:var(--text);font-size:12px}.matrix-stage{grid-area:stage;position:relative;overflow:hidden;min-width:0;min-height:0;background:var(--graph-canvas-bg)}.matrix-order{position:absolute;top:12px;left:14px;max-width:calc(var(--matrix-label-width) - 28px);height:30px;padding:3px 6px;border-radius:var(--ui-radius, 6px);font-size:11px}canvas{display:block;width:100%;height:100%;touch-action:none}.matrix-hover{position:absolute;bottom:10px;left:calc(var(--matrix-label-width) + 10px);max-width:max(0px,calc(100% - var(--matrix-label-width) - 160px));padding:5px 8px;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--surface);pointer-events:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px}.matrix-panel{grid-area:right;min-height:0;overflow:auto;padding:12px;border-left:1px solid var(--border);background:var(--surface)}.matrix-panel-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-right:var(--graph-fullscreen-inset, 0)}h4{margin:20px 0 7px;font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;display:flex;justify-content:space-between}.matrix-metrics{display:flex;gap:14px;margin:15px 0;color:var(--muted);font-size:10px}.matrix-metrics:first-child{margin-top:0;padding-right:var(--graph-fullscreen-inset, 0)}.matrix-metrics b{display:block;font-size:16px;font-weight:500;color:var(--text);font-variant-numeric:tabular-nums;margin-bottom:3px}.matrix-empty{color:var(--muted);font-size:11px;line-height:1.6;cursor:default;user-select:none;-webkit-user-select:none}.matrix-row-link{grid-template-columns:6px minmax(0,1fr) auto}.matrix-row-link .g2-dist-dot{width:6px;height:6px;border-radius:2px}.matrix-row-link .g2-dist-name{color:var(--text)}.matrix-row-link .g2-dist-count{color:var(--muted)}.matrix-reverse-link{grid-template-columns:1fr}.matrix-selected-name{display:block;background:transparent;border:0;text-align:left;padding:0;margin:14px 0 6px;font:12px/1.6 ui-monospace,monospace;overflow-wrap:anywhere}.matrix-panel-head .matrix-selected-name{min-width:0;margin:0}.matrix-panel-head button:last-child{flex-shrink:0}.matrix-direction{color:var(--muted);font-size:10px}.matrix-cycle-label{display:block;color:var(--matrix-cycle, #e879c7);font-size:10px;margin-top:10px}.matrix-actions{display:flex;gap:5px;margin:12px 0;font-size:11px}.matrix-actions button{white-space:nowrap}.matrix-import-group{padding:6px 0;border-bottom:1px solid var(--border)}.matrix-import-group :is(button,.matrix-import-copy){display:flex;align-items:baseline;gap:6px;width:100%;min-height:20.5px;background:transparent;border:0;padding:2px 0;font:10px/1.6 ui-monospace,monospace;text-align:left;overflow-wrap:anywhere;color:var(--text)}.matrix-import-group .matrix-import-target{font-weight:600}.matrix-import-sources{margin:0 0 0 10px;padding:0;list-style:none}.matrix-import-sources :is(button,.matrix-import-copy){color:var(--muted)}.matrix-import-sources span:last-child{min-width:0}.matrix-import-excluded{display:block;margin-left:12px;color:var(--muted);font-size:10px}
8
- `,Ie=class extends k{static properties={graph:{attribute:!1}};static styles=[E(j),E(Fe),E(e),E(M)];constructor(){super(),this.expanded=new Set,this.order=`structure`,this.cyclesOnly=!1,this.neighborhood=null,this.selection=null,this.hover=null,this.view={cell:18,x:0,y:0},this.width=0,this.height=0,this.dirty=!0,this.needsFit=!0,this.bridge={requestDraw:()=>this.requestUpdate(),_cleanup:()=>{}}}willUpdate(e){if(this.graph&&(e.has(`graph`)||this.query!==i.pathFilter||this.dirty)){let e=this.model?.rows;this.query=i.pathFilter,this.model=h(this.graph,{expanded:this.expanded,order:this.order,query:this.query,neighborhood:this.neighborhood,cyclesOnly:this.cyclesOnly}),this.neighborhood&&!this.model.byId.has(this.neighborhood)&&(this.neighborhood=null,this.model=h(this.graph,{expanded:this.expanded,order:this.order,query:this.query,cyclesOnly:this.cyclesOnly})),this.selection&&(!this.model.index.has(this.selection.from)||this.selection.to&&(!this.model.index.has(this.selection.to)||this.cyclesOnly&&!this.model.cells.get(this.selection.from)?.has(this.selection.to)))&&(this.selection=null),this.hover=null,this.dirty=!1,this.needsFit||=!e||e.length!==this.model.rows.length||this.model.rows.some((t,n)=>t.id!==e[n].id)}}firstUpdated(){let e=this.renderRoot.querySelector(`canvas`);this.canvas=e,this.resizeObserver=new ResizeObserver(()=>{let t=e.parentElement.getBoundingClientRect();this.width=t.width,this.height=t.height;let n=window.devicePixelRatio||1;e.width=Math.round(this.width*n),e.height=Math.round(this.height*n),this.clamp(),this.paint()}),this.resizeObserver.observe(e.parentElement),this.themeObserver=new MutationObserver(()=>this.requestUpdate()),this.themeObserver.observe(document.body,{attributes:!0,attributeFilter:[`class`]}),this.events=new AbortController,e.addEventListener(`wheel`,e=>{e.preventDefault(),e.ctrlKey||e.metaKey?this.zoom(Math.exp(-e.deltaY*.005),e.offsetX,e.offsetY):(this.view.x+=e.shiftKey?e.deltaY:e.deltaX,this.view.y+=e.shiftKey?0:e.deltaY,this.clamp(),this.hover=null,this.paint())},{passive:!1,signal:this.events.signal})}updated(){i.graphState=this.bridge;let e=JSON.stringify([this.cyclesOnly,this.model.cycleCount,this.expanded.size,!!this.neighborhood]);e!==this.controlsKey&&(this.controlsKey=e,this.dispatchEvent(new CustomEvent(`matrix-controls-change`,{detail:this.renderControls(),bubbles:!0,composed:!0}))),cancelAnimationFrame(this.frame),this.frame=requestAnimationFrame(()=>this.paint())}disconnectedCallback(){super.disconnectedCallback(),this.resizeObserver?.disconnect(),this.themeObserver?.disconnect(),this.events?.abort(),cancelAnimationFrame(this.frame),i.graphState===this.bridge&&(i.graphState=null)}clamp(){this.view.cell=Oe(this.view.cell,this.model.rows.length,this.width,this.height);let e=this.model.rows.length*this.view.cell;this.view.x=Math.max(0,Math.min(this.view.x,Math.max(0,e-this.width+196+12))),this.view.y=Math.max(0,Math.min(this.view.y,Math.max(0,e-this.height+118+12)))}fit(){this.view={cell:De(this.model.rows.length,this.width,this.height),x:0,y:0},this.needsFit=!1,this.requestUpdate()}zoom(e,t=(this.width+196)/2,n=(this.height+118)/2){let r=this.view.cell,i=Oe(r*e,this.model.rows.length,this.width,this.height);this.view.x=(this.view.x+t-196)*i/r-t+196,this.view.y=(this.view.y+n-118)*i/r-n+118,this.view.cell=i,this.clamp(),this.hover=null,this.requestUpdate()}select(e,t=null,n=!0){this.selection={from:e,to:t},n&&this.model.index.has(e)&&(this.view.cell=Math.max(16,this.view.cell),this.view.y=this.model.index.get(e)*this.view.cell-(this.height-118)/2,this.view.x=(this.model.index.get(t??e)??0)*this.view.cell-(this.width-196)/2,this.clamp()),this.requestUpdate()}expand(e){this.graph.packagesOnly||(this.expanded.has(e)?this.expanded.delete(e):this.expanded.add(e),this.revealPkg=e,this.selection=null,this.neighborhood=null,this.dirty=!0,this.requestUpdate())}pointer(e){let t=this.canvas.getBoundingClientRect();return ke(e.clientX-t.left,e.clientY-t.top,this.model,this.view)}move(e){if(this.drag){let t=e.clientX-this.drag.x,n=e.clientY-this.drag.y;if(Math.abs(t)+Math.abs(n)>3&&(this.drag.moved=!0),this.drag.moved){this.view.x=this.drag.ox-t,this.view.y=this.drag.oy-n,this.clamp(),this.hover=null,this.paint();return}}let t=this.pointer(e);(t?.row!==this.hover?.row||t?.col!==this.hover?.col)&&(this.hover=t,this.requestUpdate())}key(e){if(e.key===`Escape`){this.selection=null,this.hover=null,this.requestUpdate();return}if(![`ArrowDown`,`ArrowUp`,`ArrowLeft`,`ArrowRight`,`Enter`].includes(e.key)||this.model.rows.length===0)return;e.preventDefault();let t=this.model.index.get(this.selection?.from)??0,n=this.model.index.get(this.selection?.to)??t;if(e.key===`Enter`){this.expand(this.model.rows[t].pkg);return}e.key===`ArrowDown`&&t++,e.key===`ArrowUp`&&t--,e.key===`ArrowRight`&&n++,e.key===`ArrowLeft`&&n--;let r=e=>Math.max(0,Math.min(this.model.rows.length-1,e));this.select(this.model.rows[r(t)].id,this.model.rows[r(n)].id)}paint(){if(!this.canvas||!this.model||this.width<=196||this.height<=118)return;if(this.needsFit&&this.fit(),this.revealPkg){let e=this.model.rows.find(e=>e.pkg===this.revealPkg);this.revealPkg=null,e&&this.select(e.id)}let e=this.canvas.getContext(`2d`),t=window.devicePixelRatio||1;e.setTransform(t,0,0,t,0,0);let n=getComputedStyle(this),r=e=>n.getPropertyValue(e).trim(),a=document.body.classList.contains(`theme-paper`),o=a||[`theme-light`,`theme-pink`,`theme-w95`].some(e=>document.body.classList.contains(e)),s={bg:r(`--graph-canvas-bg`)||`#0c0c0c`,surface:r(`--surface`),text:r(`--text`),muted:r(`--muted`),border:r(`--border`),grid:o?`#0000000b`:`#ffffff0b`,highlight:a?`#fff`:o?`#0969da18`:`#ffffff12`,cycle:a?`#000`:o?`#a21caf`:`#e879c7`};this.style.setProperty(`--matrix-cycle`,s.cycle);let c=this.model.index.get(this.selection?.to),l=this.model.index.get(this.selection?.from);je(e,this.model,this.view,{width:this.width,height:this.height,theme:s,colorOf:d,rows:ne(this.graph).importers,hover:this.hover,selected:l===void 0?null:{row:l,col:c??null},dimmed:e=>!this.graph.issuesHidden&&!e.files.some(e=>{let t=this.graph.nodeByFile.get(e);return(i.selectedSeverities.size===0||[...i.selectedSeverities].some(e=>t.severitySet?.has(e)))&&(i.selectedColors.size===0||[...i.selectedColors].some(e=>t.colorSet?.has(e)))})})}renderControls(){let e=this.model.cycleCount>0||this.cyclesOnly;return!e&&this.expanded.size===0&&!this.neighborhood?null:D`<div class="g2-matrix-controls">${e?D`<mode-switch label="${`${this.model.cycleCount} ${this.model.cycleCount===1?`cycle`:`cycles`}`}" .checked="${this.cyclesOnly}" @click="${()=>{this.cyclesOnly=!this.cyclesOnly,this.dirty=!0,this.requestUpdate()}}"></mode-switch>`:null} ${this.expanded.size>0?D`<button @click="${()=>{this.expanded.clear(),this.selection=null,this.dirty=!0,this.requestUpdate()}}">Collapse all</button>`:null} ${this.neighborhood?D`<button @click="${()=>{this.neighborhood=null,this.dirty=!0,this.requestUpdate()}}">All dependencies</button>`:null}</div>`}render(){if(!this.model)return null;let e=this.model.rows[this.hover?.col],t=this.model.rows[this.hover?.row],n=e&&t?this.model.cells.get(t.id)?.get(e.id)?.count??0:0,r=this.graph.packagesOnly,i=ne(this.graph);return D`<div class="matrix-layout"><div class="matrix-stage" style="${v({"--matrix-label-width":`196px`})}"><select class="matrix-order" aria-label="Matrix order" @change="${e=>{this.order=e.target.value,this.dirty=!0,this.requestUpdate()}}"><option value="structure" ?selected="${this.order===`structure`}">Structure ↓</option><option value="name" ?selected="${this.order===`name`}">Name ↓</option><option value="importers" ?selected="${this.order===`importers`}">${i.mostImported} ↓</option><option value="imports" ?selected="${this.order===`imports`}">Most ${i.links} ↓</option></select><canvas tabindex="0" role="img" aria-label="${r?`Dependency matrix. Rows depend on columns. Arrow keys select cells.`:`Dependency matrix. Rows import columns. Arrow keys select cells; Enter expands a package.`}" @keydown="${e=>this.key(e)}" @pointermove="${e=>this.move(e)}" @pointerleave="${()=>{this.drag||(this.hover=null,this.requestUpdate())}}" @pointerdown="${e=>{e.button===0&&(this.canvas.setPointerCapture(e.pointerId),this.drag={x:e.clientX,y:e.clientY,ox:this.view.x,oy:this.view.y,moved:!1})}}" @pointercancel="${()=>{this.drag=null}}" @pointerup="${e=>{if(this.drag){if(!this.drag.moved){let t=this.pointer(e);t&&this.select(this.model.rows[t.row].id,t.col===null?null:this.model.rows[t.col].id,!1)}this.drag=null}}}" @dblclick="${e=>{let t=this.pointer(e);t&&this.expand(this.model.rows[t.row].pkg)}}"></canvas>${t&&(!e||n>0)?D`<div class="matrix-hover">${t.label}${e?` \u2192 ${e.label} \xB7 ${n} ${i.links}`:` \xB7 ${Ne(this.graph,t)} ${i.members}`}</div>`:null}<div class="g2-zoom-ctrl" role="group" aria-label="Matrix zoom"><button aria-label="Zoom in" @click="${()=>this.zoom(1.5)}">+</button><div class="g2-zoom-pct">${Math.round(this.view.cell/18*100)}%</div><button aria-label="Zoom out" @click="${()=>this.zoom(1/1.5)}">−</button> <button class="g2-zoom-fit-btn" aria-label="Fit to view" @click="${()=>this.fit()}">fit</button></div></div><aside class="matrix-panel" aria-label="Matrix details" aria-live="polite">${Pe(this.model,this.graph,this.selection,{select:(e,t)=>this.select(e,t),expand:e=>this.expand(e),expanded:this.expanded,neighborhood:this.neighborhood,focus:e=>{this.neighborhood=this.neighborhood===e?null:e,this.dirty=!0,this.requestUpdate()},clear:()=>{this.selection=null,this.requestUpdate()}})}</aside></div>`}};customElements.define(`dependency-matrix`,Ie);var X={dark:`#0c0c0c`,light:`#f6f8fa`,pink:`#fff0f7`,w95:`#fff`,paper:`#fff`};function Le(){let e=typeof document>`u`?null:document.body?.classList;return e?.contains(`theme-paper`)?X.paper:e?.contains(`theme-pink`)?X.pink:e?.contains(`theme-w95`)?X.w95:e?.contains(`theme-light`)?X.light:X.dark}function Re(e){let t=[1,3,5].map(t=>{let n=parseInt(e.slice(t,t+2),16)/255;return n<=.04045?n/12.92:((n+.055)/1.055)**2.4});return t[0]*.2126+t[1]*.7152+t[2]*.0722>.18?`#000`:`#fff`}function ze(e,t,n,r){let i=[...r.keys()],a=new Map;i.forEach((e,t)=>{for(let n of r.get(e).files)a.set(n,t)});let o=[...a.keys()],s=new Map(o.map((e,t)=>[e,t])),c=o.map(e=>a.get(e)),l=o.map(e=>[...t.get(e)].map(e=>s.get(e))),u=n.map(e=>s.get(e)),d=o.map(t=>{let n=e.get(t);return{size:Number.isFinite(n.size)&&n.size>=0?n.size:0,missing:+(!n.virtual&&n.size==null)}}),f=i.map(()=>({removable:0,removableMissing:0})),p=new Int32Array(o.length),m=new Int32Array(o.length),h=new Int32Array(o.length),g=new Uint8Array(o.length);for(let e=0;e<i.length;e+=32){let t=Math.min(32,i.length-e),n=t===32?-1:(1<<t)-1;m.fill(0),g.fill(0);for(let r=0;r<o.length;r++){let i=c[r]-e;p[r]=i>=0&&i<t?n&~(1<<i):n}let r=0,a=0,s=0,_=e=>{g[e]||(g[e]=1,h[s]=e,s=(s+1)%h.length,a++)};for(let e of u)m[e]=p[e],m[e]&&_(e);for(;a>0;){let e=h[r];r=(r+1)%h.length,a--,g[e]=0;for(let t of l[e]){let n=m[e]&p[t]&~m[t];n&&(m[t]|=n,_(t))}}let v=new Map;for(let e=0;e<o.length;e++){let t=n&~m[e];if(!t)continue;let r=v.get(t);r||(r={size:0,missing:0},v.set(t,r)),r.size+=d[e].size,r.missing+=d[e].missing}for(let[t,n]of v)for(let r=t;r;r&=r-1){let t=e+31-Math.clz32(r&-r);f[t].removable+=n.size,f[t].removableMissing+=n.missing}}i.forEach((e,t)=>Object.assign(r.get(e),f[t]))}function Be(e,t,n){let r=new Map([...e.keys()].map(e=>[e,new Set]));for(let[e,i]of t){let t=n(e),a=n(i);t!==a&&r.get(t).add(a)}let{groups:i,componentOf:a}=m([...e.keys()],r),o=i.map(t=>t.reduce((t,n)=>{let r=e.get(n);return Math.max(t,r.own,r.removable)},0)),s=i.map(()=>0),c=i.map(()=>new Set);for(let[e,t]of r)for(let n of t){let t=a.get(e),r=a.get(n);t!==r&&!c[t].has(r)&&(c[t].add(r),s[r]++)}let l=[];s.forEach((e,t)=>{e||l.push(t)});for(let e of l)for(let t of c[e])o[t]=Math.max(o[t],o[e]),--s[t]===0&&l.push(t);for(let[t,n]of e)n.filterSize=o[a.get(t)]}function Ve(e,t,n,r,i){let a=new Int32Array(e.length),o=i.map(()=>({size:0,missing:0}));for(let s=0;s<e.length;s+=32){let c=Math.min(32,e.length-s);for(let n=t.length-1;n>=0;n--){let r=t[n],i=r-s,o=i>=0&&i<c?1<<i:0;for(let t of e[r])o|=a[t];a[r]=o}let l=new Map;for(let e=0;e<i.length;e++){let t=a[i[e]];if(!t)continue;let c=l.get(t);if(!c){c={size:0,missing:0};for(let e=t;e;e&=e-1){let t=s+31-Math.clz32(e&-e);c.size+=n[t],c.missing+=r[t]}l.set(t,c)}o[e].size+=c.size,o[e].missing+=c.missing}}return i.map((e,t)=>[e,o[t]])}var He=e=>Number.isFinite(e)&&e>=0?e:0,Ue=e=>e.filterSize,We=(e,t)=>Math.max(e.removable,e.own)<t&&e.filterSize>=t;function Ge(e){if(e.byId.size<=100)return 0;let t=[0,1,4,10,20,50,100,200].map(e=>e*1024),n=t.map(()=>0);for(let r of e.byId.values())for(let e=0;e<t.length&&!(Ue(r)<t[e]);e++)n[e]++;let r=0;for(;r<t.length-1&&n[r]>100&&n[r+1]>=50;)r++;return t[r]}function Ke(e,t){let{groups:n,componentOf:r}=m([...e.keys()],t),i=n.map(t=>t.reduce((t,n)=>t+He(e.get(n).size),0)),a=n.map(t=>t.filter(t=>!e.get(t).virtual&&e.get(t).size==null).length),o=n.map(()=>0),s=n.map(()=>new Set);for(let[e,n]of t)for(let t of n){let n=r.get(e),i=r.get(t);n!==i&&!s[n].has(i)&&(s[n].add(i),o[i]++)}let c=[...o],l=[];c.forEach((e,t)=>{e||l.push(t)});for(let e of l)for(let t of s[e])--c[t]===0&&l.push(t);let u=new Uint32Array(n.length),d=new Map,f=8*(n.length+s.reduce((e,t)=>e+t.size,0)),p=0,h=0,g=(e,t=!1)=>{++p===4294967295&&(u.fill(0),p=1);let n=0,r=0,o=[...e];for(;o.length>0;){let e=o.pop();if(u[e]!==p){if(t&&(h+=1+s[e].size)>f)return null;u[e]=p,r+=i[e],n+=a[e];for(let t of s[e])u[t]!==p&&o.push(t)}}return{size:r,missing:n}},_=l.toReversed();for(let e=0;e<_.length;e++){let t=_[e],n=s[t].size===1?d.get([...s[t]][0]):null,r=n?{size:i[t]+n.size,missing:a[t]+n.missing}:g([t],!0);if(r)d.set(t,r);else{for(let[t,n]of Ve(s,l,i,a,_.slice(e)))d.set(t,n);break}}return{inferred:n.filter((e,t)=>o[t]===0).map(e=>e[0]),sum(e){let t=new Set(e.map(e=>r.get(e)));return t.size===1?d.get([...t][0]):g(t)}}}function qe(e){let t=new Map(e.nodes.map(e=>[e.file,e])),n=e.flowEntries??[];for(let e of n)e.virtual&&!t.has(e.file)&&t.set(e.file,{...e,size:0});let r=new Map([...t.keys()].map(e=>[e,new Set])),i=0;for(let[n,a]of t)for(let o of a.virtual?a.imports:e.importsOf.get(n)??[]){let s=t.get(o);if(!s||r.get(n).has(o))continue;let c=t=>t.virtual?t.pkg===`__own__`:e.ownSourceFiles?.has(t.file);if(!f(a.origFile??n,s.origFile??o,c(s),c(a))){i++;continue}r.get(n).add(o)}return{files:t,links:r,entries:n.filter(e=>e.entry!==!1).map(e=>e.file).filter(e=>t.has(e)),weakEdges:i}}function Je(e,t){let n=new Map;for(let r of e){let e=t.get(r),i=e.packageInfo;if(!i)continue;n.has(i.directory)||n.set(i.directory,{...i,size:0,missing:0});let a=n.get(i.directory);a.size+=He(e.size),!e.virtual&&e.size==null&&a.missing++}return[...n.values()].toSorted((e,t)=>t.size-e.size||e.directory.localeCompare(t.directory))}function Ye(e,{packages:t=!1}={}){let{files:n,links:r,entries:i,weakEdges:a}=qe(e),o=Ke(n,r),s=i.length>0?[...new Set(i)]:o.inferred,c=new Set(s),l=new Map,u=[...s];for(let e of u)for(let t of r.get(e))c.has(t)||(c.add(t),u.push(t),l.set(t,e));let d=new Map,f=e=>`${t?`p`:`f`}:${t?n.get(e).pkg:e}`;for(let e of c){let r=f(e),i=n.get(e);d.has(r)||d.set(r,{id:r,pkg:i.pkg,label:t?_(i.pkg):e,version:t?void 0:i.packageInfo?.version,files:[],own:0,virtual:!0,incoming:[],outgoing:[]});let a=d.get(r);a.files.push(e),a.own+=He(i.size),a.virtual&&=!!i.virtual}for(let e of d.values())Object.assign(e,o.sum(e.files)),t&&(e.instances=Je(e.files,n));ze(n,r,s,d),Be(d,l,f);let p=new Map;for(let e of c)for(let n of r.get(e)){let r=f(e),i=f(n);if(t&&r===i)continue;let a=JSON.stringify([r,i]);p.has(a)||p.set(a,{id:a,from:r,to:i,targets:new Set,count:0});let o=p.get(a);o.targets.add(n),o.count++}let m=[...p.values()];for(let e of m)Object.assign(e,o.sum([...e.targets])),d.get(e.from).outgoing.push(e),d.get(e.to).incoming.push(e);return{byId:d,edges:m,edgeById:p,roots:[...new Set(s.map(f))],files:n,packages:t,weakEdges:a,inferred:i.length===0,total:o.sum(s),omittedFiles:n.size-c.size}}function Xe(e,t,n){let r=new Set(t),i=[...t],a=new Set(t);for(let t of i)for(let a of e.byId.get(t).outgoing)!r.has(a.to)&&n(a.to)&&(r.add(a.to),i.push(a.to));let o=new Map(i.map(t=>[t,new Set(e.byId.get(t).outgoing.map(e=>e.to).filter(e=>r.has(e)&&!a.has(e)))])),{componentOf:s,groups:c}=m(i,o),l=c.map(()=>0),u=c.map(()=>new Set),d=c.map(()=>0);for(let[e,t]of o)for(let n of t){let t=s.get(e),r=s.get(n);t!==r&&!u[t].has(r)&&(u[t].add(r),l[r]++)}let f=[];l.forEach((e,t)=>{e||f.push(t)});for(let e of f)for(let t of u[e])d[t]=Math.max(d[t],d[e]+1),--l[t]===0&&f.push(t);return new Map(i.map(e=>[e,d[s.get(e)]]))}function Ze(e,t,n){let r=new Map(e.map(e=>[e.id,{from:[],to:[]}]));for(let e of t)r.get(e.from).from.push(e),r.get(e.to).to.push(e);for(let t of e)for(let e of[`from`,`to`]){let i=e===`to`,a=i?`x2`:`x1`,o=i?`width2`:`width1`,s=e=>{let t=n.get(i?e.from:e.to);return t.x+t.width/2},c=r.get(t.id)[e].toSorted((e,t)=>s(e)-s(t)||e.id.localeCompare(t.id));if(c.length===0)continue;let l=c.reduce((e,t)=>e+t[o],0),u=0;if(l<=t.width){for(let e of c)e[a]=t.x+u,u+=e[o];continue}let d=c[0][o]/2,f=c.at(-1)[o]/2,p=l-d-f,m=new Float64Array(c.length),h=t.width,g=0;for(let e=c.length-1;e>=0;e--)h=Math.min(h,t.width-c[e][o]/2),m[e]=h;for(let e=0;e<c.length;e++){let n=c[e],r=n[o]/2,i=d+(u+r-d)/p*(t.width-d-f),s=Math.min(m[e],Math.max(g,r,i));n[a]=t.x+s-r,g=s,u+=n[o]}}}function Qe(e,t){let n=0,r=0;for(let r=0,i=0;r<e.length;r++){for(;i<t.length&&t[i]<e[r];)i++;n+=i}for(let n=0,i=0;i<t.length;i++){for(;n<e.length&&e[n]<t[i];)n++;r+=n}return[n,r]}function $e(e,t,n){let r=new Map;for(let e of t){let t=n.get(e.from),i=n.get(e.to);if(t.level===i.level)continue;let[a,o]=t.level<i.level?[t,i]:[i,t];r.has(o)||r.set(o,[]),r.get(o).push(a)}let i=1e6;for(let t of e.values()){let e=new Map(t.map(e=>[e,(r.get(e)??[]).map(e=>e.x+e.width/2).toSorted((e,t)=>e-t)]));for(let n=0;n<t.length&&i>0;n++){let n=!1;for(let r=0;r+1<t.length;r++){let a=e.get(t[r]),o=e.get(t[r+1]);i-=1+a.length+o.length;let[s,c]=Qe(a,o);c<s&&([t[r],t[r+1]]=[t[r+1],t[r]],n=!0)}if(!n)break}let n=0;for(let e of t)e.x=n,n+=e.width}}function et(e){let t=t=>e.byId.get(t).pkg;return W(e.edges.map(e=>[t(e.from),t(e.to)]),e.packages?oe:ae)}function tt(e,{focus:t=null,minSize:n=0,width:r=1100}={}){let i=et(e),a=t=>Ue(e.byId.get(t))>=n&&!i.has(e.byId.get(t).pkg),o=(t&&e.byId.has(t)?[t]:e.roots).filter(a),s=Xe(e,o,a),c=[...s.keys()].filter(a).toSorted((t,n)=>s.get(t)-s.get(n)||e.byId.get(n).removable-e.byId.get(t).removable||t.localeCompare(n)),l=new Set(c),u=e.edges.filter(e=>l.has(e.from)&&l.has(e.to)).toSorted((e,t)=>t.size-e.size||e.id.localeCompare(t.id)).map(e=>({...e})),d=[...l].map(t=>({...e.byId.get(t),level:s.get(t)})),f=Map.groupBy(d,e=>e.level),p=new Map(d.map(e=>[e.id,e])),m=d.reduce((e,t)=>Math.max(e,t.removable),1),h=e=>Math.max(e,m/4e3),g=[...f.values()].reduce((e,t)=>Math.max(e,t.reduce((e,t)=>e+t.removable,0)),1),_=Math.max(1,r)/g,v=0,y=0;for(let e of d)e.y=12+e.level*88,e.width=Math.max(.1,e.removable*_),y=Math.max(y,e.y+26);$e(f,u,p);for(let e of f.values())v=Math.max(v,e.reduce((e,t)=>e+t.width,0)),e.forEach((t,n)=>{t.rowStart=n===0,t.rowEnd=n===e.length-1});let b=[...f.values()].flat();for(let e of u){let t=p.get(e.from),n=p.get(e.to),r=h(e.size)*_;e.width1=Math.min(r,t.width),e.width2=Math.min(r,n.width),e.x1=t.x+(t.width-e.width1)/2,e.x2=n.x+(n.width-e.width2)/2,e.y1=t.y+26,e.y2=n.y,e.returning=n.level<=t.level,e.returning&&(y=Math.max(y,Math.max(e.y1,e.y2)+35))}return Ze(b,u,p),{nodes:b,byId:p,edges:u,roots:o,hiddenPackages:i,width:Math.max(1,v),height:y+12}}function nt(e,t,n){if(!(t>0&&n>0))return e;let r=t/Math.min(t/1100,n/e.height,9.99);if(Math.abs(r-e.width)<1e-7)return e;let i=r/e.width,a=e.nodes.map(e=>({...e,x:e.x*i,width:e.width*i})),o=e.edges.map(e=>({...e,x1:e.x1*i,x2:e.x2*i,width1:e.width1*i,width2:e.width2*i}));return{...e,nodes:a,edges:o,byId:new Map(a.map(e=>[e.id,e])),width:r}}function rt(e){let{x1:t,x2:n,y1:r,y2:i,width1:a,width2:o}=e,s=e.returning?Math.max(r,i)+35:(r+i)/2;return`M${t},${r} C${t},${s} ${n},${s} ${n},${i} L${n+o},${i} C${n+o},${s} ${t+a},${s} ${t+a},${r} Z`}function it(e){let t=e.returning?Math.max(e.y1,e.y2)+35:(e.y1+e.y2)/2;return{left:Math.min(e.x1,e.x2),right:Math.max(e.x1+e.width1,e.x2+e.width2),top:Math.min(e.y1,e.y2,t),bottom:Math.max(e.y1,e.y2,t)}}function Z(e,t){return e.right<t.left||e.left>t.right||e.bottom<t.top||e.top>t.bottom}function at(e){if(e.length===0)return null;let t={left:1/0,right:-1/0,top:1/0,bottom:-1/0};for(let n of e)t.left=Math.min(t.left,n.left),t.right=Math.max(t.right,n.right),t.top=Math.min(t.top,n.top),t.bottom=Math.max(t.bottom,n.bottom);if(e.length<=12)return{...t,entries:e};let n=t.right-t.left>t.bottom-t.top,r=e=>n?e.left+e.right:e.top+e.bottom,i=e.toSorted((e,t)=>r(e)-r(t)),a=i.length>>>1;return{...t,children:[at(i.slice(0,a)),at(i.slice(a))]}}function ot(e,t,n){let r=[],i={left:t,right:t,top:n,bottom:n},a=e?[e]:[];for(;a.length>0;){let e=a.pop();if(!Z(e,i)){if(e.entries)for(let t of e.entries)Z(t,i)||r.push(t);else a.push(...e.children)}}return r.toSorted((e,t)=>t.order-e.order)}function st(e,t,n){let r=[],i=e?[e]:[];for(;i.length>0;){let e=i.pop();if(!Z(e,t)){if(e.entries){for(let i of e.entries)if(i.edge&&!Z(i,t)&&(r.push(i),r.length>n))return null}else i.push(...e.children)}}return r.toSorted((e,t)=>e.order-t.order)}var Q=n;function ct(e){if(!e.instances?.length)return e.version?`
1
+ import"./chunk-VFWMQ3LG.js";import{a as e}from"./chunk-R5O6FAW4.js";import{Aa as t,Ba as n,Ca as r,D as i,G as a,a as o,e as s,f as c,ja as l,ka as u,la as d,sa as f,ta as p,xa as m,za as h}from"./chunk-WNSVBOSO.js";import"./chunk-2K6UN3PC.js";import{e as g}from"./chunk-WCPJDAYA.js";import{e as _}from"./chunk-IYPY47MC.js";import{a as v,d as y}from"./chunk-PWFUOLZK.js";import"./chunk-HT2SSA3V.js";import{j as b}from"./chunk-QRKFPLA4.js";import{d as x,l as S,m as C,n as w,o as T,p as E}from"./chunk-74AEKRES.js";import"./chunk-C4Z6ZBXV.js";import{a as D,c as O,i as k,j as A}from"./chunk-2XUEZHIP.js";import"./chunk-TUII34K2.js";import"./chunk-OOJM4CTU.js";var j=`*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:host{display:grid;grid-template-columns:1fr 300px;grid-template-rows:auto 1fr;grid-template-areas:"topbar right" "stage right";min-height:0;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);overflow:hidden;background:var(--graph-canvas-bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,sans-serif;font-size:12px}.graph2-layout{display:contents}:host([matrix]){grid-template-columns:minmax(0,1fr) 300px}.graph2-topbar{grid-area:topbar;display:flex;flex-direction:column;gap:.5rem;padding:var(--graph-topbar-padding, .6rem .75rem .6rem var(--graph-topbar-left-padding, .75rem));font-size:.825rem;background:var(--surface);backdrop-filter:var(--glass-blur);border-bottom:1px solid var(--graph-divider)}.graph2-topbar-row{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;padding:0}.graph2-topbar .g2-spacer{flex:1}.graph2-topbar-row-pinned{flex-wrap:nowrap;align-items:flex-start}.graph2-topbar-row-pinned>#g2-fullscreen{margin-top:2px}.g2-topbar-controls{display:flex;flex:1;flex-wrap:wrap;align-items:center;gap:.75rem;min-width:0}.g2-topbar-controls>.g2-reason-scope,.g2-topbar-controls>.g2-issues-switch{margin-left:auto}.g2-topbar-controls>.g2-reason-scope+.g2-issues-switch{margin-left:0}.g2-topbar-controls .g2-path-filter-wrap{flex:1 1 8rem;min-width:0;max-width:12rem}.g2-matrix-controls{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:11px;& button{height:30px;padding:4px 7px;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--surface);color:var(--text);font:inherit}& button:hover,button[aria-pressed=true]{background:var(--graph-hover-bg);border-color:var(--muted)}}.graph2-topbar triage-selector{margin-left:auto}.g2-icon-btn{width:28px;height:28px;border-radius:var(--ui-radius, 5px);background:var(--graph-hover-bg);border:1px solid var(--border);color:var(--muted);display:grid;place-items:center;font-family:inherit;&:hover{color:var(--accent);border-color:var(--accent)}}.g2-path-filter-wrap{position:relative;flex:0 0 12rem;padding-right:22px}.g2-path-filter-wrap .g2-path-filter-clear{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:grid;place-items:center;width:18px;height:18px;background:transparent;border:0;border-radius:var(--ui-radius, 50%);color:var(--muted);font:400 10px/1 inherit;font-family:inherit;&:hover{color:var(--text);background:var(--surface-active)}}.g2-path-filter:placeholder-shown~.g2-path-filter-clear{display:none}.g2-layout-tabs{display:inline-flex;flex-shrink:0;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:2px;gap:2px;& button{position:relative;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:var(--ui-radius, 4px);background:transparent;color:var(--muted);font:inherit;font-size:11px;padding:5px 7px}& button[aria-pressed=true]{background:var(--graph-hover-bg);color:var(--text);box-shadow:var(--graph-layout-active-shadow, inset 0 0 0 1px var(--border))}}.g2-reason-scope{--scope-height: 30px}.graph2-right{grid-area:right;border-left:1px solid var(--graph-divider);background:var(--surface);backdrop-filter:var(--glass-blur);display:flex;flex-direction:column;overflow:hidden;padding:14px}.g2-panel-title{font-family:inherit;font-weight:600;font-size:11px;line-height:1;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);opacity:.85;margin:14px 0 8px;display:flex;align-items:baseline;gap:6px;&:first-child{margin-top:0}}.g2-panel-title-row{justify-content:space-between;gap:8px}#g2-top-pkgs-block{margin-top:14px;flex:1 1 0;min-height:0;display:flex;flex-direction:column}.g2-mini-tabs{display:flex;gap:1px;background:var(--graph-mini-tabs-bg, var(--graph-divider));border-radius:var(--ui-radius, 4px);overflow:hidden}.g2-mini-tab{background:transparent;border:0;color:var(--muted);font-family:inherit;font-weight:500;font-size:11px;line-height:1.4;text-transform:none;letter-spacing:0;padding:2px 7px;&:hover{color:var(--text);background:var(--graph-hover-bg)}&.on{background:var(--surface-active);color:var(--accent);text-decoration:var(--graph-mini-tab-active-decoration, none);text-underline-offset:.2em}}.graph2-stage{grid-area:stage;position:relative;background:var(--graph-canvas-bg);overflow:hidden;cursor:default;&:active{cursor:default}& canvas{position:absolute;inset:0;width:100%;height:100%;display:block}}.g2-stage-overlay{position:absolute;top:12px;left:12px;z-index:3;display:flex;flex-direction:column;gap:4px;pointer-events:none;max-width:calc(100% - 60px)}.g2-stage-overlay>*{pointer-events:auto}.g2-stage-stats{position:absolute;bottom:10px;left:12px;z-index:2;display:flex;flex-wrap:wrap;gap:2px 14px;font:500 10px/1.4 ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;color:var(--muted);opacity:.7;text-transform:uppercase;letter-spacing:.06em;pointer-events:none;max-width:calc(100% - 80px);& b{font-weight:600;color:var(--text);opacity:1}}.g2-stage-overlay-tr{position:absolute;top:12px;right:12px;z-index:3;pointer-events:auto}.g2-focus-pkg-btn{width:28px;height:28px;display:grid;place-items:center;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);color:var(--accent);box-shadow:var(--shadow-glass);&:hover{border-color:var(--accent);background:var(--surface-active)}& svg{display:block}}.g2-back-btn{display:inline-flex;align-items:center;gap:4px;padding:6px 11px;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);color:var(--accent);font:500 11px/1 inherit;font-family:inherit;box-shadow:var(--shadow-glass);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;align-self:flex-start;&:hover{border-color:var(--accent);background:var(--surface-active)}}.g2-tooltip{position:absolute;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 7px);padding:9px 11px;pointer-events:none;min-width:170px;max-width:260px;opacity:0;transition:opacity .12s;z-index:10;box-shadow:var(--shadow-glass);&.show{opacity:1}}.g2-tt-path{font:500 11px/1.3 ui-monospace,monospace;color:var(--text);word-break:break-all;margin-bottom:4px}.g2-tt-head{display:flex;align-items:center;gap:6px;margin-bottom:6px;flex-wrap:wrap}.g2-tt-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.g2-tt-pkg{font-size:10px;color:var(--muted);word-break:break-all}.g2-tooltip .tree-count-chips{margin-top:6px}:host-context(body.theme-light) .graph2-right .tree-count-chip.medium,:host-context(body.theme-light) .g2-tooltip .tree-count-chip.medium{color:#fff}.g2-selection-card{background:var(--graph-hover-bg);border:1px solid var(--border);border-radius:var(--ui-radius, 8px);overflow:hidden}.g2-sel-head{padding:11px 13px;border-bottom:1px solid var(--graph-divider);display:flex;align-items:center;gap:8px}.g2-sel-file-head{padding:11px 13px;border-bottom:1px solid var(--graph-divider);display:flex;flex-direction:column;gap:6px}.g2-sel-path{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;font-weight:600;font-size:12px;line-height:1.3;color:var(--text);word-break:break-all}.g2-sel-pkg-row{display:flex;align-items:center;gap:6px;min-width:0}.g2-sel-pkg{font-size:11px;color:var(--muted);word-break:break-all;min-width:0}.g2-sel-fullpath{padding:7px 13px;border-bottom:1px solid var(--graph-divider);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;font-size:10px;line-height:1.3;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.g2-sel-size{padding:5px 13px 7px;border-bottom:1px solid var(--graph-divider);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;font-size:10px;line-height:1.3;color:var(--muted);font-variant-numeric:tabular-nums}.g2-sel-dot{width:11px;height:11px;border-radius:50%;box-shadow:0 0 0 3px color-mix(in srgb,var(--dot) 22%,transparent);flex-shrink:0}.g2-sel-id{font:600 12px/1 ui-monospace,monospace;color:var(--text);word-break:break-all;flex:1;min-width:0}.g2-sel-grp{font:500 9px/1 ui-monospace,monospace;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;flex-shrink:0}.g2-sel-body{padding:11px 13px}.g2-sel-row{display:flex;justify-content:space-between;gap:12px;font-size:11px;padding:5px 0;border-bottom:1px solid var(--graph-divider);&:last-child{border-bottom:0}.k{color:var(--muted);flex-shrink:0}.v{color:var(--text);font-family:ui-monospace,monospace;word-break:break-all;text-align:right;min-width:0}}.g2-sel-section{padding:9px 13px;border-top:1px solid var(--graph-divider)}.g2-sel-section-label{font-family:inherit;font-weight:600;font-size:11px;line-height:1;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);opacity:.85;margin-bottom:5px}.g2-sel-section-empty{color:var(--muted);opacity:.55;font-size:11px;font-style:italic}.g2-sel-versions{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;font-size:11px;line-height:1.4;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.g2-sel-jumps{padding:11px 13px;display:flex;gap:5px;flex-wrap:wrap;border-top:1px solid var(--graph-divider)}.g2-sel-jump{background:var(--surface-active);border:1px solid var(--border);color:var(--accent);border-radius:var(--ui-radius, 4px);padding:2px 8px;font-family:inherit;font-weight:500;font-size:11px;line-height:1.3;&:hover{border-color:var(--accent)}}.g2-sel-file-list{list-style:none;margin:0;padding:0;max-height:110px;overflow:hidden auto;-webkit-app-region:no-drag;app-region:no-drag;&::-webkit-scrollbar{width:4px}&::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}& li{padding:0}}.g2-sel-file-link{display:flex;align-items:center;gap:6px;width:100%;background:transparent;border:0;border-radius:var(--ui-radius, 3px);padding:2px 6px;min-height:20.5px;font:400 11px/1.4 ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;color:var(--accent);text-align:left;&:hover{background:var(--graph-hover-bg)}.g2-sel-file-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.g2-sel-file-path{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}.g2-empty-state,.g2-sel-section-empty,.g2-dist-empty{cursor:default;user-select:none;-webkit-user-select:none}.g2-empty-state{background:var(--graph-hover-bg);border:1px dashed var(--border);border-radius:var(--ui-radius, 8px);padding:18px 14px;text-align:center;color:var(--muted);font-size:11px;line-height:1.5;& strong{color:var(--text);display:block;margin-bottom:4px;font-weight:500}}.g2-dist-bar{width:100%;height:5px;border-radius:3px;overflow:hidden;display:flex;background:var(--surface-active);margin-bottom:8px;>span{display:block;height:100%}}.g2-dist-list{display:flex;flex-direction:column;gap:0;flex:1 1 0;min-height:0;overflow-y:auto;overscroll-behavior:none;-webkit-app-region:no-drag;app-region:no-drag;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:var(--border) transparent;&::-webkit-scrollbar{width:5px}&::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}}.g2-dist-empty{color:var(--muted);opacity:.55;font-size:10px;font-style:italic;padding:6px 0;text-align:center}@media print{:host{display:none!important}}
2
+ `,M=`.g2-dist-item{display:grid;grid-template-columns:8px 1fr auto auto;gap:8px;align-items:center;font-size:10px;padding:2px 6px;min-height:20.5px;margin:0 -6px;background:transparent;border:0;border-radius:var(--ui-radius, 4px);font-family:inherit;text-align:left;width:calc(100% + 12px);&:hover{background:var(--graph-hover-bg)}&.on{background:var(--surface-active);.g2-dist-name{color:var(--accent)}}.g2-dist-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.g2-dist-name{color:var(--muted);font-family:ui-monospace,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.g2-dist-count{font-family:ui-monospace,monospace;color:var(--text)}.g2-dist-pct{font-family:ui-monospace,monospace;color:var(--muted);width:36px;text-align:right;opacity:.85}}:host-context(body.theme-w95) *{overscroll-behavior:none}
3
+ `,N=`.g2-zoom-ctrl{position:absolute;right:12px;bottom:12px;display:flex;flex-direction:column;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);overflow:hidden;z-index:3;box-shadow:var(--shadow-glass);& button{width:28px;height:28px;margin:0;padding:0;background:transparent;border:0;border-radius:0;color:var(--muted);border-bottom:1px solid var(--graph-divider);display:grid;place-items:center;font-family:inherit;font-size:13px;&:last-child{border-bottom:0}&:hover:not(:disabled){color:var(--accent);background:var(--surface-active)}&:disabled{opacity:.35}}}.g2-zoom-pct{font:500 9px/1 ui-monospace,monospace;color:var(--muted);padding:5px 0;text-align:center;border-bottom:1px solid var(--graph-divider)}.g2-zoom-ctrl .g2-zoom-fit-btn{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;font-weight:600;font-size:9px;line-height:1;letter-spacing:-.02em;text-transform:lowercase}
4
+ `,P=`.tree-count-chips{display:inline-flex;gap:.25rem;flex-wrap:wrap}.tree-count-chip{display:inline-block;font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:.1rem .4rem;border-radius:3px;line-height:1.3;&.critical{background:var(--critical);color:#fff}&.high{background:var(--high);color:#fff}&.medium{background:var(--medium);color:#000}&.low{background:var(--low);color:var(--badge-low-text)}&.high_bug{background:var(--high-bug);color:#fff}&.bug{background:var(--bug);color:#fff}&.informational{background:var(--info);color:#fff}}
5
+ `,F=`.toolbar{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem;padding:.6rem .75rem;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 10px);box-shadow:var(--shadow-glass);font-size:.825rem;& select{height:30px;box-sizing:border-box;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);padding:.25rem .4rem;font-size:.8rem;&:focus{border-color:var(--accent);outline:none}}& select.sort-select{padding:.3rem 1.7rem .3rem .55rem;min-width:8.5rem;font-weight:500;appearance:none;-webkit-appearance:none;background:transparent}:is(revalidate-filter,findings-sort){position:relative;display:inline-block;&:after{content:"";position:absolute;right:.7rem;top:50%;width:.35rem;height:.35rem;border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);transform:translateY(-70%) rotate(45deg);pointer-events:none}}& repo-filter{display:inline-block;min-width:0;max-width:100%}& analyzer-select{position:relative;display:inline-block}.analyzer-btn{display:inline-flex;align-items:center;gap:.45rem;height:30px;box-sizing:border-box;padding:.3rem .55rem;min-width:8.5rem;background:transparent;color:var(--text);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);font-family:inherit;font-size:.8rem;font-weight:500;&:hover{border-color:var(--accent)}&:focus-visible{border-color:var(--accent);outline:none}&.active{color:var(--accent)}.analyzer-btn-label{flex:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:18rem}& svg{color:var(--muted);flex-shrink:0}}& range-slider{color:var(--accent);margin:0 .25rem}.conf-vals{color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;font-variant-numeric:tabular-nums;.dash{color:var(--muted);margin:0 .15rem}}& conf-filter{position:relative;display:inline-flex;align-items:center;height:30px;box-sizing:border-box;padding:0 .55rem;gap:.5rem;background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);.conf-range-label{color:var(--muted);font-size:.7rem;font-weight:500;letter-spacing:.04em}& range-slider{margin:0}.conf-range{display:inline-flex;align-items:center;gap:.5rem}:is(.conf-range,.conf-range-label).replaced{visibility:hidden}:is(.conf-range,.conf-range-label).disabled{opacity:.35}& revalidate-filter{position:relative;display:inline-flex;align-items:center;flex:none;width:1.4rem;.sort-select{width:100%;border:0;height:auto;min-width:0;padding:0 .95rem 0 .2rem;font-size:.72rem;color:var(--muted);cursor:default;&:hover{color:var(--text)}}&:after{right:.25rem}&.replaces{position:static;.sort-select{position:absolute;inset:0 .55rem;width:auto;padding-left:0;color:var(--text)}&:after{right:.8rem}}.partial-cycle{position:absolute;right:1.75rem;top:50%;transform:translateY(-50%);z-index:1;padding:.1rem .3rem;border-radius:var(--ui-radius, 3px);font:inherit;font-size:.66rem;line-height:1.4;white-space:nowrap;cursor:default;--chip: var(--muted);color:var(--chip);border:1px solid rgb(from var(--chip) r g b / .45);background:rgb(from var(--chip) r g b / .1);&.included{--chip: var(--green)}&.excluded{--chip: var(--critical)}&.only{--chip: var(--yellow)}&:hover{background:rgb(from var(--chip) r g b / .22)}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px}}}}& input[type=text]{background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);padding:.25rem .4rem;font-size:.8rem;flex:1;min-width:8rem;&:focus{border-color:var(--accent);outline:none}}.result-count{color:var(--muted);margin-left:auto}}.analyzer-menu[popover]{position:fixed;inset:auto;margin:0;align-items:stretch;gap:.35rem;padding:.3rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);box-shadow:0 4px 12px #00000040;font-size:.825rem;-webkit-app-region:no-drag;app-region:no-drag}.analyzer-menu[popover]:not(:popover-open){display:none}.analyzer-menu[popover]:popover-open{display:flex}.analyzer-menu-sep{border-left:1px solid var(--border)}.analyzer-menu-col{display:flex;flex-direction:column;gap:1px;min-width:9rem;max-height:60vh;overflow-y:auto}.analyzer-menu-head{padding:.25rem .5rem .2rem;color:var(--muted);font-size:.68rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase}.analyzer-menu-item{display:flex;align-items:center;gap:.45rem;background:transparent;border:0;border-radius:var(--ui-radius, 3px);padding:.3rem .5rem;color:var(--text);text-align:left;font-family:inherit;font-size:.78rem;&:before{content:"";width:.8rem;flex-shrink:0}&.active:before{content:"\\2713";color:var(--accent)}&:hover{background:var(--surface)}&.zero{opacity:.45}.analyzer-menu-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:16rem}.analyzer-menu-count{color:var(--muted);font-size:.7rem;font-weight:600;font-variant-numeric:tabular-nums}}download-button{display:contents}.toolbar-export-btn{height:30px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;padding:0 .55rem;background:transparent;color:var(--muted);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);font-family:inherit;transition:background .12s,color .12s;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}& svg{display:block}}triage-selector,slide-triage-tabs{display:inline-flex;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden}.toolbar triage-selector{margin-left:auto}.toolbar-end{display:flex;align-items:center;gap:.75rem;margin-left:auto;&:not(:has(.toolbar-export-btn,annotation-filter,revalidation-switch)){display:none}}revalidation-switch{display:inline-flex;align-items:center;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden}.revalidation-toggle{height:100%;&:has(+.revalidation-detail){border-right:1px solid var(--border)}}.revalidation-conflicts{padding:0 .6rem;background:transparent;border:none;color:var(--text);font:inherit;font-size:.78rem;cursor:default;&:focus-visible{outline:1px solid var(--accent);outline-offset:-2px}}.revalidation-detail{display:inline-flex;align-items:center;justify-content:center;width:30px;height:100%;box-sizing:border-box;padding:0;background:transparent;border:none;color:var(--muted);cursor:default;transition:background .12s,color .12s,opacity .12s;&:hover:not(:disabled){color:var(--text);background:rgb(from var(--text) r g b / .06)}&.on{color:var(--accent);background:var(--surface-active)}&:disabled{opacity:.4;cursor:default}&:focus-visible{outline:1px solid var(--accent);outline-offset:-2px}}.revalidation-upstream{display:inline-flex;align-items:center;justify-content:center;width:30px;height:100%;box-sizing:border-box;padding:0;background:transparent;border:none;color:var(--muted);cursor:default;transition:background .12s,color .12s;&:not(:first-child){border-left:1px solid var(--border)}&:hover:not(:disabled){color:var(--text);background:rgb(from var(--text) r g b / .06)}&.on{color:var(--accent);background:var(--surface-active)}&:disabled{opacity:.4;cursor:default}&:focus-visible{outline:1px solid var(--accent);outline-offset:-2px}}triage-selector.is-empty{display:none}.triage-state-btn{background:transparent;border:none;color:var(--muted);padding:0 .55rem;display:inline-flex;align-items:center;gap:.35rem;transition:background .12s,color .12s;font-family:inherit;font-size:.8rem;cursor:default;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.active{background:var(--surface-active)}}.triage-state-btn.active.triage-state-deleted{color:var(--critical)}.triage-state-btn.active.triage-state-fixed{color:var(--green, #4ade80)}.triage-state-btn.active.triage-state-inprogress{color:var(--warning, #d97706)}.triage-state-btn.active.triage-state-invalid{color:var(--muted)}.triage-state-btn.active.triage-state-ignored{color:var(--accent, #2563eb)}entity-search{display:contents}view-mode-buttons{display:inline-flex;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden;.view-mode-btn{background:transparent;border:none;color:var(--muted);padding:.28rem .5rem;display:inline-flex;align-items:center;justify-content:center;transition:background .12s,color .12s;font-family:inherit;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.active{color:var(--accent);background:var(--surface-active)}& svg{display:block}}}:is(.revalidation-detail,.revalidation-upstream,.view-mode-btn){position:relative}:is(.revalidation-detail.on,.revalidation-upstream.on,.view-mode-btn.active,.g2-layout-tabs button[aria-pressed=true],.activity-views button[aria-pressed=true]):before{content:var(--selected-icon-ring-content, none);position:absolute;left:50%;top:50%;width:22px;height:22px;box-sizing:border-box;border:1px solid currentcolor;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none}source-filter{display:inline-flex;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden;.source-chip{background:transparent;border:none;color:var(--muted);padding:0 .55rem;display:inline-flex;align-items:center;transition:background .12s,color .12s;font-family:inherit;font-size:.75rem;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.active{color:var(--accent);background:var(--surface-active)}}}severity-mode-switch{display:inline-flex;align-items:center;gap:.4rem;height:30px;box-sizing:border-box;.severity-mode-label{color:var(--muted);font-size:.7rem;font-weight:500;letter-spacing:.04em}.severity-mode-chips{display:inline-flex;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden}.severity-mode-chip{background:transparent;border:none;color:var(--muted);padding:0 .55rem;display:inline-flex;align-items:center;transition:background .12s,color .12s;font-family:inherit;font-size:.75rem;cursor:default;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.active{color:var(--accent);background:var(--surface-active)}}}annotation-filter{display:inline-flex;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden;.annotation-chip{position:relative;background:transparent;border:none;color:var(--muted);padding:0 .45rem;display:inline-flex;align-items:center;transition:background .12s,color .12s;cursor:default;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.sel-with,&.sel-without{color:var(--accent);background:var(--surface-active)}&.sel-with .flag-cloth{fill:var(--accent)}&.sel-without:after{content:"";position:absolute;left:18%;right:18%;top:50%;height:1.5px;background:currentcolor;border-radius:1px;transform:rotate(-20deg);transform-origin:center;pointer-events:none}& svg{display:block}}}.toolbar-row{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center}.search-row{display:inline-flex;align-items:center;gap:.65rem;flex:1 1 14rem;min-width:12rem}toolbar-search,.toolbar-search{display:inline-flex;align-items:center;gap:.5rem;flex:1;min-width:0;height:30px;box-sizing:border-box;padding:0 .65rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);&:has(input:focus){border-color:var(--accent)}>svg{color:var(--muted);flex-shrink:0}&[kind] input[type=text],&.toolbar-search input[type=text]{flex:1;min-width:0;background:transparent;border:0;outline:none;color:var(--text);font:inherit;font-size:.8rem;padding:0;&:focus{border:0}&::placeholder{color:var(--muted)}&:focus::placeholder{color:transparent}&::-webkit-search-cancel-button{display:none}}}.search-negate-btn{flex-shrink:0;width:20px;height:20px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 3px);padding:0;transition:background .12s,color .12s;& svg{width:13px;height:13px}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .08)}&.active{color:var(--accent);background:rgb(from var(--text) r g b / .1)}}@media(width<=1200px){.toolbar-row.sev-row .search-row{flex-basis:100%}}severity-chips{display:inline-flex;height:30px;box-sizing:border-box;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden}severity-chips>.sev-chip{display:inline-flex;align-items:center;gap:.35rem;background:transparent;border:0;padding:0 .4rem;color:var(--muted);font-family:inherit;font-size:.8rem;transition:background .12s,color .12s;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}.sd{width:8px;height:8px;border-radius:2px;flex-shrink:0;background:currentcolor}}:is(.sev-chip,.triage-state-btn,.team-slide-tab){.n{align-self:flex-start;margin:1px -5px 0;color:var(--muted);font-variant-numeric:tabular-nums;font-size:8.5px;font-weight:600;background:var(--bg);border-radius:999px;padding:0 3px;min-width:11px;text-align:center;line-height:11px}&.active .n{color:var(--text)}}.team-slide-tab .n{margin-top:calc(1px - .35rem)}severity-chips>button.sev-chip{&.active{color:var(--text)}&.critical .sd{background:var(--critical)}&.high .sd{background:var(--high)}&.medium .sd{background:var(--medium)}&.low .sd{background:var(--low)}&.high_bug .sd{background:var(--high-bug)}&.bug .sd{background:var(--bug)}&.informational .sd{background:var(--info)}&.critical.active{background:rgb(from var(--critical) r g b / .25)}&.high.active{background:rgb(from var(--high) r g b / .25)}&.medium.active{background:rgb(from var(--medium) r g b / .25)}&.low.active{background:rgb(from var(--low) r g b / .25)}&.high_bug.active{background:rgb(from var(--high-bug) r g b / .25)}&.bug.active{background:rgb(from var(--bug) r g b / .25)}&.informational.active{background:rgb(from var(--info) r g b / .25)}}triage-filter{display:inline-flex;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:3px;height:30px;gap:1px;& button{width:22px;height:22px;background:transparent;border:0;border-radius:var(--ui-radius, 4px);padding:0;display:grid;place-items:center;position:relative;transition:background .12s;&:hover{background:rgb(from var(--text) r g b / .06)}&.active{background:rgb(from var(--text) r g b / .08);box-shadow:0 0 0 1px var(--border)}}.td{width:12px;height:12px;border-radius:50%;border:1.5px solid currentcolor;background:transparent;transition:background .12s}& button.active .td{background:currentcolor}.td.none{border-style:dashed;color:var(--muted)}.td.r{color:#fc5855}.td.b{color:#30aff8}.td.g{color:#68c36d}.td.x{color:#6e7278}.count{position:absolute;top:-2px;right:-2px;background:var(--bg);color:var(--muted);font-size:8.5px;font-weight:600;border-radius:999px;padding:0 3px;min-width:11px;text-align:center;line-height:11px;font-variant-numeric:tabular-nums}}
6
+ `;function I(e){let t=new Map;for(let n=0;n<e.length;n++){let r=e[n];t.has(r.a)||t.set(r.a,[]),t.has(r.b)||t.set(r.b,[]),t.get(r.a).push(n),t.get(r.b).push(n)}return t}function L(e){if(!e)return null;for(let t of b)if((e[t]??0)>0)return t;return null}function R(e,t,n,r,i,a,o,s={}){let c=s.pkgOf??p,l=new Set(t),u=new Map,d=new Map;for(let n of t){let t=(e[n].imports??[]).filter(e=>l.has(e));u.set(n,t);for(let e of t)d.has(e)||d.set(e,[]),d.get(e).push(n)}let m=t.map(t=>{let l=n.get(t),u=r?.get(t)??null,d=f(l),p=c(t)??`__own__`,m=L(l);return{id:t,file:t,pkg:p,packageInfo:s.packageInfoOf?.(t),x:0,y:0,deg:0,issue:m,totalIssues:d,own:l,subtree:u,size:typeof e[t]?.size==`number`?e[t].size:null,severitySet:i?.get(t)??null,colorSet:a?.get(t)??null,findings:o?.get(t)??null,isHub:!1,label:t.split(`/`).pop()??t}}),h=new Map(m.map(e=>[e.file,e])),g=new Map;for(let e of t)for(let t of u.get(e)??[]){let[n,r]=e<t?[e,t]:[t,e],i=`${n}\0${r}`,a=g.get(i);if(!a){let e=h.get(n),t=h.get(r);if(!e||!t)continue;a={a:n,b:r,cross:e.pkg!==t.pkg,fromLo:!1,fromHi:!1},g.set(i,a),e.deg++,t.deg++}e===n?a.fromLo=!0:a.fromHi=!0}let _=[...g.values()],v=I(_),y=new Map;for(let e of m)y.set(e.pkg,(y.get(e.pkg)??0)+1);let b=[...y.entries()].toSorted((e,t)=>t[1]-e[1]).map(([e])=>e),x=new Map;for(let e of m)x.has(e.pkg)||x.set(e.pkg,[]),x.get(e.pkg).push(e);let S={files:t,nodes:m,nodeByFile:h,edges:_,adj:v,importsOf:u,importedBy:d,packages:b,pkgCount:y,byPkg:x};return z(S),S}function z(e){for(let t of e.nodes)t.isHub=!1;for(let t of e.edges)t.cross&&(t.fromLo&&(e.nodeByFile.get(t.b).isHub=!0),t.fromHi&&(e.nodeByFile.get(t.a).isHub=!0));for(let t of e.nodes){let n=e.importedBy.get(t.file);(!n||n.length===0)&&(t.isHub=!0)}}function ee(e){let t=e.packages.map(t=>{let n=e.byPkg.get(t)??[],r={};for(let e of b)r[e]=0;let i=new Set,a=new Set,o=[],s=0,c=0,l=!1;for(let e of n){if(s+=e.totalIssues,e.own)for(let t of b)r[t]+=e.own[t]??0;if(e.severitySet)for(let t of e.severitySet)i.add(t);if(e.colorSet)for(let t of e.colorSet)a.add(t);typeof e.size==`number`&&(c+=e.size,l=!0),o.push(e.file)}return{file:t,pkg:t,label:B(t),fileCount:n.length,size:l?c:null,own:r,totalIssues:s,issue:L(r),severitySet:i.size>0?i:null,colorSet:a.size>0?a:null,pathText:o.join(`
7
+ `).toLowerCase(),isHub:!0,x:0,y:0,deg:0}}),n=new Map(t.map(e=>[e.pkg,e])),r=new Map;for(let t of e.edges){if(!t.cross)continue;let i=e.nodeByFile.get(t.a)?.pkg,a=e.nodeByFile.get(t.b)?.pkg;if(!i||!a||i===a)continue;let[o,s]=i<a?[i,a]:[a,i],c=`${o}\0${s}`,l=r.get(c);l||(l={a:o,b:s,cross:!0,count:0,fromLo:!1,fromHi:!1},r.set(c,l),n.get(o).deg++,n.get(s).deg++),l.count++;let u=i===o;t.fromLo&&(u?l.fromLo=!0:l.fromHi=!0),t.fromHi&&(u?l.fromHi=!0:l.fromLo=!0)}let i=[...r.values()],a=I(i),o=new Map(t.map(e=>[e.pkg,[]]));for(let e of i)e.fromLo&&o.get(e.a).push(e.b),e.fromHi&&o.get(e.b).push(e.a);return{nodes:t,byPkg:n,nodeByFile:n,edges:i,adj:a,importsOf:o,ownSourcePackages:e.ownSourcePackages,entryPackages:e.entryPackages}}function te(e,t){if(t.size===0)return e;let n=e.nodes.filter(e=>!t.has(e.pkg)),r=new Map(n.map(e=>[e.file,e])),i=e=>r.has(e),a=e.edges.filter(e=>i(e.a)&&i(e.b)),o=e=>new Map([...e].filter(([e])=>i(e)).map(([e,t])=>[e,t.filter(i)])),s=e.packages.filter(e=>!t.has(e));return{...e,files:e.files.filter(i),nodes:n,nodeByFile:r,edges:a,adj:I(a),importsOf:o(e.importsOf),importedBy:o(e.importedBy),packages:s,pkgCount:new Map(s.map(t=>[t,e.pkgCount.get(t)])),byPkg:new Map(s.map(t=>[t,e.byPkg.get(t)]))}}function B(e){return _(e)}var V={links:`imports`,cellLinks:`file imports`,link:`Import`,linked:`imports`,members:`files`,mostImported:`Most imported`,outgoing:`Imports`,incoming:`Imported by`,importers:`importers`,cellHeading:`File imports`},H={links:`dependencies`,cellLinks:`dependencies`,link:`Dependency`,linked:`depends on`,members:`versions`,mostImported:`Most depended on`,outgoing:`Dependencies`,incoming:`Dependents`,importers:`dependents`,cellHeading:`Copies`},ne=e=>e.packagesOnly?H:V;function re(e,t){let n=new Set;for(let r of e.byPkg.get(t)??[])r.packageInfo?.version!==void 0&&n.add(r.packageInfo.version);return[...n].toSorted((e,t)=>e.localeCompare(t,`en`,{numeric:!0}))}function ie(e,t){if(!t||t===`/`||t===`__own__`)return e;for(let n of[`node_modules`,`dependencies`,i()]){let r=n+`/`+t+`/`,i=e.indexOf(r);if(i>=0)return e.slice(i+r.length)}return e.startsWith(t+`/`)?e.slice(t.length+1):e}var U=new Set([`@babel/runtime`,`minimalistic-assert`,`react`,`reselect`]),ae=300,oe=100;function W(e,t){return new Set([...e].filter(([,e])=>e>t).map(([e])=>e))}function se(e,t){let n=new Map;for(let[t,r]of e)t!==r&&U.has(r)&&n.set(r,(n.get(r)??0)+1);return W(n,t)}function ce(e,t){let n=new Map,r=(t,r)=>{let i=e.nodeByFile.get(r)?.pkg;e.nodeByFile.get(t)?.pkg!==i&&U.has(i)&&n.set(i,(n.get(i)??0)+1)};for(let t of e.edges)t.fromLo&&r(t.a,t.b),t.fromHi&&r(t.b,t.a);return W(n,t)}var le=new WeakMap,ue=new WeakMap;function de(e,t){return!e.packagesOnly&&e.nodes.length<=100&&!t}function fe(e,t,n){let r=se([...e.importsOf].flatMap(([e,t])=>t.map(t=>[n(e),n(t)])),t);if(r.size===0)return e;let i=e=>!r.has(n(e)),a=e.nodes.filter(e=>i(e.file));return{...e,nodes:a,nodeByFile:new Map(a.map(e=>[e.file,e])),importsOf:new Map([...e.importsOf].filter(([e])=>i(e)).map(([e,t])=>[e,t.filter(i)])),cycleImportsOf:new Map([...e.cycleImportsOf].filter(([e])=>i(e)).map(([e,t])=>[e,new Set([...t].filter(i))]))}}function pe(e,n){if(!de(e,n))return me(e);if(ue.has(e))return ue.get(e);let r=new Map(e.nodes.map(t=>[t.file,[...new Set(e.importsOf.get(t.file)??[])]])),i=fe({...e,importsOf:r,cycleImportsOf:t(e),fileLevel:!0},ae,t=>e.nodeByFile.get(t)?.pkg);i.directedEdges=[];for(let[e,t]of i.importsOf)for(let n of t)i.directedEdges.push({from:e,to:n});return ue.set(e,i),i}function me(e){if(le.has(e))return le.get(e);let n=ee(e);if(n.cycleImportsOf=t(e,e=>e.pkg),e.layerRoots?.appImports?.length>0){if(!n.byPkg.has(`__own__`)){let e={file:`__own__`,pkg:`__own__`,label:`own source`,fileCount:0,size:null,totalIssues:0,deg:0,x:0,y:0};n.nodes.push(e),n.byPkg.set(e.pkg,e)}n.importsOf.set(`__own__`,[...new Set([...n.importsOf.get(`__own__`)??[],...e.layerRoots.appImports])].filter(e=>e!==`__own__`&&n.byPkg.has(e))),n.cycleImportsOf.set(`__own__`,new Set([...n.cycleImportsOf.get(`__own__`)??[],...e.layerRoots.appImports].filter(e=>e!==`__own__`&&n.byPkg.has(e))))}n=fe(n,oe,e=>e),n.byPkg=n.nodeByFile,n.importedBy=new Map(n.nodes.map(e=>[e.pkg,[]])),n.directedEdges=[];for(let[e,t]of n.importsOf)for(let r of t)n.importedBy.get(r).push(e),n.directedEdges.push({from:e,to:r});for(let e of n.nodes)e.deg=(n.importsOf.get(e.pkg)?.length??0)+n.importedBy.get(e.pkg).length;return le.set(e,n),n}var he=[[`graph`,`Graph`,x(S)],[`layers`,`Layers`,x(C)],[`matrix`,`Matrix`,x(w)],[`dependencies`,`Dependencies`,x(E)],[`flow`,`Size flow`,O`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M3 3h18M3 10h7m4 0h7M3 20h6m3 0h9M5 3v7m13-7v7M6 10c0 5 10 5 10 10m2-10c0 5-12 5-12 10"/></svg>`],[`package-flow`,`Package flow`,x(T)]];function ge(e,t,n=null,r={}){let i=t.showBundleLayouts&&s.bundleLayout===`layers`,a=t.showBundleLayouts&&s.bundleLayout===`matrix`,o=t.showBundleLayouts&&s.bundleLayout===`dependencies`,c=t.showBundleLayouts&&s.bundleLayout===`flow`,l=t.showBundleLayouts&&s.bundleLayout===`package-flow`,u=i?`layers`:a?`matrix`:o?`dependencies`:c?`flow`:l?`package-flow`:`graph`,d=t.showBundleLayouts?O`<div class="g2-layout-tabs" role="group" aria-label="Bundle layout">${he.filter(([e])=>t.layouts?.includes(e)??!0).map(([e,t,n])=>O`<button type="button" data-g2-layout="${e}" aria-label="${t}" aria-pressed="${String(e===u)}">${n}</button>`)}</div>`:null,f=t.extraTopRow,p=t.hideAllFiles??!1,m=t.triageCounts??{inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},h=t.triageStates??[`inprogress`,`fixed`,`invalid`,`deleted`,`ignored`],g={};for(let e of b)g[e]=0;for(let t of e.nodes)if(t.severitySet)for(let e of t.severitySet)g[e]!==void 0&&g[e]++;let _=b.some(e=>g[e]>0||s.selectedSeverities.has(e)),v=[`none`,`red`,`blue`,`green`,`gray`],y={none:0,red:0,blue:0,green:0,gray:0};for(let t of e.nodes)if(t.colorSet)for(let e of t.colorSet)y[e]!==void 0&&y[e]++;let x=v.some(e=>y[e]>0||s.selectedColors.has(e)),S=O`<triage-selector variant="graph" .counts="${m}" .states="${h}"></triage-selector>`,C=p?null:O`<mode-switch label="All files" .checked="${s.showAll}" data-g2-show-all></mode-switch>`,w=!e.packagesOnly&&!l&&(c||(o?e.nodes.length<=100:!i&&!a&&(t.showPackagesView??!1)))?O`<mode-switch label="Packages" .checked="${c?s.flowPackagesView:o?s.dependencyPackagesView:s.packagesView}" data-g2-packages-view></mode-switch>`:null,T=e.reasons?.length>0?O`<bundle-scope-selector class="g2-reason-scope" .reasons="${e.reasons.map(e=>({id:`reason:${e}`,label:e}))}" .value="${s.bundleReason?`reason:${s.bundleReason}`:``}" label="Filter files" @scope-change="${e=>e.currentTarget.dispatchEvent(new CustomEvent(`bundle-graph-reason-change`,{detail:{reason:e.detail.value.replace(/^reason:/u,``)||null},bubbles:!0,composed:!0}))}"></bundle-scope-selector>`:null,E=_?O`<severity-chips .counts="${g}" .selected="${[...s.selectedSeverities]}" kind="graph"></severity-chips>`:null,D=x?O`<triage-filter .counts="${y}" .selected="${[...s.selectedColors]}" kind="graph"></triage-filter>`:null,k=O`<div class="toolbar-search g2-path-filter-wrap"><svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg> <input type="text" class="g2-path-filter" id="g2-path-filter" placeholder="filter path/package…" .value="${s.pathFilter}"> <button type="button" class="g2-path-filter-clear" id="g2-path-filter-clear" aria-label="Clear filter">✕</button></div>`,A=O`<button type="button" class="g2-icon-btn" id="g2-fullscreen" aria-label="Toggle fullscreen">⛶</button>`;if(t.showBundleLayouts){let e=(t.hasIssues??!1)&&s.bundleIssues,i=t.hasIssues?O`<mode-switch class="g2-issues-switch" label="Issues" .checked="${s.bundleIssues}" data-g2-bundle-issues></mode-switch>`:null,a=i&&r.issuesWrapped;return O`<div class="graph2-topbar"><div class="graph2-topbar-row graph2-topbar-row-main graph2-topbar-row-pinned toolbar-row"><div class="g2-topbar-controls">${d} ${k} ${w} ${n} ${T} ${a?null:i}</div>${A}</div>${e||a?O`<div class="graph2-topbar-row graph2-topbar-row-issues toolbar-row sev-row">${a?i:null} ${e?O`${E}${D}${S}`:null}</div>`:null}</div>`}return O`<div class="graph2-topbar">${f?O`<div class="graph2-topbar-row graph2-topbar-row-extra toolbar-row">${f} ${C} ${w}<div class="g2-spacer"></div>${S}</div>`:null}<div class="graph2-topbar-row graph2-topbar-row-main toolbar-row sev-row">${d} ${T} ${E} ${D} ${k} ${f?null:C} ${f?null:w} ${n}<div class="g2-spacer"></div>${f?null:S} ${A}</div></div>`}function G(e,t){let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean),i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i++;let a=n.length-i,o=r.slice(i).join(`/`);return a===0?`./`+o:`../`.repeat(a)+o}function _e(e,t){if(!t&&t!==``)return e;let n=G(t,e);return n.length<e.length?n:e}function K(e,t,n,r){let i=n.length;if(i===0)return O`<div class="g2-sel-section"><div class="g2-sel-section-label">${t} (${i})</div><div class="g2-sel-section-empty">none</div></div>`;let a=n.map(e=>({file:e,display:_e(e,r)}));return a.sort((e,t)=>e.display.localeCompare(t.display)),O`<div class="g2-sel-section"><div class="g2-sel-section-label">${t} (${i})</div><ul class="g2-sel-file-list">${a.map(({file:t,display:n})=>{let r=e.nodeByFile.get(t),i=r?m(r.pkg):`#666`;return O`<li><button type="button" class="g2-sel-file-link" data-g2-select="${t}"><span class="g2-sel-file-dot" style="${v({background:i})}"></span> <span class="g2-sel-file-path" data-tooltip-truncated data-tooltip="${t}">${n}</span></button></li>`})}</ul></div>`}function ve(e){if(!e)return O`<div class="g2-sel-section-empty">none</div>`;let t=[`critical`,`high`,`medium`,`low`,`high_bug`,`bug`,`informational`].filter(t=>(e[t]??0)>0);return t.length===0?O`<div class="g2-sel-section-empty">none</div>`:O`<div class="tree-count-chips">${t.map(t=>O`<span class="${`tree-count-chip ${t}`}">${e[t]} ${t.replaceAll(`_`,` `)}</span>`)}</div>`}function ye(e){let t=0;for(let n of e.edges)n.cross&&t++;let n=e.edges.length-t,r=0;for(let t of e.nodes)r+=t.totalIssues;let i=e.supportsLayers&&(e.packagesOnly||s.bundleLayout===`dependencies`)&&!s.focusedPkg?pe(e,s.dependencyPackagesView):null,a=i?.nodes.length??e.nodes.length,o=i?.directedEdges.length??e.edges.length,c=a===0?`0.0`:(o*2/a).toFixed(1),l=B(s.focusedPkg);return O`<main class="graph2-stage"><canvas id="g2-canvas"></canvas>${s.focusedPkg?O`<div class="g2-stage-overlay"><button type="button" class="g2-back-btn" id="g2-back-to-full">← ${l}</button></div>`:null}<div id="g2-focus-overlay-slot" class="g2-stage-overlay-tr"></div><div class="g2-stage-stats">${!i||i.fileLevel?O`<span><b>${e.nodes.length}</b> files</span>`:null} <span><b>${i&&!i.fileLevel?i.nodes.length:e.packages.length}</b> packages</span> <span><b>${o}</b> ${i?`dependencies`:O`edges (${n} intra · ${t} cross)`}</span> ${e.issuesHidden?null:O`<span><b>${r}</b> issues</span>`} <span>avg degree <b>${c}</b></span></div><div class="g2-zoom-ctrl"><button id="g2-zoom-in" aria-label="Zoom in">+</button><div class="g2-zoom-pct" id="g2-zoom-pct">100%</div><button id="g2-zoom-out" aria-label="Zoom out">−</button> <button id="g2-zoom-fit" class="g2-zoom-fit-btn" aria-label="Fit to view">fit</button></div><div class="g2-tooltip" id="g2-tooltip"></div></main>`}function be(e){if(e.packagesOnly||e.supportsLayers&&s.bundleLayout===`dependencies`)return null;let t=null;if(s.selected){let n=e.nodeByFile.get(s.selected);n&&(t=n.pkg)}else s.solo&&(t=s.solo);if(!t||(e.pkgCount.get(t)??0)<=1||s.focusedPkg===t)return null;let n=B(t);return O`<button type="button" class="g2-focus-pkg-btn" data-g2-focus-pkg="${t}" aria-label="${`Focus on ${n}'s graph`}" data-tooltip="${`Focus on ${n}'s graph`}"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M8 4.6 L4 11 M8 4.6 L12 11 M5 11.4 L11 11.4" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/><circle cx="8" cy="3.6" r="2" fill="currentColor"/><circle cx="3.6" cy="11.4" r="2" fill="currentColor"/><circle cx="12.4" cy="11.4" r="2" fill="currentColor"/></svg></button>`}function xe(){return O`<aside class="graph2-right"><div class="g2-panel-title">Selection</div><div id="g2-selection-area"></div><div id="g2-top-pkgs-block"></div></aside>`}function q(e){if(Ee(e)){let t=me(e),n=t.nodes.toSorted((e,n)=>t.importedBy.get(n.pkg).length-t.importedBy.get(e.pkg).length||e.pkg.localeCompare(n.pkg)).map(e=>e.pkg);return O`<div class="g2-panel-title">Packages · ${ne(e).importers}</div>${J(t,n,!0)}`}let t=s.showAll&&e.nodes.length>0&&e.nodes.every(e=>typeof e.size==`number`),n=e.nodes.some(e=>e.totalIssues>0),r=s.topPkgsTab;return r===`size`&&!t&&(r=`files`),r===`issues`&&!n&&(r=`files`),O`<div class="g2-panel-title g2-panel-title-row"><span>Packages</span><div class="g2-mini-tabs">${n?O`<button type="button" class="${o({"g2-mini-tab":!0,on:r===`issues`})}" data-g2-top-pkgs="issues">Issues</button>`:null} <button type="button" class="${o({"g2-mini-tab":!0,on:r===`files`})}" data-g2-top-pkgs="files">Files</button> ${t?O`<button type="button" class="${o({"g2-mini-tab":!0,on:r===`size`})}" data-g2-top-pkgs="size">Size</button>`:null}</div></div>${Te(e,r)}`}function Se(e,t={}){if(Ee(e))return De(e,me(e),s.solo);let n=s.selected;if(n){let r=e.nodeByFile.get(n);return r?Ce(e,r,n,t):O`<div class="g2-empty-state"><strong>File not in current view</strong>Adjust filters or pick another file.</div>`}return s.solo?s.solo===`__own__`&&!e.pkgCount.has(`__own__`)&&e.layerRoots?.appImports.length>0?O`<div class="g2-empty-state"><strong>App</strong>App source is not included in this view. Connections come from its recorded imports.</div>`:we(e,s.solo):O`<div class="g2-empty-state">Click a node or a package row to inspect.</div>`}function Ce(e,t,n,r){let i=m(t.pkg),o=B(t.pkg),s=ie(n,t.pkg),c=e.importedBy.get(n)??[],l=e.importsOf.get(n)??[],u=n.lastIndexOf(`/`),d=u>=0?n.slice(0,u):``;return O`<div class="g2-selection-card"><div class="g2-sel-file-head"><div class="g2-sel-path">${s}</div><div class="g2-sel-pkg-row"><span class="g2-sel-dot" style="${v({"--dot":i,background:i})}"></span> <span class="g2-sel-pkg">${o}</span></div></div><div class="g2-sel-fullpath" data-tooltip-truncated data-tooltip="${n}">${n}</div>${a(t.size)?O`<div class="g2-sel-size">${a(t.size)}</div>`:null}<div class="g2-sel-section"><div class="g2-sel-section-label">Own findings</div>${ve(t.own)}</div><div class="g2-sel-section"><div class="g2-sel-section-label">Subtree findings</div>${ve(t.subtree)}</div><div class="g2-sel-jumps">${t.totalIssues>0&&r.findingsJump!==!1?O`<button type="button" class="g2-sel-jump" data-g2-jump-findings="${n}">Findings →</button>`:null} ${r.isBundleContext?t.origFile?O`<button type="button" class="g2-sel-jump" data-bundle-view-source="${t.origFile}">View source →</button>`:null:O`<button type="button" class="g2-sel-jump" data-g2-jump-file="${n}">Files →</button>`}</div>${K(e,`Imported by`,c,d)} ${K(e,`Imports`,l,d)}</div>`}function we(e,t){let n=e.nodes.filter(e=>e.pkg===t),r=n.length;if(r===0)return O`<div class="g2-empty-state"><strong>Package has no files in view</strong> Toggle "All files" to widen the file set, or pick another package.</div>`;let i=m(t),a=B(t),o={};for(let e of b)o[e]=0;for(let e of n)if(e.own)for(let t of b)o[t]+=e.own[t]??0;let s=0,c=0;for(let n of e.edges){let r=e.nodeByFile.get(n.a),i=e.nodeByFile.get(n.b);!r||!i||(r.pkg===t&&i.pkg===t?c++:(r.pkg===t||i.pkg===t)&&s++)}let l=0;for(let e of n)e.isHub&&l++;let u=new Set;for(let r of n)for(let n of e.importedBy.get(r.file)??[]){let r=e.nodeByFile.get(n);r&&r.pkg!==t&&u.add(n)}return O`<div class="g2-selection-card"><div class="g2-sel-head"><span class="g2-sel-dot" style="${v({"--dot":i,background:i})}"></span> <span class="g2-sel-id">${a}</span> <span class="g2-sel-grp">package</span></div><div class="g2-sel-body"><div class="g2-sel-row"><span class="k">Files</span><span class="v">${r}</span></div><div class="g2-sel-row"><span class="k">Hubs</span><span class="v">${l}</span></div><div class="g2-sel-row"><span class="k">Intra edges</span><span class="v">${c}</span></div><div class="g2-sel-row"><span class="k">Cross edges</span><span class="v">${s}</span></div></div><div class="g2-sel-section"><div class="g2-sel-section-label">Findings</div>${ve(o)}</div>${K(e,`Imported by`,[...u])}</div>`}function Te(e,t){let n=e.nodes.length||1,r=t??s.topPkgsTab,i=s.selectedSeverities,c=s.selectedColors,l=!e.issuesHidden&&i.size>0,u=!e.issuesHidden&&c.size>0,d=l||u,f=new Map,p=new Map,h=0,g=0;for(let t of e.nodes){let e;if(d){if(e=0,t.findings)for(let n of t.findings)l&&!i.has(n.severity)||u&&!c.has(n.color)||e++}else e=t.totalIssues;f.set(t.pkg,(f.get(t.pkg)??0)+e),h+=e,typeof t.size==`number`&&(p.set(t.pkg,(p.get(t.pkg)??0)+t.size),g+=t.size)}let _;_=r===`issues`?e.packages.filter(e=>(f.get(e)??0)>0).toSorted((t,n)=>{let r=f.get(t)??0,i=f.get(n)??0;return i===r?(e.pkgCount.get(n)??0)-(e.pkgCount.get(t)??0):i-r}):r===`size`?e.packages.filter(e=>(p.get(e)??0)>0).toSorted((t,n)=>{let r=p.get(t)??0,i=p.get(n)??0;return i===r?(e.pkgCount.get(n)??0)-(e.pkgCount.get(t)??0):i-r}):[...e.packages].toSorted((t,n)=>{let r=e.pkgCount.get(t)??0,i=e.pkgCount.get(n)??0;return i===r?(f.get(n)??0)-(f.get(t)??0):i-r});let b=t=>r===`issues`?h>0?((f.get(t)??0)/h*100).toFixed(2):`0`:r===`size`?g>0?((p.get(t)??0)/g*100).toFixed(2):`0`:(e.pkgCount.get(t)/n*100).toFixed(2),x=r===`issues`?`No packages with issues`:r===`size`?`No packages with size`:`No packages`;return O`<div class="g2-dist-bar">${e.packages.map(e=>{let t=m(e);return O`<span style="${v({background:t,width:`${b(e)}%`})}"></span>`})}</div><div class="g2-dist-list">${_.length===0?O`<div class="g2-dist-empty">${x}</div>`:null} ${y(_,e=>e,t=>{let i=m(t),c=e.pkgCount.get(t)??0,l=f.get(t)??0,u=p.get(t)??0,d=r===`issues`?l:r===`size`?a(u):c,_=r===`issues`?h>0?(l/h*100).toFixed(1):`0.0`:r===`size`?g>0?(u/g*100).toFixed(1):`0.0`:(c/n*100).toFixed(1),y=B(t),b=s.solo===t;return O`<button type="button" class="${o({"g2-dist-item":!0,on:b})}" data-g2-pkg="${t}"><span class="g2-dist-dot" style="${v({background:i})}"></span><span class="g2-dist-name" data-tooltip-truncated data-tooltip="${y}">${y}</span><span class="g2-dist-count">${d}</span><span class="g2-dist-pct">${_}%</span></button>`})}</div>`}function Ee(e){return(e.packagesOnly||e.supportsLayers&&s.bundleLayout===`dependencies`&&!s.focusedPkg)&&!de(e,s.dependencyPackagesView)}function J(e,t,n=!1){return O`<div class="g2-dist-list">${y(t,e=>e,t=>O`<button type="button" class="${o({"g2-dist-item":!0,on:s.solo===t})}" data-g2-pkg="${t}"><span class="g2-dist-dot" style="${v({background:m(t)})}"></span> <span class="g2-dist-name">${B(t)}</span> ${n?O`<span class="g2-dist-count">${e.importedBy.get(t).length}</span>`:null}</button>`)}</div>`}function De(e,t,n){let r=t.byPkg.get(n),i=ne(e);if(!r)return O`<div class="g2-empty-state">Select a package to trace its ${i.links}.</div>`;let a=t.importedBy.get(n)??[],o=t.importsOf.get(n)??[],s=e.packagesOnly?re(e,n):[];return O`<div class="g2-selection-card"><div class="g2-sel-head"><span class="g2-sel-dot" style="${v({background:m(n)})}"></span> <span class="g2-sel-id">${r.label}</span></div>${r.totalIssues?O`<div class="g2-sel-section">${ve(r.own)}</div>`:null} ${s.length>0?O`<div class="g2-sel-section"><div class="g2-sel-section-label">${s.length===1?`Version`:`Versions (${s.length})`}</div><div class="g2-sel-versions">${s.join(`, `)}</div></div>`:null}<div class="g2-sel-section"><div class="g2-sel-section-label">${i.incoming} (${a.length})</div>${J(t,a.toSorted())}</div><div class="g2-sel-section"><div class="g2-sel-section-label">Dependencies (${o.length})</div>${J(t,o.toSorted())}</div></div>`}function Oe(e,t,n){return Math.min(24,Math.max(1,t-196-12)/Math.max(1,e),Math.max(1,n-118-12)/Math.max(1,e))}function ke(e,t,n,r){return Math.max(Math.min(18,Oe(t,n,r)),Math.min(27,e))}function Ae(e,t,n,r){let i=Math.floor((e-196+r.x)/r.cell),a=Math.floor((t-118+r.y)/r.cell);return e<196&&t>=118&&a>=0&&a<n.rows.length?{row:a,col:null}:t<118&&e>=196&&i>=0&&i<n.rows.length?{row:i,col:null}:e>=196&&t>=118&&a>=0&&i>=0&&a<n.rows.length&&i<n.rows.length?{row:a,col:i}:null}function Y(e){if(!e.file)return e.label;let t=`node_modules/${e.pkg}/`;return e.file.includes(t)?e.file.slice(e.file.indexOf(t)+t.length):e.file}function je(e,t,n,{width:r,height:i,theme:a,colorOf:o,hover:s,selected:c,dimmed:l,rows:u=`importers`}){let{cell:d,x:f,y:p}=n,{rows:m}=t,h=e=>196+e*d-f,g=e=>118+e*d-p,_=Math.max(0,Math.floor(p/d)),v=Math.min(m.length,Math.ceil((i-118+p)/d)),y=Math.max(0,Math.floor(f/d)),b=Math.min(m.length,Math.ceil((r-196+f)/d)),x=s??c;e.clearRect(0,0,r,i),e.fillStyle=a.bg,e.fillRect(0,0,r,i),e.save(),e.beginPath(),e.rect(196,118,r-196,i-118),e.clip();let S=[];for(let e=0;e<m.length;e++){let t=S.at(-1),n=m[e];t&&t.component===n.component?t.end=e+1:S.push({component:n.component,start:e,end:e+1,cyclic:n.cyclic})}for(let t of S)t.cyclic&&(e.strokeStyle=a.cycle+`85`,e.lineWidth=1,e.strokeRect(h(t.start),g(t.start),(t.end-t.start)*d,(t.end-t.start)*d));if(x&&(e.fillStyle=a.highlight,e.fillRect(196,g(x.row),r-196,d),e.fillRect(h(x.col??x.row),118,d,i-118)),e.strokeStyle=a.grid,e.lineWidth=1,d>=9){e.beginPath();for(let t=_;t<=v;t++)e.moveTo(196,g(t)+.5),e.lineTo(r,g(t)+.5);for(let t=y;t<=b;t++)e.moveTo(h(t)+.5,118),e.lineTo(h(t)+.5,i);e.stroke()}let C=t.visibleCells.reduce((e,t)=>Math.max(e,t.count),1),w=d>=8?2:.25;for(let n of t.visibleCells)n.row<_||n.row>=v||n.col<y||n.col>=b||(e.globalAlpha=l(m[n.row])&&l(m[n.col])?.12:.35+.65*Math.log1p(n.count)/Math.log1p(C),e.fillStyle=n.cyclic&&d<10?a.cycle:o(m[n.row].pkg),e.fillRect(h(n.col)+w,g(n.row)+w,Math.max(1,d-2*w),Math.max(1,d-2*w)),n.cyclic&&n.from!==n.to&&d>=10&&(e.fillStyle=a.cycle,e.fillRect(h(n.col)+d-5,g(n.row)+2,3,3)));e.globalAlpha=1,c&&(e.strokeStyle=a.text,e.lineWidth=2,c.col===null?e.strokeRect(197,g(c.row)+1,r-196-2,d-2):e.strokeRect(h(c.col)+1,g(c.row)+1,d-2,d-2)),e.restore(),e.fillStyle=a.surface,e.fillRect(0,0,r,118),e.fillRect(0,0,196,i),e.font=`11px ui-monospace, monospace`,e.textBaseline=`middle`;let T=Math.max(1,Math.ceil(14/d));for(let n=_;n<v;n++){if(n%T&&n!==x?.row)continue;e.save(),e.beginPath(),e.rect(5,111,186,i-118+7),e.clip();let r=g(n)+d/2;n===x?.row&&(e.fillStyle=a.highlight,e.fillRect(0,g(n),196,Math.max(d,14))),e.fillStyle=o(m[n].pkg),e.fillRect(8,r-3,5,6),e.fillStyle=n===x?.row||t.matches.size<t.totalRows&&t.matches.has(m[n].id)?a.text:a.muted,e.fillText(`${m[n].file?` `:``}${Y(m[n])}`,20,r),e.restore()}let E=Math.max(1,Math.ceil(17/d));for(let t=y;t<b;t++)t%E&&t!==(x?.col??x?.row)||(e.save(),e.beginPath(),e.rect(189,22,r-196+7,96),e.clip(),e.translate(h(t)+d/2,108),e.rotate(-Math.PI/4),e.fillStyle=t===(x?.col??x?.row)?a.text:a.muted,e.fillText(Y(m[t]),0,0,115),e.restore(),e.fillStyle=o(m[t].pkg),e.fillRect(h(t)+1,114,Math.max(1,d-2),3));e.fillStyle=a.muted,e.font=`10px ui-monospace, monospace`,e.fillText(`${u.toUpperCase()} \u2193`,14,104),e.fillText(`DEPENDENCIES →`,204,12),e.strokeStyle=a.border,e.beginPath(),e.moveTo(195.5,118),e.lineTo(195.5,i),e.moveTo(196,117.5),e.lineTo(r,117.5),e.stroke(),m.length===0&&(e.fillStyle=a.muted,e.fillText(`No matching dependencies`,216,148))}var X=e=>e.toLocaleString(`en-US`);function Me(e,t,n){return O`<button class="g2-dist-item matrix-row-link" @click="${()=>n(e.id)}"><span class="g2-dist-dot" style="${v({background:m(e.pkg)})}"></span><span class="g2-dist-name" data-tooltip-truncated data-tooltip="${e.label}">${e.label}</span><span class="g2-dist-count">${X(t)}</span></button>`}function Ne(e,t){return e.packagesOnly?re(e,t.pkg).length:t.files.length}function Pe(e,t,n,{select:r,expand:i,expanded:o,neighborhood:s,focus:c,clear:l}){let u=e.byId.get(n?.from),d=e.byId.get(n?.to),f=t.packagesOnly,p=ne(t),m=e=>t.nodeByFile.get(e)?.origFile??e;if(!u){let n=[...e.rows].toSorted((e,t)=>t.importers-e.importers).slice(0,15),i=f?[...e.byId.values()].reduce((e,t)=>e+t.dependencies,0):e.importCount;return O`<div class="matrix-metrics">${f?null:O`<span><b>${X(t.nodes.length)}</b>files</span>`}<span><b>${X(t.packages.length)}</b>packages</span><span><b>${X(i)}</b>${p.links}</span></div><p class="matrix-empty">Select a row to inspect a package.<br>Select a cell to see the ${p.members} behind a dependency.</p><h4>${p.mostImported}</h4>${n.map(e=>Me(e,e.importers,r))} ${e.cycleCount?O`<h4>Cyclic groups <b>${e.cycleCount}</b></h4>${e.rows.filter(e=>e.cyclic).slice(0,12).map(e=>Me(e,e.outgoing,r))}`:null}`}let g=d?e.cells.get(u.id)?.get(d.id):null,_=g?.cycleCount<g?.count?`${X(g.cycleCount)} of ${X(g.count)} ${p.cellLinks} participate in a cycle`:`${p.link} participates in a cycle`,v=Map.groupBy(g?.examples??[],([,e])=>e),y=u.cyclic?[...e.byId.values()].filter(e=>e.component===u.component).length:0,b=[...e.cells.get(u.id)?.values()??[]].filter(e=>e.to!==u.id).toSorted((e,t)=>t.count-e.count),x=[...e.cells.values()].map(e=>e.get(u.id)).filter(e=>e&&e.from!==u.id).toSorted((e,t)=>t.count-e.count),S=(e,t)=>f?O`<span class="matrix-import-copy">${t}</span>`:O`<button data-bundle-view-source="${m(e)}">${t}</button>`,C=f?null:u.file?O`<button @click="${()=>i(u.pkg)}">Collapse package</button><button data-bundle-view-source="${m(u.file)}">View source</button>`:O`<button @click="${()=>i(u.pkg)}">${o.has(u.pkg)?`Collapse files`:`Expand files`}</button>`;return O`<div class="matrix-panel-head"><button class="matrix-selected-name" @click="${()=>r(u.id)}">${u.label}</button><button type="button" class="detail-action" @click="${l}" aria-label="Clear matrix selection">×</button></div>${d?O`<div class="matrix-direction">${p.linked} →</div><button class="matrix-selected-name" @click="${()=>r(d.id)}">${d.label}</button>`:null} ${(d?g?.cyclic:u.cyclic)?O`<span class="matrix-cycle-label">${d?_:`Cyclic group \xB7 ${y} members`}</span>`:null}<div class="matrix-metrics"><span><b>${X(d?g?.count??0:Ne(t,u))}</b>${d?p.cellLinks:p.members}</span>${f?null:O`<span><b>${a(u.size)}</b>source size</span>`}</div><div class="matrix-actions">${C} <button aria-pressed="${String(s===u.id)}" @click="${()=>c(u.id)}">Neighborhood</button></div>${d?O`<h4>${p.cellHeading}</h4>${v.size>0?[...v].map(([e,n])=>O`<div class="matrix-import-group">${f?O`<span class="matrix-import-copy matrix-import-target" data-tooltip-truncated data-tooltip="${e}">${e}</span>`:O`<button class="matrix-import-target" data-bundle-view-source="${m(e)}" data-tooltip-truncated data-tooltip="${e}">${e}</button>`}<ul class="matrix-import-sources" aria-label="${p.incoming}">${n.map(([n])=>O`<li>${S(n,O`<span aria-hidden="true">←</span><span data-tooltip-truncated data-tooltip="${n}">${n}</span>`)} ${h(m(n),m(e),t.ownSourceFiles?.has(e),t.ownSourceFiles?.has(n))?null:O`<span class="matrix-import-excluded">Excluded from cycles</span>`}</li>`)}</ul></div>`):O`<p class="matrix-empty">No direct ${p.links} in this direction.</p>`} ${g&&g.count>g.examples.length?O`<p class="matrix-empty">Showing ${g.examples.length} of ${X(g.count)} ${p.links}.</p>`:null} ${d.id!==u.id&&e.cells.get(d.id)?.has(u.id)?O`<h4>Reverse direction</h4><button class="g2-dist-item matrix-reverse-link" @click="${()=>r(d.id,u.id)}">← ${X(e.cells.get(d.id).get(u.id).count)} ${p.cellLinks}</button>`:null}`:O`<h4>${p.outgoing} <b>${b.length}</b></h4>${b.slice(0,60).map(t=>Me(e.byId.get(t.to),t.count,e=>r(u.id,e)))} ${b.length>60?O`<p class="matrix-empty">Showing the 60 strongest of ${b.length} dependencies.</p>`:null}<h4>${p.incoming} <b>${x.length}</b></h4>${x.slice(0,60).map(t=>Me(e.byId.get(t.from),t.count,e=>r(e,u.id)))} ${x.length>60?O`<p class="matrix-empty">Showing the 60 strongest of ${x.length} ${p.importers}.</p>`:null}`}`}var Fe=`:host{display:contents}*{box-sizing:border-box}button,select{font:inherit;color:var(--text);border:1px solid var(--border);background:var(--surface);border-radius:var(--ui-radius, 4px);padding:4px 7px;cursor:default}button:hover,button[aria-pressed=true]{background:var(--graph-hover-bg);border-color:var(--muted)}button:focus-visible,select:focus-visible,canvas:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.matrix-layout{display:contents;color:var(--text);font-size:12px}.matrix-stage{grid-area:stage;position:relative;overflow:hidden;min-width:0;min-height:0;background:var(--graph-canvas-bg)}.matrix-order{position:absolute;top:12px;left:14px;max-width:calc(var(--matrix-label-width) - 28px);height:30px;padding:3px 6px;border-radius:var(--ui-radius, 6px);font-size:11px}canvas{display:block;width:100%;height:100%;touch-action:none}.matrix-hover{position:absolute;bottom:10px;left:calc(var(--matrix-label-width) + 10px);max-width:max(0px,calc(100% - var(--matrix-label-width) - 160px));padding:5px 8px;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--surface);pointer-events:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px}.matrix-panel{grid-area:right;min-height:0;overflow:auto;padding:12px;border-left:1px solid var(--border);background:var(--surface)}.matrix-panel-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-right:var(--graph-fullscreen-inset, 0)}h4{margin:20px 0 7px;font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;display:flex;justify-content:space-between}.matrix-metrics{display:flex;gap:14px;margin:15px 0;color:var(--muted);font-size:10px}.matrix-metrics:first-child{margin-top:0;padding-right:var(--graph-fullscreen-inset, 0)}.matrix-metrics b{display:block;font-size:16px;font-weight:500;color:var(--text);font-variant-numeric:tabular-nums;margin-bottom:3px}.matrix-empty{color:var(--muted);font-size:11px;line-height:1.6;cursor:default;user-select:none;-webkit-user-select:none}.matrix-row-link{grid-template-columns:6px minmax(0,1fr) auto}.matrix-row-link .g2-dist-dot{width:6px;height:6px;border-radius:2px}.matrix-row-link .g2-dist-name{color:var(--text)}.matrix-row-link .g2-dist-count{color:var(--muted)}.matrix-reverse-link{grid-template-columns:1fr}.matrix-selected-name{display:block;background:transparent;border:0;text-align:left;padding:0;margin:14px 0 6px;font:12px/1.6 ui-monospace,monospace;overflow-wrap:anywhere}.matrix-panel-head .matrix-selected-name{min-width:0;margin:0}.matrix-panel-head button:last-child{flex-shrink:0}.matrix-direction{color:var(--muted);font-size:10px}.matrix-cycle-label{display:block;color:var(--matrix-cycle, #e879c7);font-size:10px;margin-top:10px}.matrix-actions{display:flex;gap:5px;margin:12px 0;font-size:11px}.matrix-actions button{white-space:nowrap}.matrix-import-group{padding:6px 0;border-bottom:1px solid var(--border)}.matrix-import-group :is(button,.matrix-import-copy){display:flex;align-items:baseline;gap:6px;width:100%;min-height:20.5px;background:transparent;border:0;padding:2px 0;font:10px/1.6 ui-monospace,monospace;text-align:left;overflow-wrap:anywhere;color:var(--text)}.matrix-import-group .matrix-import-target{font-weight:600}.matrix-import-sources{margin:0 0 0 10px;padding:0;list-style:none}.matrix-import-sources :is(button,.matrix-import-copy){color:var(--muted)}.matrix-import-sources span:last-child{min-width:0}.matrix-import-excluded{display:block;margin-left:12px;color:var(--muted);font-size:10px}
8
+ `,Ie=class extends A{static properties={graph:{attribute:!1}};static styles=[D(M),D(Fe),D(e),D(N)];constructor(){super(),this.expanded=new Set,this.order=`structure`,this.cyclesOnly=!1,this.neighborhood=null,this.selection=null,this.hover=null,this.view={cell:18,x:0,y:0},this.width=0,this.height=0,this.dirty=!0,this.needsFit=!0,this.bridge={requestDraw:()=>this.requestUpdate(),_cleanup:()=>{}}}willUpdate(e){if(this.graph&&(e.has(`graph`)||this.query!==s.pathFilter||this.dirty)){let e=this.model?.rows;this.query=s.pathFilter,this.model=r(this.graph,{expanded:this.expanded,order:this.order,query:this.query,neighborhood:this.neighborhood,cyclesOnly:this.cyclesOnly}),this.neighborhood&&!this.model.byId.has(this.neighborhood)&&(this.neighborhood=null,this.model=r(this.graph,{expanded:this.expanded,order:this.order,query:this.query,cyclesOnly:this.cyclesOnly})),this.selection&&(!this.model.index.has(this.selection.from)||this.selection.to&&(!this.model.index.has(this.selection.to)||this.cyclesOnly&&!this.model.cells.get(this.selection.from)?.has(this.selection.to)))&&(this.selection=null),this.hover=null,this.dirty=!1,this.needsFit||=!e||e.length!==this.model.rows.length||this.model.rows.some((t,n)=>t.id!==e[n].id)}}firstUpdated(){let e=this.renderRoot.querySelector(`canvas`);this.canvas=e,this.resizeObserver=new ResizeObserver(()=>{let t=e.parentElement.getBoundingClientRect();this.width=t.width,this.height=t.height;let n=window.devicePixelRatio||1;e.width=Math.round(this.width*n),e.height=Math.round(this.height*n),this.clamp(),this.paint()}),this.resizeObserver.observe(e.parentElement),this.themeObserver=new MutationObserver(()=>this.requestUpdate()),this.themeObserver.observe(document.body,{attributes:!0,attributeFilter:[`class`]}),this.events=new AbortController,e.addEventListener(`wheel`,e=>{e.preventDefault(),e.ctrlKey||e.metaKey?this.zoom(Math.exp(-e.deltaY*.005),e.offsetX,e.offsetY):(this.view.x+=e.shiftKey?e.deltaY:e.deltaX,this.view.y+=e.shiftKey?0:e.deltaY,this.clamp(),this.hover=null,this.paint())},{passive:!1,signal:this.events.signal})}updated(){s.graphState=this.bridge;let e=JSON.stringify([this.cyclesOnly,this.model.cycleCount,this.expanded.size,!!this.neighborhood]);e!==this.controlsKey&&(this.controlsKey=e,this.dispatchEvent(new CustomEvent(`matrix-controls-change`,{detail:this.renderControls(),bubbles:!0,composed:!0}))),cancelAnimationFrame(this.frame),this.frame=requestAnimationFrame(()=>this.paint())}disconnectedCallback(){super.disconnectedCallback(),this.resizeObserver?.disconnect(),this.themeObserver?.disconnect(),this.events?.abort(),cancelAnimationFrame(this.frame),s.graphState===this.bridge&&(s.graphState=null)}clamp(){this.view.cell=ke(this.view.cell,this.model.rows.length,this.width,this.height);let e=this.model.rows.length*this.view.cell;this.view.x=Math.max(0,Math.min(this.view.x,Math.max(0,e-this.width+196+12))),this.view.y=Math.max(0,Math.min(this.view.y,Math.max(0,e-this.height+118+12)))}fit(){this.view={cell:Oe(this.model.rows.length,this.width,this.height),x:0,y:0},this.needsFit=!1,this.requestUpdate()}zoom(e,t=(this.width+196)/2,n=(this.height+118)/2){let r=this.view.cell,i=ke(r*e,this.model.rows.length,this.width,this.height);this.view.x=(this.view.x+t-196)*i/r-t+196,this.view.y=(this.view.y+n-118)*i/r-n+118,this.view.cell=i,this.clamp(),this.hover=null,this.requestUpdate()}select(e,t=null,n=!0){this.selection={from:e,to:t},n&&this.model.index.has(e)&&(this.view.cell=Math.max(16,this.view.cell),this.view.y=this.model.index.get(e)*this.view.cell-(this.height-118)/2,this.view.x=(this.model.index.get(t??e)??0)*this.view.cell-(this.width-196)/2,this.clamp()),this.requestUpdate()}expand(e){this.graph.packagesOnly||(this.expanded.has(e)?this.expanded.delete(e):this.expanded.add(e),this.revealPkg=e,this.selection=null,this.neighborhood=null,this.dirty=!0,this.requestUpdate())}pointer(e){let t=this.canvas.getBoundingClientRect();return Ae(e.clientX-t.left,e.clientY-t.top,this.model,this.view)}move(e){if(this.drag){let t=e.clientX-this.drag.x,n=e.clientY-this.drag.y;if(Math.abs(t)+Math.abs(n)>3&&(this.drag.moved=!0),this.drag.moved){this.view.x=this.drag.ox-t,this.view.y=this.drag.oy-n,this.clamp(),this.hover=null,this.paint();return}}let t=this.pointer(e);(t?.row!==this.hover?.row||t?.col!==this.hover?.col)&&(this.hover=t,this.requestUpdate())}key(e){if(e.key===`Escape`){this.selection=null,this.hover=null,this.requestUpdate();return}if(![`ArrowDown`,`ArrowUp`,`ArrowLeft`,`ArrowRight`,`Enter`].includes(e.key)||this.model.rows.length===0)return;e.preventDefault();let t=this.model.index.get(this.selection?.from)??0,n=this.model.index.get(this.selection?.to)??t;if(e.key===`Enter`){this.expand(this.model.rows[t].pkg);return}e.key===`ArrowDown`&&t++,e.key===`ArrowUp`&&t--,e.key===`ArrowRight`&&n++,e.key===`ArrowLeft`&&n--;let r=e=>Math.max(0,Math.min(this.model.rows.length-1,e));this.select(this.model.rows[r(t)].id,this.model.rows[r(n)].id)}paint(){if(!this.canvas||!this.model||this.width<=196||this.height<=118)return;if(this.needsFit&&this.fit(),this.revealPkg){let e=this.model.rows.find(e=>e.pkg===this.revealPkg);this.revealPkg=null,e&&this.select(e.id)}let e=this.canvas.getContext(`2d`),t=window.devicePixelRatio||1;e.setTransform(t,0,0,t,0,0);let n=getComputedStyle(this),r=e=>n.getPropertyValue(e).trim(),i=document.body.classList.contains(`theme-paper`),a=i||[`theme-light`,`theme-pink`,`theme-w95`].some(e=>document.body.classList.contains(e)),o={bg:r(`--graph-canvas-bg`)||`#0c0c0c`,surface:r(`--surface`),text:r(`--text`),muted:r(`--muted`),border:r(`--border`),grid:a?`#0000000b`:`#ffffff0b`,highlight:i?`#fff`:a?`#0969da18`:`#ffffff12`,cycle:i?`#000`:a?`#a21caf`:`#e879c7`};this.style.setProperty(`--matrix-cycle`,o.cycle);let c=this.model.index.get(this.selection?.to),l=this.model.index.get(this.selection?.from);je(e,this.model,this.view,{width:this.width,height:this.height,theme:o,colorOf:m,rows:ne(this.graph).importers,hover:this.hover,selected:l===void 0?null:{row:l,col:c??null},dimmed:e=>!this.graph.issuesHidden&&!e.files.some(e=>{let t=this.graph.nodeByFile.get(e);return(s.selectedSeverities.size===0||[...s.selectedSeverities].some(e=>t.severitySet?.has(e)))&&(s.selectedColors.size===0||[...s.selectedColors].some(e=>t.colorSet?.has(e)))})})}renderControls(){let e=this.model.cycleCount>0||this.cyclesOnly;return!e&&this.expanded.size===0&&!this.neighborhood?null:O`<div class="g2-matrix-controls">${e?O`<mode-switch label="${`${this.model.cycleCount} ${this.model.cycleCount===1?`cycle`:`cycles`}`}" .checked="${this.cyclesOnly}" @click="${()=>{this.cyclesOnly=!this.cyclesOnly,this.dirty=!0,this.requestUpdate()}}"></mode-switch>`:null} ${this.expanded.size>0?O`<button @click="${()=>{this.expanded.clear(),this.selection=null,this.dirty=!0,this.requestUpdate()}}">Collapse all</button>`:null} ${this.neighborhood?O`<button @click="${()=>{this.neighborhood=null,this.dirty=!0,this.requestUpdate()}}">All dependencies</button>`:null}</div>`}render(){if(!this.model)return null;let e=this.model.rows[this.hover?.col],t=this.model.rows[this.hover?.row],n=e&&t?this.model.cells.get(t.id)?.get(e.id)?.count??0:0,r=this.graph.packagesOnly,i=ne(this.graph);return O`<div class="matrix-layout"><div class="matrix-stage" style="${v({"--matrix-label-width":`196px`})}"><select class="matrix-order" aria-label="Matrix order" @change="${e=>{this.order=e.target.value,this.dirty=!0,this.requestUpdate()}}"><option value="structure" ?selected="${this.order===`structure`}">Structure ↓</option><option value="name" ?selected="${this.order===`name`}">Name ↓</option><option value="importers" ?selected="${this.order===`importers`}">${i.mostImported} ↓</option><option value="imports" ?selected="${this.order===`imports`}">Most ${i.links} ↓</option></select><canvas tabindex="0" role="img" aria-label="${r?`Dependency matrix. Rows depend on columns. Arrow keys select cells.`:`Dependency matrix. Rows import columns. Arrow keys select cells; Enter expands a package.`}" @keydown="${e=>this.key(e)}" @pointermove="${e=>this.move(e)}" @pointerleave="${()=>{this.drag||(this.hover=null,this.requestUpdate())}}" @pointerdown="${e=>{e.button===0&&(this.canvas.setPointerCapture(e.pointerId),this.drag={x:e.clientX,y:e.clientY,ox:this.view.x,oy:this.view.y,moved:!1})}}" @pointercancel="${()=>{this.drag=null}}" @pointerup="${e=>{if(this.drag){if(!this.drag.moved){let t=this.pointer(e);t&&this.select(this.model.rows[t.row].id,t.col===null?null:this.model.rows[t.col].id,!1)}this.drag=null}}}" @dblclick="${e=>{let t=this.pointer(e);t&&this.expand(this.model.rows[t.row].pkg)}}"></canvas>${t&&(!e||n>0)?O`<div class="matrix-hover">${t.label}${e?` \u2192 ${e.label} \xB7 ${n} ${i.links}`:` \xB7 ${Ne(this.graph,t)} ${i.members}`}</div>`:null}<div class="g2-zoom-ctrl" role="group" aria-label="Matrix zoom"><button aria-label="Zoom in" @click="${()=>this.zoom(1.5)}">+</button><div class="g2-zoom-pct">${Math.round(this.view.cell/18*100)}%</div><button aria-label="Zoom out" @click="${()=>this.zoom(1/1.5)}">−</button> <button class="g2-zoom-fit-btn" aria-label="Fit to view" @click="${()=>this.fit()}">fit</button></div></div><aside class="matrix-panel" aria-label="Matrix details" aria-live="polite">${Pe(this.model,this.graph,this.selection,{select:(e,t)=>this.select(e,t),expand:e=>this.expand(e),expanded:this.expanded,neighborhood:this.neighborhood,focus:e=>{this.neighborhood=this.neighborhood===e?null:e,this.dirty=!0,this.requestUpdate()},clear:()=>{this.selection=null,this.requestUpdate()}})}</aside></div>`}};customElements.define(`dependency-matrix`,Ie);var Z={dark:`#0c0c0c`,light:`#f6f8fa`,pink:`#fff0f7`,w95:`#fff`,paper:`#fff`};function Le(){let e=typeof document>`u`?null:document.body?.classList;return e?.contains(`theme-paper`)?Z.paper:e?.contains(`theme-pink`)?Z.pink:e?.contains(`theme-w95`)?Z.w95:e?.contains(`theme-light`)?Z.light:Z.dark}function Re(e){let t=[1,3,5].map(t=>{let n=parseInt(e.slice(t,t+2),16)/255;return n<=.04045?n/12.92:((n+.055)/1.055)**2.4});return t[0]*.2126+t[1]*.7152+t[2]*.0722>.18?`#000`:`#fff`}function ze(e,t,n){let r=[...n.keys()],i=new Map;r.forEach((e,t)=>{for(let r of n.get(e).files)i.set(r,t)});let a=[...i.keys()],o=new Map(a.map((e,t)=>[e,t])),s=a.map(e=>i.get(e)),c=a.map(t=>[...e.get(t)].map(e=>o.get(e))),l=t.map(e=>o.get(e)),u=new Int32Array(a.length),d=new Int32Array(a.length),f=new Int32Array(a.length),p=new Uint8Array(a.length);return{ids:r,paths:a,groups:s,run:e=>{for(let t=0;t<r.length;t+=32){let n=Math.min(32,r.length-t),i=n===32?-1:(1<<n)-1;d.fill(0),p.fill(0);for(let e=0;e<a.length;e++){let r=s[e]-t;u[e]=r>=0&&r<n?i&~(1<<r):i}let o=0,m=0,h=0,g=e=>{p[e]||(p[e]=1,f[h]=e,h=(h+1)%f.length,m++)};for(let e of l)d[e]=u[e],d[e]&&g(e);for(;m>0;){let e=f[o];o=(o+1)%f.length,m--,p[e]=0;for(let t of c[e]){let n=d[e]&u[t]&~d[t];n&&(d[t]|=n,g(t))}}e(t,i,d)}}}}function Be(e,t,n,r){let{ids:i,paths:a,run:o}=ze(t,n,r),s=a.map(t=>{let n=e.get(t);return{size:Number.isFinite(n.size)&&n.size>=0?n.size:0,missing:+(!n.virtual&&n.size==null)}}),c=i.map(()=>({removable:0,removableMissing:0}));o((e,t,n)=>{let r=new Map;for(let e=0;e<a.length;e++){let i=t&~n[e];if(!i)continue;let a=r.get(i);a||(a={size:0,missing:0},r.set(i,a)),a.size+=s[e].size,a.missing+=s[e].missing}for(let[t,n]of r)for(let r=t;r;r&=r-1){let t=e+31-Math.clz32(r&-r);c[t].removable+=n.size,c[t].removableMissing+=n.missing}}),i.forEach((e,t)=>Object.assign(r.get(e),c[t]))}function Ve(e,t,n){let{ids:r,paths:i,groups:a,run:o}=ze(e,t,n),s=r.map(()=>0),c=new Int32Array(r.length);o((e,t,n)=>{c.fill(t);for(let e=0;e<i.length;e++)c[a[e]]&=~n[e];for(let t of c)for(let n=t;n;n&=n-1)s[e+31-Math.clz32(n&-n)]++}),r.forEach((e,t)=>Object.assign(n.get(e),{removable:s[t],removableMissing:0}))}function He(e,t,n,r){let i=r.map(()=>0),a=new Int32Array(n),o=new Int32Array(e.length),s=new Int32Array(e.length),c=new Uint8Array(e.length);for(let n=0;n<r.length;n+=32){let l=Math.min(32,r.length-n);o.fill(0),c.fill(0);let u=0,d=0,f=0,p=e=>{c[e]||(c[e]=1,s[f]=e,f=(f+1)%s.length,d++)};for(let e=0;e<l;e++)for(let t of r[n+e])o[t]|=1<<e,p(t);for(;d>0;){let t=s[u];u=(u+1)%s.length,d--,c[t]=0;for(let n of e[t]){let e=o[t]&~o[n];e&&(o[n]|=e,p(n))}}a.fill(0);for(let n=0;n<e.length;n++)a[t[n]]|=o[n];for(let e of a)for(let t=e;t;t&=t-1)i[n+31-Math.clz32(t&-t)]++}return i}function Ue(e,t,n,r){let i=[...n.keys()],a=[],o=new Map;i.forEach((e,t)=>{for(let r of n.get(e).files)o.set(r,t),a.push(r)});let s=new Map(a.map((e,t)=>[e,t])),c=a.map(t=>[...e.get(t)].map(e=>s.get(e))),l=a.map(e=>o.get(e)),u=[...i.map(e=>n.get(e).files),...r.map(e=>[...e.targets])],d=He(c,l,i.length,u.map(e=>e.map(e=>s.get(e))));i.forEach((e,t)=>Object.assign(n.get(e),{own:1,size:d[t],missing:0})),r.forEach((e,t)=>Object.assign(e,{size:d[i.length+t],missing:0})),Ve(e,t,n)}function We(e,t,r){let i=new Map([...e.keys()].map(e=>[e,new Set]));for(let[e,n]of t){let t=r(e),a=r(n);t!==a&&i.get(t).add(a)}let{groups:a,componentOf:o}=n([...e.keys()],i),s=a.map(t=>t.reduce((t,n)=>{let r=e.get(n);return Math.max(t,r.own,r.removable)},0)),c=a.map(()=>0),l=a.map(()=>new Set);for(let[e,t]of i)for(let n of t){let t=o.get(e),r=o.get(n);t!==r&&!l[t].has(r)&&(l[t].add(r),c[r]++)}let u=[];c.forEach((e,t)=>{e||u.push(t)});for(let e of u)for(let t of l[e])s[t]=Math.max(s[t],s[e]),--c[t]===0&&u.push(t);for(let[t,n]of e)n.filterSize=s[o.get(t)]}function Ge(e,t,n,r,i){let a=new Int32Array(e.length),o=i.map(()=>({size:0,missing:0}));for(let s=0;s<e.length;s+=32){let c=Math.min(32,e.length-s);for(let n=t.length-1;n>=0;n--){let r=t[n],i=r-s,o=i>=0&&i<c?1<<i:0;for(let t of e[r])o|=a[t];a[r]=o}let l=new Map;for(let e=0;e<i.length;e++){let t=a[i[e]];if(!t)continue;let c=l.get(t);if(!c){c={size:0,missing:0};for(let e=t;e;e&=e-1){let t=s+31-Math.clz32(e&-e);c.size+=n[t],c.missing+=r[t]}l.set(t,c)}o[e].size+=c.size,o[e].missing+=c.missing}}return i.map((e,t)=>[e,o[t]])}var Ke=e=>Number.isFinite(e)&&e>=0?e:0,qe=e=>e.filterSize,Je=(e,t)=>Math.max(e.removable,e.own)<t&&e.filterSize>=t;function Ye(e){if(e.byId.size<=100)return 0;let t=e.metric===`count`?[0,2,5,10,20,50,100,200]:[0,1,4,10,20,50,100,200].map(e=>e*1024),n=t.map(()=>0);for(let r of e.byId.values())for(let e=0;e<t.length&&!(qe(r)<t[e]);e++)n[e]++;let r=0;for(;r<t.length-1&&n[r]>100&&n[r+1]>=50;)r++;return t[r]}function Xe(e,t){let{groups:r,componentOf:i}=n([...e.keys()],t),a=r.map(t=>t.reduce((t,n)=>t+Ke(e.get(n).size),0)),o=r.map(t=>t.filter(t=>!e.get(t).virtual&&e.get(t).size==null).length),s=r.map(()=>0),c=r.map(()=>new Set);for(let[e,n]of t)for(let t of n){let n=i.get(e),r=i.get(t);n!==r&&!c[n].has(r)&&(c[n].add(r),s[r]++)}let l=[...s],u=[];l.forEach((e,t)=>{e||u.push(t)});for(let e of u)for(let t of c[e])--l[t]===0&&u.push(t);let d=new Uint32Array(r.length),f=new Map,p=8*(r.length+c.reduce((e,t)=>e+t.size,0)),m=0,h=0,g=(e,t=!1)=>{++m===4294967295&&(d.fill(0),m=1);let n=0,r=0,i=[...e];for(;i.length>0;){let e=i.pop();if(d[e]!==m){if(t&&(h+=1+c[e].size)>p)return null;d[e]=m,r+=a[e],n+=o[e];for(let t of c[e])d[t]!==m&&i.push(t)}}return{size:r,missing:n}},_=u.toReversed();for(let e=0;e<_.length;e++){let t=_[e],n=c[t].size===1?f.get([...c[t]][0]):null,r=n?{size:a[t]+n.size,missing:o[t]+n.missing}:g([t],!0);if(r)f.set(t,r);else{for(let[t,n]of Ge(c,u,a,o,_.slice(e)))f.set(t,n);break}}return{inferred:r.filter((e,t)=>s[t]===0).map(e=>e[0]),sum(e){let t=new Set(e.map(e=>i.get(e)));return t.size===1?f.get([...t][0]):g(t)}}}function Ze(e){let t=new Map(e.nodes.map(e=>[e.file,e])),n=e.flowEntries??[];for(let e of n)e.virtual&&!t.has(e.file)&&t.set(e.file,{...e,size:0});let r=new Map([...t.keys()].map(e=>[e,new Set])),i=0;for(let[n,a]of t)for(let o of a.virtual?a.imports:e.importsOf.get(n)??[]){let s=t.get(o);if(!s||r.get(n).has(o))continue;let c=t=>t.virtual?t.pkg===`__own__`:e.ownSourceFiles?.has(t.file);if(!e.packagesOnly&&!h(a.origFile??n,s.origFile??o,c(s),c(a))){i++;continue}r.get(n).add(o)}return{files:t,links:r,entries:n.filter(e=>e.entry!==!1).map(e=>e.file).filter(e=>t.has(e)),weakEdges:i}}function Qe(e,t){let n=new Map;for(let r of e){let e=t.get(r),i=e.packageInfo;if(!i||i.directory===void 0&&i.version===void 0)continue;let a=i.directory??r;n.has(a)||n.set(a,{...i,directory:a,size:0,missing:0});let o=n.get(a);o.size+=Ke(e.size),!e.virtual&&e.size==null&&o.missing++}return[...n.values()].toSorted((e,t)=>t.size-e.size||e.directory.localeCompare(t.directory))}function $e(e,{packages:t=!1,metric:n=`size`}={}){let r=n===`count`;r&&(t=!0);let{files:i,links:a,entries:o,weakEdges:s}=Ze(e),c=Xe(i,a),l=o.length>0?[...new Set(o)]:c.inferred,u=new Set(l),d=new Map,f=[...l];for(let e of f)for(let t of a.get(e))u.has(t)||(u.add(t),f.push(t),d.set(t,e));let p=new Map,m=e=>`${t?`p`:`f`}:${t?i.get(e).pkg:e}`;for(let e of u){let n=m(e),r=i.get(e);p.has(n)||p.set(n,{id:n,pkg:r.pkg,label:t?_(r.pkg):e,version:t?void 0:r.packageInfo?.version,files:[],own:0,virtual:!0,incoming:[],outgoing:[]});let a=p.get(n);a.files.push(e),a.own+=Ke(r.size),a.virtual&&=!!r.virtual}let h=new Map;for(let e of u)for(let n of a.get(e)){let r=m(e),i=m(n);if(t&&r===i)continue;let a=JSON.stringify([r,i]);h.has(a)||h.set(a,{id:a,from:r,to:i,targets:new Set,count:0});let o=h.get(a);o.targets.add(n),o.count++}let g=[...h.values()];for(let e of p.values())t&&(e.instances=Qe(e.files,i));if(r)Ue(a,l,p,g);else{for(let e of p.values())Object.assign(e,c.sum(e.files));Be(i,a,l,p);for(let e of g)Object.assign(e,c.sum([...e.targets]))}We(p,d,m);for(let e of g)p.get(e.from).outgoing.push(e),p.get(e.to).incoming.push(e);let v=[...new Set(l.map(m))],y=r?new Set([...i.values()].map(e=>e.pkg)).size-p.size:0;return{byId:p,edges:g,edgeById:h,roots:v,files:i,packages:t,metric:r?`count`:`size`,weakEdges:s,inferred:o.length===0,total:r?{size:p.size,missing:0}:c.sum(l),omittedFiles:i.size-u.size,omittedPackages:y}}function et(e,t,r){let i=new Set(t),a=[...t],o=new Set(t);for(let t of a)for(let n of e.byId.get(t).outgoing)!i.has(n.to)&&r(n.to)&&(i.add(n.to),a.push(n.to));let s=new Map(a.map(t=>[t,new Set(e.byId.get(t).outgoing.map(e=>e.to).filter(e=>i.has(e)&&!o.has(e)))])),{componentOf:c,groups:l}=n(a,s),u=l.map(()=>0),d=l.map(()=>new Set),f=l.map(()=>0);for(let[e,t]of s)for(let n of t){let t=c.get(e),r=c.get(n);t!==r&&!d[t].has(r)&&(d[t].add(r),u[r]++)}let p=[];u.forEach((e,t)=>{e||p.push(t)});for(let e of p)for(let t of d[e])f[t]=Math.max(f[t],f[e]+1),--u[t]===0&&p.push(t);return new Map(a.map(e=>[e,f[c.get(e)]]))}function tt(e,t,n){let r=new Map(e.map(e=>[e.id,{from:[],to:[]}]));for(let e of t)r.get(e.from).from.push(e),r.get(e.to).to.push(e);for(let t of e)for(let e of[`from`,`to`]){let i=e===`to`,a=i?`x2`:`x1`,o=i?`width2`:`width1`,s=e=>{let t=n.get(i?e.from:e.to);return t.x+t.width/2},c=r.get(t.id)[e].toSorted((e,t)=>s(e)-s(t)||e.id.localeCompare(t.id));if(c.length===0)continue;let l=c.reduce((e,t)=>e+t[o],0),u=0;if(l<=t.width){for(let e of c)e[a]=t.x+u,u+=e[o];continue}let d=c[0][o]/2,f=c.at(-1)[o]/2,p=l-d-f,m=new Float64Array(c.length),h=t.width,g=0;for(let e=c.length-1;e>=0;e--)h=Math.min(h,t.width-c[e][o]/2),m[e]=h;for(let e=0;e<c.length;e++){let n=c[e],r=n[o]/2,i=d+(u+r-d)/p*(t.width-d-f),s=Math.min(m[e],Math.max(g,r,i));n[a]=t.x+s-r,g=s,u+=n[o]}}}function nt(e,t){let n=0,r=0;for(let r=0,i=0;r<e.length;r++){for(;i<t.length&&t[i]<e[r];)i++;n+=i}for(let n=0,i=0;i<t.length;i++){for(;n<e.length&&e[n]<t[i];)n++;r+=n}return[n,r]}function rt(e,t,n){let r=new Map;for(let e of t){let t=n.get(e.from),i=n.get(e.to);if(t.level===i.level)continue;let[a,o]=t.level<i.level?[t,i]:[i,t];r.has(o)||r.set(o,[]),r.get(o).push(a)}let i=1e6;for(let t of e.values()){let e=new Map(t.map(e=>[e,(r.get(e)??[]).map(e=>e.x+e.width/2).toSorted((e,t)=>e-t)]));for(let n=0;n<t.length&&i>0;n++){let n=!1;for(let r=0;r+1<t.length;r++){let a=e.get(t[r]),o=e.get(t[r+1]);i-=1+a.length+o.length;let[s,c]=nt(a,o);c<s&&([t[r],t[r+1]]=[t[r+1],t[r]],n=!0)}if(!n)break}let n=0;for(let e of t)e.x=n,n+=e.width}}function it(e){let t=t=>e.byId.get(t).pkg;return se(e.edges.map(e=>[t(e.from),t(e.to)]),e.packages?oe:ae)}function at(e,{focus:t=null,minSize:n=0,width:r=1100}={}){let i=it(e),a=t=>qe(e.byId.get(t))>=n&&!i.has(e.byId.get(t).pkg),o=(t&&e.byId.has(t)?[t]:e.roots).filter(a),s=et(e,o,a),c=[...s.keys()].filter(a).toSorted((t,n)=>s.get(t)-s.get(n)||e.byId.get(n).removable-e.byId.get(t).removable||t.localeCompare(n)),l=new Set(c),u=e.edges.filter(e=>l.has(e.from)&&l.has(e.to)).toSorted((e,t)=>t.size-e.size||e.id.localeCompare(t.id)).map(e=>({...e})),d=[...l].map(t=>({...e.byId.get(t),level:s.get(t)})),f=Map.groupBy(d,e=>e.level),p=new Map(d.map(e=>[e.id,e])),m=d.reduce((e,t)=>Math.max(e,t.removable),1),h=e=>Math.max(e,m/4e3),g=[...f.values()].reduce((e,t)=>Math.max(e,t.reduce((e,t)=>e+t.removable,0)),1),_=Math.max(1,r)/g,v=0,y=0;for(let e of d)e.y=12+e.level*88,e.width=Math.max(.1,e.removable*_),y=Math.max(y,e.y+26);rt(f,u,p);for(let e of f.values())v=Math.max(v,e.reduce((e,t)=>e+t.width,0)),e.forEach((t,n)=>{t.rowStart=n===0,t.rowEnd=n===e.length-1});let b=[...f.values()].flat();for(let e of u){let t=p.get(e.from),n=p.get(e.to),r=h(e.size)*_;e.width1=Math.min(r,t.width),e.width2=Math.min(r,n.width),e.x1=t.x+(t.width-e.width1)/2,e.x2=n.x+(n.width-e.width2)/2,e.y1=t.y+26,e.y2=n.y,e.returning=n.level<=t.level,e.returning&&(y=Math.max(y,Math.max(e.y1,e.y2)+35))}return tt(b,u,p),{nodes:b,byId:p,edges:u,roots:o,hiddenPackages:i,width:Math.max(1,v),height:y+12}}function ot(e,t,n){if(!(t>0&&n>0))return e;let r=t/Math.min(t/1100,n/e.height,9.99);if(Math.abs(r-e.width)<1e-7)return e;let i=r/e.width,a=e.nodes.map(e=>({...e,x:e.x*i,width:e.width*i})),o=e.edges.map(e=>({...e,x1:e.x1*i,x2:e.x2*i,width1:e.width1*i,width2:e.width2*i}));return{...e,nodes:a,edges:o,byId:new Map(a.map(e=>[e.id,e])),width:r}}function st(e){let{x1:t,x2:n,y1:r,y2:i,width1:a,width2:o}=e,s=e.returning?Math.max(r,i)+35:(r+i)/2;return`M${t},${r} C${t},${s} ${n},${s} ${n},${i} L${n+o},${i} C${n+o},${s} ${t+a},${s} ${t+a},${r} Z`}function ct(e){let t=e.returning?Math.max(e.y1,e.y2)+35:(e.y1+e.y2)/2;return{left:Math.min(e.x1,e.x2),right:Math.max(e.x1+e.width1,e.x2+e.width2),top:Math.min(e.y1,e.y2,t),bottom:Math.max(e.y1,e.y2,t)}}function Q(e,t){return e.right<t.left||e.left>t.right||e.bottom<t.top||e.top>t.bottom}function lt(e){if(e.length===0)return null;let t={left:1/0,right:-1/0,top:1/0,bottom:-1/0};for(let n of e)t.left=Math.min(t.left,n.left),t.right=Math.max(t.right,n.right),t.top=Math.min(t.top,n.top),t.bottom=Math.max(t.bottom,n.bottom);if(e.length<=12)return{...t,entries:e};let n=t.right-t.left>t.bottom-t.top,r=e=>n?e.left+e.right:e.top+e.bottom,i=e.toSorted((e,t)=>r(e)-r(t)),a=i.length>>>1;return{...t,children:[lt(i.slice(0,a)),lt(i.slice(a))]}}function ut(e,t,n){let r=[],i={left:t,right:t,top:n,bottom:n},a=e?[e]:[];for(;a.length>0;){let e=a.pop();if(!Q(e,i)){if(e.entries)for(let t of e.entries)Q(t,i)||r.push(t);else a.push(...e.children)}}return r.toSorted((e,t)=>t.order-e.order)}function dt(e,t,n){let r=[],i=e?[e]:[];for(;i.length>0;){let e=i.pop();if(!Q(e,t)){if(e.entries){for(let i of e.entries)if(i.edge&&!Q(i,t)&&(r.push(i),r.length>n))return null}else i.push(...e.children)}}return r.toSorted((e,t)=>e.order-t.order)}var ft=a,pt=(e,t)=>e===`count`?String(t):a(t),mt=e=>`${e} ${e===1?`package`:`packages`}`;function ht(e,t){if(!e.instances?.length)return e.version?`
9
9
  Version: ${e.version}`:``;if(e.instances.length===1)return`
10
- Version: ${e.instances[0].version||`Unknown`}`;let t=new Map;for(let n of e.instances){let e=n.version||`Unknown version`;t.has(e)||t.set(e,{version:e,size:0,count:0,missing:0});let r=t.get(e);r.size+=n.size,r.count++,r.missing+=n.missing}return`
10
+ Version: ${e.instances[0].version||`Unknown`}`;if(t===`count`)return`
11
+ Versions: ${[...new Set(e.instances.map(e=>e.version||`Unknown version`))].toSorted((e,t)=>e.localeCompare(t,`en`,{numeric:!0})).join(`, `)}`;let n=new Map;for(let t of e.instances){let e=t.version||`Unknown version`;n.has(e)||n.set(e,{version:e,size:0,count:0,missing:0});let r=n.get(e);r.size+=t.size,r.count++,r.missing+=t.missing}return`
11
12
  Versions · own source size
12
- `+[...t.values()].toSorted((e,t)=>t.size-e.size||e.version.localeCompare(t.version)).map(e=>`${e.version} \xB7 ${n(e.size)}${e.missing?`+`:``} \xB7 ${e.count} ${e.count===1?`copy`:`copies`}`).join(`
13
- `)}function lt(e,t){return`${e.label}
14
- ${n(e.removable)} unique \xB7 ${n(e.size)} reachable \xB7 ${n(e.own)} own${e.removableMissing?` \xB7 ${e.removableMissing} removed file sizes unknown`:``}${ct(e)}${We(e,t)?`
15
- Kept by Large to preserve an entry-point path`:``}`}function ut(e,t){return`${t.byId.get(e.from).label} \u2192 ${t.byId.get(e.to).label}
16
- ${n(e.size)} reachable${e.returning?` · return / cycle edge`:``}`}var dt=e=>Math.min(.5/e,13);function ft(e,t){let n=e.width/2;if(e.rowStart===e.rowEnd){let e=Math.min(t,n/2);return{left:e,right:e}}let r=Math.min(t,n),i=Math.min(t,n-r);return e.rowStart?{left:r,right:i}:{left:i,right:r}}var pt=`Import paths. Use arrow keys to explore bars, Enter to select, or the sidebar search to find a file or package.`,mt=1500,ht=class{constructor(e){this.host=e}render(){return D`<canvas class="flow-canvas flow-base" aria-hidden="true"></canvas><canvas class="flow-canvas flow-bars" aria-hidden="true"></canvas><canvas class="flow-canvas flow-overlay" tabindex="0" role="group" aria-label="${pt}" @pointermove="${e=>this.pointer(e)}" @pointerleave="${()=>this.clearHover()}" @click="${e=>this.click(e)}" @dblclick="${e=>this.click(e,!0)}" @keydown="${e=>this.key(e)}"></canvas>`}prepare(){this.layout=this.host.layout,this.model=this.host.model,this.paths=this.layout.edges.map((e,t)=>({edge:e,order:t,path:new Path2D(rt(e)),...it(e)})),this.pathById=new Map(this.paths.map(e=>[e.edge.id,e])),this.rows=[...Map.groupBy(this.layout.nodes,e=>e.y).values()];let e=this.layout.nodes.map((e,t)=>({node:e,order:this.paths.length+t,left:e.x,right:e.x+e.width,top:e.y,bottom:e.y+26}));this.index=at([...this.paths,...e]),this.clearHover(),this.focused=null,this.invalidateRaster()}matchingNodes(){let e=this.host.model,t=JSON.stringify([this.host.minSize,this.host.graph.issuesHidden,i.pathFilter,[...i.selectedSeverities].toSorted(),[...i.selectedColors].toSorted()]);return(this.matchModel!==e||this.filterKey!==t)&&(this.matches=new Set([...e.byId.values()].filter(e=>this.host.matchesNode(e)).map(e=>e.id)),this.matchModel=e,this.filterKey=t,this.searchResult=null),this.matches}searchMatches(){let e=this.matchingNodes();return this.searchResult??=[...e].map(e=>this.host.model.byId.get(e)).toSorted((e,t)=>t.removable-e.removable)}update(e){if(this.base=e.querySelector(`.flow-base`),this.bars=e.querySelector(`.flow-bars`),this.overlay=e.querySelector(`.flow-overlay`),!this.base||!this.bars||!this.overlay)return;this.layout!==this.host.layout&&this.prepare();let t=Le(),n=this.matchingNodes(),r=d(`__own__`);(n!==this.paintedMatches||r!==this.palette||t!==this.background)&&(this.paintedMatches=n,this.palette=r,this.background=t,this.colors=new Map([...this.model.byId.values()].map(e=>[e.pkg,d(e.pkg)])),this.foreground=getComputedStyle(this.host).getPropertyValue(`--text`).trim()||`#fff`,this.invalidateRaster()),this.requestDraw()}requestDraw(){this.frame!=null||!this.overlay||(this.frame=requestAnimationFrame(()=>{this.frame=null,this.draw()}))}dispose(){this.clearHover(),this.frame!=null&&cancelAnimationFrame(this.frame),this.frame=null,this.base=null,this.bars=null,this.overlay=null,this.invalidateRaster()}stopPreview(){clearTimeout(this.previewTimer),this.settleFrame!=null&&cancelAnimationFrame(this.settleFrame),this.settleFrame=null,this.previewTimer=null,this.preview=!1}invalidateRaster(){this.stopPreview(),this.baseKey=null,this.barsKey=null,this.overview=null,this.paintedViewport=null}viewportChanged(){let{width:e,height:t,zoom:n,pan:r}=this.host,i=`${e}:${t}:${n}:${r.x}:${r.y}`;if(i===this.viewportKey){this.preview&&this.host.fitted&&(this.stopPreview(),this.requestDraw());return}this.viewportKey=i,this.stopPreview();let a=this.paintedViewport;this.host.fitted===!1&&this.overview&&a?.width===e&&a.height===t&&a.dpr===(globalThis.devicePixelRatio||1)&&(this.preview=!0,this.previewTimer=setTimeout(()=>{this.previewTimer=null,this.settleFrame=requestAnimationFrame(()=>{this.settleFrame=requestAnimationFrame(()=>{this.stopPreview(),this.requestDraw()})})},100)),this.clearHover(),this.requestDraw()}context(e,t,n=!0){let r=Math.ceil(this.host.height*t),i=Math.ceil(this.host.width*t);(e.width!==i||e.height!==r)&&(e.width=i,e.height=r);let a=e.getContext(`2d`);a.setTransform(1,0,0,1,0,0),n&&a.clearRect(0,0,i,r);let{pan:o,zoom:s}=this.host;return a.setTransform(t*s,0,0,t*s,t*o.x,t*o.y),a}draw(){if(!this.overlay||!this.host.width||!this.host.height)return;let{pan:e,zoom:t,width:n,height:r}=this.host,i=globalThis.devicePixelRatio||1,a=`${this.viewportKey}:${i}`;this.view={left:-e.x/t,right:(n-e.x)/t,top:-e.y/t,bottom:(r-e.y)/t};let o=this.preview?st(this.index,this.view,mt):null;if(o&&this.stopPreview(),this.preview){this.drawPreview(i),this.drawBars(i,a,!0);let e=this.context(this.overlay,i),n=this.layout.byId.get(this.host.selection?.node);n&&(e.globalAlpha=1,e.strokeStyle=this.foreground,e.lineWidth=Math.min(1.5/t,n.width/2),e.strokeRect(n.x,n.y,n.width,26)),this.previewVisible=!0;return}let s=this.baseKey!==a;if(s){let s=this.context(this.base,i);s.globalAlpha=1,s.fillStyle=this.background,s.fillRect(this.view.left,this.view.top,n/t,r/t),this.visiblePaths=o??this.paths.filter(e=>!Z(e,this.view));for(let e of this.visiblePaths)this.paintPath(s,e,this.edgeAlpha(e.edge));if(this.baseKey=a,this.paintedViewport={width:n,height:r,zoom:t,pan:{...e},dpr:i},this.view.left<=0&&this.view.top<=0&&this.view.right>=this.layout.width-1e-6&&this.view.bottom>=this.layout.height-1e-6){let e=this.overview?.canvas??document.createElement(`canvas`);e.width=this.base.width,e.height=this.base.height,e.getContext(`2d`).drawImage(this.base,0,0),this.overview={...this.paintedViewport,canvas:e}}}this.drawBars(i,a),this.drawHighlight(i,s||this.previewVisible),this.previewVisible=!1}drawPreview(e){let{width:t,height:n,pan:r,zoom:i}=this.host,a=this.context(this.bars,e,!1);a.setTransform(e,0,0,e,0,0),a.globalAlpha=1,a.imageSmoothingEnabled=!1;let o={...this.paintedViewport,canvas:this.base},s=i/o.zoom,c=r.x-o.pan.x*s,l=r.y-o.pan.y*s,u=c<=0&&l<=0&&c+o.width*s>=t&&l+o.height*s>=n;u||(a.fillStyle=this.background,a.fillRect(0,0,t,n));for(let e of u?[o]:[this.overview,o]){let o=i/e.zoom,s=r.x-e.pan.x*o,c=r.y-e.pan.y*o,l=Math.max(0,s),u=Math.max(0,c),d=Math.min(n,c+e.height*o),f=Math.min(t,s+e.width*o);if(f<=l||d<=u)continue;let p=e.dpr/o;a.drawImage(e.canvas,(l-s)*p,(u-c)*p,(f-l)*p,(d-u)*p,l,u,f-l,d-u)}}drawBars(e,t,n=!1){if(!n&&this.barsKey===t&&!this.previewVisible)return;this.barsKey!==t&&(this.visibleNodes=this.layout.nodes.filter(e=>!Z({left:e.x,right:e.x+e.width,top:e.y,bottom:e.y+26},this.view)));let r=this.context(this.bars,e,!n);for(let e of this.visibleNodes)this.paintNode(r,e);this.paintRowBorders(r),this.barsKey=t}paintRowBorders(e){let t=dt(this.host.zoom);e.globalAlpha=1,e.fillStyle=this.background;for(let n of this.rows){let r=n[0],i=n.at(-1),a=i.x+i.width;if(Z({left:r.x,right:a,top:r.y,bottom:r.y+26},this.view))continue;e.fillRect(r.x,r.y,a-r.x,t),e.fillRect(r.x,r.y+26-t,a-r.x,t),e.fillRect(r.x,r.y,ft(r,t).left,26);let o=ft(i,t).right;e.fillRect(a-o,r.y,o,26)}}edgeAlpha(e){return!this.matches.has(e.from)&&!this.matches.has(e.to)?.04:.22}paintPath(e,t,n){e.globalAlpha=n,e.fillStyle=this.colors.get(this.model.byId.get(t.edge.to).pkg),e.fill(t.path),t.edge.returning&&(e.strokeStyle=this.foreground,e.lineWidth=.7/this.host.zoom,e.setLineDash([3,3]),e.stroke(t.path),e.setLineDash([]))}paintNode(e,t){if(Z({left:t.x,right:t.x+t.width,top:t.y,bottom:t.y+26},this.view))return;let{zoom:n}=this.host,r=this.colors.get(t.pkg);e.globalAlpha=this.matches.has(t.id)?1:.15,e.fillStyle=r,e.fillRect(t.x,t.y,t.width,26);let{left:i,right:a}=ft(t,dt(n));e.fillStyle=this.background,!t.rowStart&&i>0&&e.fillRect(t.x,t.y,i,26),!t.rowEnd&&a>0&&e.fillRect(t.x+t.width-a,t.y,a,26),t.width>=40&&t.width*n>=24&&14*n>=6&&(e.save(),e.beginPath(),e.rect(t.x+5,t.y,Math.max(0,t.width-10),26),e.clip(),e.font=`14px -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif`,e.fillStyle=Re(r),e.fillText(`${t.label.replace(/^node_modules\//u,``)} \xB7 ${Q(t.removable)}`,t.x+5,t.y+18),e.restore())}drawHighlight(e,t){let n=this.host.selection,r=new Set([n?.edge,this.host.hover]);for(let e of[n?.node,this.focused]){let t=this.model.byId.get(e);if(t)for(let e of[...t.incoming,...t.outgoing])r.add(e.id)}let i=[];for(let e of r){let t=this.pathById.get(e);if(!t||Z(t,this.view)||this.edgeAlpha(t.edge)===.04)continue;let r=e===n?.edge||e===this.host.hover?.8:.6;i.push({entry:t,alpha:(r-.22)/.78})}let a=[...new Set([n?.node,this.focused])].map(e=>this.layout.byId.get(e)).filter(Boolean),o=i.map(({entry:e})=>e).concat(a.map(e=>({left:e.x,right:e.x+e.width,top:e.y,bottom:e.y+26}))),s=e=>e.reduce((e,t)=>({left:Math.min(e.left,t.left),right:Math.max(e.right,t.right),top:Math.min(e.top,t.top),bottom:Math.max(e.bottom,t.bottom)}),{left:1/0,right:-1/0,top:1/0,bottom:-1/0}),c=s(o),l=t?this.view:s([c,this.highlightBounds??c]);this.highlightBounds=c;let u=this.context(this.overlay,e,t),d=2/this.host.zoom,f=Math.max(this.view.left,l.left-d),p=Math.max(this.view.top,l.top-d),m=Math.min(this.view.bottom,l.bottom+d)-p,h=Math.min(this.view.right,l.right+d)-f;if(h>0&&m>0){t||u.clearRect(f,p,h,m),u.save(),u.beginPath(),u.rect(f,p,h,m),u.clip();for(let{entry:e,alpha:t}of i)this.paintPath(u,e,t);if(i.length>0){u.save(),u.beginPath();let e={left:f,right:f+h,top:p,bottom:p+m};for(let t of this.visibleNodes)Z({left:t.x,right:t.x+t.width,top:t.y,bottom:t.y+26},e)||u.rect(t.x,t.y,t.width,26);u.clip(),u.clearRect(f,p,h,m),u.restore()}u.globalAlpha=1,u.strokeStyle=this.foreground;for(let e of a)u.lineWidth=Math.min(1.5/this.host.zoom,e.width/2),u.strokeRect(e.x,e.y,e.width,26);u.restore()}}hit(e){if(!this.overlay||!this.index)return null;let t=this.overlay.getBoundingClientRect(),{pan:n,zoom:r}=this.host,i=(e.clientX-t.left-n.x)/r,a=(e.clientY-t.top-n.y)/r,o=this.overlay.getContext(`2d`);o.save(),o.setTransform(1,0,0,1,0,0);let s=ot(this.index,i,a).find(e=>e.node||o.isPointInPath(e.path,i,a));return o.restore(),s??null}pointer(e){if(this.host.drag)return;let t=this.hit(e),n=t?.node?.id??t?.edge.id??null;n!==this.hoverId&&(this.clearHover(),this.hoverId=n,this.focused=t?.node?.id??null,this.host.hover=t?.edge?.id??null,t&&(this.overlay.dataset.tooltip=t.node?lt(t.node,this.host.minSize):ut(t.edge,this.model),this.overlay.setAttribute(`aria-label`,this.overlay.dataset.tooltip),this.overlay.style.cursor=`default`),this.requestDraw()),t&&s(this.overlay,{gate:()=>!this.host.drag&&this.hoverId===n})}clearHover(){o(this.host.renderRoot),this.hoverId=null,this.focused=null,this.host.hover=null,this.overlay&&(delete this.overlay.dataset.tooltip,this.overlay.style.cursor=`default`,this.overlay.setAttribute(`aria-label`,pt)),this.requestDraw()}setHover(e){e==null?this.clearHover():(this.host.hover=e,this.requestDraw())}click(e,t=!1){if(e.defaultPrevented)return;let n=this.hit(e);if(t){n?.node&&this.host.follow(n.node.id);return}this.host.select(n?.node?.id??n?.edge.to??null,n?.edge?.id??null)}key(e){let t=this.layout.nodes;if(t.length===0)return;let n=t.findIndex(e=>e.id===(this.focused??this.host.selection?.node));if([`ArrowRight`,`ArrowDown`].includes(e.key))n=Math.min(t.length-1,n+1);else if([`ArrowLeft`,`ArrowUp`].includes(e.key))n=Math.max(0,n-1);else if(e.key===`Home`)n=0;else if(e.key===`End`)n=t.length-1;else if(e.key===`Enter`||e.key===` `){e.preventDefault(),this.host.select(t[Math.max(0,n)].id);return}else if(e.key===`Escape`){this.clearHover(),this.host.select(null);return}else return;e.preventDefault();let r=t[n],{pan:i,zoom:a,width:o,height:s}=this.host;(r.x*a+i.x<0||(r.x+r.width)*a+i.x>o||r.y*a+i.y<0||(r.y+26)*a+i.y>s)&&(this.host.pan={x:o/2-(r.x+r.width/2)*a,y:s/2-(r.y+13)*a},this.host.fitted=!1,this.host.drawViewport()),this.focused=r.id,this.overlay.setAttribute(`aria-label`,lt(r,this.host.minSize)),this.requestDraw()}};function gt(e,t,n=!1){let r=n?t:1;return{min:t,max:r*9.99,percent:Math.round(e/r*100)}}var _t=`:host{display:contents}*{box-sizing:border-box}button{font:inherit;color:var(--text);border:1px solid var(--border);background:var(--surface);border-radius:var(--ui-radius, 4px);padding:4px 7px;cursor:default}button:hover{background:var(--graph-hover-bg)}button:disabled{opacity:.4;cursor:default}button:focus-visible{outline:2px solid var(--accent)}.flow-stage{grid-area:stage;position:relative;min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--flow-background)}.flow-viewport{flex:1;position:relative;overflow:hidden;min-height:0;touch-action:none;cursor:default;user-select:none;-webkit-user-select:none}.flow-count{position:absolute;bottom:12px;right:50px;padding:6px 8px;color:var(--muted);font-size:11px;z-index:3;pointer-events:none}.flow-canvas{display:block;position:absolute;inset:0;width:100%;height:100%}.flow-base,.flow-bars{pointer-events:none}.flow-overlay:focus-visible{outline:1px solid var(--accent);outline-offset:-1px}.flow-panel{grid-area:right;overflow:auto;min-height:0;padding:14px;border-left:1px solid var(--border);background:var(--surface)}.flow-panel h3{font-size:13px;margin:0;overflow-wrap:anywhere}.flow-panel h4{margin:20px 0 8px;color:var(--muted);font-size:11px}.flow-panel p{color:var(--muted);font-size:12px;line-height:1.6}.flow-panel-heading{display:flex;align-items:start;gap:10px;justify-content:space-between}.flow-metrics{display:grid;gap:5px;margin:18px 0}.flow-metrics b{font-size:20px;font-weight:500}.flow-metrics span{color:var(--muted);font-size:11px;margin-bottom:8px}.flow-versions{list-style:none;padding:0;margin:0 0 18px;font-size:12px}.flow-versions-details{margin:18px 0}.flow-versions-details summary{color:var(--muted);font-size:11px;cursor:default}.flow-versions li+li{margin-top:10px}.flow-versions li>div{display:flex;justify-content:space-between;gap:8px}.flow-versions small{display:block;color:var(--muted);overflow-wrap:anywhere;margin-top:3px}.flow-direction{overflow-wrap:anywhere}.flow-actions{display:flex;gap:6px;flex-wrap:wrap}.flow-link{grid-template-columns:8px minmax(0,1fr) auto}
17
- `,vt=10,yt=e=>Math.max(1,e-2*vt);function bt(e,t,n){return D`<button class="g2-dist-item flow-link" data-tooltip="${e.label}" @click="${n}"><span class="g2-dist-dot" style="${v({background:d(e.pkg)})}"></span> <span class="g2-dist-name">${e.label}</span><span class="g2-dist-count">${Q(t)}</span></button>`}var xt=class extends k{static properties={graph:{attribute:!1},packages:{type:Boolean}};static styles=[E(j),E(_t),E(M),E(e)];constructor(){super(),this.packages=!1,this.zoom=1,this.pan={x:0,y:0},this.width=0,this.height=0,this.needsFit=!0,this.fitted=!0,this.largeOnly=!0,this.largeSuppressed=!1,this.largeThreshold=0,this.models=new Map,this.chart=new ht(this),this.focus=null,this.selection=null,this.hover=null,this.bridge={requestDraw:()=>this.requestUpdate(),_cleanup:()=>{}}}willUpdate(e){if(!this.graph)return;let t=!1;e.has(`graph`)&&this.models.clear(),e.has(`packages`)&&(this.needsFit=!0),(!this.model||e.has(`graph`)||e.has(`packages`))&&(this.models.has(this.packages)||this.models.set(this.packages,Ye(this.graph,{packages:this.packages})),this.model=this.models.get(this.packages),this.largeThreshold=Ge(this.model),t=!0,this.model.byId.has(this.focus)||(this.focus=null),this.selection&&!this.model.byId.has(this.selection.node)&&(this.selection=null),this.hover=null),(t||this.layoutFocus!==this.focus)&&(this.largeSuppressed=this.isSmallFocus()),this.focus&&Ue(this.model.byId.get(this.focus))<this.minSize&&(this.focus=null),(t||this.layoutFocus!==this.focus||this.layoutMinSize!==this.minSize)&&(this.renderRoot&&o(this.renderRoot),this.layout=nt(tt(this.model,{focus:this.focus,minSize:this.minSize}),yt(this.width),this.height),this.layoutFocus=this.focus,this.layoutMinSize=this.minSize,this.selection&&!this.layout.byId.has(this.selection.node)&&(this.selection=null))}get minSize(){return this.largeOnly&&!this.largeSuppressed?this.largeThreshold:0}toggleLarge(){this.largeOnly=!this.largeOnly,this.needsFit=!0,this.requestUpdate()}renderControls(){return this.largeThreshold&&!this.largeSuppressed?D`<mode-switch label="${`Large \xB7 ${this.largeThreshold/1024}+ KiB`}" .checked="${this.largeOnly}" @click="${()=>this.toggleLarge()}"></mode-switch>`:null}updated(){i.graphState=this.bridge;let e=`${this.largeThreshold}:${this.largeOnly}:${this.largeSuppressed}`;e!==this.controlsKey&&(this.controlsKey=e,this.dispatchEvent(new CustomEvent(`flow-controls-change`,{detail:this.renderControls(),bubbles:!0,composed:!0}))),this.connectViewport(),this.syncViewport(),this.chart.update(this.renderRoot)}connectViewport(){let e=this.renderRoot.querySelector(`.flow-viewport`);if(!e||this.events)return;c(this.renderRoot,{gate:()=>!this.drag}),this.events=new AbortController;let{signal:t}=this.events;e.addEventListener(`wheel`,e=>this.wheel(e),{passive:!1,signal:t}),e.addEventListener(`pointerdown`,e=>this.startPan(e),{signal:t}),window.addEventListener(`pointermove`,e=>this.movePan(e),{signal:t}),window.addEventListener(`pointerup`,e=>this.endPan(e),{signal:t}),window.addEventListener(`pointercancel`,e=>this.endPan(e),{signal:t}),window.addEventListener(`deepview-theme-changed`,()=>this.requestUpdate(),{signal:t}),e.addEventListener(`click`,e=>{let t=this.suppressClick&&e.detail>0;if(this.suppressClick=!1,t){e.preventDefault(),e.stopPropagation();return}e.target.closest?.(`.flow-canvas`)||this.select(null)},{capture:!0,signal:t}),this.resizeObserver=new ResizeObserver(()=>this.syncViewport()),this.resizeObserver.observe(e)}disconnectedCallback(){super.disconnectedCallback(),o(this.renderRoot),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.events?.abort(),this.events=null,this.chart.dispose(),this.viewportElements=null,this.drag=null,i.graphState===this.bridge&&(i.graphState=null)}select(e,t=null){if(!e&&this.focus){this.follow(null);return}this.selection=e?{node:e,edge:t}:null,this.requestUpdate()}follow(e){this.focus=e,this.selection=e?{node:e,edge:null}:null,this.needsFit=!0,this.requestUpdate()}isSmallFocus(){if(!this.focus)return!1;let e=[this.focus],t=new Set(e);for(let n of e){if(t.size>=200)break;for(let{to:r}of this.model.byId.get(n).outgoing)if(t.has(r)||(t.add(r),e.push(r)),t.size>=200)break}return t.size<200}fitScale(){return this.layout&&this.width>0&&this.height>0?Math.min(yt(this.width)/this.layout.width,this.height/this.layout.height,9.99):1}zoomMetrics(){return gt(this.zoom,Math.min(this.fitScale(),1))}align(){this.pan={x:vt,y:(this.height-this.layout.height*this.zoom)/2}}syncViewport(){let e=this.renderRoot.querySelector(`.flow-viewport`)?.getBoundingClientRect();if(!this.layout||!e||e.width<=0||e.height<=0)return;let t=nt(this.layout,yt(e.width),e.height);if(this.width>0&&this.height>0&&(this.pan.x=e.width/2-(this.width/2-this.pan.x)*t.width/this.layout.width,this.pan.y+=(e.height-this.height)/2),t!==this.layout&&(o(this.renderRoot),this.layout=t,this.requestUpdate()),this.width=e.width,this.height=e.height,this.needsFit||this.fitted){this.fit();return}let{min:n,max:r}=this.zoomMetrics(),i=Math.max(n,Math.min(r,this.zoom));i!==this.zoom&&(this.zoom=i,this.align()),this.drawViewport()}fit(){let e=this.renderRoot.querySelector(`.flow-viewport`)?.getBoundingClientRect();if(!this.layout||!e||e.width<=0||e.height<=0)return;let t=nt(this.layout,yt(e.width),e.height);t!==this.layout&&(o(this.renderRoot),this.layout=t,this.requestUpdate()),this.width=e.width,this.height=e.height,this.zoom=this.fitScale(),this.needsFit=!1,this.fitted=!0,this.align(),this.drawViewport()}zoomBy(e,t=this.width/2,n=this.height/2){let{min:r,max:i}=this.zoomMetrics(),a=Math.max(r,Math.min(i,this.zoom*e)),o=a/this.zoom;a!==this.zoom&&(this.fitted=!1),this.pan.x=t-(t-this.pan.x)*o,this.pan.y=n-(n-this.pan.y)*o,this.zoom=a,this.drawViewport()}wheel(e){e.preventDefault();let t=this.renderRoot.querySelector(`.flow-viewport`).getBoundingClientRect(),n=Math.exp(-e.deltaY*.0015),{min:r}=this.zoomMetrics();if(n<1&&this.zoom<=r*1.0001){this.zoom=r;let e=Math.min(.4,(1-n)*3);this.pan.x+=(vt-this.pan.x)*e,this.pan.y+=((this.height-this.layout.height*r)/2-this.pan.y)*e,this.drawViewport()}else this.zoomBy(n,e.clientX-t.left,e.clientY-t.top)}startPan(e){e.button===0&&(this.suppressClick=!1,this.drag={id:e.pointerId,x:e.clientX,y:e.clientY,pan:{...this.pan},moved:!1})}movePan(e){if(!this.drag||e.pointerId!==this.drag.id)return;let t=e.clientX-this.drag.x,n=e.clientY-this.drag.y;Math.abs(t)+Math.abs(n)>3&&(this.drag.moved=!0),this.drag.moved&&(this.fitted=!1,this.suppressClick=!0,this.chart.setHover(null),this.pan={x:this.drag.pan.x+t,y:this.drag.pan.y+n},this.drawViewport())}endPan(e){e.pointerId===this.drag?.id&&(this.drag=null)}drawViewport(){this.chart.viewportChanged(),this.viewportElements??={label:this.renderRoot.querySelector(`.g2-zoom-pct`),zoomIn:this.renderRoot.querySelector(`[aria-label="Zoom in"]`),zoomOut:this.renderRoot.querySelector(`[aria-label="Zoom out"]`)};let{label:e,zoomIn:t,zoomOut:n}=this.viewportElements,{min:r,max:i,percent:a}=this.zoomMetrics();e&&(e.textContent=`${a}%`),t&&(t.disabled=this.zoom>=i*.9999),n&&(n.disabled=this.zoom<=r*1.0001)}matchesNode(e){if(Ue(e)<this.minSize||this.layout?.hiddenPackages?.has(e.pkg))return!1;let t=i.pathFilter.trim().toLowerCase();if(t&&!`${e.label} ${e.pkg}`.toLowerCase().includes(t))return!1;if(this.graph.issuesHidden)return!0;let n=t=>e.files.some(e=>[...this.model.files.get(e)[t]??[]].some(e=>(t===`severitySet`?i.selectedSeverities:i.selectedColors).has(e)));return(i.selectedSeverities.size===0||n(`severitySet`))&&(i.selectedColors.size===0||n(`colorSet`))}renderLinks(e,t=!1){return e.toSorted((e,t)=>t.size-e.size).slice(0,100).map(e=>{let n=this.model.byId.get(t?e.from:e.to);return bt(n,e.size,()=>this.select(n.id,e.id))})}renderSearch(){if(!i.pathFilter.trim())return null;let e=this.chart.searchMatches();return D`<h4>Matches · ${e.length}</h4>${e.slice(0,100).map(e=>bt(e,e.removable,()=>this.follow(e.id)))} ${e.length>100?D`<p>Showing the 100 largest matches. Refine the search to find any file or package, including those beyond the visible graph.</p>`:null}`}renderPanel(){let e=this.model.byId.get(this.selection?.node),t=this.model.edgeById.get(this.selection?.edge);return e?D`<div class="flow-panel-heading"><h3>${e.label}</h3><button type="button" class="detail-action" aria-label="Clear flow selection" @click="${()=>this.select(null)}">×</button></div>${t?D`<p class="flow-direction">${this.model.byId.get(t.from).label}<br>↓ imports<br>${this.model.byId.get(t.to).label}</p><div class="flow-metrics"><b>${Q(t.size)}</b><span>reachable through this edge · ${t.count} ${t.count===1?`file import`:`file imports`}</span></div>`:null}<div class="flow-metrics"><b>${Q(e.removable)}</b><span>unique size · removed if deleted · bar width</span><b>${Q(e.size)}</b><span>reachable size</span><b>${Q(e.own)}</b><span>own source size · ${e.files.length} ${e.files.length===1?`file`:`files`}</span></div>${this.renderVersions(e)} ${We(e,this.minSize)?D`<p>Kept by Large so retained dependencies remain connected to an entry point.</p>`:null} ${e.removableMissing?D`<p>${e.removableMissing} removed files have unknown sizes; removal totals include known bytes only.</p>`:null} ${e.missing?D`<p>${e.missing} reachable file sizes are unknown.</p>`:null} ${e.virtual?D`<p>Entry source is absent from this bundle; only its recorded imports are counted.</p>`:null}<div class="flow-actions"><button aria-pressed="${!!this.focus}" @click="${()=>this.follow(this.focus?null:e.id)}">Follow imports</button> ${!this.packages&&!e.virtual?D`<button data-bundle-view-source="${this.model.files.get(e.files[0]).origFile??e.files[0]}">View source</button>`:null}</div><h4>Imports · ${e.outgoing.length}</h4>${this.renderLinks(e.outgoing)}<h4>Imported by · ${e.incoming.length}</h4>${this.renderLinks(e.incoming,!0)} ${Math.max(e.incoming.length,e.outgoing.length)>100?D`<p>Showing the 100 largest flows in each direction.</p>`:null}`:D`<h3>Size flow</h3><div class="flow-metrics"><b>${Q(this.model.total.size)}</b><span>unique reachable source</span></div><p>Bar width shows how much source leaves the bundle when a file or package is removed.</p><p>Select a bar or ribbon for details.<br>Double-click a bar to follow its imports.</p>${this.model.total.missing?D`<p>${this.model.total.missing} files have unknown sizes; totals include known bytes only.</p>`:null} ${this.model.weakEdges?D`<p>${this.model.weakEdges} weak config/metadata loads excluded.</p>`:null} ${this.model.omittedFiles?D`<p>${this.model.omittedFiles} files are not reachable from these entry points.</p>`:null}<h4>${this.model.inferred?`Inferred roots (no entry points in this view)`:`Entry points`}</h4>${this.model.roots.slice(0,100).map(e=>{let t=this.model.byId.get(e);return bt(t,t.removable,()=>this.select(e))})} ${this.model.roots.length>100?D`<p>Showing the first 100 entry points. Search to find another.</p>`:null}`}renderVersions(e){if(!e.instances?.length)return null;if(e.instances.length===1){let t=e.instances[0];return D`<div class="flow-versions"><div>${t.version||`Unknown version`}</div><small>${t.directory}</small></div>`}let t=D`<ul class="flow-versions">${e.instances.map(e=>D`<li><div><span>${e.version||`Unknown version`}</span><span>${Q(e.size)}${e.missing?`+`:``}</span></div><small>${e.directory}</small> ${e.missing?D`<small>${e.missing} files have unknown sizes</small>`:null}</li>`)}</ul>`;return g(e.id,D`<details class="flow-versions-details"><summary>Versions: ${e.instances.length}</summary><h4>Own source size</h4>${t}</details>`)}render(){if(!this.layout)return null;let{nodes:e}=this.layout;return D`<section class="flow-stage" aria-label="Dependency size flow" style="${v({"--flow-background":Le()})}"><div class="flow-viewport">${this.chart.render()}${e.length>0?null:D`<p>${this.minSize?`No nodes reach ${Q(this.minSize)}. Turn off Large to show all nodes.`:`No recorded dependency paths in this view.`}</p>`}</div><div class="flow-count">${e.length} ${this.packages?e.length===1?`package`:`packages`:e.length===1?`file`:`files`}</div><div class="g2-zoom-ctrl" role="group" aria-label="Flow zoom"><button aria-label="Zoom in" ?disabled="${this.zoom>=this.zoomMetrics().max*.9999}" @click="${()=>this.zoomBy(1.4)}">+</button><div class="g2-zoom-pct"></div><button aria-label="Zoom out" ?disabled="${this.zoom<=this.zoomMetrics().min*1.0001}" @click="${()=>this.zoomBy(1/1.4)}">−</button> <button class="g2-zoom-fit-btn" aria-label="Fit to view" @click="${()=>this.fit()}">fit</button></div></section><aside class="flow-panel" aria-label="Size flow details" aria-live="polite">${this.renderSearch()}${this.renderPanel()}</aside>`}};customElements.define(`size-flow`,xt);var St=class extends k{static properties={graph:{attribute:!1},options:{attribute:!1},matrixControls:{state:!0},flowControls:{state:!0},issuesWrapped:{state:!0}};static styles=[E(P),E(N),E(A),E(j),E(M)];constructor(){super(),this.graph=null,this.options={},this.matrixControls=null,this.flowControls=null,this.issuesWrapped=!1,this._topbarObserver=null,this._observedControls=null,this._issuesWrapWidth=0}disconnectedCallback(){super.disconnectedCallback(),this._topbarObserver?.disconnect(),this._observedControls=null}connectedCallback(){super.connectedCallback(),c(this.renderRoot)}willUpdate(e){(!this.options.showBundleLayouts||i.bundleLayout!==`matrix`)&&(this.matrixControls=null),(!this.options.showBundleLayouts||i.bundleLayout!==`flow`)&&(this.flowControls=null),(e.has(`graph`)||e.has(`options`)||e.has(`matrixControls`)||e.has(`flowControls`))&&(this._issuesWrapWidth=0)}updated(){this.toggleAttribute(`matrix`,!!this.options.showBundleLayouts&&i.bundleLayout===`matrix`);let e=this.renderRoot.querySelector(`.g2-topbar-controls`);e!==this._observedControls&&typeof ResizeObserver==`function`&&(this._topbarObserver??=new ResizeObserver(()=>this._placeIssues()),this._topbarObserver.disconnect(),e&&this._topbarObserver.observe(e),this._observedControls=e),this._placeIssues()}_placeIssues(){let e=this.renderRoot.querySelector(`.g2-topbar-controls`),t=this.renderRoot.querySelector(`.g2-issues-switch`);if(!e||!t)return;let n=e.clientWidth;this.issuesWrapped?n>this._issuesWrapWidth&&wt(e,t)&&(this.issuesWrapped=!1):Ct(e,t)&&(this._issuesWrapWidth=n,this.issuesWrapped=!0)}render(){return this.graph?this.options.showBundleLayouts&&i.bundleLayout===`flow`?D`<div class="graph2-layout">${he(this.graph,this.options,this.flowControls,{issuesWrapped:this.issuesWrapped})}<size-flow .graph="${this.graph}" .packages="${i.flowPackagesView}" @flow-controls-change="${e=>{this.flowControls=e.detail}}"></size-flow></div>`:this.options.showBundleLayouts&&i.bundleLayout===`matrix`?D`<div class="graph2-layout g2-matrix-layout">${he(this.graph,this.options,this.matrixControls,{issuesWrapped:this.issuesWrapped})}<dependency-matrix .graph="${this.graph}" @matrix-controls-change="${e=>{this.matrixControls=e.detail}}"></dependency-matrix></div>`:D`<div class="graph2-layout">${he(this.graph,this.options,null,{issuesWrapped:this.issuesWrapped})} ${K(this.graph)} ${be()}</div>`:D``}};function Ct(e,t){let n=e.firstElementChild;if(!n||n===t)return!1;let r=t.getBoundingClientRect(),i=n.getBoundingClientRect();return r.height>0&&i.height>0&&r.top>=i.bottom-1}function wt(e,t){let n=[...e.children];if(n.length===0)return!0;let r=n[0].getBoundingClientRect().bottom,i=parseFloat(getComputedStyle(e).columnGap)||0,a=0;for(let e of n){let t=e.getBoundingClientRect();if(t.top>=r-1)return!1;let n=getComputedStyle(e),o=parseFloat(n.flexBasis),s=parseFloat(n.flexGrow)>0&&Number.isFinite(o)?Math.max(parseFloat(n.minWidth)||0,Math.min(t.width,o)):t.width;a+=s+i}return a+t.getBoundingClientRect().width<=e.clientWidth}customElements.define(`graph-layout`,St);function Tt(e,t,n,r){let i=0;for(let e of n)i=Math.max(i,e);if(i===0)return()=>!0;let a=2*i,o=new Map,s=Int32Array.from(e,e=>Math.floor(e/a)),c=Int32Array.from(t,e=>Math.floor(e/a));for(let t=0;t<e.length;t++){let e=`${s[t]}:${c[t]}`;o.has(e)||o.set(e,[]),o.get(e).push(t)}let l=0;return(i,a,u,d)=>{if(n[i]===n[a])return!0;let f=n[i]>n[a]?i:a,p=f===i?d:u;for(let u=s[p]-1;u<=s[p]+1;u++)for(let s=c[p]-1;s<=c[p]+1;s++)for(let c of o.get(`${u}:${s}`)??[]){if(++l>8e6)return!1;let o=r[c];if(o===i||o===a)continue;let s=n[f]+n[o],u=e[p]-e[c],d=t[p]-t[c];if(u*u+d*d<s*s-1e-7)return!1}return!0}}var Et=12,Dt=8,Ot=12,kt=8e6,At=8e6;function jt(e,t,{radiusOf:n}={}){let r=e.nodes;if(r.length<2||e.edges.length===0)return;let i=new Map(r.map((e,t)=>[e.file,t])),a=Float64Array.from(r,e=>e.x),o=Float64Array.from(r,e=>e.y),s=Int32Array.from(r,(e,t)=>t),c=s.slice(),l=n?Tt(a,o,Float64Array.from(r,n),s):null,u=Array.from(r,()=>[]);for(let t of e.edges){let e=i.get(t.a),n=i.get(t.b);e===void 0||n===void 0||e===n||(u[e].push(n),u[n].push(e))}let d=t.map(e=>e.map(e=>i.get(e.file))).filter(e=>e.length>1),f=new Int32Array(Et+Ot),p=new Float64Array(Et),m=0,h=1831565813,g=0,_=()=>(h^=h<<13,h^=h>>>17,h^=h<<5,h>>>0),v=(e,t)=>{let n=a[e]-a[t],r=o[e]-o[t];return Math.sqrt(n*n+r*r)};t:for(let e=0;e<Dt;e++){let t=!1;for(let n of d)for(let r=0;r<n.length;r++){let i=n[e%2?n.length-r-1:r];if(u[i].length===0)continue;if(g+n.length>At)break t;g+=n.length;let d=c[i],h=0,y=0;for(let e of u[i])h+=a[c[e]],y+=o[c[e]];h/=u[i].length,y/=u[i].length;let b=0;if(n.length<=f.length)for(let e of n)f[b++]=e;else{for(let e of n){let t=a[e]-h,n=o[e]-y,r=t*t+n*n;if(b===Et&&r>=p[b-1])continue;let i=Math.min(b,Et-1);for(;i>0&&r<p[i-1];)f[i]=f[i-1],p[i]=p[i-1],i--;f[i]=e,p[i]=r,b<Et&&b++}for(let e=0;e<Ot;e++)f[b++]=n[_()%n.length]}let x=-1,S=-1e-7,C=!1;for(let e=0;e<b;e++){let t=f[e],n=s[t];if(i===n)continue;let r=u[i].length+u[n].length;if(m+r>kt){C=!0;break}m+=r;let a=0;for(let e of u[i])e!==n&&(a+=v(t,c[e])-v(d,c[e]));for(let e of u[n])e!==i&&(a+=v(d,c[e])-v(t,c[e]));a<S&&(!l||l(i,n,d,t))&&(x=n,S=a)}if(x!==-1){let e=c[x];c[i]=e,c[x]=d,s[d]=x,s[e]=i,t=!0}if(C)break t}if(!t)break}for(let e=0;e<r.length;e++)r[e].x=a[c[e]],r[e].y=o[c[e]]}function Mt(e,t,n){let r=[...e].map(([e,t])=>({file:e,...t})),i=new Map(r.map(e=>[e.file,e])),a=[];for(let[e,n]of t)for(let t of n.keys())e<t&&a.push({a:e,b:t});let o=n.map(e=>e.map(e=>i.get(e)));jt({nodes:r,edges:a},o,{radiusOf:e=>e.groupR});for(let t of r){let n=e.get(t.file);n.x=t.x,n.y=t.y}}function Nt(e){let t=new Map;for(let[n,r]of e.importsOf){let i=e.nodeByFile.get(n);if(i)for(let n of r){let r=e.nodeByFile.get(n);r&&i.pkg!==r.pkg&&(t.set(i.pkg,(t.get(i.pkg)??0)+1),t.set(r.pkg,(t.get(r.pkg)??0)+1))}}return t}function Pt(e){if(e.packages.length===0)return null;let t=t=>t===`__own__`||e.ownSourcePackages?.has(t),n=e.packages.find(n=>t(n)&&e.entryPackages?.has(n))??e.packages.find(t);if(n)return n;let r=new Set;for(let[t,n]of e.importedBy){let i=e.nodeByFile.get(t);if(i)for(let t of n){let n=e.nodeByFile.get(t);if(n&&n.pkg!==i.pkg){r.add(i.pkg);break}}}for(let t of e.packages)if(!r.has(t))return t;return null}var Ft=5;function It(e){let t=new Map,n=(t,n)=>[Math.floor(t/e),Math.floor(n/e)];return{add(e,r,i){let a=n(e,r).join(`:`);t.has(a)||t.set(a,[]),t.get(a).push({x:e,y:r,r:i})},fits(e,r,i){let[a,o]=n(e,r);for(let n=a-1;n<=a+1;n++)for(let a=o-1;a<=o+1;a++)for(let o of t.get(`${n}:${a}`)??[])if((o.x-e)**2+(o.y-r)**2<(o.r+i)**2-1e-7)return!1;return!0}}}function Lt(e){return[e.filter(e=>e.isHub),e.filter(e=>!e.isHub)]}function Rt(e,t){let n=new Map;for(let r of e.nodes)t.has(r.pkg)&&(n.has(r.pkg)||n.set(r.pkg,[]),n.get(r.pkg).push(r));for(let e of n.values())e.sort((e,t)=>e.isHub===t.isHub?t.deg-e.deg:e.isHub?-1:1);let r=new Map,i=new Map;for(let[a,o]of t){let t=n.get(a);if(!t||t.length===0)continue;let s=t.length,c=0;for(let e of t)if(e.isHub)c++;else break;let l=c>0&&c<=Ft?c:0,u=s-l,d=o.groupR,f=Array.from({length:s}),p=Array.from({length:s});for(let e=0;e<s;e++){let t=e*137.508*Math.PI/180,n;if(e<l)n=l<=1?0:Math.sqrt(e/(l-1))*.3*d;else{let t=e-l;n=u<=1?.4*d:(.4+Math.sqrt(t/(u-1))*.6)*d}f[e]=o.x+Math.cos(t)*n,p[e]=o.y+Math.sin(t)*n}let m=Array.from({length:s},()=>!1);for(let n=0;n<s;n++){let a=t[n],l=a.isHub?0:c,u=a.isHub?c:s,d=0,h=0,g=0,_=e.importsOf.get(a.file);if(_)for(let e of _){let t=r.get(e);t!==void 0&&(d+=t,h+=i.get(e),g++)}let v=e.importedBy.get(a.file);if(v)for(let e of v){let t=r.get(e);t!==void 0&&(d+=t,h+=i.get(e),g++)}let y=!1;if(g>0){d/=g,h/=g;let e=d-o.x,t=h-o.y;e*e+t*t>1&&(y=!0)}let b=-1;if(y){let e=1/0;for(let t=l;t<u;t++){if(m[t])continue;let n=f[t]-d,r=p[t]-h,i=n*n+r*r;i<e&&(e=i,b=t)}}else for(let e=l;e<u;e++)if(!m[e]){b=e;break}m[b]=!0,a.x=f[b],a.y=p[b],r.set(a.file,a.x),i.set(a.file,a.y)}}jt(e,[...n.values()].flatMap(Lt))}function zt(e,t,n){let r=t/2,i=n/2,a=Math.min(t,n)/2;if(e.packages.length===0)return;let o=Pt(e),s=Nt(e),c=(o?e.packages.filter(e=>e!==o):[...e.packages]).toSorted((t,n)=>{let r=(s.get(n)??0)-(s.get(t)??0);return r===0?(e.pkgCount.get(n)??0)-(e.pkgCount.get(t)??0):r}),l=c.length,u;u=l<=0?0:l<=6?.65:l<=20?.82:.95;let d=Math.max(1,Math.sqrt(50/Math.max(1,l))),f=.12,p=new Map,m;if(o){let t=e.pkgCount.get(o)??0,n=Math.min(.22,(.012+Math.sqrt(t)*.004)*d);m=Math.max(l<=6?.4:l<=20?.36:.34,n+f+.04),p.set(o,{x:r,y:i,size:t,groupR:n*a})}else m=l<=1?0:l<=6?.4:l<=20?.32:.3;if(l===0){Rt(e,p);return}let h=new Map;for(let t of e.edges){if(!t.cross)continue;let n=e.nodeByFile.get(t.a)?.pkg,r=e.nodeByFile.get(t.b)?.pkg;if(!n||!r||n===r)continue;h.has(n)||h.set(n,new Map),h.has(r)||h.set(r,new Map);let i=h.get(n),a=h.get(r);i.set(r,(i.get(r)??0)+1),a.set(n,(a.get(n)??0)+1)}let g=Math.max(1,Math.min(10,Math.round(Math.sqrt(l)/1.2))),_=Array.from({length:g+1});for(let e=0;e<=g;e++)_[e]=Math.floor(e*e/(g*g)*l);_[g]=l;let v=Array.from({length:g}),y=Array.from({length:g});for(let t=0;t<g;t++){let n=_[t],r=_[t+1];v[t]=r-n;let i=0;for(let t=n;t<r;t++)i+=e.pkgCount.get(c[t])??0;y[t]=i}let b=Array.from({length:g});for(let e=0;e<g;e++){let t=(_[e]+_[e+1]-1)/2/Math.max(1,l-1);b[e]=Math.sqrt(Math.max(0,t))}let x=Array.from({length:g});x[0]=b[0];for(let e=1;e<g;e++){let t=v[e-1],n=y[e-1],r=t>0?n/t:1,i=1+.2*Math.sqrt(Math.max(0,r-1));x[e]=x[e-1]+(b[e]-b[e-1])*i}let S=Array.from({length:g});for(let e=0;e<g;e++)S[e]=x[e]-b[e];let C=Array.from({length:l}),w=Array.from({length:l}),T=0;for(let e=0;e<l;e++){for(;T<g-1&&e>=_[T+1];)T++;let t=e*137.508%360*Math.PI/180,n=(l<=1?0:Math.sqrt(e/(l-1)))+S[T],s=l===1?o?m:0:m+n*(u-m);C[e]=r+Math.cos(t)*s*a,w[e]=i+Math.sin(t)*s*a}let E=It(2*f*a);for(let t=0;t<g;t++){let n=_[t],o=_[t+1],s=o-n;if(s===0)continue;let l=Array.from({length:s},()=>!1);for(let t=n;t<o;t++){let o=c[t],u=e.pkgCount.get(o)??0,m=Math.min(f,(.012+Math.sqrt(u)*.004)*d)*a,g=e=>E.fits(C[n+e],w[n+e],m),_=h.get(o),v=0,y=0,b=0;if(_)for(let[e,t]of _){let n=p.get(e);n&&(v+=n.x*t,y+=n.y*t,b+=t)}let x=!1;if(b>0){v/=b,y/=b;let e=v-r,t=y-i;e*e+t*t>1&&(x=!0)}let S=e=>{let t=-1;if(x){let r=1/0;for(let i=0;i<s;i++){if(l[i]||!e(i))continue;let a=n+i,o=C[a]-v,s=w[a]-y,c=o*o+s*s;c<r&&(r=c,t=i)}}else for(let n=0;n<s;n++)if(!l[n]&&e(n)){t=n;break}return t},T=S(()=>!0);if(!g(T)){let e=S(g);e>=0&&(T=e)}l[T]=!0;let D=n+T;p.set(o,{x:C[D],y:w[D],size:u,groupR:m}),E.add(C[D],w[D],m)}}Mt(p,h,Array.from({length:g},(e,t)=>c.slice(_[t],_[t+1]))),Bt(p,o),Rt(e,p)}function Bt(e,t){let n=[...e].map(([e,n])=>({info:n,pinned:e===t}));for(let e=0;e<100;e++){n.sort((e,t)=>e.info.x-e.info.groupR-(t.info.x-t.info.groupR));let e=!1;for(let t=0;t<n.length;t++){let r=n[t].info;for(let i=t+1;i<n.length;i++){let a=n[i].info;if(a.x-a.groupR>r.x+r.groupR)break;let o=a.x-r.x,s=a.y-r.y,c=Math.hypot(o,s),l=r.groupR+a.groupR;if(c>=l-.5)continue;let u=n[t].pinned?0:a.groupR**2,d=n[i].pinned?0:r.groupR**2;if(u+d===0)continue;let f=(l-c)/(u+d),p=c>1e-9?o/c:1,m=c>1e-9?s/c:0;r.x-=p*f*u,r.y-=m*f*u,a.x+=p*f*d,a.y+=m*f*d,e=!0}}if(!e)return}}function Vt(e,t,n){let r=t/2,i=n/2,a=Math.min(t,n)/2,o=e.nodes.length;if(o===0)return;let s=[],c=[],l=[];for(let t of e.nodes)t.pkg===`__own__`||e.ownSourcePackages?.has(t.pkg)?e.entryPackages?.has(t.pkg)?c.push(t):l.push(t):s.push(t);let u=(e,t)=>t.deg-e.deg,d=[c,l,s].flatMap(Lt),f=d.flatMap(e=>e.toSorted(u));for(let e=0;e<o;e++){let t=f[e],n=e*137.508%360*Math.PI/180,s=o<=1?0:Math.sqrt(e/(o-1));t.x=r+Math.cos(n)*s*.85*a,t.y=i+Math.sin(n)*s*.85*a}jt(e,d)}function Ht(e,t,n,r,{groupOf:i=u}={}){let a=e.length,o=r||760,s=n||1100,c=Math.sqrt(s*o/Math.max(a,1))*1.1,l=e=>{let t=0;for(let n of e)t=t*31+n.codePointAt(0)|0;return t},d=Math.ceil(Math.sqrt(a*s/o)),f=o/(Math.ceil(a/d)+1),p=s/(d+1),m=e.map((e,t)=>{let n=t%d,r=Math.floor(t/d),i=l(e);return{file:e,x:(n+1)*p+(i%100-50)*p*.4,y:(r+1)*f+((i>>7)%100-50)*f*.4,dx:0,dy:0}}),h=new Map(m.map((e,t)=>[e.file,t])),g=[];for(let n of e)for(let e of t.get(n)??[])h.has(e)&&g.push([h.get(n),h.get(e)]);let _=new Map;for(let e=0;e<a;e++){let t=i(m[e].file)??`__own__`;_.has(t)||_.set(t,[]),_.get(t).push(e)}let v=Math.min(500,Math.max(180,100+a*3)),y=Math.min(s,o)/6;for(let e=0;e<v;e++){let t=y*(.3/y)**(e/v);for(let e of m)e.dx=0,e.dy=0;for(let e=0;e<a;e++)for(let t=e+1;t<a;t++){let n=m[e],r=m[t],i=n.x-r.x,a=n.y-r.y,o=Math.sqrt(i*i+a*a);if(o<.01){let e=l(n.file+r.file);i=(e%100-50)*.01||.5,a=((e>>7)%100-50)*.01||.5,o=Math.sqrt(i*i+a*a)}let s=c*c/o;n.dx+=i/o*s,n.dy+=a/o*s,r.dx-=i/o*s,r.dy-=a/o*s}for(let[e,t]of g){let n=m[e],r=m[t],i=n.x-r.x,a=n.y-r.y,o=Math.sqrt(i*i+a*a)||.01,s=o*o/c;n.dx-=i/o*s,n.dy-=a/o*s,r.dx+=i/o*s,r.dy+=a/o*s}let n=.055*Math.min(1,t/(y*.3));for(let[,e]of _){if(e.length<2)continue;let t=0,r=0;for(let n of e)t+=m[n].x,r+=m[n].y;t/=e.length,r/=e.length;for(let i of e)m[i].dx+=(t-m[i].x)*n,m[i].dy+=(r-m[i].y)*n}for(let e of m){let n=Math.sqrt(e.dx*e.dx+e.dy*e.dy)||.01;e.x+=e.dx/n*Math.min(n,t),e.y+=e.dy/n*Math.min(n,t),e.x=Math.max(50,Math.min(s-50,e.x)),e.y=Math.max(50,Math.min(o-50,e.y))}}return m}function Ut(e,t,n,{statsHeight:r=0,left:i=0,right:a=i,top:o=0,bottom:s=o}={}){let c=Math.max(20,t*.04),l=Math.max(20,n*.04),u=Math.max(1,t-c*2-i-a),d=Math.max(1,n-l*2-r-o-s),f=-1/0,p=-1/0,m=1/0,h=1/0;for(let t of e)m=Math.min(m,t.x),f=Math.max(f,t.x),h=Math.min(h,t.y),p=Math.max(p,t.y);if(e.length===0)return{k:1,tx:t/2,ty:(n-r)/2};let g=Math.min(4,u/Math.max(20,f-m),d/Math.max(20,p-h));return{k:g,tx:c+i+u/2-(m+f)/2*g,ty:l+o+d/2-(h+p)/2*g}}function Wt(e,t,n,{width:r=900,rowHeight:i=52,gap:a=42}={}){let o=new Map(e.map(e=>[e.id,e])),s=new Map,c=[];for(let e of n)o.has(e)&&!s.has(e)&&(s.set(e,0),c.push(e));for(let e=0;e<c.length;e++){let n=c[e];for(let e of t.get(n)??[])!o.has(e)||s.has(e)||(s.set(e,s.get(n)+1),c.push(e))}let l=new Map;for(let t of e){let e=s.get(t.id)??null;l.has(e)||l.set(e,[]),l.get(e).push(t)}let u=new Map(e.map(e=>[e.id,[]]));for(let[e,n]of t)if(o.has(e))for(let t of new Set(n))u.get(t)?.push(e);let d=[],f=new Map,p=[...l.keys()].toSorted((e,t)=>(e??1/0)-(t??1/0)),m=e=>Number.isFinite(e.size)&&e.size>0?e.size:0;for(let e of p){let t=l.get(e).slice(),n=new Map(t.map(t=>{let n=u.get(t.id).map(e=>f.get(e)).filter(t=>t&&e!==null&&t.level===e-1);return[t.id,n.length>0?n.reduce((e,t)=>e+t.x+t.width/2,0)/n.length:r/2]}));t.sort((e,t)=>n.get(e.id)-n.get(t.id)||String(e.id).localeCompare(String(t.id)));let o=0;for(let e=1;e<t.length;e++)m(t[e])>m(t[o])&&(o=e);o>0&&t.unshift(t.splice(o,1)[0]);let s=t.reduce((e,t)=>e+m(t),0),c=d.length*(i+a),p=0;for(let n of t){let a=r*(s>0?m(n)/s:1/t.length);f.set(n.id,{id:n.id,level:e,x:p,y:c,width:a,height:i}),p+=a}d.push({level:e,y:c,size:s,proportional:s>0,ids:t.map(e=>e.id)})}let h=[];for(let[e,n]of t)if(f.has(e))for(let t of new Set(n))e!==t&&f.has(t)&&h.push({from:e,to:t});h.sort((e,t)=>String(e.from).localeCompare(String(t.from))||String(e.to).localeCompare(String(t.to)));let g=new Map,_=new Map;for(let e of h)_.has(e.from)||_.set(e.from,[]),g.has(e.to)||g.set(e.to,[]),_.get(e.from).push(e),g.get(e.to).push(e);for(let e of _.values())e.sort((e,t)=>f.get(e.to).x-f.get(t.to).x);for(let e of g.values())e.sort((e,t)=>f.get(e.from).x-f.get(t.from).x);for(let e of _.values())e.forEach((t,n)=>{t.sourcePort=(n+1)/(e.length+1)});for(let e of g.values())e.forEach((t,n)=>{t.targetPort=(n+1)/(e.length+1)});let v=d.reduce((e,t)=>e+t.size,0);for(let e of d)e.share=v>0?e.size/v:null;return{levels:d,rects:f,edges:h,depth:s,totalSize:v,width:r,height:d.length>0?d.length*(i+a)-a:0,gap:a}}function Gt(e,t,{theme:n,scale:r,colorOf:i,labelOf:a,sizeLabel:o,dimmed:s,selected:c,hovered:l}){let u=l??c,d=new Set([u]);for(let e of t.edges)e.from===u&&d.add(e.to),e.to===u&&d.add(e.from);let f=e=>e===u||e===c?1:s(e)?.13:u&&!d.has(e)?.22:1;e.save(),e.lineJoin=`round`;for(let n of t.edges){let a=t.rects.get(n.from),o=t.rects.get(n.to),s=n.from===u||n.to===u;e.globalAlpha=Math.min(f(n.from),f(n.to))*(s?.9:.5),e.strokeStyle=i(n.from),e.fillStyle=i(n.from),e.lineWidth=(s?1.6:1)/r;let c=a.x+a.width*n.sourcePort,l=a.y+a.height,d=o.x+o.width*n.targetPort,p=o.y,m=0,h=1;if(e.beginPath(),e.moveTo(c,l),o.y>a.y){let t=(l+p)/2;e.bezierCurveTo(c,t,d,t,d,p)}else if(o.y===a.y){p=o.y+o.height;let n=l+t.gap*.65;e.bezierCurveTo(c,n,d,n,d,p),h=-1}else{d=o.x+o.width,p=o.y+o.height*n.targetPort;let r=t.width+16+n.sourcePort*20;e.bezierCurveTo(c,l+t.gap/2,r,l+t.gap/2,r,l),e.lineTo(r,p+8),e.quadraticCurveTo(r,p,d,p),m=-1,h=0}e.stroke();let g=3/r;e.beginPath(),e.moveTo(d,p),e.lineTo(d-m*g-h*g,p-h*g+m*g),e.lineTo(d-m*g+h*g,p-h*g-m*g),e.closePath(),e.fill()}e.globalAlpha=1,e.textBaseline=`middle`,e.textAlign=`right`,e.fillStyle=n.labelDefault,e.font=`11px system-ui, sans-serif`;let p=n.edgeIntra(.16);for(let r of t.levels){let t=r.y+26;e.strokeStyle=p,e.lineWidth=3,e.beginPath(),e.arc(-112,t,18,0,Math.PI*2),e.stroke(),r.share!==null&&r.share>0&&(e.strokeStyle=n.labelDefault,e.beginPath(),e.arc(-112,t,18,-Math.PI/2,-Math.PI/2+r.share*Math.PI*2),e.stroke()),e.textAlign=`center`,e.font=`9px system-ui, sans-serif`;let i=r.share===null?`—`:r.share>0&&r.share<.001?`<0.1%`:`${Number((r.share*100).toFixed(1))}%`;e.fillText(i,-112,t),e.textAlign=`right`,e.font=`11px system-ui, sans-serif`,e.fillText(r.level===null?`Unreached`:r.level===0?`App`:`Level ${r.level}`,-12,r.y+19),e.font=`10px system-ui, sans-serif`,e.fillText(r.proportional?o(r.size):`No size data`,-12,r.y+35),e.font=`11px system-ui, sans-serif`}e.textAlign=`left`;for(let s of t.rects.values()){let{id:t,x:u,y:d,width:p,height:m}=s;if(p<=0)continue;let h=i(t),g=Re(h);if(e.globalAlpha=f(t),e.fillStyle=h,e.fillRect(u,d,p,m),e.save(),e.beginPath(),e.rect(u,d,p,m),e.clip(),e.strokeStyle=n.bg,e.lineWidth=1/r,p*r>=2?e.strokeRect(u,d,p,m):(e.beginPath(),e.moveTo(u,d),e.lineTo(u+p,d),e.moveTo(u,d+m),e.lineTo(u+p,d+m),e.stroke()),t===c||t===l){e.strokeStyle=n.selectRing,e.lineWidth=Math.min(1.5/r,p/4);let t=e.lineWidth/2;e.strokeRect(u+t,d+t,Math.max(0,p-t*2),m-t*2)}if(p*r<28){e.restore();continue}e.beginPath(),e.rect(u+7,d+4,Math.max(0,p-14),m-8),e.clip(),e.fillStyle=g,e.font=`500 12px system-ui, sans-serif`,e.fillText(a(t),u+9,d+21),e.fillStyle=g,e.font=`10px system-ui, sans-serif`,e.fillText(o(t),u+9,d+38),e.restore()}e.restore()}function Kt(e,t,n=[],{width:r=1200,height:i=800,cycleImportsOf:a=t}={}){e=[...new Set(e)].toSorted();let o=new Set(e),s=new Map(e.map(e=>[e,[...new Set(t.get(e)??[])].filter(t=>t!==e&&o.has(t)).toSorted()])),c=new Map(e.map(e=>[e,new Set(a.get(e)??[])])),l=new Map(e.map(e=>[e,[]]));for(let[e,t]of s)for(let n of t)l.get(n).push(e);let{groups:u,componentOf:d}=m(e,c),f=u.filter(e=>e.length>1),p=new Set(f.flat()),h=u.map(()=>new Set),g=u.map(()=>0);for(let[e,t]of s)for(let n of t){if(!c.get(e).has(n))continue;let t=d.get(e),r=d.get(n);t!==r&&!h[t].has(r)&&(h[t].add(r),g[r]++)}let _=new Set(n.map(e=>d.get(e)).filter(e=>e!==void 0)),v=u.map(()=>0),y=[],b=new Set,x=e=>{b.has(e)||(b.add(e),y.push(e))};_.forEach(x),g.forEach((e,t)=>{e||x(t)});for(let e=0;e<y.length;e++){let t=y[e];for(let e of h[t])_.has(e)||(v[e]=Math.max(v[e],v[t]+1)),--g[e]===0&&x(e)}let S=new Map(e.map(e=>[e,v[d.get(e)]])),C=new Map;for(let t of e){let e=S.get(t);C.has(e)||C.set(e,[]),C.get(e).push(t)}let w=[...C.keys()].toSorted((e,t)=>e-t),T=new Map,E=e=>e.forEach((t,n)=>T.set(t,(n+.5)/e.length));for(let e of C.values())E(e);for(let e=0;e<12;e++)for(let t of e%2?w.toReversed():w){let n=C.get(t),r=new Map(n.map(t=>{let n=(e%2?s:l).get(t);return[t,n.length>0?n.reduce((e,t)=>e+T.get(t),0)/n.length:T.get(t)]}));n.sort((e,t)=>r.get(e)-r.get(t)||T.get(e)-T.get(t)||e.localeCompare(t)),E(n)}let D=Math.max(.6,Math.min(2.4,r/Math.max(1,i))),O=Math.max(160,Math.sqrt(e.length*1100*D)),k=Math.max(120,O/D),A=w.at(-1)??0,j=new Map;for(let[e,t]of C)t.forEach((t,n)=>{let r=T.get(t)*O,i=(e+.5)/(A+1)*k;j.set(t,{id:t,x:r,y:i+(n%5-2)*9,anchorY:i,vx:0,vy:0,level:e,cycle:p.has(t),degree:s.get(t).length+l.get(t).length})});let M=[];for(let[e,t]of s)for(let n of t)M.push({from:e,to:n,cycle:c.get(e).has(n)&&p.has(e)&&d.get(e)===d.get(n)});let N=M.map(e=>{let t=j.get(e.from),n=j.get(e.to);return{a:t,b:n,length:26+Math.sqrt(Math.max(t.degree,n.degree))*5,strength:.065/Math.sqrt(Math.min(t.degree,n.degree)||1),cycle:e.cycle}}),P=[...j.values()];for(let e=0;e<240;e++){let t=new Map,n=7*(1-e/240)+.15;for(let e=0;e<P.length;e++){let n=P[e];n.fx=(O/2-n.x)*.002,n.fy=(n.anchorY-n.y)*.018,n.gx=Math.floor(n.x/80),n.gy=Math.floor(n.y/80);let r=`${n.gx},${n.gy}`;t.has(r)||t.set(r,[]),t.get(r).push(e)}for(let e=0;e<P.length;e++){let n=P[e];for(let r=n.gx-1;r<=n.gx+1;r++)for(let i=n.gy-1;i<=n.gy+1;i++)for(let a of t.get(`${r},${i}`)??[]){if(a<=e)continue;let t=P[a],r=n.x-t.x,i=n.y-t.y,o=r*r+i*i;if(o>6400)continue;o<.01&&(r=e%2?.1:-.1,i=.1);let s=Math.hypot(r,i),c=Math.min(18,100/s-100/80+Math.max(0,22-s)*.6),l=r/s*c,u=i/s*c;n.fx+=l,n.fy+=u,t.fx-=l,t.fy-=u}}for(let{a:e,b:t,length:n,strength:r,cycle:i}of N){let a=t.x-e.x,o=t.y-e.y,s=Math.hypot(a,o)||1,c=(s-n)*r,l=a/s*c,u=o/s*c;if(e.fx+=l,e.fy+=u,t.fx-=l,t.fy-=u,!i&&o<22){let n=(22-o)*.018;e.fy-=n,t.fy+=n}}for(let e of P){e.vx=(e.vx+e.fx)*.55,e.vy=(e.vy+e.fy)*.55;let t=Math.hypot(e.vx,e.vy)||1,r=Math.min(1,n/t);e.x+=e.vx*r,e.y+=e.vy*r}}let F=-1/0,I=-1/0,L=1/0,R=1/0;for(let e of P)L=Math.min(L,e.x),R=Math.min(R,e.y),F=Math.max(F,e.x),I=Math.max(I,e.y);for(let e of P)e.x+=16-L,e.y+=16-R;return{nodes:j,edges:M,depth:S,incoming:l,links:s,cycles:f,roots:new Set(n.filter(e=>o.has(e))),width:P.length>0?F-L+32:32,height:P.length>0?I-R+32:32}}function qt(e){return Math.max(2.5,Math.min(6,4.5*Math.sqrt(e)))}function Jt(e,t,n,{theme:r,viewport:i,width:a,height:o,colorOf:s,dimmed:c,selected:l,hovered:u,query:d}){let{k:f,tx:p,ty:m}=i,h=qt(f),g=u??l,_=new Set([g,...t.links.get(g)??[],...t.incoming.get(g)??[]]),v=new Map;for(let[e,r]of t.nodes){let t=n.nodeByFile.get(e);v.set(e,{x:r.x*f+p,y:r.y*f+m,color:s(t.pkg),n:t,p:r,dim:e===g||e===l?1:c(t)?.12:g&&!_.has(e)?.16:1})}e.save();let y=(t,i)=>{let s=v.get(t.from),c=v.get(t.to);if(Math.max(s.x,c.x)<-40||Math.min(s.x,c.x)>a+40||Math.max(s.y,c.y)<-80||Math.min(s.y,c.y)>o+80)return;e.globalAlpha=i?.85:Math.min(s.dim,c.dim)*(g?.12:.22),e.strokeStyle=i?s.color:r.labelDefault,e.lineWidth=i?1.4:.7,e.setLineDash(t.cycle?[3,3]:[]);let l=c.x-s.x,u=c.y-s.y,d=Math.hypot(l,u)||1,p=l/d,m=u/d,_=s.x+p*(h+1),y=s.y+m*(h+1),b=c.x-p*(h+3),x=c.y-m*(h+3),S=t.cycle?Math.min(18,d*.15):0,C=(_+b)/2-m*S,w=(y+x)/2+p*S;if(e.beginPath(),e.moveTo(_,y),e.quadraticCurveTo(C,w,b,x),e.stroke(),i||f>=.85||n.nodes.length<=50){let t=Math.atan2(x-w,b-C),n=i?5:3.5;e.setLineDash([]),e.fillStyle=e.strokeStyle,e.beginPath(),e.moveTo(b,x),e.lineTo(b-Math.cos(t-.5)*n,x-Math.sin(t-.5)*n),e.lineTo(b-Math.cos(t+.5)*n,x-Math.sin(t+.5)*n),e.closePath(),e.fill()}};for(let e of t.edges)e.from!==g&&e.to!==g&&y(e,!1);for(let e of t.edges)(e.from===g||e.to===g)&&y(e,!0);e.setLineDash([]);let b=new Map,x=e=>{let t=[];for(let n=Math.floor(e.x/64);n<=Math.floor((e.x+e.w)/64);n++)for(let r=Math.floor(e.y/24);r<=Math.floor((e.y+e.h)/24);r++)t.push(`${n},${r}`);return t},S=e=>{for(let t of x(e))b.has(t)||b.set(t,[]),b.get(t).push(e)},C=(e,t)=>e.x<t.x+t.w&&t.x<e.x+e.w&&e.y<t.y+t.h&&t.y<e.y+e.h,w=[...v.values()].filter(e=>e.x>=-10&&e.x<=a+10&&e.y>=-10&&e.y<=o+10);for(let t of w)e.globalAlpha=t.dim,e.fillStyle=t.color,e.beginPath(),e.arc(t.x,t.y,h,0,Math.PI*2),e.fill(),(t.p.cycle||t.n.totalIssues>0)&&(e.strokeStyle=t.p.cycle?`#c47ad7`:t.color,e.lineWidth=1,e.beginPath(),e.arc(t.x,t.y,h+2.5,0,Math.PI*2),e.stroke()),(t.n.file===l||t.n.file===u)&&(e.strokeStyle=r.selectRing,e.lineWidth=1.5,e.beginPath(),e.arc(t.x,t.y,h+4,0,Math.PI*2),e.stroke()),S({x:t.x-h-2,y:t.y-h-2,w:h*2+4,h:h*2+4});e.font=`11px SFMono-Regular, Consolas, "Liberation Mono", monospace`,e.textBaseline=`top`,e.textAlign=`center`,w.sort((e,n)=>{let r=e=>e.n.file===g?1e9:e.n.file===l?1e8:d&&e.dim===1?1e7:g&&_.has(e.n.file)?1e6:t.roots.has(e.n.file)?1e5:e.n.deg;return r(n)-r(e)});let T=0;for(let t of w){let n=t.n.file===g||t.n.file===l;if(!n&&t.dim<.5||!n&&!d&&!g&&f<1&&T>=24)continue;let i=t.n.label.length>38?`${t.n.label.slice(0,36)}\u2026`:t.n.label,s=e.measureText(i).width+8,c={x:t.x-s/2,y:t.y+h+5,w:s,h:16};c.x<4||c.x+c.w>a-4||c.y+c.h>o-24||!n&&x(c).some(e=>b.get(e)?.some(e=>C(c,e)))||(S(c),T++,e.globalAlpha=.94,e.fillStyle=r.bg,e.fillRect(c.x,c.y-1,c.w,c.h),e.globalAlpha=1,e.fillStyle=n?r.labelSelected:r.labelDefault,e.fillText(i,t.x,c.y))}e.restore()}function Yt(e){let t=e.nodes.map(e=>({node:e})),n=new Map(t.map(e=>[e.node.file,e]));return{nodes:t,edges:e.edges.flatMap(e=>{let t=n.get(e.a),r=n.get(e.b);return t&&r?[{edge:e,a:t,b:r}]:[]}),graph:e,selected:void 0,neighbors:new Set}}function Xt(e,{viewport:t,selected:n,visible:r,dimmed:i,radius:a,color:o,paintKey:s}){if(s===void 0||e.paintKey!==s){let n=new Map;for(let s of e.nodes){let e=s.node;s.visible=r(e),s.visible&&(s.x=e.x*t.k+t.tx,s.y=e.y*t.k+t.ty,s.radius=a(e),s.dimmed=i(e),n.has(e.pkg)||n.set(e.pkg,o(e.pkg)),s.color=n.get(e.pkg))}e.paintKey=s}if(e.selected!==n){e.selected=n,e.neighbors.clear();for(let t of e.graph.adj.get(n)??[]){let n=e.graph.edges[t];e.neighbors.add(n.a),e.neighbors.add(n.b)}}}function Zt(e,t,n,r){if(e.paints&&e.edgeOpacity===t&&e.neutral===n&&e.edgeSelected===r)return e.paints;let i=e=>({opacity:Math.max(0,Math.min(255,Math.round(e*255)))/255,neutral:n(e*.7)}),a=r?t*.25:t,o=r?.85:Math.min(.9,t+.5);return e.paints={base:i(a),emphasis:i(o),baseDim:i(Math.min(a,.04)),emphasisDim:i(Math.min(o,.04))},e.edgeOpacity=t,e.neutral=n,e.edgeSelected=r,e.paints}function Qt(e,t){let{a:n,b:r}=e;return(!e.gradient||e.ax!==n.node.x||e.ay!==n.node.y||e.bx!==r.node.x||e.by!==r.node.y||e.colorA!==n.color||e.colorB!==r.color)&&(e.gradient=t.createLinearGradient(n.node.x,n.node.y,r.node.x,r.node.y),e.gradient.addColorStop(0,n.color),e.gradient.addColorStop(1,r.color),e.ax=n.node.x,e.ay=n.node.y,e.bx=r.node.x,e.by=r.node.y,e.colorA=n.color,e.colorB=r.color),e.gradient}function $t(e,t,n){return(!e.halo||e.haloX!==e.x||e.haloY!==e.y||e.haloRadius!==t||e.haloColor!==e.color)&&(e.halo=n.createRadialGradient(e.x,e.y,0,e.x,e.y,t),e.halo.addColorStop(0,e.color+`55`),e.halo.addColorStop(1,e.color+`00`),e.haloX=e.x,e.haloY=e.y,e.haloRadius=t,e.haloColor=e.color),e.halo}function en(e,t,n,r){return e.x<-2&&t.x<-2||e.x>n+2&&t.x>n+2||e.y<-2&&t.y<-2||e.y>r+2&&t.y>r+2}function tn(e,t,n,r,i){return e+n<-2||e-n>r+2||t+n<-2||t-n>i+2}function nn(e){let t=2166136261;for(let n of e.files){for(let e=0;e<n.length;e++)t=Math.imul(t^n.codePointAt(e),16777619);t=Math.imul(t^10,16777619)}return[e.viewId??``,t>>>0,e.files.length,e.edges.length,i.bundleLayout,i.packagesView,i.dependencyPackagesView,i.focusedPkg,i.showAll].join(`|`)}function rn(e){let t=new Map;for(let[n,r]of e.entries()){let e=Math.floor(r.x/32),i=Math.floor(r.y/32);t.has(e)||t.set(e,new Map);let a=t.get(e);a.has(i)||a.set(i,[]),a.get(i).push({node:r,index:n})}return(e,n,r,i,a,o)=>{let{k:s,tx:c,ty:l}=r,u=(i+6)/s+1e-7,d=(e-c)/s,f=(n-l)/s,p=Math.floor((d-u)/32),m=Math.floor((d+u)/32),h=Math.floor((f-u)/32),g=Math.floor((f+u)/32),_=null,v=1/0,y=1/0;for(let r=p;r<=m;r++){let i=t.get(r);if(i)for(let t=h;t<=g;t++)for(let{node:r,index:u}of i.get(t)??[]){if(!o(r))continue;let t=r.x*s+c-e,i=r.y*s+l-n,d=t*t+i*i,f=a(r)+6;d<f*f&&(d<v||d===v&&u<y)&&(_=r,v=d,y=u)}}return _}}function an(e,t,n,r,i){if(!e||e.key!==t.key)return null;let a=(t.tx-e.tx)*i,o=(t.ty-e.ty)*i;if(!Number.isInteger(a)||!Number.isInteger(o)||!Number.isInteger(a/i)||!Number.isInteger(o/i)||!a&&!o||Math.abs(a)>=n*i||Math.abs(o)>=r*i)return null;let s=a/i,c=o/i,l=[];return s>0&&l.push({x:0,y:0,w:Math.min(n,s+2),h:r}),s<0&&l.push({x:Math.max(0,n+s-2),y:0,w:Math.min(n,-s+2),h:r}),c>0&&l.push({x:0,y:0,w:n,h:Math.min(r,c+2)}),c<0&&l.push({x:0,y:Math.max(0,r+c-2),w:n,h:Math.min(r,-c+2)}),{dx:a,dy:o,rects:l}}function on(e,t,n,r,i){return e&&e.rects.every(e=>r<e.x||t>e.x+e.w||i<e.y||n>e.y+e.h)}var sn={critical:`#ff5470`,high:`#ff9d4a`,medium:`#f4d35e`,low:`#67c2ff`,high_bug:`#a06c3f`,bug:`#7a6d62`,informational:`#218bff`},cn={dark:{bg:X.dark,grid:`rgba(255, 255, 255, 0.022)`,selectRing:`#ffffff`,edgeIntra:e=>`rgba(180, 195, 215, ${e})`,hubRing:e=>`rgba(255, 255, 255, ${e})`,labelFill:`rgba(230, 233, 238, 0.78)`,labelShadow:`rgba(12, 12, 12, 0.98)`,labelOutline:`rgba(12, 12, 12, 0.9)`,labelDefault:`rgba(200, 210, 225, 0.78)`,labelHover:`rgba(230, 237, 243, 0.95)`,labelSelected:`#fff`},light:{bg:X.light,grid:`rgba(0, 0, 0, 0.04)`,selectRing:`#0969da`,edgeIntra:e=>`rgba(50, 70, 100, ${e})`,hubRing:e=>`rgba(0, 0, 0, ${e})`,labelFill:`rgba(40, 50, 70, 0.85)`,labelShadow:`rgba(255, 255, 255, 0.95)`,labelOutline:`rgba(255, 255, 255, 0.9)`,labelDefault:`rgba(50, 60, 80, 0.85)`,labelHover:`rgba(20, 25, 35, 0.95)`,labelSelected:`#000`},pink:{bg:X.pink,grid:`rgba(0, 0, 0, 0.04)`,selectRing:`#0969da`,edgeIntra:e=>`rgba(50, 70, 100, ${e})`,hubRing:e=>`rgba(0, 0, 0, ${e})`,labelFill:`rgba(40, 50, 70, 0.85)`,labelShadow:`rgba(255, 255, 255, 0.95)`,labelOutline:`rgba(255, 255, 255, 0.9)`,labelDefault:`rgba(50, 60, 80, 0.85)`,labelHover:`rgba(20, 25, 35, 0.95)`,labelSelected:`#000`}},ln={...cn.light,bg:X.paper,selectRing:`#000`,edgeIntra:e=>`rgba(0, 0, 0, ${e})`,labelFill:`#000`,labelShadow:`#fff`,labelOutline:`#fff`,labelDefault:`#000`,labelHover:`#000`},un={...cn.light,bg:X.w95,selectRing:`#000080`};function dn(){let e=document.body.classList;return e.contains(`theme-paper`)?ln:e.contains(`theme-pink`)?cn.pink:e.contains(`theme-w95`)?un:e.contains(`theme-light`)?cn.light:cn.dark}var fn=(e,t)=>e.x0<t.x1&&t.x0<e.x1&&e.y0<t.y1&&t.y0<e.y1;function pn(e){e.sort((e,t)=>t.prio-e.prio);let t=[];for(let n of e){let e=!1;for(let r of t)if(fn(n,r)){e=!0;break}e||t.push(n)}return t}var mn=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,`0`));function $(e){return mn[Math.max(0,Math.min(255,Math.round(e*255)))]}function hn(e,t,r,o){let s=e.querySelector(`graph-layout`)?.shadowRoot;if(!s)return;let c=s.querySelector(`#g2-canvas`),l=s.querySelector(`#g2-tooltip`),u=s.querySelector(`.graph2-stage`),f=s.querySelector(`.g2-stage-stats`),p=s.querySelector(`#g2-zoom-pct`);if(!c)return;a({keepViewport:!0});let m=nn(t),h=i.keptViewport?.key===m?i.keptViewport:null;i.keptViewport=null;let g=c.getContext(`2d`),_=window.devicePixelRatio||1,y=0,b=0,x=0,S={tx:0,ty:0,k:1},C=null,w=h?.layoutH??0,T=h?.layoutW??0,E=!0,k=!h,A=new WeakMap,j=null,M=null,N=null,P=()=>t.supportsLayers&&i.bundleLayout===`layers`&&!i.focusedPkg,F=()=>t.supportsLayers&&i.bundleLayout===`dependencies`&&!i.focusedPkg,I=()=>F()&&!ue(t,i.dependencyPackagesView),L=()=>P()||i.bundleLayout===`graph`&&(t.packagesOnly||i.packagesView&&(t.canPackagesView??!1))&&!i.focusedPkg,R=null,B=null,V=te(t,se(t,ae)),H=null;function U(){if(!H){let e=se(ee(t),oe);if(H=ee(te(t,e)),P()&&t.layerRoots?.appImports.length>0){if(!H.byPkg.has(`__own__`)){let e={file:`__own__`,pkg:`__own__`,label:`App (source not bundled)`,size:null,fileCount:0,totalIssues:0};H.nodes.push(e),H.byPkg.set(`__own__`,e)}H.importsOf.set(`__own__`,[...new Set([...H.importsOf.get(`__own__`)??[],...t.layerRoots.appImports.filter(t=>!e.has(t))])])}}return H}function W(){return fe(t,i.dependencyPackagesView)}let ce=e=>e===`__own__`?`App`:R?.depth.get(e)===0?`App \xB7 ${z(e)}`:z(e);function le(e,t,n){if(e.nodes.length>50){Vt(e,t,n);return}let r=Ht(e.nodes.map(e=>e.pkg),e.importsOf,t,n,{groupOf:e=>e});de(e.nodes,new Map(r.map(e=>[e.file,e])))}function de(e,t){for(let n of e){let e=t.get(n.file);e&&(n.x=e.x,n.y=e.y)}}function pe(){if(!E)return;if(M=null,N=null,j=null,P()){let e=U();R=Wt(e.nodes.map(e=>({id:e.pkg,size:e.size})),e.importsOf,t.layerRoots?.roots??[`__own__`],{width:Math.max(360,T-190)}),E=!1;return}if(F()){let e=W();B=Kt(e.nodes.map(e=>e.file),e.importsOf,e.fileLevel?[]:t.layerRoots?.roots??[],{width:T,height:w,cycleImportsOf:e.cycleImportsOf}),E=!1;return}let e=i.layoutCache,n=i.focusedPkg,r=L(),a=r?U().nodes:V.nodes;if(e&&e.files===t.files&&e.w===T&&e.h===w&&e.focused===n&&(e.pkgView??!1)===r)de(a,e.pos);else{if(r)le(U(),T,w);else if(n){if(V.nodes.length>50)Vt(V,T,w);else{let e=Ht(V.files,V.importsOf,T,w);de(V.nodes,new Map(e.map(e=>[e.file,e])))}}else zt(V,T,w);let e=new Map;for(let t of a)e.set(t.file,{x:t.x,y:t.y});i.layoutCache={files:t.files,w:T,h:w,pos:e,focused:n,pkgView:r}}E=!1}function me(){if(F()&&B){if(W().nodes.length<=100){let e=12;g.save(),g.font=`11px SFMono-Regular, Consolas, "Liberation Mono", monospace`;for(let t of W().nodes){let n=t.label.length>38?`${t.label.slice(0,36)}\u2026`:t.label;e=Math.max(e,g.measureText(n).width/2+4)}return g.restore(),Ut([...B.nodes.values()],b,y,{statsHeight:x,left:e,top:12,bottom:27})}let e=Math.max(20,Math.min(b,y)*.04),t=Math.min((b-e*2)/B.width,(y-e*2-x)/B.height,2.5),n=Math.max(.05,t);return{k:n,tx:(b-B.width*n)/2,ty:(y-x-B.height*n)/2}}if(P()&&R){let e=Math.min((b-24)/(R.width+185),(y-70)/(R.height+R.gap),1.5),t=Math.max(.05,e);return{k:t,tx:(b-(R.width+185)*t)/2+145*t,ty:24+Math.max(0,(y-70-(R.height+R.gap)*t)/2)}}let e=L()?U().nodes:V.nodes;if(e.length<=50){let t=0,n=0,r=0;g.save(),g.font=`600 11px ui-monospace, SFMono-Regular, Menlo, Monaco, monospace`;for(let a of e){let e=L()?je(a):(a.isHub?6:4)*i.nodeSize,o=e*1.85+5;n=Math.max(n,o,g.measureText(a.label).width/2+6),r=Math.max(r,o),t=Math.max(t,o,e+4+13+4)}return g.restore(),Ut(e,b,y,{statsHeight:x,left:n,top:r,bottom:t})}if(e.length===0)return{k:1,tx:b/2,ty:(y-x)/2};let t=-1/0,n=-1/0,r=1/0,a=1/0;for(let i of e)i.x<r&&(r=i.x),i.y<a&&(a=i.y),i.x>t&&(t=i.x),i.y>n&&(n=i.y);let o=Math.max(20,n-a),s=Math.max(20,t-r),c=(r+t)/2,l=(a+n)/2,u=Math.max(20,Math.min(b,y)*(i.focusedPkg?.04:.03)),d=Math.min((b-u*2)/s,(y-u*2-x)/o,4),f=Math.max(.05,d);return{k:f,tx:b/2-c*f,ty:(y-x)/2-l*f}}function he(){let e=me();S.k=e.k,S.tx=e.tx,S.ty=e.ty}function ge(){if(!F()){p&&(p.textContent=`${Math.round(S.k*100)}%`);return}let e=gt(S.k,me().k,!0);p&&(p.textContent=`${e.percent}%`),Ke&&(Ke.disabled=S.k<=e.min*1.0001),Ge&&(Ge.disabled=S.k>=e.max*.9999)}function G(e,t){return[e*S.k+S.tx,t*S.k+S.ty]}function _e(e,t){return[(e-S.tx)/S.k,(t-S.ty)/S.k]}function K(e){return!i.hidden.has(e.pkg)}function ye(e,t,n,r,i){let a=n+(r===`critical`?4.2:r===`high`?3.4:2.8),o=r===`critical`?1.8:r===`high`?1.5:r===`medium`?1.3:1.1;g.strokeStyle=sn[r],g.globalAlpha=i,g.lineWidth=o,g.beginPath(),g.arc(e,t,a,0,Math.PI*2),g.stroke(),g.globalAlpha=1}function be(e,t,n,r,i,a,o){let s=o?.1:.9,c=2*(1-s)*(n-e)+2*s*(i-n),l=2*(1-s)*(r-t)+2*s*(a-r),u=Math.sqrt(c*c+l*l)||1,d=c/u,f=l/u;g.beginPath(),o?(g.moveTo(e,t),g.lineTo(e+d*7-f*2.94,t+f*7+d*2.94),g.lineTo(e+d*7+f*2.94,t+f*7-d*2.94)):(g.moveTo(i,a),g.lineTo(i-d*7+f*2.94,a-f*7-d*2.94),g.lineTo(i-d*7-f*2.94,a-f*7+d*2.94)),g.closePath()}function xe(e){if(!t.issuesHidden&&i.selectedSeverities.size>0){let t=e.severitySet;if(!t)return!0;let n=!1;for(let e of i.selectedSeverities)if(t.has(e)){n=!0;break}if(!n)return!0}if(!t.issuesHidden&&i.selectedColors.size>0){let t=e.colorSet;if(!t)return!0;let n=!1;for(let e of i.selectedColors)if(t.has(e)){n=!0;break}if(!n)return!0}if(i.solo&&e.pkg!==i.solo&&!L()&&!I())return!0;let n=i.pathFilter;if(n){let t=n.toLowerCase(),r=e.pathText?e.pathText.includes(t):e.file.toLowerCase().includes(t),i=e.pkg&&e.pkg.toLowerCase().includes(t),a=e.label&&e.label.toLowerCase().includes(t);if(!r&&!i&&!a)return!0}return!1}function q(e){return(e.isHub?4.9:3.5)*i.nodeSize*Math.max(.6,Math.min(1.6,S.k))}function Se(){let e=u.getBoundingClientRect(),t=y,n=b;b=Math.max(80,e.width),y=Math.max(80,e.height),x=f?(parseFloat(getComputedStyle(f).lineHeight)||0)+8:0,_=window.devicePixelRatio||1,c.width=b*_,c.height=y*_,M=null,A.delete(V),H&&A.delete(H),c.style.width=b+`px`,c.style.height=y+`px`,g.setTransform(_,0,0,_,0,0),(T===0||w===0)&&(T=b,w=y,E=!0),pe();let r=n>0&&(Math.abs(b-n)/n>.15||Math.abs(y-t)/t>.15);h?(S.k=h.k,S.tx=h.tx+(b-h.W)/2,S.ty=h.ty+(y-h.H)/2,h=null):(k||r)&&(he(),k=!1),J()}let Ce=null,we=!0,Te=!1,Ee=!1;function J(){we=!0,!(Te||Ee)&&(Te=!0,Ce=requestAnimationFrame(()=>{Te=!1,we&&!Ee&&(we=!1,De())}))}function De(){let e=L()?U():V;if(N?.graph!==e){N={graph:e,x0:1/0,y0:1/0,x1:-1/0,y1:-1/0};for(let t of e.nodes)N.x0=Math.min(N.x0,t.x),N.x1=Math.max(N.x1,t.x),N.y0=Math.min(N.y0,t.y),N.y1=Math.max(N.y1,t.y)}let t=q({isHub:!0})*6+8,n=N.x0*S.k+S.tx>t&&N.y0*S.k+S.ty>t&&N.x1*S.k+S.tx<b-t&&N.y1*S.k+S.ty<y-t&&S.k<=1.4&&e.nodes.length>50&&!P()&&!F(),r={tx:S.tx,ty:S.ty,key:JSON.stringify([S.k,dn().bg,i.nodeSize,i.edgeOpacity,C,i.selected,i.solo,i.focusedPkg,L(),i.showAll,i.pathFilter,[...i.selectedSeverities],[...i.selectedColors],[...i.hidden]])},a=n?an(M,r,b,y,_):null;g.save();try{if(a){g.save(),g.setTransform(1,0,0,1,0,0),g.globalCompositeOperation=`copy`,g.drawImage(c,a.dx,a.dy),g.restore(),g.beginPath();for(let e of a.rects)g.rect(e.x,e.y,e.w,e.h);g.clip()}Oe(a),M=n?r:null}finally{g.restore()}}function Oe(e){let t=dn();g.fillStyle=t.bg,g.fillRect(0,0,b,y),ke(t);let r=F(),a=L(),o=r?W():a?U():V,s=I()||a?i.solo:i.selected,c=s?o.nodeByFile.get(s):null,l=c?s:null;if(r){Jt(g,B,o,{theme:t,viewport:S,width:b,height:y,colorOf:d,selected:l,hovered:C,query:i.pathFilter,dimmed:e=>xe(e)}),ge();return}if(P()){g.save(),g.translate(S.tx,S.ty),g.scale(S.k,S.k),Gt(g,R,{theme:t,scale:S.k,selected:l,hovered:C,colorOf:d,labelOf:ce,sizeLabel:e=>n(typeof e==`number`?e:o.byPkg.get(e).size)||`Size unknown`,dimmed:e=>xe(o.byPkg.get(e))}),g.restore(),ge();return}if(a&&o.nodes.length<=50){Y(t);return}if(i.focusedPkg&&o.nodes.length<=50){Ae(t,l,c);return}A.has(o)||A.set(o,Yt(o));let u=A.get(o),f=JSON.stringify([S.k,S.tx,S.ty,i.nodeSize,t.bg,i.solo,i.pathFilter,[...i.selectedSeverities],[...i.selectedColors],[...i.hidden]]);Xt(u,{viewport:S,selected:l,paintKey:f,visible:K,dimmed:xe,radius:q,color:d});let p=Zt(u,i.edgeOpacity,t.edgeIntra,!!l),m=l||C,h=.85/S.k,_=.55/S.k,v=null,x=null,w=null;g.save(),g.translate(S.tx,S.ty),g.scale(S.k,S.k);for(let t of u.edges){let{edge:n,a:r,b:i}=t;if(!r.visible||!i.visible||en(r,i,b,y)||on(e,Math.min(r.x,i.x)-2,Math.min(r.y,i.y)-2,Math.max(r.x,i.x)+2,Math.max(r.y,i.y)+2))continue;let a=m&&(n.a===m||n.b===m),o=r.dimmed&&i.dimmed?a?p.emphasisDim:p.baseDim:a?p.emphasis:p.base,s=n.cross?Qt(t,g):o.neutral,c=n.cross?o.opacity:1,l=n.cross?h:_;s!==x&&(g.strokeStyle=s,x=s),c!==v&&(g.globalAlpha=c,v=c),l!==w&&(g.lineWidth=l,w=l),g.beginPath(),g.moveTo(r.node.x,r.node.y),g.lineTo(i.node.x,i.node.y),g.stroke()}g.restore();for(let t of u.nodes){if(!t.visible)continue;let n=t.node,r=n.file===C,i=n.file===l;if(!n.isHub&&!r&&!i||t.dimmed&&!r&&!i)continue;let a=t.radius,o=t.x,s=t.y,c=a*(i?6:r?4.5:3);tn(o,s,c,b,y)||on(e,o-c-2,s-c-2,o+c+2,s+c+2)||(g.fillStyle=$t(t,c,g),g.beginPath(),g.arc(o,s,c,0,Math.PI*2),g.fill())}for(let n of u.nodes){if(!n.visible)continue;let r=n.node,i=n.radius,a=n.x,o=n.y;if(tn(a,o,i+6,b,y)||on(e,a-i-8,o-i-8,a+i+8,o+i+8))continue;let s=1,c=l&&r.file===l;l&&!c&&(s=u.neighbors.has(r.file)?1:.25),!c&&n.dimmed&&(s=Math.min(s,.1)),g.fillStyle=n.color+$(s),g.beginPath(),g.arc(a,o,i,0,Math.PI*2),g.fill(),r.isHub&&(g.strokeStyle=t.hubRing(.55*s),g.lineWidth=.8,g.stroke()),r.issue&&ye(a,o,i,r.issue,s)}if(S.k>1.4){let e=0;if(S.k<9&&!i.showLabels)for(let t of o.nodes){if(!K(t))continue;let[n,r]=G(t.x,t.y);if(!(n<0||n>b||r<0||r>y)&&(e++,e>=50))break}let n=S.k>=9||e<50;if(i.showLabels||n){g.font=`10px ui-monospace, SFMono-Regular, Menlo, Monaco, monospace`,g.fillStyle=t.labelFill,g.textAlign=`left`,g.textBaseline=`middle`;let e=(e,t)=>e>-250&&e<b+250&&t>-250&&t<y+250,n=[];for(let t of o.nodes){if(!K(t))continue;let[r,i]=G(t.x,t.y);if(!e(r,i))continue;let a=q(t);n.push({file:t.file,x0:r-a,x1:r+a,y0:i-a,y1:i+a})}let r=[];for(let t of o.nodes){if(!K(t)||!t.isHub&&S.k<2.4)continue;let[n,i]=G(t.x,t.y);if(!e(n,i))continue;let a=n+q(t)+4,o=i+1,s=g.measureText(t.label).width+2,c=t.file===l,u=t.file===C,d=c?3:u?2:+!!t.isHub;r.push({file:t.file,n:t,tx:a,ty:o,prio:d,x0:a-2,x1:a+s,y0:o-11/2,y1:o+11/2})}let i=pn(r.filter(e=>!n.some(t=>t.file!==e.file&&fn(e,t))));for(let e of i)g.fillText(e.n.label,e.tx,e.ty)}}if(c&&K(c)){let[e,n]=G(c.x,c.y),r=q(c);g.strokeStyle=t.selectRing,g.lineWidth=1.5,g.beginPath(),g.arc(e,n,r+5,0,Math.PI*2),g.stroke()}ge()}function ke(e){if(S.k<.4)return;let t=(S.tx%80+80)%80,n=(S.ty%80+80)%80;g.strokeStyle=e.grid,g.lineWidth=1,g.beginPath();for(let e=t;e<b;e+=80)g.moveTo(e,0),g.lineTo(e,y);for(let e=n;e<y;e+=80)g.moveTo(0,e),g.lineTo(b,e);g.stroke()}function Ae(e,t,n){let r=d(i.focusedPkg),a=e.hubRing(.55),o=new Set;if(C){o.add(C);for(let e of V.adj.get(C)??[]){let t=V.edges[e];o.add(t.a),o.add(t.b)}}let s=e=>(e.isHub?6:4)*i.nodeSize;for(let e of V.edges){let n=V.nodeByFile.get(e.a),a=V.nodeByFile.get(e.b);if(!n||!a||!K(n)||!K(a))continue;let o=e.fromLo&&e.fromHi,c=!o&&e.fromHi,l=c?a:n,u=c?n:a,d=C&&(e.a===C||e.b===C),f=t&&(e.a===t||e.b===t),p=(t||C)&&!d&&!f,m=s(l),h=s(u),[_,v]=G(l.x,l.y),[y,b]=G(u.x,u.y),x=y-_,S=b-v,w=Math.sqrt(x*x+S*S)||1,T=x/w,E=S/w,D=_+T*(m+1.5),O=v+E*(m+1.5),k=y-T*(h+3.5),A=b-E*(h+3.5),j=Math.min(w*.15,30),M=(D+k)/2-E*j,N=(O+A)/2+T*j;g.beginPath(),g.moveTo(D,O),g.quadraticCurveTo(M,N,k,A);let P;P=f?.9:d?.85:p?.05:Math.min(.85,i.edgeOpacity*3),g.strokeStyle=r+$(P),g.lineWidth=f||d?1.5:.85,g.stroke(),!p&&(be(D,O,M,N,k,A,!1),g.fillStyle=r+$(Math.min(1,P+.15)),g.fill(),o&&(be(D,O,M,N,k,A,!0),g.fill()))}for(let e of V.nodes){if(!K(e))continue;let[n,i]=G(e.x,e.y),c=s(e),l=e.file===C,u=e.file===t,d=(t||C)&&!o.has(e.file)&&!u?.15:1;if(g.globalAlpha=d,u||l||e.isHub){let e=c*(u?4:l?3:2.4),t=g.createRadialGradient(n,i,c*.6,n,i,e);t.addColorStop(0,r+$(u?.4:.25)),t.addColorStop(1,r+`00`),g.fillStyle=t,g.beginPath(),g.arc(n,i,e,0,Math.PI*2),g.fill()}g.fillStyle=r,g.beginPath(),g.arc(n,i,c,0,Math.PI*2),g.fill(),e.isHub&&(g.strokeStyle=a,g.lineWidth=.9,g.stroke()),e.issue&&ye(n,i,c,e.issue,d),g.globalAlpha=1}g.font=`600 11px ui-monospace, SFMono-Regular, Menlo, Monaco, monospace`,g.textAlign=`center`,g.textBaseline=`top`,g.lineJoin=`round`;let c=[];for(let e of V.nodes){if(!K(e))continue;let[n,r]=G(e.x,e.y),i=r+s(e)+4,a=g.measureText(e.label).width/2+2,o=e.file===t,l=e.file===C,u=o?3:l?2:+!!e.isHub;c.push({n:e,sx:n,ty:i,halfW:a,isSel:o,isHov:l,prio:u,x0:n-a,x1:n+a,y0:i,y1:i+13})}let l=pn(c);for(let n of l){let{n:r,sx:i,ty:a,isSel:s,isHov:c}=n,l=(t||C)&&!o.has(r.file)&&!s?.2:1;g.globalAlpha=l,g.shadowColor=e.labelShadow,g.shadowBlur=4,g.strokeStyle=e.labelOutline,g.lineWidth=3,g.strokeText(r.label,i,a),g.shadowBlur=0,g.fillStyle=s?e.labelSelected:c?e.labelHover:e.labelDefault,g.fillText(r.label,i,a),g.globalAlpha=1}if(n&&K(n)){let[t,r]=G(n.x,n.y),i=s(n);g.strokeStyle=e.selectRing,g.lineWidth=1.8,g.beginPath(),g.arc(t,r,i+4,0,Math.PI*2),g.stroke()}ge()}function je(e){return Math.min(26,5+Math.sqrt(e.fileCount)*1.7)*i.nodeSize}function Y(e){let t=U(),n=i.solo&&t.byPkg.has(i.solo)?i.solo:null,r=C??n,a=new Set;if(r){a.add(r);for(let e of t.edges)e.a===r?a.add(e.b):e.b===r&&a.add(e.a)}let o=e=>{if(e.pkg===n||e.pkg===C)return 1;let t=1;return r&&!a.has(e.pkg)&&(t=.2),xe(e)&&(t=Math.min(t,.1)),t};for(let e of t.edges){let n=t.byPkg.get(e.a),i=t.byPkg.get(e.b);if(!n||!i||!K(n)||!K(i))continue;let a=e.fromLo&&e.fromHi,o=!a&&e.fromHi,s=o?i:n,c=o?n:i,l=r!==null&&(e.a===r||e.b===r),u=xe(n)&&xe(i),f=r!==null&&!l||u,p=je(s),m=je(c),[h,_]=G(s.x,s.y),[v,y]=G(c.x,c.y),b=v-h,x=y-_,S=Math.sqrt(b*b+x*x)||1,C=b/S,w=x/S,T=h+C*(p+1.5),E=_+w*(p+1.5),D=v-C*(m+3.5),O=y-w*(m+3.5),k=Math.min(S*.15,30),A=(T+D)/2-w*k,j=(E+O)/2+C*k,M;M=u?.05:l?.9:f?.06:.5;let N=g.createLinearGradient(T,E,D,O);N.addColorStop(0,d(s.pkg)+$(M)),N.addColorStop(1,d(c.pkg)+$(M)),g.beginPath(),g.moveTo(T,E),g.quadraticCurveTo(A,j,D,O),g.strokeStyle=N,g.lineWidth=Math.min(3.5,.8+Math.sqrt(e.count)*.3)*(l?1.3:1),g.stroke(),!f&&(be(T,E,A,j,D,O,!1),g.fillStyle=d(c.pkg)+$(Math.min(1,M+.15)),g.fill(),a&&(be(T,E,A,j,D,O,!0),g.fillStyle=d(s.pkg)+$(Math.min(1,M+.15)),g.fill()))}for(let e of t.nodes){if(!K(e))continue;let[t,r]=G(e.x,e.y),i=je(e),a=e.pkg===C,s=e.pkg===n,c=d(e.pkg),l=o(e);if(s||a){let e=i*(s?2.6:2.2),n=g.createRadialGradient(t,r,i*.6,t,r,e);n.addColorStop(0,c+$(s?.4:.25)),n.addColorStop(1,c+`00`),g.fillStyle=n,g.beginPath(),g.arc(t,r,e,0,Math.PI*2),g.fill()}g.fillStyle=c+$(l),g.beginPath(),g.arc(t,r,i,0,Math.PI*2),g.fill(),e.issue&&ye(t,r,i,e.issue,l)}g.font=`600 11px ui-monospace, SFMono-Regular, Menlo, Monaco, monospace`,g.textAlign=`center`,g.textBaseline=`top`,g.lineJoin=`round`;let s=[];for(let e of t.nodes){if(!K(e))continue;let[t,r]=G(e.x,e.y),i=r+je(e)+4,a=g.measureText(e.label).width/2+2,o=e.pkg===n,c=e.pkg===C,l=o?1/0:c?1e9:e.fileCount;s.push({p:e,sx:t,ty:i,isSel:o,isHov:c,prio:l,x0:t-a,x1:t+a,y0:i,y1:i+13})}let c=pn(s);for(let t of c){let{p:n,sx:r,ty:i,isSel:a,isHov:s}=t;g.globalAlpha=Math.max(.25,o(n)),g.shadowColor=e.labelShadow,g.shadowBlur=4,g.strokeStyle=e.labelOutline,g.lineWidth=3,g.strokeText(n.label,r,i),g.shadowBlur=0,g.fillStyle=a?e.labelSelected:s?e.labelHover:e.labelDefault,g.fillText(n.label,r,i),g.globalAlpha=1}if(n){let r=t.byPkg.get(n),[i,a]=G(r.x,r.y);g.strokeStyle=e.selectRing,g.lineWidth=1.8,g.beginPath(),g.arc(i,a,je(r)+4,0,Math.PI*2),g.stroke()}ge()}function Me(e,t){if(F()){let[n,r]=_e(e,t),i=null,a=1/0;for(let[e,t]of B.nodes){let o=(t.x-n)**2+(t.y-r)**2;o<a&&o<(14/Math.max(S.k,.1))**2&&(a=o,i=W().nodeByFile.get(e))}return i}if(P()){let[n,r]=_e(e,t);for(let e of R.rects.values())if(e.width>0&&n>=e.x&&n<e.x+e.width&&r>=e.y&&r<=e.y+e.height)return U().byPkg.get(e.id);return null}let n=L(),r=n?U():V,a=n&&r.nodes.length<=50;if(r.nodes.length>50){j??=rn(r.nodes);let n=4.9*i.nodeSize*Math.max(.6,Math.min(1.6,S.k));return j(e,t,S,n,q,K)}let o=null,s=1/0;for(let n of r.nodes){if(!K(n))continue;let[r,i]=G(n.x,n.y),c=r-e,l=i-t,u=c*c+l*l,d=(a?je(n):q(n))+6;u<d*d&&u<s&&(s=u,o=n)}return o}function Ne(e,t,n){if(!l)return;let r=d(e.pkg),i=z(e.pkg),a=ie(e.file,e.pkg);O(D`<div class="g2-tt-path">${a}</div><div class="g2-tt-head"><span class="g2-tt-dot" style="${v({background:r})}"></span> <span class="g2-tt-pkg">${i}</span></div>${e.totalIssues>0?ve(e.own):null}`,l),Fe(t,n)}function Pe(e,r,i){if(!l)return;let a=d(e.pkg),o=n(e.size),s=t.packagesOnly?re(t,e.pkg):[],c=t.packagesOnly?s.length>1?`${s.length} versions`:s[0]??``:`${e.fileCount} ${e.fileCount===1?`file`:`files`}${o?` \xB7 ${o}`:``}`;O(D`<div class="g2-tt-path">${P()?ce(e.pkg):e.label}</div>${F()||t.packagesOnly?D`<div class="g2-tt-pkg">${W().importedBy.get(e.pkg)?.length??0} ${ne(t).importers} · ${W().importsOf.get(e.pkg)?.length??0} dependencies</div>`:null} ${P()?D`<div class="g2-tt-pkg">${R.depth.has(e.pkg)?`Level ${R.depth.get(e.pkg)} \xB7 shortest import distance from App`:`No known import path from App`}</div>`:null}<div class="g2-tt-head"><span class="g2-tt-dot" style="${v({background:a})}"></span> <span class="g2-tt-pkg">${c}</span></div>${e.totalIssues>0?ve(e.own):null}`,l),Fe(r,i)}function Fe(e,t){let n=u.getBoundingClientRect();l.classList.add(`show`);let r=l.offsetWidth,i=l.offsetHeight,a=e-n.left,o=t-n.top,s=n.width,c=n.height,d=a+12;d+r>s-4&&(d=a-r-12),d<4&&(d=4);let f=o+12;f+i>c-4&&(f=o-i-12),f<4&&(f=4),l.style.left=`${d}px`,l.style.top=`${f}px`}function Ie(){l&&l.classList.remove(`show`)}let X=!1,Le=null,Re=!1,ze=e=>{e.button===0&&(e.target.closest(`.g2-stage-overlay, .g2-stage-overlay-tr, .g2-zoom-ctrl`)||(X=!0,Re=!1,Le={x:e.clientX,y:e.clientY,tx:S.tx,ty:S.ty}))},Be=e=>{let t=u.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;if(X){let t=e.clientX-Le.x,n=e.clientY-Le.y;Math.abs(t)+Math.abs(n)>3&&(Re=!0),S.tx=Le.tx+t,S.ty=Le.ty+n,Ie(),J();return}let i=Me(n,r),a=C;C=i?.file??null,c.style.cursor=`default`,i?L()||I()?Pe(i,e.clientX,e.clientY):Ne(i,e.clientX,e.clientY):a&&Ie(),C!==a&&J()},Ve=e=>{if(X&&!Re){let t=u.getBoundingClientRect(),n=Me(e.clientX-t.left,e.clientY-t.top);L()||I()?(i.solo=n&&i.solo!==n.pkg?n.pkg:null,i.selected=null,r(),o?.()):(i.selected=n?.file??null,r()),J()}X=!1},He=()=>{let e=C!==null;C=null,Ie(),e&&J()},Ue=e=>{e.preventDefault();let t=u.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=Math.exp(-e.deltaY*.0015),a=me();if(i<1&&S.k<=a.k*1.0001){S.k=a.k;let e=Math.min(.4,(1-i)*3);S.tx+=(a.tx-S.tx)*e,S.ty+=(a.ty-S.ty)*e,J();return}let[o,s]=_e(n,r),c=gt(S.k,a.k,F()),l=Math.max(c.min,Math.min(c.max,S.k*i));S.k=l,S.tx=n-o*S.k,S.ty=r-s*S.k,J()};u.addEventListener(`mousedown`,ze),window.addEventListener(`mousemove`,Be),window.addEventListener(`mouseup`,Ve),u.addEventListener(`mouseleave`,He),u.addEventListener(`wheel`,Ue,{passive:!1});function We(e){let t=gt(S.k,me().k,F());e=Math.max(t.min,Math.min(t.max,e));let n=b/2,r=y/2,[i,a]=_e(n,r);S.k=e,S.tx=n-i*S.k,S.ty=r-a*S.k,J()}let Ge=s.querySelector(`#g2-zoom-in`),Ke=s.querySelector(`#g2-zoom-out`),qe=s.querySelector(`#g2-zoom-fit`);Ge?.addEventListener(`click`,()=>We(S.k*1.4)),Ke?.addEventListener(`click`,()=>We(S.k/1.4)),qe?.addEventListener(`click`,()=>{he(),J()}),Se();let Je=new ResizeObserver(()=>Se());Je.observe(u);let Ye=new MutationObserver(e=>{for(let t of e){if((t.oldValue||``).includes(`report-fullscreen`)!==document.body.classList.contains(`report-fullscreen`)){T=0,w=0,E=!0,k=!0,i.layoutCache=null,setTimeout(()=>Se(),80);return}J()}});Ye.observe(document.body,{attributes:!0,attributeFilter:[`class`],attributeOldValue:!0}),J(),i.graphState={requestDraw:J,_cleanup:({keepViewport:e=!1}={})=>{let t=u.getBoundingClientRect();i.keptViewport=e&&t.width>0&&t.height>0?{key:m,k:S.k,tx:S.tx,ty:S.ty,W:b,H:y,layoutW:T,layoutH:w}:null,Ee=!0,cancelAnimationFrame(Ce),Je.disconnect(),Ye.disconnect(),u.removeEventListener(`mousedown`,ze),window.removeEventListener(`mousemove`,Be),window.removeEventListener(`mouseup`,Ve),u.removeEventListener(`mouseleave`,He),u.removeEventListener(`wheel`,Ue)}}}function gn(e,t,n=document.querySelector(`graph-layout`)){let r=n?.shadowRoot;if(!r)return;let i=vn(e),a=r.querySelector(`#g2-selection-area`);a&&O(q(i,t),a);let o=r.querySelector(`#g2-focus-overlay-slot`);o&&O(ye(i),o)}function _n(e,t=document.querySelector(`graph-layout`)){let n=t?.shadowRoot;if(!n)return;let r=n.querySelector(`#g2-top-pkgs-block`);r&&O(xe(vn(e)),r)}function vn(e){let t=L(e.treeData,e.files,e.ownCounts,e.transitiveCounts,e.severitySets,e.colorSets,e.fileFindings,e.options);if(e.strippedToOrig)for(let n of t.nodes)n.origFile=e.strippedToOrig.get(n.file);return t.canPackagesView=e.canPackagesView??!1,t.packagesOnly=e.packagesOnly??!1,t.supportsLayers=e.supportsLayers??!1,t.layerRoots=e.layerRoots,t.flowEntries=e.flowEntries,t.ownSourcePackages=e.ownSourcePackages,t.entryPackages=e.entryPackages,t.ownSourceFiles=e.ownSourceFiles,t.reasons=e.reasons??[],t.issuesHidden=e.issuesShown===!1,t.viewId=e.viewId??null,t}export{hn as attachGraph2Interaction,vn as buildGraphFromPrep,gn as refreshSidebar,_n as refreshTopPkgs};
13
+ `+[...n.values()].toSorted((e,t)=>t.size-e.size||e.version.localeCompare(t.version)).map(e=>`${e.version} \xB7 ${a(e.size)}${e.missing?`+`:``} \xB7 ${e.count} ${e.count===1?`copy`:`copies`}`).join(`
14
+ `)}function gt(e,t,n=`size`){let r=Je(e,t)?`
15
+ Kept by Large to preserve an entry-point path`:``;return n===`count`?`${e.label}
16
+ ${mt(e.removable)} unique \xB7 ${e.size} reachable${ht(e,n)}${r}`:`${e.label}
17
+ ${a(e.removable)} unique \xB7 ${a(e.size)} reachable \xB7 ${a(e.own)} own${e.removableMissing?` \xB7 ${e.removableMissing} removed file sizes unknown`:``}${ht(e,n)}${r}`}function _t(e,t){let n=t.metric===`count`?mt(e.size):a(e.size);return`${t.byId.get(e.from).label} \u2192 ${t.byId.get(e.to).label}
18
+ ${n} reachable${e.returning?` · return / cycle edge`:``}`}var vt=e=>Math.min(.5/e,13);function yt(e,t){let n=e.width/2;if(e.rowStart===e.rowEnd){let e=Math.min(t,n/2);return{left:e,right:e}}let r=Math.min(t,n),i=Math.min(t,n-r);return e.rowStart?{left:r,right:i}:{left:i,right:r}}var bt=e=>e===`count`?`Dependency paths. Use arrow keys to explore bars, Enter to select, or the sidebar search to find a package.`:`Import paths. Use arrow keys to explore bars, Enter to select, or the sidebar search to find a file or package.`,xt=1500,St=class{constructor(e){this.host=e}render(){return O`<canvas class="flow-canvas flow-base" aria-hidden="true"></canvas><canvas class="flow-canvas flow-bars" aria-hidden="true"></canvas><canvas class="flow-canvas flow-overlay" tabindex="0" role="group" aria-label="${bt(this.host.metric)}" @pointermove="${e=>this.pointer(e)}" @pointerleave="${()=>this.clearHover()}" @click="${e=>this.click(e)}" @dblclick="${e=>this.click(e,!0)}" @keydown="${e=>this.key(e)}"></canvas>`}prepare(){this.layout=this.host.layout,this.model=this.host.model,this.paths=this.layout.edges.map((e,t)=>({edge:e,order:t,path:new Path2D(st(e)),...ct(e)})),this.pathById=new Map(this.paths.map(e=>[e.edge.id,e])),this.rows=[...Map.groupBy(this.layout.nodes,e=>e.y).values()];let e=this.layout.nodes.map((e,t)=>({node:e,order:this.paths.length+t,left:e.x,right:e.x+e.width,top:e.y,bottom:e.y+26}));this.index=lt([...this.paths,...e]),this.clearHover(),this.focused=null,this.invalidateRaster()}matchingNodes(){let e=this.host.model,t=JSON.stringify([this.host.minSize,this.host.graph.issuesHidden,s.pathFilter,[...s.selectedSeverities].toSorted(),[...s.selectedColors].toSorted()]);return(this.matchModel!==e||this.filterKey!==t)&&(this.matches=new Set([...e.byId.values()].filter(e=>this.host.matchesNode(e)).map(e=>e.id)),this.matchModel=e,this.filterKey=t,this.searchResult=null),this.matches}searchMatches(){let e=this.matchingNodes();return this.searchResult??=[...e].map(e=>this.host.model.byId.get(e)).toSorted((e,t)=>t.removable-e.removable)}update(e){if(this.base=e.querySelector(`.flow-base`),this.bars=e.querySelector(`.flow-bars`),this.overlay=e.querySelector(`.flow-overlay`),!this.base||!this.bars||!this.overlay)return;this.layout!==this.host.layout&&this.prepare();let t=Le(),n=this.matchingNodes(),r=m(`__own__`);(n!==this.paintedMatches||r!==this.palette||t!==this.background)&&(this.paintedMatches=n,this.palette=r,this.background=t,this.colors=new Map([...this.model.byId.values()].map(e=>[e.pkg,m(e.pkg)])),this.foreground=getComputedStyle(this.host).getPropertyValue(`--text`).trim()||`#fff`,this.invalidateRaster()),this.requestDraw()}requestDraw(){this.frame!=null||!this.overlay||(this.frame=requestAnimationFrame(()=>{this.frame=null,this.draw()}))}dispose(){this.clearHover(),this.frame!=null&&cancelAnimationFrame(this.frame),this.frame=null,this.base=null,this.bars=null,this.overlay=null,this.invalidateRaster()}stopPreview(){clearTimeout(this.previewTimer),this.settleFrame!=null&&cancelAnimationFrame(this.settleFrame),this.settleFrame=null,this.previewTimer=null,this.preview=!1}invalidateRaster(){this.stopPreview(),this.baseKey=null,this.barsKey=null,this.overview=null,this.paintedViewport=null}viewportChanged(){let{width:e,height:t,zoom:n,pan:r}=this.host,i=`${e}:${t}:${n}:${r.x}:${r.y}`;if(i===this.viewportKey){this.preview&&this.host.fitted&&(this.stopPreview(),this.requestDraw());return}this.viewportKey=i,this.stopPreview();let a=this.paintedViewport;this.host.fitted===!1&&this.overview&&a?.width===e&&a.height===t&&a.dpr===(globalThis.devicePixelRatio||1)&&(this.preview=!0,this.previewTimer=setTimeout(()=>{this.previewTimer=null,this.settleFrame=requestAnimationFrame(()=>{this.settleFrame=requestAnimationFrame(()=>{this.stopPreview(),this.requestDraw()})})},100)),this.clearHover(),this.requestDraw()}context(e,t,n=!0){let r=Math.ceil(this.host.height*t),i=Math.ceil(this.host.width*t);(e.width!==i||e.height!==r)&&(e.width=i,e.height=r);let a=e.getContext(`2d`);a.setTransform(1,0,0,1,0,0),n&&a.clearRect(0,0,i,r);let{pan:o,zoom:s}=this.host;return a.setTransform(t*s,0,0,t*s,t*o.x,t*o.y),a}draw(){if(!this.overlay||!this.host.width||!this.host.height)return;let{pan:e,zoom:t,width:n,height:r}=this.host,i=globalThis.devicePixelRatio||1,a=`${this.viewportKey}:${i}`;this.view={left:-e.x/t,right:(n-e.x)/t,top:-e.y/t,bottom:(r-e.y)/t};let o=this.preview?dt(this.index,this.view,xt):null;if(o&&this.stopPreview(),this.preview){this.drawPreview(i),this.drawBars(i,a,!0);let e=this.context(this.overlay,i),n=this.layout.byId.get(this.host.selection?.node);n&&(e.globalAlpha=1,e.strokeStyle=this.foreground,e.lineWidth=Math.min(1.5/t,n.width/2),e.strokeRect(n.x,n.y,n.width,26)),this.previewVisible=!0;return}let s=this.baseKey!==a;if(s){let s=this.context(this.base,i);s.globalAlpha=1,s.fillStyle=this.background,s.fillRect(this.view.left,this.view.top,n/t,r/t),this.visiblePaths=o??this.paths.filter(e=>!Q(e,this.view));for(let e of this.visiblePaths)this.paintPath(s,e,this.edgeAlpha(e.edge));if(this.baseKey=a,this.paintedViewport={width:n,height:r,zoom:t,pan:{...e},dpr:i},this.view.left<=0&&this.view.top<=0&&this.view.right>=this.layout.width-1e-6&&this.view.bottom>=this.layout.height-1e-6){let e=this.overview?.canvas??document.createElement(`canvas`);e.width=this.base.width,e.height=this.base.height,e.getContext(`2d`).drawImage(this.base,0,0),this.overview={...this.paintedViewport,canvas:e}}}this.drawBars(i,a),this.drawHighlight(i,s||this.previewVisible),this.previewVisible=!1}drawPreview(e){let{width:t,height:n,pan:r,zoom:i}=this.host,a=this.context(this.bars,e,!1);a.setTransform(e,0,0,e,0,0),a.globalAlpha=1,a.imageSmoothingEnabled=!1;let o={...this.paintedViewport,canvas:this.base},s=i/o.zoom,c=r.x-o.pan.x*s,l=r.y-o.pan.y*s,u=c<=0&&l<=0&&c+o.width*s>=t&&l+o.height*s>=n;u||(a.fillStyle=this.background,a.fillRect(0,0,t,n));for(let e of u?[o]:[this.overview,o]){let o=i/e.zoom,s=r.x-e.pan.x*o,c=r.y-e.pan.y*o,l=Math.max(0,s),u=Math.max(0,c),d=Math.min(n,c+e.height*o),f=Math.min(t,s+e.width*o);if(f<=l||d<=u)continue;let p=e.dpr/o;a.drawImage(e.canvas,(l-s)*p,(u-c)*p,(f-l)*p,(d-u)*p,l,u,f-l,d-u)}}drawBars(e,t,n=!1){if(!n&&this.barsKey===t&&!this.previewVisible)return;this.barsKey!==t&&(this.visibleNodes=this.layout.nodes.filter(e=>!Q({left:e.x,right:e.x+e.width,top:e.y,bottom:e.y+26},this.view)));let r=this.context(this.bars,e,!n);for(let e of this.visibleNodes)this.paintNode(r,e);this.paintRowBorders(r),this.barsKey=t}paintRowBorders(e){let t=vt(this.host.zoom);e.globalAlpha=1,e.fillStyle=this.background;for(let n of this.rows){let r=n[0],i=n.at(-1),a=i.x+i.width;if(Q({left:r.x,right:a,top:r.y,bottom:r.y+26},this.view))continue;e.fillRect(r.x,r.y,a-r.x,t),e.fillRect(r.x,r.y+26-t,a-r.x,t),e.fillRect(r.x,r.y,yt(r,t).left,26);let o=yt(i,t).right;e.fillRect(a-o,r.y,o,26)}}edgeAlpha(e){return!this.matches.has(e.from)&&!this.matches.has(e.to)?.04:.22}paintPath(e,t,n){e.globalAlpha=n,e.fillStyle=this.colors.get(this.model.byId.get(t.edge.to).pkg),e.fill(t.path),t.edge.returning&&(e.strokeStyle=this.foreground,e.lineWidth=.7/this.host.zoom,e.setLineDash([3,3]),e.stroke(t.path),e.setLineDash([]))}paintNode(e,t){if(Q({left:t.x,right:t.x+t.width,top:t.y,bottom:t.y+26},this.view))return;let{zoom:n}=this.host,r=this.colors.get(t.pkg);e.globalAlpha=this.matches.has(t.id)?1:.15,e.fillStyle=r,e.fillRect(t.x,t.y,t.width,26);let{left:i,right:a}=yt(t,vt(n));e.fillStyle=this.background,!t.rowStart&&i>0&&e.fillRect(t.x,t.y,i,26),!t.rowEnd&&a>0&&e.fillRect(t.x+t.width-a,t.y,a,26),t.width>=40&&t.width*n>=24&&14*n>=6&&(e.save(),e.beginPath(),e.rect(t.x+5,t.y,Math.max(0,t.width-10),26),e.clip(),e.font=`14px -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif`,e.fillStyle=Re(r),e.fillText(`${t.label.replace(/^node_modules\//u,``)} \xB7 ${pt(this.model.metric,t.removable)}`,t.x+5,t.y+18),e.restore())}drawHighlight(e,t){let n=this.host.selection,r=new Set([n?.edge,this.host.hover]);for(let e of[n?.node,this.focused]){let t=this.model.byId.get(e);if(t)for(let e of[...t.incoming,...t.outgoing])r.add(e.id)}let i=[];for(let e of r){let t=this.pathById.get(e);if(!t||Q(t,this.view)||this.edgeAlpha(t.edge)===.04)continue;let r=e===n?.edge||e===this.host.hover?.8:.6;i.push({entry:t,alpha:(r-.22)/.78})}let a=[...new Set([n?.node,this.focused])].map(e=>this.layout.byId.get(e)).filter(Boolean),o=i.map(({entry:e})=>e).concat(a.map(e=>({left:e.x,right:e.x+e.width,top:e.y,bottom:e.y+26}))),s=e=>e.reduce((e,t)=>({left:Math.min(e.left,t.left),right:Math.max(e.right,t.right),top:Math.min(e.top,t.top),bottom:Math.max(e.bottom,t.bottom)}),{left:1/0,right:-1/0,top:1/0,bottom:-1/0}),c=s(o),l=t?this.view:s([c,this.highlightBounds??c]);this.highlightBounds=c;let u=this.context(this.overlay,e,t),d=2/this.host.zoom,f=Math.max(this.view.left,l.left-d),p=Math.max(this.view.top,l.top-d),m=Math.min(this.view.bottom,l.bottom+d)-p,h=Math.min(this.view.right,l.right+d)-f;if(h>0&&m>0){t||u.clearRect(f,p,h,m),u.save(),u.beginPath(),u.rect(f,p,h,m),u.clip();for(let{entry:e,alpha:t}of i)this.paintPath(u,e,t);if(i.length>0){u.save(),u.beginPath();let e={left:f,right:f+h,top:p,bottom:p+m};for(let t of this.visibleNodes)Q({left:t.x,right:t.x+t.width,top:t.y,bottom:t.y+26},e)||u.rect(t.x,t.y,t.width,26);u.clip(),u.clearRect(f,p,h,m),u.restore()}u.globalAlpha=1,u.strokeStyle=this.foreground;for(let e of a)u.lineWidth=Math.min(1.5/this.host.zoom,e.width/2),u.strokeRect(e.x,e.y,e.width,26);u.restore()}}hit(e){if(!this.overlay||!this.index)return null;let t=this.overlay.getBoundingClientRect(),{pan:n,zoom:r}=this.host,i=(e.clientX-t.left-n.x)/r,a=(e.clientY-t.top-n.y)/r,o=this.overlay.getContext(`2d`);o.save(),o.setTransform(1,0,0,1,0,0);let s=ut(this.index,i,a).find(e=>e.node||o.isPointInPath(e.path,i,a));return o.restore(),s??null}pointer(e){if(this.host.drag)return;let t=this.hit(e),n=t?.node?.id??t?.edge.id??null;n!==this.hoverId&&(this.clearHover(),this.hoverId=n,this.focused=t?.node?.id??null,this.host.hover=t?.edge?.id??null,t&&(this.overlay.dataset.tooltip=t.node?gt(t.node,this.host.minSize,this.model.metric):_t(t.edge,this.model),this.overlay.setAttribute(`aria-label`,this.overlay.dataset.tooltip),this.overlay.style.cursor=`default`),this.requestDraw()),t&&u(this.overlay,{gate:()=>!this.host.drag&&this.hoverId===n})}clearHover(){l(this.host.renderRoot),this.hoverId=null,this.focused=null,this.host.hover=null,this.overlay&&(delete this.overlay.dataset.tooltip,this.overlay.style.cursor=`default`,this.overlay.setAttribute(`aria-label`,bt(this.host.metric))),this.requestDraw()}setHover(e){e==null?this.clearHover():(this.host.hover=e,this.requestDraw())}click(e,t=!1){if(e.defaultPrevented)return;let n=this.hit(e);if(t){n?.node&&this.host.follow(n.node.id);return}this.host.select(n?.node?.id??n?.edge.to??null,n?.edge?.id??null)}key(e){let t=this.layout.nodes;if(t.length===0)return;let n=t.findIndex(e=>e.id===(this.focused??this.host.selection?.node));if([`ArrowRight`,`ArrowDown`].includes(e.key))n=Math.min(t.length-1,n+1);else if([`ArrowLeft`,`ArrowUp`].includes(e.key))n=Math.max(0,n-1);else if(e.key===`Home`)n=0;else if(e.key===`End`)n=t.length-1;else if(e.key===`Enter`||e.key===` `){e.preventDefault(),this.host.select(t[Math.max(0,n)].id);return}else if(e.key===`Escape`){this.clearHover(),this.host.select(null);return}else return;e.preventDefault();let r=t[n],{pan:i,zoom:a,width:o,height:s}=this.host;(r.x*a+i.x<0||(r.x+r.width)*a+i.x>o||r.y*a+i.y<0||(r.y+26)*a+i.y>s)&&(this.host.pan={x:o/2-(r.x+r.width/2)*a,y:s/2-(r.y+13)*a},this.host.fitted=!1,this.host.drawViewport()),this.focused=r.id,this.overlay.setAttribute(`aria-label`,gt(r,this.host.minSize,this.model.metric)),this.requestDraw()}};function Ct(e,t,n=!1){let r=n?t:1;return{min:t,max:r*9.99,percent:Math.round(e/r*100)}}var wt=`:host{display:contents}*{box-sizing:border-box}button{font:inherit;color:var(--text);border:1px solid var(--border);background:var(--surface);border-radius:var(--ui-radius, 4px);padding:4px 7px;cursor:default}button:hover{background:var(--graph-hover-bg)}button:disabled{opacity:.4;cursor:default}button:focus-visible{outline:2px solid var(--accent)}.flow-stage{grid-area:stage;position:relative;min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--flow-background)}.flow-viewport{flex:1;position:relative;overflow:hidden;min-height:0;touch-action:none;cursor:default;user-select:none;-webkit-user-select:none}.flow-count{position:absolute;bottom:12px;right:50px;padding:6px 8px;color:var(--muted);font-size:11px;z-index:3;pointer-events:none}.flow-canvas{display:block;position:absolute;inset:0;width:100%;height:100%}.flow-base,.flow-bars{pointer-events:none}.flow-overlay:focus-visible{outline:1px solid var(--accent);outline-offset:-1px}.flow-panel{grid-area:right;overflow:auto;min-height:0;padding:14px;border-left:1px solid var(--border);background:var(--surface)}.flow-panel h3{font-size:13px;margin:0;overflow-wrap:anywhere}.flow-panel h4{margin:20px 0 8px;color:var(--muted);font-size:11px}.flow-panel p{color:var(--muted);font-size:12px;line-height:1.6}.flow-panel-heading{display:flex;align-items:start;gap:10px;justify-content:space-between}.flow-metrics{display:grid;gap:5px;margin:18px 0}.flow-metrics b{font-size:20px;font-weight:500}.flow-metrics span{color:var(--muted);font-size:11px;margin-bottom:8px}.flow-versions{list-style:none;padding:0;margin:0 0 18px;font-size:12px}.flow-versions-details{margin:18px 0}.flow-versions-details summary{color:var(--muted);font-size:11px;cursor:default}.flow-versions li+li{margin-top:10px}.flow-versions li>div{display:flex;justify-content:space-between;gap:8px}.flow-versions small{display:block;color:var(--muted);overflow-wrap:anywhere;margin-top:3px}.flow-direction{overflow-wrap:anywhere}.flow-actions{display:flex;gap:6px;flex-wrap:wrap}.flow-link{grid-template-columns:8px minmax(0,1fr) auto}
19
+ `,Tt=10,Et=e=>Math.max(1,e-2*Tt);function Dt(e,t,n){return O`<button class="g2-dist-item flow-link" data-tooltip="${e.label}" @click="${n}"><span class="g2-dist-dot" style="${v({background:m(e.pkg)})}"></span> <span class="g2-dist-name">${e.label}</span><span class="g2-dist-count">${t}</span></button>`}var Ot=class extends A{static properties={graph:{attribute:!1},packages:{type:Boolean},metric:{type:String}};static styles=[D(M),D(wt),D(N),D(e)];constructor(){super(),this.packages=!1,this.metric=`size`,this.zoom=1,this.pan={x:0,y:0},this.width=0,this.height=0,this.needsFit=!0,this.fitted=!0,this.largeOnly=!0,this.largeSuppressed=!1,this.largeThreshold=0,this.models=new Map,this.chart=new St(this),this.focus=null,this.selection=null,this.hover=null,this.bridge={requestDraw:()=>this.requestUpdate(),_cleanup:()=>{}}}willUpdate(e){if(!this.graph)return;let t=!1;if(e.has(`graph`)&&this.models.clear(),(e.has(`packages`)||e.has(`metric`))&&(this.needsFit=!0),!this.model||e.has(`graph`)||e.has(`packages`)||e.has(`metric`)){let e=`${this.metric}:${this.packages}`;this.models.has(e)||this.models.set(e,$e(this.graph,{packages:this.packages,metric:this.metric})),this.model=this.models.get(e),this.largeThreshold=Ye(this.model),t=!0,this.model.byId.has(this.focus)||(this.focus=null),this.selection&&!this.model.byId.has(this.selection.node)&&(this.selection=null),this.hover=null}(t||this.layoutFocus!==this.focus)&&(this.largeSuppressed=this.isSmallFocus()),this.focus&&qe(this.model.byId.get(this.focus))<this.minSize&&(this.focus=null),(t||this.layoutFocus!==this.focus||this.layoutMinSize!==this.minSize)&&(this.renderRoot&&l(this.renderRoot),this.layout=ot(at(this.model,{focus:this.focus,minSize:this.minSize}),Et(this.width),this.height),this.layoutFocus=this.focus,this.layoutMinSize=this.minSize,this.selection&&!this.layout.byId.has(this.selection.node)&&(this.selection=null))}get minSize(){return this.largeOnly&&!this.largeSuppressed?this.largeThreshold:0}toggleLarge(){this.largeOnly=!this.largeOnly,this.needsFit=!0,this.requestUpdate()}get counts(){return this.model?.metric===`count`}amount(e){return pt(this.model.metric,e)}renderControls(){let e=this.counts?`${this.largeThreshold}+ packages`:`${this.largeThreshold/1024}+ KiB`;return this.largeThreshold&&!this.largeSuppressed?O`<mode-switch label="${`Large \xB7 ${e}`}" .checked="${this.largeOnly}" @click="${()=>this.toggleLarge()}"></mode-switch>`:null}updated(){s.graphState=this.bridge;let e=`${this.model?.metric}:${this.largeThreshold}:${this.largeOnly}:${this.largeSuppressed}`;e!==this.controlsKey&&(this.controlsKey=e,this.dispatchEvent(new CustomEvent(`flow-controls-change`,{detail:this.renderControls(),bubbles:!0,composed:!0}))),this.connectViewport(),this.syncViewport(),this.chart.update(this.renderRoot)}connectViewport(){let e=this.renderRoot.querySelector(`.flow-viewport`);if(!e||this.events)return;d(this.renderRoot,{gate:()=>!this.drag}),this.events=new AbortController;let{signal:t}=this.events;e.addEventListener(`wheel`,e=>this.wheel(e),{passive:!1,signal:t}),e.addEventListener(`pointerdown`,e=>this.startPan(e),{signal:t}),window.addEventListener(`pointermove`,e=>this.movePan(e),{signal:t}),window.addEventListener(`pointerup`,e=>this.endPan(e),{signal:t}),window.addEventListener(`pointercancel`,e=>this.endPan(e),{signal:t}),window.addEventListener(`deepview-theme-changed`,()=>this.requestUpdate(),{signal:t}),e.addEventListener(`click`,e=>{let t=this.suppressClick&&e.detail>0;if(this.suppressClick=!1,t){e.preventDefault(),e.stopPropagation();return}e.target.closest?.(`.flow-canvas`)||this.select(null)},{capture:!0,signal:t}),this.resizeObserver=new ResizeObserver(()=>this.syncViewport()),this.resizeObserver.observe(e)}disconnectedCallback(){super.disconnectedCallback(),l(this.renderRoot),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.events?.abort(),this.events=null,this.chart.dispose(),this.viewportElements=null,this.drag=null,s.graphState===this.bridge&&(s.graphState=null)}select(e,t=null){if(!e&&this.focus){this.follow(null);return}this.selection=e?{node:e,edge:t}:null,this.requestUpdate()}follow(e){this.focus=e,this.selection=e?{node:e,edge:null}:null,this.needsFit=!0,this.requestUpdate()}isSmallFocus(){if(!this.focus)return!1;let e=[this.focus],t=new Set(e);for(let n of e){if(t.size>=200)break;for(let{to:r}of this.model.byId.get(n).outgoing)if(t.has(r)||(t.add(r),e.push(r)),t.size>=200)break}return t.size<200}fitScale(){return this.layout&&this.width>0&&this.height>0?Math.min(Et(this.width)/this.layout.width,this.height/this.layout.height,9.99):1}zoomMetrics(){return Ct(this.zoom,Math.min(this.fitScale(),1))}align(){this.pan={x:Tt,y:(this.height-this.layout.height*this.zoom)/2}}syncViewport(){let e=this.renderRoot.querySelector(`.flow-viewport`)?.getBoundingClientRect();if(!this.layout||!e||e.width<=0||e.height<=0)return;let t=ot(this.layout,Et(e.width),e.height);if(this.width>0&&this.height>0&&(this.pan.x=e.width/2-(this.width/2-this.pan.x)*t.width/this.layout.width,this.pan.y+=(e.height-this.height)/2),t!==this.layout&&(l(this.renderRoot),this.layout=t,this.requestUpdate()),this.width=e.width,this.height=e.height,this.needsFit||this.fitted){this.fit();return}let{min:n,max:r}=this.zoomMetrics(),i=Math.max(n,Math.min(r,this.zoom));i!==this.zoom&&(this.zoom=i,this.align()),this.drawViewport()}fit(){let e=this.renderRoot.querySelector(`.flow-viewport`)?.getBoundingClientRect();if(!this.layout||!e||e.width<=0||e.height<=0)return;let t=ot(this.layout,Et(e.width),e.height);t!==this.layout&&(l(this.renderRoot),this.layout=t,this.requestUpdate()),this.width=e.width,this.height=e.height,this.zoom=this.fitScale(),this.needsFit=!1,this.fitted=!0,this.align(),this.drawViewport()}zoomBy(e,t=this.width/2,n=this.height/2){let{min:r,max:i}=this.zoomMetrics(),a=Math.max(r,Math.min(i,this.zoom*e)),o=a/this.zoom;a!==this.zoom&&(this.fitted=!1),this.pan.x=t-(t-this.pan.x)*o,this.pan.y=n-(n-this.pan.y)*o,this.zoom=a,this.drawViewport()}wheel(e){e.preventDefault();let t=this.renderRoot.querySelector(`.flow-viewport`).getBoundingClientRect(),n=Math.exp(-e.deltaY*.0015),{min:r}=this.zoomMetrics();if(n<1&&this.zoom<=r*1.0001){this.zoom=r;let e=Math.min(.4,(1-n)*3);this.pan.x+=(Tt-this.pan.x)*e,this.pan.y+=((this.height-this.layout.height*r)/2-this.pan.y)*e,this.drawViewport()}else this.zoomBy(n,e.clientX-t.left,e.clientY-t.top)}startPan(e){e.button===0&&(this.suppressClick=!1,this.drag={id:e.pointerId,x:e.clientX,y:e.clientY,pan:{...this.pan},moved:!1})}movePan(e){if(!this.drag||e.pointerId!==this.drag.id)return;let t=e.clientX-this.drag.x,n=e.clientY-this.drag.y;Math.abs(t)+Math.abs(n)>3&&(this.drag.moved=!0),this.drag.moved&&(this.fitted=!1,this.suppressClick=!0,this.chart.setHover(null),this.pan={x:this.drag.pan.x+t,y:this.drag.pan.y+n},this.drawViewport())}endPan(e){e.pointerId===this.drag?.id&&(this.drag=null)}drawViewport(){this.chart.viewportChanged(),this.viewportElements??={label:this.renderRoot.querySelector(`.g2-zoom-pct`),zoomIn:this.renderRoot.querySelector(`[aria-label="Zoom in"]`),zoomOut:this.renderRoot.querySelector(`[aria-label="Zoom out"]`)};let{label:e,zoomIn:t,zoomOut:n}=this.viewportElements,{min:r,max:i,percent:a}=this.zoomMetrics();e&&(e.textContent=`${a}%`),t&&(t.disabled=this.zoom>=i*.9999),n&&(n.disabled=this.zoom<=r*1.0001)}matchesNode(e){if(qe(e)<this.minSize||this.layout?.hiddenPackages?.has(e.pkg))return!1;let t=s.pathFilter.trim().toLowerCase();if(t&&!`${e.label} ${e.pkg}`.toLowerCase().includes(t))return!1;if(this.graph.issuesHidden)return!0;let n=t=>e.files.some(e=>[...this.model.files.get(e)[t]??[]].some(e=>(t===`severitySet`?s.selectedSeverities:s.selectedColors).has(e)));return(s.selectedSeverities.size===0||n(`severitySet`))&&(s.selectedColors.size===0||n(`colorSet`))}renderLinks(e,t=!1){return e.toSorted((e,t)=>t.size-e.size).slice(0,100).map(e=>{let n=this.model.byId.get(t?e.from:e.to);return Dt(n,this.amount(e.size),()=>this.select(n.id,e.id))})}renderSearch(){if(!s.pathFilter.trim())return null;let e=this.chart.searchMatches(),t=this.counts?`any package`:`any file or package`;return O`<h4>Matches · ${e.length}</h4>${e.slice(0,100).map(e=>Dt(e,this.amount(e.removable),()=>this.follow(e.id)))} ${e.length>100?O`<p>Showing the 100 largest matches. Refine the search to find ${t}, including those beyond the visible graph.</p>`:null}`}renderPanel(){if(this.counts)return this.renderCountPanel();let e=this.model.byId.get(this.selection?.node),t=this.model.edgeById.get(this.selection?.edge);return e?O`<div class="flow-panel-heading"><h3>${e.label}</h3><button type="button" class="detail-action" aria-label="Clear flow selection" @click="${()=>this.select(null)}">×</button></div>${t?O`<p class="flow-direction">${this.model.byId.get(t.from).label}<br>↓ imports<br>${this.model.byId.get(t.to).label}</p><div class="flow-metrics"><b>${ft(t.size)}</b><span>reachable through this edge · ${t.count} ${t.count===1?`file import`:`file imports`}</span></div>`:null}<div class="flow-metrics"><b>${ft(e.removable)}</b><span>unique size · removed if deleted · bar width</span><b>${ft(e.size)}</b><span>reachable size</span><b>${ft(e.own)}</b><span>own source size · ${e.files.length} ${e.files.length===1?`file`:`files`}</span></div>${this.renderVersions(e)} ${Je(e,this.minSize)?O`<p>Kept by Large so retained dependencies remain connected to an entry point.</p>`:null} ${e.removableMissing?O`<p>${e.removableMissing} removed files have unknown sizes; removal totals include known bytes only.</p>`:null} ${e.missing?O`<p>${e.missing} reachable file sizes are unknown.</p>`:null} ${e.virtual?O`<p>Entry source is absent from this bundle; only its recorded imports are counted.</p>`:null}<div class="flow-actions"><button aria-pressed="${!!this.focus}" @click="${()=>this.follow(this.focus?null:e.id)}">Follow imports</button> ${!this.packages&&!e.virtual?O`<button data-bundle-view-source="${this.model.files.get(e.files[0]).origFile??e.files[0]}">View source</button>`:null}</div><h4>Imports · ${e.outgoing.length}</h4>${this.renderLinks(e.outgoing)}<h4>Imported by · ${e.incoming.length}</h4>${this.renderLinks(e.incoming,!0)} ${Math.max(e.incoming.length,e.outgoing.length)>100?O`<p>Showing the 100 largest flows in each direction.</p>`:null}`:O`<h3>Size flow</h3><div class="flow-metrics"><b>${ft(this.model.total.size)}</b><span>unique reachable source</span></div><p>Bar width shows how much source leaves the bundle when a file or package is removed.</p><p>Select a bar or ribbon for details.<br>Double-click a bar to follow its imports.</p>${this.model.total.missing?O`<p>${this.model.total.missing} files have unknown sizes; totals include known bytes only.</p>`:null} ${this.model.weakEdges?O`<p>${this.model.weakEdges} weak config/metadata loads excluded.</p>`:null} ${this.model.omittedFiles?O`<p>${this.model.omittedFiles} files are not reachable from these entry points.</p>`:null}<h4>${this.model.inferred?`Inferred roots (no entry points in this view)`:`Entry points`}</h4>${this.renderRoots()}`}renderRoots(){return O`${this.model.roots.slice(0,100).map(e=>{let t=this.model.byId.get(e);return Dt(t,this.amount(t.removable),()=>this.select(e))})} ${this.model.roots.length>100?O`<p>Showing the first 100 entry points. Search to find another.</p>`:null}`}renderCountPanel(){let{model:e}=this,t=ne(this.graph),n=e.byId.get(this.selection?.node),r=e.edgeById.get(this.selection?.edge);if(!n)return O`<h3>Package flow</h3><div class="flow-metrics"><b>${e.total.size}</b><span>${e.total.size===1?`package`:`packages`} reachable</span></div><p>Bar width shows how many packages leave the graph when a package is removed: the package itself and every dependency nothing else still needs.</p><p>Select a bar or ribbon for details.<br>Double-click a bar to follow its dependencies.</p>${e.weakEdges?O`<p>${e.weakEdges} weak config/metadata loads excluded.</p>`:null} ${e.omittedPackages?O`<p>${mt(e.omittedPackages)} ${e.omittedPackages===1?`is`:`are`} not reachable from these ${this.graph.packagesOnly?`workspaces`:`entry points`}.</p>`:null}<h4>${e.inferred?`Inferred roots (no entry points in this view)`:this.graph.packagesOnly?`Workspaces`:`Entry points`}</h4>${this.renderRoots()}`;let i=n.size-1;return O`<div class="flow-panel-heading"><h3>${n.label}</h3><button type="button" class="detail-action" aria-label="Clear flow selection" @click="${()=>this.select(null)}">×</button></div>${r?O`<p class="flow-direction">${e.byId.get(r.from).label}<br>↓ ${t.linked}<br>${e.byId.get(r.to).label}</p><div class="flow-metrics"><b>${r.size}</b><span>${r.size===1?`package`:`packages`} reachable through this dependency${this.graph.packagesOnly?``:` \xB7 ${r.count} ${r.count===1?`file import`:`file imports`}`}</span></div>`:null}<div class="flow-metrics"><b>${n.removable}</b><span>unique ${n.removable===1?`package`:`packages`} · removed if deleted · bar width</span><b>${n.size}</b><span>${n.size===1?`package`:`packages`} reachable · itself and ${i} ${i===1?`dependency`:`dependencies`}</span></div>${this.renderVersions(n)} ${Je(n,this.minSize)?O`<p>Kept by Large so retained dependencies remain connected to ${this.graph.packagesOnly?`a workspace`:`an entry point`}.</p>`:null} ${n.virtual?O`<p>Entry source is absent from this bundle; only its recorded imports are counted.</p>`:null}<div class="flow-actions"><button aria-pressed="${!!this.focus}" @click="${()=>this.follow(this.focus?null:n.id)}">Follow dependencies</button></div><h4>${t.outgoing} · ${n.outgoing.length}</h4>${this.renderLinks(n.outgoing)}<h4>${t.incoming} · ${n.incoming.length}</h4>${this.renderLinks(n.incoming,!0)} ${Math.max(n.incoming.length,n.outgoing.length)>100?O`<p>Showing the 100 largest flows in each direction.</p>`:null}`}renderVersions(e){if(!e.instances?.length)return null;if(e.instances.length===1){let t=e.instances[0];return O`<div class="flow-versions"><div>${t.version||`Unknown version`}</div><small>${t.directory}</small></div>`}let t=this.counts,n=O`<ul class="flow-versions">${e.instances.map(e=>O`<li><div><span>${e.version||`Unknown version`}</span>${t?null:O`<span>${ft(e.size)}${e.missing?`+`:``}</span>`}</div><small>${e.directory}</small> ${e.missing&&!t?O`<small>${e.missing} files have unknown sizes</small>`:null}</li>`)}</ul>`;return g(e.id,O`<details class="flow-versions-details"><summary>Versions: ${e.instances.length}</summary>${t?null:O`<h4>Own source size</h4>`}${n}</details>`)}render(){if(!this.layout)return null;let{nodes:e}=this.layout,t=this.counts?mt(this.minSize):ft(this.minSize);return O`<section class="flow-stage" aria-label="${this.counts?`Package dependency flow`:`Dependency size flow`}" style="${v({"--flow-background":Le()})}"><div class="flow-viewport">${this.chart.render()}${e.length>0?null:O`<p>${this.minSize?`No nodes reach ${t}. Turn off Large to show all nodes.`:`No recorded dependency paths in this view.`}</p>`}</div><div class="flow-count">${e.length} ${this.model.packages?e.length===1?`package`:`packages`:e.length===1?`file`:`files`}</div><div class="g2-zoom-ctrl" role="group" aria-label="Flow zoom"><button aria-label="Zoom in" ?disabled="${this.zoom>=this.zoomMetrics().max*.9999}" @click="${()=>this.zoomBy(1.4)}">+</button><div class="g2-zoom-pct"></div><button aria-label="Zoom out" ?disabled="${this.zoom<=this.zoomMetrics().min*1.0001}" @click="${()=>this.zoomBy(1/1.4)}">−</button> <button class="g2-zoom-fit-btn" aria-label="Fit to view" @click="${()=>this.fit()}">fit</button></div></section><aside class="flow-panel" aria-label="${this.counts?`Package flow details`:`Size flow details`}" aria-live="polite">${this.renderSearch()}${this.renderPanel()}</aside>`}};customElements.define(`size-flow`,Ot);var kt=new Set([`flow`,`package-flow`]),At=class extends A{static properties={graph:{attribute:!1},options:{attribute:!1},matrixControls:{state:!0},flowControls:{state:!0},issuesWrapped:{state:!0}};static styles=[D(F),D(P),D(j),D(M),D(N)];constructor(){super(),this.graph=null,this.options={},this.matrixControls=null,this.flowControls=null,this.issuesWrapped=!1,this._topbarObserver=null,this._observedControls=null,this._issuesWrapWidth=0}disconnectedCallback(){super.disconnectedCallback(),this._topbarObserver?.disconnect(),this._observedControls=null}connectedCallback(){super.connectedCallback(),d(this.renderRoot)}willUpdate(e){(!this.options.showBundleLayouts||s.bundleLayout!==`matrix`)&&(this.matrixControls=null),(!this.options.showBundleLayouts||!kt.has(s.bundleLayout))&&(this.flowControls=null),(e.has(`graph`)||e.has(`options`)||e.has(`matrixControls`)||e.has(`flowControls`))&&(this._issuesWrapWidth=0)}updated(){this.toggleAttribute(`matrix`,!!this.options.showBundleLayouts&&s.bundleLayout===`matrix`);let e=this.renderRoot.querySelector(`.g2-topbar-controls`);e!==this._observedControls&&typeof ResizeObserver==`function`&&(this._topbarObserver??=new ResizeObserver(()=>this._placeIssues()),this._topbarObserver.disconnect(),e&&this._topbarObserver.observe(e),this._observedControls=e),this._placeIssues()}_placeIssues(){let e=this.renderRoot.querySelector(`.g2-topbar-controls`),t=this.renderRoot.querySelector(`.g2-issues-switch`);if(!e||!t)return;let n=e.clientWidth;this.issuesWrapped?n>this._issuesWrapWidth&&Mt(e,t)&&(this.issuesWrapped=!1):jt(e,t)&&(this._issuesWrapWidth=n,this.issuesWrapped=!0)}render(){if(!this.graph)return O``;if(this.options.showBundleLayouts&&kt.has(s.bundleLayout)){let e=s.bundleLayout===`package-flow`;return O`<div class="graph2-layout">${ge(this.graph,this.options,this.flowControls,{issuesWrapped:this.issuesWrapped})}<size-flow .graph="${this.graph}" .packages="${e||s.flowPackagesView}" .metric="${e?`count`:`size`}" @flow-controls-change="${e=>{this.flowControls=e.detail}}"></size-flow></div>`}return this.options.showBundleLayouts&&s.bundleLayout===`matrix`?O`<div class="graph2-layout g2-matrix-layout">${ge(this.graph,this.options,this.matrixControls,{issuesWrapped:this.issuesWrapped})}<dependency-matrix .graph="${this.graph}" @matrix-controls-change="${e=>{this.matrixControls=e.detail}}"></dependency-matrix></div>`:O`<div class="graph2-layout">${ge(this.graph,this.options,null,{issuesWrapped:this.issuesWrapped})} ${ye(this.graph)} ${xe()}</div>`}};function jt(e,t){let n=e.firstElementChild;if(!n||n===t)return!1;let r=t.getBoundingClientRect(),i=n.getBoundingClientRect();return r.height>0&&i.height>0&&r.top>=i.bottom-1}function Mt(e,t){let n=[...e.children];if(n.length===0)return!0;let r=n[0].getBoundingClientRect().bottom,i=parseFloat(getComputedStyle(e).columnGap)||0,a=0;for(let e of n){let t=e.getBoundingClientRect();if(t.top>=r-1)return!1;let n=getComputedStyle(e),o=parseFloat(n.flexBasis),s=parseFloat(n.flexGrow)>0&&Number.isFinite(o)?Math.max(parseFloat(n.minWidth)||0,Math.min(t.width,o)):t.width;a+=s+i}return a+t.getBoundingClientRect().width<=e.clientWidth}customElements.define(`graph-layout`,At);function Nt(e,t,n,r){let i=0;for(let e of n)i=Math.max(i,e);if(i===0)return()=>!0;let a=2*i,o=new Map,s=Int32Array.from(e,e=>Math.floor(e/a)),c=Int32Array.from(t,e=>Math.floor(e/a));for(let t=0;t<e.length;t++){let e=`${s[t]}:${c[t]}`;o.has(e)||o.set(e,[]),o.get(e).push(t)}let l=0;return(i,a,u,d)=>{if(n[i]===n[a])return!0;let f=n[i]>n[a]?i:a,p=f===i?d:u;for(let u=s[p]-1;u<=s[p]+1;u++)for(let s=c[p]-1;s<=c[p]+1;s++)for(let c of o.get(`${u}:${s}`)??[]){if(++l>8e6)return!1;let o=r[c];if(o===i||o===a)continue;let s=n[f]+n[o],u=e[p]-e[c],d=t[p]-t[c];if(u*u+d*d<s*s-1e-7)return!1}return!0}}var Pt=12,Ft=8,It=12,Lt=8e6,Rt=8e6;function zt(e,t,{radiusOf:n}={}){let r=e.nodes;if(r.length<2||e.edges.length===0)return;let i=new Map(r.map((e,t)=>[e.file,t])),a=Float64Array.from(r,e=>e.x),o=Float64Array.from(r,e=>e.y),s=Int32Array.from(r,(e,t)=>t),c=s.slice(),l=n?Nt(a,o,Float64Array.from(r,n),s):null,u=Array.from(r,()=>[]);for(let t of e.edges){let e=i.get(t.a),n=i.get(t.b);e===void 0||n===void 0||e===n||(u[e].push(n),u[n].push(e))}let d=t.map(e=>e.map(e=>i.get(e.file))).filter(e=>e.length>1),f=new Int32Array(Pt+It),p=new Float64Array(Pt),m=0,h=1831565813,g=0,_=()=>(h^=h<<13,h^=h>>>17,h^=h<<5,h>>>0),v=(e,t)=>{let n=a[e]-a[t],r=o[e]-o[t];return Math.sqrt(n*n+r*r)};e:for(let e=0;e<Ft;e++){let t=!1;for(let n of d)for(let r=0;r<n.length;r++){let i=n[e%2?n.length-r-1:r];if(u[i].length===0)continue;if(g+n.length>Rt)break e;g+=n.length;let d=c[i],h=0,y=0;for(let e of u[i])h+=a[c[e]],y+=o[c[e]];h/=u[i].length,y/=u[i].length;let b=0;if(n.length<=f.length)for(let e of n)f[b++]=e;else{for(let e of n){let t=a[e]-h,n=o[e]-y,r=t*t+n*n;if(b===Pt&&r>=p[b-1])continue;let i=Math.min(b,Pt-1);for(;i>0&&r<p[i-1];)f[i]=f[i-1],p[i]=p[i-1],i--;f[i]=e,p[i]=r,b<Pt&&b++}for(let e=0;e<It;e++)f[b++]=n[_()%n.length]}let x=-1,S=-1e-7,C=!1;for(let e=0;e<b;e++){let t=f[e],n=s[t];if(i===n)continue;let r=u[i].length+u[n].length;if(m+r>Lt){C=!0;break}m+=r;let a=0;for(let e of u[i])e!==n&&(a+=v(t,c[e])-v(d,c[e]));for(let e of u[n])e!==i&&(a+=v(d,c[e])-v(t,c[e]));a<S&&(!l||l(i,n,d,t))&&(x=n,S=a)}if(x!==-1){let e=c[x];c[i]=e,c[x]=d,s[d]=x,s[e]=i,t=!0}if(C)break e}if(!t)break}for(let e=0;e<r.length;e++)r[e].x=a[c[e]],r[e].y=o[c[e]]}function Bt(e,t,n){let r=[...e].map(([e,t])=>({file:e,...t})),i=new Map(r.map(e=>[e.file,e])),a=[];for(let[e,n]of t)for(let t of n.keys())e<t&&a.push({a:e,b:t});let o=n.map(e=>e.map(e=>i.get(e)));zt({nodes:r,edges:a},o,{radiusOf:e=>e.groupR});for(let t of r){let n=e.get(t.file);n.x=t.x,n.y=t.y}}function Vt(e){let t=new Map;for(let[n,r]of e.importsOf){let i=e.nodeByFile.get(n);if(i)for(let n of r){let r=e.nodeByFile.get(n);r&&i.pkg!==r.pkg&&(t.set(i.pkg,(t.get(i.pkg)??0)+1),t.set(r.pkg,(t.get(r.pkg)??0)+1))}}return t}function Ht(e){if(e.packages.length===0)return null;let t=t=>t===`__own__`||e.ownSourcePackages?.has(t),n=e.packages.find(n=>t(n)&&e.entryPackages?.has(n))??e.packages.find(t);if(n)return n;let r=new Set;for(let[t,n]of e.importedBy){let i=e.nodeByFile.get(t);if(i)for(let t of n){let n=e.nodeByFile.get(t);if(n&&n.pkg!==i.pkg){r.add(i.pkg);break}}}for(let t of e.packages)if(!r.has(t))return t;return null}var Ut=5;function Wt(e){let t=new Map,n=(t,n)=>[Math.floor(t/e),Math.floor(n/e)];return{add(e,r,i){let a=n(e,r).join(`:`);t.has(a)||t.set(a,[]),t.get(a).push({x:e,y:r,r:i})},fits(e,r,i){let[a,o]=n(e,r);for(let n=a-1;n<=a+1;n++)for(let a=o-1;a<=o+1;a++)for(let o of t.get(`${n}:${a}`)??[])if((o.x-e)**2+(o.y-r)**2<(o.r+i)**2-1e-7)return!1;return!0}}}function Gt(e){return[e.filter(e=>e.isHub),e.filter(e=>!e.isHub)]}function Kt(e,t){let n=new Map;for(let r of e.nodes)t.has(r.pkg)&&(n.has(r.pkg)||n.set(r.pkg,[]),n.get(r.pkg).push(r));for(let e of n.values())e.sort((e,t)=>e.isHub===t.isHub?t.deg-e.deg:e.isHub?-1:1);let r=new Map,i=new Map;for(let[a,o]of t){let t=n.get(a);if(!t||t.length===0)continue;let s=t.length,c=0;for(let e of t)if(e.isHub)c++;else break;let l=c>0&&c<=Ut?c:0,u=s-l,d=o.groupR,f=Array.from({length:s}),p=Array.from({length:s});for(let e=0;e<s;e++){let t=e*137.508*Math.PI/180,n;if(e<l)n=l<=1?0:Math.sqrt(e/(l-1))*.3*d;else{let t=e-l;n=u<=1?.4*d:(.4+Math.sqrt(t/(u-1))*.6)*d}f[e]=o.x+Math.cos(t)*n,p[e]=o.y+Math.sin(t)*n}let m=Array.from({length:s},()=>!1);for(let n=0;n<s;n++){let a=t[n],l=a.isHub?0:c,u=a.isHub?c:s,d=0,h=0,g=0,_=e.importsOf.get(a.file);if(_)for(let e of _){let t=r.get(e);t!==void 0&&(d+=t,h+=i.get(e),g++)}let v=e.importedBy.get(a.file);if(v)for(let e of v){let t=r.get(e);t!==void 0&&(d+=t,h+=i.get(e),g++)}let y=!1;if(g>0){d/=g,h/=g;let e=d-o.x,t=h-o.y;e*e+t*t>1&&(y=!0)}let b=-1;if(y){let e=1/0;for(let t=l;t<u;t++){if(m[t])continue;let n=f[t]-d,r=p[t]-h,i=n*n+r*r;i<e&&(e=i,b=t)}}else for(let e=l;e<u;e++)if(!m[e]){b=e;break}m[b]=!0,a.x=f[b],a.y=p[b],r.set(a.file,a.x),i.set(a.file,a.y)}}zt(e,[...n.values()].flatMap(Gt))}function qt(e,t,n){let r=t/2,i=n/2,a=Math.min(t,n)/2;if(e.packages.length===0)return;let o=Ht(e),s=Vt(e),c=(o?e.packages.filter(e=>e!==o):[...e.packages]).toSorted((t,n)=>{let r=(s.get(n)??0)-(s.get(t)??0);return r===0?(e.pkgCount.get(n)??0)-(e.pkgCount.get(t)??0):r}),l=c.length,u;u=l<=0?0:l<=6?.65:l<=20?.82:.95;let d=Math.max(1,Math.sqrt(50/Math.max(1,l))),f=.12,p=new Map,m;if(o){let t=e.pkgCount.get(o)??0,n=Math.min(.22,(.012+Math.sqrt(t)*.004)*d);m=Math.max(l<=6?.4:l<=20?.36:.34,n+f+.04),p.set(o,{x:r,y:i,size:t,groupR:n*a})}else m=l<=1?0:l<=6?.4:l<=20?.32:.3;if(l===0){Kt(e,p);return}let h=new Map;for(let t of e.edges){if(!t.cross)continue;let n=e.nodeByFile.get(t.a)?.pkg,r=e.nodeByFile.get(t.b)?.pkg;if(!n||!r||n===r)continue;h.has(n)||h.set(n,new Map),h.has(r)||h.set(r,new Map);let i=h.get(n),a=h.get(r);i.set(r,(i.get(r)??0)+1),a.set(n,(a.get(n)??0)+1)}let g=Math.max(1,Math.min(10,Math.round(Math.sqrt(l)/1.2))),_=Array.from({length:g+1});for(let e=0;e<=g;e++)_[e]=Math.floor(e*e/(g*g)*l);_[g]=l;let v=Array.from({length:g}),y=Array.from({length:g});for(let t=0;t<g;t++){let n=_[t],r=_[t+1];v[t]=r-n;let i=0;for(let t=n;t<r;t++)i+=e.pkgCount.get(c[t])??0;y[t]=i}let b=Array.from({length:g});for(let e=0;e<g;e++){let t=(_[e]+_[e+1]-1)/2/Math.max(1,l-1);b[e]=Math.sqrt(Math.max(0,t))}let x=Array.from({length:g});x[0]=b[0];for(let e=1;e<g;e++){let t=v[e-1],n=y[e-1],r=t>0?n/t:1,i=1+.2*Math.sqrt(Math.max(0,r-1));x[e]=x[e-1]+(b[e]-b[e-1])*i}let S=Array.from({length:g});for(let e=0;e<g;e++)S[e]=x[e]-b[e];let C=Array.from({length:l}),w=Array.from({length:l}),T=0;for(let e=0;e<l;e++){for(;T<g-1&&e>=_[T+1];)T++;let t=e*137.508%360*Math.PI/180,n=(l<=1?0:Math.sqrt(e/(l-1)))+S[T],s=l===1?o?m:0:m+n*(u-m);C[e]=r+Math.cos(t)*s*a,w[e]=i+Math.sin(t)*s*a}let E=Wt(2*f*a);for(let t=0;t<g;t++){let n=_[t],o=_[t+1],s=o-n;if(s===0)continue;let l=Array.from({length:s},()=>!1);for(let t=n;t<o;t++){let o=c[t],u=e.pkgCount.get(o)??0,m=Math.min(f,(.012+Math.sqrt(u)*.004)*d)*a,g=e=>E.fits(C[n+e],w[n+e],m),_=h.get(o),v=0,y=0,b=0;if(_)for(let[e,t]of _){let n=p.get(e);n&&(v+=n.x*t,y+=n.y*t,b+=t)}let x=!1;if(b>0){v/=b,y/=b;let e=v-r,t=y-i;e*e+t*t>1&&(x=!0)}let S=e=>{let t=-1;if(x){let r=1/0;for(let i=0;i<s;i++){if(l[i]||!e(i))continue;let a=n+i,o=C[a]-v,s=w[a]-y,c=o*o+s*s;c<r&&(r=c,t=i)}}else for(let n=0;n<s;n++)if(!l[n]&&e(n)){t=n;break}return t},T=S(()=>!0);if(!g(T)){let e=S(g);e>=0&&(T=e)}l[T]=!0;let D=n+T;p.set(o,{x:C[D],y:w[D],size:u,groupR:m}),E.add(C[D],w[D],m)}}Bt(p,h,Array.from({length:g},(e,t)=>c.slice(_[t],_[t+1]))),Jt(p,o),Kt(e,p)}function Jt(e,t){let n=[...e].map(([e,n])=>({info:n,pinned:e===t}));for(let e=0;e<100;e++){n.sort((e,t)=>e.info.x-e.info.groupR-(t.info.x-t.info.groupR));let e=!1;for(let t=0;t<n.length;t++){let r=n[t].info;for(let i=t+1;i<n.length;i++){let a=n[i].info;if(a.x-a.groupR>r.x+r.groupR)break;let o=a.x-r.x,s=a.y-r.y,c=Math.hypot(o,s),l=r.groupR+a.groupR;if(c>=l-.5)continue;let u=n[t].pinned?0:a.groupR**2,d=n[i].pinned?0:r.groupR**2;if(u+d===0)continue;let f=(l-c)/(u+d),p=c>1e-9?o/c:1,m=c>1e-9?s/c:0;r.x-=p*f*u,r.y-=m*f*u,a.x+=p*f*d,a.y+=m*f*d,e=!0}}if(!e)return}}function Yt(e,t,n){let r=t/2,i=n/2,a=Math.min(t,n)/2,o=e.nodes.length;if(o===0)return;let s=[],c=[],l=[];for(let t of e.nodes)t.pkg===`__own__`||e.ownSourcePackages?.has(t.pkg)?e.entryPackages?.has(t.pkg)?c.push(t):l.push(t):s.push(t);let u=(e,t)=>t.deg-e.deg,d=[c,l,s].flatMap(Gt),f=d.flatMap(e=>e.toSorted(u));for(let e=0;e<o;e++){let t=f[e],n=e*137.508%360*Math.PI/180,s=o<=1?0:Math.sqrt(e/(o-1));t.x=r+Math.cos(n)*s*.85*a,t.y=i+Math.sin(n)*s*.85*a}zt(e,d)}function Xt(e,t,n,r,{groupOf:i=p}={}){let a=e.length,o=r||760,s=n||1100,c=Math.sqrt(s*o/Math.max(a,1))*1.1,l=e=>{let t=0;for(let n of e)t=t*31+n.codePointAt(0)|0;return t},u=Math.ceil(Math.sqrt(a*s/o)),d=o/(Math.ceil(a/u)+1),f=s/(u+1),m=e.map((e,t)=>{let n=t%u,r=Math.floor(t/u),i=l(e);return{file:e,x:(n+1)*f+(i%100-50)*f*.4,y:(r+1)*d+((i>>7)%100-50)*d*.4,dx:0,dy:0}}),h=new Map(m.map((e,t)=>[e.file,t])),g=[];for(let n of e)for(let e of t.get(n)??[])h.has(e)&&g.push([h.get(n),h.get(e)]);let _=new Map;for(let e=0;e<a;e++){let t=i(m[e].file)??`__own__`;_.has(t)||_.set(t,[]),_.get(t).push(e)}let v=Math.min(500,Math.max(180,100+a*3)),y=Math.min(s,o)/6;for(let e=0;e<v;e++){let t=y*(.3/y)**(e/v);for(let e of m)e.dx=0,e.dy=0;for(let e=0;e<a;e++)for(let t=e+1;t<a;t++){let n=m[e],r=m[t],i=n.x-r.x,a=n.y-r.y,o=Math.sqrt(i*i+a*a);if(o<.01){let e=l(n.file+r.file);i=(e%100-50)*.01||.5,a=((e>>7)%100-50)*.01||.5,o=Math.sqrt(i*i+a*a)}let s=c*c/o;n.dx+=i/o*s,n.dy+=a/o*s,r.dx-=i/o*s,r.dy-=a/o*s}for(let[e,t]of g){let n=m[e],r=m[t],i=n.x-r.x,a=n.y-r.y,o=Math.sqrt(i*i+a*a)||.01,s=o*o/c;n.dx-=i/o*s,n.dy-=a/o*s,r.dx+=i/o*s,r.dy+=a/o*s}let n=.055*Math.min(1,t/(y*.3));for(let[,e]of _){if(e.length<2)continue;let t=0,r=0;for(let n of e)t+=m[n].x,r+=m[n].y;t/=e.length,r/=e.length;for(let i of e)m[i].dx+=(t-m[i].x)*n,m[i].dy+=(r-m[i].y)*n}for(let e of m){let n=Math.sqrt(e.dx*e.dx+e.dy*e.dy)||.01;e.x+=e.dx/n*Math.min(n,t),e.y+=e.dy/n*Math.min(n,t),e.x=Math.max(50,Math.min(s-50,e.x)),e.y=Math.max(50,Math.min(o-50,e.y))}}return m}function Zt(e,t,n,{statsHeight:r=0,left:i=0,right:a=i,top:o=0,bottom:s=o}={}){let c=Math.max(20,t*.04),l=Math.max(20,n*.04),u=Math.max(1,t-c*2-i-a),d=Math.max(1,n-l*2-r-o-s),f=-1/0,p=-1/0,m=1/0,h=1/0;for(let t of e)m=Math.min(m,t.x),f=Math.max(f,t.x),h=Math.min(h,t.y),p=Math.max(p,t.y);if(e.length===0)return{k:1,tx:t/2,ty:(n-r)/2};let g=Math.min(4,u/Math.max(20,f-m),d/Math.max(20,p-h));return{k:g,tx:c+i+u/2-(m+f)/2*g,ty:l+o+d/2-(h+p)/2*g}}function Qt(e,t,n,{width:r=900,rowHeight:i=52,gap:a=42}={}){let o=new Map(e.map(e=>[e.id,e])),s=new Map,c=[];for(let e of n)o.has(e)&&!s.has(e)&&(s.set(e,0),c.push(e));for(let e=0;e<c.length;e++){let n=c[e];for(let e of t.get(n)??[])!o.has(e)||s.has(e)||(s.set(e,s.get(n)+1),c.push(e))}let l=new Map;for(let t of e){let e=s.get(t.id)??null;l.has(e)||l.set(e,[]),l.get(e).push(t)}let u=new Map(e.map(e=>[e.id,[]]));for(let[e,n]of t)if(o.has(e))for(let t of new Set(n))u.get(t)?.push(e);let d=[],f=new Map,p=[...l.keys()].toSorted((e,t)=>(e??1/0)-(t??1/0)),m=e=>Number.isFinite(e.size)&&e.size>0?e.size:0;for(let e of p){let t=l.get(e).slice(),n=new Map(t.map(t=>{let n=u.get(t.id).map(e=>f.get(e)).filter(t=>t&&e!==null&&t.level===e-1);return[t.id,n.length>0?n.reduce((e,t)=>e+t.x+t.width/2,0)/n.length:r/2]}));t.sort((e,t)=>n.get(e.id)-n.get(t.id)||String(e.id).localeCompare(String(t.id)));let o=0;for(let e=1;e<t.length;e++)m(t[e])>m(t[o])&&(o=e);o>0&&t.unshift(t.splice(o,1)[0]);let s=t.reduce((e,t)=>e+m(t),0),c=d.length*(i+a),p=0;for(let n of t){let a=r*(s>0?m(n)/s:1/t.length);f.set(n.id,{id:n.id,level:e,x:p,y:c,width:a,height:i}),p+=a}d.push({level:e,y:c,size:s,proportional:s>0,ids:t.map(e=>e.id)})}let h=[];for(let[e,n]of t)if(f.has(e))for(let t of new Set(n))e!==t&&f.has(t)&&h.push({from:e,to:t});h.sort((e,t)=>String(e.from).localeCompare(String(t.from))||String(e.to).localeCompare(String(t.to)));let g=new Map,_=new Map;for(let e of h)_.has(e.from)||_.set(e.from,[]),g.has(e.to)||g.set(e.to,[]),_.get(e.from).push(e),g.get(e.to).push(e);for(let e of _.values())e.sort((e,t)=>f.get(e.to).x-f.get(t.to).x);for(let e of g.values())e.sort((e,t)=>f.get(e.from).x-f.get(t.from).x);for(let e of _.values())e.forEach((t,n)=>{t.sourcePort=(n+1)/(e.length+1)});for(let e of g.values())e.forEach((t,n)=>{t.targetPort=(n+1)/(e.length+1)});let v=d.reduce((e,t)=>e+t.size,0);for(let e of d)e.share=v>0?e.size/v:null;return{levels:d,rects:f,edges:h,depth:s,totalSize:v,width:r,height:d.length>0?d.length*(i+a)-a:0,gap:a}}function $t(e,t,{theme:n,scale:r,colorOf:i,labelOf:a,sizeLabel:o,dimmed:s,selected:c,hovered:l}){let u=l??c,d=new Set([u]);for(let e of t.edges)e.from===u&&d.add(e.to),e.to===u&&d.add(e.from);let f=e=>e===u||e===c?1:s(e)?.13:u&&!d.has(e)?.22:1;e.save(),e.lineJoin=`round`;for(let n of t.edges){let a=t.rects.get(n.from),o=t.rects.get(n.to),s=n.from===u||n.to===u;e.globalAlpha=Math.min(f(n.from),f(n.to))*(s?.9:.5),e.strokeStyle=i(n.from),e.fillStyle=i(n.from),e.lineWidth=(s?1.6:1)/r;let c=a.x+a.width*n.sourcePort,l=a.y+a.height,d=o.x+o.width*n.targetPort,p=o.y,m=0,h=1;if(e.beginPath(),e.moveTo(c,l),o.y>a.y){let t=(l+p)/2;e.bezierCurveTo(c,t,d,t,d,p)}else if(o.y===a.y){p=o.y+o.height;let n=l+t.gap*.65;e.bezierCurveTo(c,n,d,n,d,p),h=-1}else{d=o.x+o.width,p=o.y+o.height*n.targetPort;let r=t.width+16+n.sourcePort*20;e.bezierCurveTo(c,l+t.gap/2,r,l+t.gap/2,r,l),e.lineTo(r,p+8),e.quadraticCurveTo(r,p,d,p),m=-1,h=0}e.stroke();let g=3/r;e.beginPath(),e.moveTo(d,p),e.lineTo(d-m*g-h*g,p-h*g+m*g),e.lineTo(d-m*g+h*g,p-h*g-m*g),e.closePath(),e.fill()}e.globalAlpha=1,e.textBaseline=`middle`,e.textAlign=`right`,e.fillStyle=n.labelDefault,e.font=`11px system-ui, sans-serif`;let p=n.edgeIntra(.16);for(let r of t.levels){let t=r.y+26;e.strokeStyle=p,e.lineWidth=3,e.beginPath(),e.arc(-112,t,18,0,Math.PI*2),e.stroke(),r.share!==null&&r.share>0&&(e.strokeStyle=n.labelDefault,e.beginPath(),e.arc(-112,t,18,-Math.PI/2,-Math.PI/2+r.share*Math.PI*2),e.stroke()),e.textAlign=`center`,e.font=`9px system-ui, sans-serif`;let i=r.share===null?`—`:r.share>0&&r.share<.001?`<0.1%`:`${Number((r.share*100).toFixed(1))}%`;e.fillText(i,-112,t),e.textAlign=`right`,e.font=`11px system-ui, sans-serif`,e.fillText(r.level===null?`Unreached`:r.level===0?`App`:`Level ${r.level}`,-12,r.y+19),e.font=`10px system-ui, sans-serif`,e.fillText(r.proportional?o(r.size):`No size data`,-12,r.y+35),e.font=`11px system-ui, sans-serif`}e.textAlign=`left`;for(let s of t.rects.values()){let{id:t,x:u,y:d,width:p,height:m}=s;if(p<=0)continue;let h=i(t),g=Re(h);if(e.globalAlpha=f(t),e.fillStyle=h,e.fillRect(u,d,p,m),e.save(),e.beginPath(),e.rect(u,d,p,m),e.clip(),e.strokeStyle=n.bg,e.lineWidth=1/r,p*r>=2?e.strokeRect(u,d,p,m):(e.beginPath(),e.moveTo(u,d),e.lineTo(u+p,d),e.moveTo(u,d+m),e.lineTo(u+p,d+m),e.stroke()),t===c||t===l){e.strokeStyle=n.selectRing,e.lineWidth=Math.min(1.5/r,p/4);let t=e.lineWidth/2;e.strokeRect(u+t,d+t,Math.max(0,p-t*2),m-t*2)}if(p*r<28){e.restore();continue}e.beginPath(),e.rect(u+7,d+4,Math.max(0,p-14),m-8),e.clip(),e.fillStyle=g,e.font=`500 12px system-ui, sans-serif`,e.fillText(a(t),u+9,d+21),e.fillStyle=g,e.font=`10px system-ui, sans-serif`,e.fillText(o(t),u+9,d+38),e.restore()}e.restore()}function en(e,t,r=[],{width:i=1200,height:a=800,cycleImportsOf:o=t}={}){e=[...new Set(e)].toSorted();let s=new Set(e),c=new Map(e.map(e=>[e,[...new Set(t.get(e)??[])].filter(t=>t!==e&&s.has(t)).toSorted()])),l=new Map(e.map(e=>[e,new Set(o.get(e)??[])])),u=new Map(e.map(e=>[e,[]]));for(let[e,t]of c)for(let n of t)u.get(n).push(e);let{groups:d,componentOf:f}=n(e,l),p=d.filter(e=>e.length>1),m=new Set(p.flat()),h=d.map(()=>new Set),g=d.map(()=>0);for(let[e,t]of c)for(let n of t){if(!l.get(e).has(n))continue;let t=f.get(e),r=f.get(n);t!==r&&!h[t].has(r)&&(h[t].add(r),g[r]++)}let _=new Set(r.map(e=>f.get(e)).filter(e=>e!==void 0)),v=d.map(()=>0),y=[],b=new Set,x=e=>{b.has(e)||(b.add(e),y.push(e))};_.forEach(x),g.forEach((e,t)=>{e||x(t)});for(let e=0;e<y.length;e++){let t=y[e];for(let e of h[t])_.has(e)||(v[e]=Math.max(v[e],v[t]+1)),--g[e]===0&&x(e)}let S=new Map(e.map(e=>[e,v[f.get(e)]])),C=new Map;for(let t of e){let e=S.get(t);C.has(e)||C.set(e,[]),C.get(e).push(t)}let w=[...C.keys()].toSorted((e,t)=>e-t),T=new Map,E=e=>e.forEach((t,n)=>T.set(t,(n+.5)/e.length));for(let e of C.values())E(e);for(let e=0;e<12;e++)for(let t of e%2?w.toReversed():w){let n=C.get(t),r=new Map(n.map(t=>{let n=(e%2?c:u).get(t);return[t,n.length>0?n.reduce((e,t)=>e+T.get(t),0)/n.length:T.get(t)]}));n.sort((e,t)=>r.get(e)-r.get(t)||T.get(e)-T.get(t)||e.localeCompare(t)),E(n)}let D=Math.max(.6,Math.min(2.4,i/Math.max(1,a))),O=Math.max(160,Math.sqrt(e.length*1100*D)),k=Math.max(120,O/D),A=w.at(-1)??0,j=new Map;for(let[e,t]of C)t.forEach((t,n)=>{let r=T.get(t)*O,i=(e+.5)/(A+1)*k;j.set(t,{id:t,x:r,y:i+(n%5-2)*9,anchorY:i,vx:0,vy:0,level:e,cycle:m.has(t),degree:c.get(t).length+u.get(t).length})});let M=[];for(let[e,t]of c)for(let n of t)M.push({from:e,to:n,cycle:l.get(e).has(n)&&m.has(e)&&f.get(e)===f.get(n)});let N=M.map(e=>{let t=j.get(e.from),n=j.get(e.to);return{a:t,b:n,length:26+Math.sqrt(Math.max(t.degree,n.degree))*5,strength:.065/Math.sqrt(Math.min(t.degree,n.degree)||1),cycle:e.cycle}}),P=[...j.values()];for(let e=0;e<240;e++){let t=new Map,n=7*(1-e/240)+.15;for(let e=0;e<P.length;e++){let n=P[e];n.fx=(O/2-n.x)*.002,n.fy=(n.anchorY-n.y)*.018,n.gx=Math.floor(n.x/80),n.gy=Math.floor(n.y/80);let r=`${n.gx},${n.gy}`;t.has(r)||t.set(r,[]),t.get(r).push(e)}for(let e=0;e<P.length;e++){let n=P[e];for(let r=n.gx-1;r<=n.gx+1;r++)for(let i=n.gy-1;i<=n.gy+1;i++)for(let a of t.get(`${r},${i}`)??[]){if(a<=e)continue;let t=P[a],r=n.x-t.x,i=n.y-t.y,o=r*r+i*i;if(o>6400)continue;o<.01&&(r=e%2?.1:-.1,i=.1);let s=Math.hypot(r,i),c=Math.min(18,100/s-100/80+Math.max(0,22-s)*.6),l=r/s*c,u=i/s*c;n.fx+=l,n.fy+=u,t.fx-=l,t.fy-=u}}for(let{a:e,b:t,length:n,strength:r,cycle:i}of N){let a=t.x-e.x,o=t.y-e.y,s=Math.hypot(a,o)||1,c=(s-n)*r,l=a/s*c,u=o/s*c;if(e.fx+=l,e.fy+=u,t.fx-=l,t.fy-=u,!i&&o<22){let n=(22-o)*.018;e.fy-=n,t.fy+=n}}for(let e of P){e.vx=(e.vx+e.fx)*.55,e.vy=(e.vy+e.fy)*.55;let t=Math.hypot(e.vx,e.vy)||1,r=Math.min(1,n/t);e.x+=e.vx*r,e.y+=e.vy*r}}let F=-1/0,I=-1/0,L=1/0,R=1/0;for(let e of P)L=Math.min(L,e.x),R=Math.min(R,e.y),F=Math.max(F,e.x),I=Math.max(I,e.y);for(let e of P)e.x+=16-L,e.y+=16-R;return{nodes:j,edges:M,depth:S,incoming:u,links:c,cycles:p,roots:new Set(r.filter(e=>s.has(e))),width:P.length>0?F-L+32:32,height:P.length>0?I-R+32:32}}function tn(e){return Math.max(2.5,Math.min(6,4.5*Math.sqrt(e)))}function nn(e,t,n,{theme:r,viewport:i,width:a,height:o,colorOf:s,dimmed:c,selected:l,hovered:u,query:d}){let{k:f,tx:p,ty:m}=i,h=tn(f),g=u??l,_=new Set([g,...t.links.get(g)??[],...t.incoming.get(g)??[]]),v=new Map;for(let[e,r]of t.nodes){let t=n.nodeByFile.get(e);v.set(e,{x:r.x*f+p,y:r.y*f+m,color:s(t.pkg),n:t,p:r,dim:e===g||e===l?1:c(t)?.12:g&&!_.has(e)?.16:1})}e.save();let y=(t,i)=>{let s=v.get(t.from),c=v.get(t.to);if(Math.max(s.x,c.x)<-40||Math.min(s.x,c.x)>a+40||Math.max(s.y,c.y)<-80||Math.min(s.y,c.y)>o+80)return;e.globalAlpha=i?.85:Math.min(s.dim,c.dim)*(g?.12:.22),e.strokeStyle=i?s.color:r.labelDefault,e.lineWidth=i?1.4:.7,e.setLineDash(t.cycle?[3,3]:[]);let l=c.x-s.x,u=c.y-s.y,d=Math.hypot(l,u)||1,p=l/d,m=u/d,_=s.x+p*(h+1),y=s.y+m*(h+1),b=c.x-p*(h+3),x=c.y-m*(h+3),S=t.cycle?Math.min(18,d*.15):0,C=(_+b)/2-m*S,w=(y+x)/2+p*S;if(e.beginPath(),e.moveTo(_,y),e.quadraticCurveTo(C,w,b,x),e.stroke(),i||f>=.85||n.nodes.length<=50){let t=Math.atan2(x-w,b-C),n=i?5:3.5;e.setLineDash([]),e.fillStyle=e.strokeStyle,e.beginPath(),e.moveTo(b,x),e.lineTo(b-Math.cos(t-.5)*n,x-Math.sin(t-.5)*n),e.lineTo(b-Math.cos(t+.5)*n,x-Math.sin(t+.5)*n),e.closePath(),e.fill()}};for(let e of t.edges)e.from!==g&&e.to!==g&&y(e,!1);for(let e of t.edges)(e.from===g||e.to===g)&&y(e,!0);e.setLineDash([]);let b=new Map,x=e=>{let t=[];for(let n=Math.floor(e.x/64);n<=Math.floor((e.x+e.w)/64);n++)for(let r=Math.floor(e.y/24);r<=Math.floor((e.y+e.h)/24);r++)t.push(`${n},${r}`);return t},S=e=>{for(let t of x(e))b.has(t)||b.set(t,[]),b.get(t).push(e)},C=(e,t)=>e.x<t.x+t.w&&t.x<e.x+e.w&&e.y<t.y+t.h&&t.y<e.y+e.h,w=[...v.values()].filter(e=>e.x>=-10&&e.x<=a+10&&e.y>=-10&&e.y<=o+10);for(let t of w)e.globalAlpha=t.dim,e.fillStyle=t.color,e.beginPath(),e.arc(t.x,t.y,h,0,Math.PI*2),e.fill(),(t.p.cycle||t.n.totalIssues>0)&&(e.strokeStyle=t.p.cycle?`#c47ad7`:t.color,e.lineWidth=1,e.beginPath(),e.arc(t.x,t.y,h+2.5,0,Math.PI*2),e.stroke()),(t.n.file===l||t.n.file===u)&&(e.strokeStyle=r.selectRing,e.lineWidth=1.5,e.beginPath(),e.arc(t.x,t.y,h+4,0,Math.PI*2),e.stroke()),S({x:t.x-h-2,y:t.y-h-2,w:h*2+4,h:h*2+4});e.font=`11px SFMono-Regular, Consolas, "Liberation Mono", monospace`,e.textBaseline=`top`,e.textAlign=`center`,w.sort((e,n)=>{let r=e=>e.n.file===g?1e9:e.n.file===l?1e8:d&&e.dim===1?1e7:g&&_.has(e.n.file)?1e6:t.roots.has(e.n.file)?1e5:e.n.deg;return r(n)-r(e)});let T=0;for(let t of w){let n=t.n.file===g||t.n.file===l;if(!n&&t.dim<.5||!n&&!d&&!g&&f<1&&T>=24)continue;let i=t.n.label.length>38?`${t.n.label.slice(0,36)}\u2026`:t.n.label,s=e.measureText(i).width+8,c={x:t.x-s/2,y:t.y+h+5,w:s,h:16};c.x<4||c.x+c.w>a-4||c.y+c.h>o-24||!n&&x(c).some(e=>b.get(e)?.some(e=>C(c,e)))||(S(c),T++,e.globalAlpha=.94,e.fillStyle=r.bg,e.fillRect(c.x,c.y-1,c.w,c.h),e.globalAlpha=1,e.fillStyle=n?r.labelSelected:r.labelDefault,e.fillText(i,t.x,c.y))}e.restore()}function rn(e){let t=e.nodes.map(e=>({node:e})),n=new Map(t.map(e=>[e.node.file,e]));return{nodes:t,edges:e.edges.flatMap(e=>{let t=n.get(e.a),r=n.get(e.b);return t&&r?[{edge:e,a:t,b:r}]:[]}),graph:e,selected:void 0,neighbors:new Set}}function an(e,{viewport:t,selected:n,visible:r,dimmed:i,radius:a,color:o,paintKey:s}){if(s===void 0||e.paintKey!==s){let n=new Map;for(let s of e.nodes){let e=s.node;s.visible=r(e),s.visible&&(s.x=e.x*t.k+t.tx,s.y=e.y*t.k+t.ty,s.radius=a(e),s.dimmed=i(e),n.has(e.pkg)||n.set(e.pkg,o(e.pkg)),s.color=n.get(e.pkg))}e.paintKey=s}if(e.selected!==n){e.selected=n,e.neighbors.clear();for(let t of e.graph.adj.get(n)??[]){let n=e.graph.edges[t];e.neighbors.add(n.a),e.neighbors.add(n.b)}}}function on(e,t,n,r){if(e.paints&&e.edgeOpacity===t&&e.neutral===n&&e.edgeSelected===r)return e.paints;let i=e=>({opacity:Math.max(0,Math.min(255,Math.round(e*255)))/255,neutral:n(e*.7)}),a=r?t*.25:t,o=r?.85:Math.min(.9,t+.5);return e.paints={base:i(a),emphasis:i(o),baseDim:i(Math.min(a,.04)),emphasisDim:i(Math.min(o,.04))},e.edgeOpacity=t,e.neutral=n,e.edgeSelected=r,e.paints}function sn(e,t){let{a:n,b:r}=e;return(!e.gradient||e.ax!==n.node.x||e.ay!==n.node.y||e.bx!==r.node.x||e.by!==r.node.y||e.colorA!==n.color||e.colorB!==r.color)&&(e.gradient=t.createLinearGradient(n.node.x,n.node.y,r.node.x,r.node.y),e.gradient.addColorStop(0,n.color),e.gradient.addColorStop(1,r.color),e.ax=n.node.x,e.ay=n.node.y,e.bx=r.node.x,e.by=r.node.y,e.colorA=n.color,e.colorB=r.color),e.gradient}function cn(e,t,n){return(!e.halo||e.haloX!==e.x||e.haloY!==e.y||e.haloRadius!==t||e.haloColor!==e.color)&&(e.halo=n.createRadialGradient(e.x,e.y,0,e.x,e.y,t),e.halo.addColorStop(0,e.color+`55`),e.halo.addColorStop(1,e.color+`00`),e.haloX=e.x,e.haloY=e.y,e.haloRadius=t,e.haloColor=e.color),e.halo}function ln(e,t,n,r){return e.x<-2&&t.x<-2||e.x>n+2&&t.x>n+2||e.y<-2&&t.y<-2||e.y>r+2&&t.y>r+2}function un(e,t,n,r,i){return e+n<-2||e-n>r+2||t+n<-2||t-n>i+2}function dn(e){let t=2166136261;for(let n of e.files){for(let e=0;e<n.length;e++)t=Math.imul(t^n.codePointAt(e),16777619);t=Math.imul(t^10,16777619)}return[e.viewId??``,t>>>0,e.files.length,e.edges.length,s.bundleLayout,s.packagesView,s.dependencyPackagesView,s.focusedPkg,s.showAll].join(`|`)}function fn(e){let t=new Map;for(let[n,r]of e.entries()){let e=Math.floor(r.x/32),i=Math.floor(r.y/32);t.has(e)||t.set(e,new Map);let a=t.get(e);a.has(i)||a.set(i,[]),a.get(i).push({node:r,index:n})}return(e,n,r,i,a,o)=>{let{k:s,tx:c,ty:l}=r,u=(i+6)/s+1e-7,d=(e-c)/s,f=(n-l)/s,p=Math.floor((d-u)/32),m=Math.floor((d+u)/32),h=Math.floor((f-u)/32),g=Math.floor((f+u)/32),_=null,v=1/0,y=1/0;for(let r=p;r<=m;r++){let i=t.get(r);if(i)for(let t=h;t<=g;t++)for(let{node:r,index:u}of i.get(t)??[]){if(!o(r))continue;let t=r.x*s+c-e,i=r.y*s+l-n,d=t*t+i*i,f=a(r)+6;d<f*f&&(d<v||d===v&&u<y)&&(_=r,v=d,y=u)}}return _}}function pn(e,t,n,r,i){if(!e||e.key!==t.key)return null;let a=(t.tx-e.tx)*i,o=(t.ty-e.ty)*i;if(!Number.isInteger(a)||!Number.isInteger(o)||!Number.isInteger(a/i)||!Number.isInteger(o/i)||!a&&!o||Math.abs(a)>=n*i||Math.abs(o)>=r*i)return null;let s=a/i,c=o/i,l=[];return s>0&&l.push({x:0,y:0,w:Math.min(n,s+2),h:r}),s<0&&l.push({x:Math.max(0,n+s-2),y:0,w:Math.min(n,-s+2),h:r}),c>0&&l.push({x:0,y:0,w:n,h:Math.min(r,c+2)}),c<0&&l.push({x:0,y:Math.max(0,r+c-2),w:n,h:Math.min(r,-c+2)}),{dx:a,dy:o,rects:l}}function mn(e,t,n,r,i){return e&&e.rects.every(e=>r<e.x||t>e.x+e.w||i<e.y||n>e.y+e.h)}var hn={critical:`#ff5470`,high:`#ff9d4a`,medium:`#f4d35e`,low:`#67c2ff`,high_bug:`#a06c3f`,bug:`#7a6d62`,informational:`#218bff`},gn={dark:{bg:Z.dark,grid:`rgba(255, 255, 255, 0.022)`,selectRing:`#ffffff`,edgeIntra:e=>`rgba(180, 195, 215, ${e})`,hubRing:e=>`rgba(255, 255, 255, ${e})`,labelFill:`rgba(230, 233, 238, 0.78)`,labelShadow:`rgba(12, 12, 12, 0.98)`,labelOutline:`rgba(12, 12, 12, 0.9)`,labelDefault:`rgba(200, 210, 225, 0.78)`,labelHover:`rgba(230, 237, 243, 0.95)`,labelSelected:`#fff`},light:{bg:Z.light,grid:`rgba(0, 0, 0, 0.04)`,selectRing:`#0969da`,edgeIntra:e=>`rgba(50, 70, 100, ${e})`,hubRing:e=>`rgba(0, 0, 0, ${e})`,labelFill:`rgba(40, 50, 70, 0.85)`,labelShadow:`rgba(255, 255, 255, 0.95)`,labelOutline:`rgba(255, 255, 255, 0.9)`,labelDefault:`rgba(50, 60, 80, 0.85)`,labelHover:`rgba(20, 25, 35, 0.95)`,labelSelected:`#000`},pink:{bg:Z.pink,grid:`rgba(0, 0, 0, 0.04)`,selectRing:`#0969da`,edgeIntra:e=>`rgba(50, 70, 100, ${e})`,hubRing:e=>`rgba(0, 0, 0, ${e})`,labelFill:`rgba(40, 50, 70, 0.85)`,labelShadow:`rgba(255, 255, 255, 0.95)`,labelOutline:`rgba(255, 255, 255, 0.9)`,labelDefault:`rgba(50, 60, 80, 0.85)`,labelHover:`rgba(20, 25, 35, 0.95)`,labelSelected:`#000`}},_n={...gn.light,bg:Z.paper,selectRing:`#000`,edgeIntra:e=>`rgba(0, 0, 0, ${e})`,labelFill:`#000`,labelShadow:`#fff`,labelOutline:`#fff`,labelDefault:`#000`,labelHover:`#000`},vn={...gn.light,bg:Z.w95,selectRing:`#000080`};function yn(){let e=document.body.classList;return e.contains(`theme-paper`)?_n:e.contains(`theme-pink`)?gn.pink:e.contains(`theme-w95`)?vn:e.contains(`theme-light`)?gn.light:gn.dark}var bn=(e,t)=>e.x0<t.x1&&t.x0<e.x1&&e.y0<t.y1&&t.y0<e.y1;function xn(e){e.sort((e,t)=>t.prio-e.prio);let t=[];for(let n of e){let e=!1;for(let r of t)if(bn(n,r)){e=!0;break}e||t.push(n)}return t}var Sn=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,`0`));function $(e){return Sn[Math.max(0,Math.min(255,Math.round(e*255)))]}function Cn(e,t,n,r){let i=e.querySelector(`graph-layout`)?.shadowRoot;if(!i)return;let o=i.querySelector(`#g2-canvas`),l=i.querySelector(`#g2-tooltip`),u=i.querySelector(`.graph2-stage`),d=i.querySelector(`.g2-stage-stats`),f=i.querySelector(`#g2-zoom-pct`);if(!o)return;c({keepViewport:!0});let p=dn(t),h=s.keptViewport?.key===p?s.keptViewport:null;s.keptViewport=null;let g=o.getContext(`2d`),_=window.devicePixelRatio||1,y=0,b=0,x=0,S={tx:0,ty:0,k:1},C=null,w=h?.layoutH??0,T=h?.layoutW??0,E=!0,D=!h,A=new WeakMap,j=null,M=null,N=null,P=()=>t.supportsLayers&&s.bundleLayout===`layers`&&!s.focusedPkg,F=()=>t.supportsLayers&&s.bundleLayout===`dependencies`&&!s.focusedPkg,I=()=>F()&&!de(t,s.dependencyPackagesView),L=()=>P()||s.bundleLayout===`graph`&&(t.packagesOnly||s.packagesView&&(t.canPackagesView??!1))&&!s.focusedPkg,R=null,z=null,V=te(t,ce(t,ae)),H=null;function U(){if(!H){let e=ce(ee(t),oe);if(H=ee(te(t,e)),P()&&t.layerRoots?.appImports.length>0){if(!H.byPkg.has(`__own__`)){let e={file:`__own__`,pkg:`__own__`,label:`App (source not bundled)`,size:null,fileCount:0,totalIssues:0};H.nodes.push(e),H.byPkg.set(`__own__`,e)}H.importsOf.set(`__own__`,[...new Set([...H.importsOf.get(`__own__`)??[],...t.layerRoots.appImports.filter(t=>!e.has(t))])])}}return H}function W(){return pe(t,s.dependencyPackagesView)}let se=e=>e===`__own__`?`App`:R?.depth.get(e)===0?`App \xB7 ${B(e)}`:B(e);function le(e,t,n){if(e.nodes.length>50){Yt(e,t,n);return}let r=Xt(e.nodes.map(e=>e.pkg),e.importsOf,t,n,{groupOf:e=>e});ue(e.nodes,new Map(r.map(e=>[e.file,e])))}function ue(e,t){for(let n of e){let e=t.get(n.file);e&&(n.x=e.x,n.y=e.y)}}function fe(){if(!E)return;if(M=null,N=null,j=null,P()){let e=U();R=Qt(e.nodes.map(e=>({id:e.pkg,size:e.size})),e.importsOf,t.layerRoots?.roots??[`__own__`],{width:Math.max(360,T-190)}),E=!1;return}if(F()){let e=W();z=en(e.nodes.map(e=>e.file),e.importsOf,e.fileLevel?[]:t.layerRoots?.roots??[],{width:T,height:w,cycleImportsOf:e.cycleImportsOf}),E=!1;return}let e=s.layoutCache,n=s.focusedPkg,r=L(),i=r?U().nodes:V.nodes;if(e&&e.files===t.files&&e.w===T&&e.h===w&&e.focused===n&&(e.pkgView??!1)===r)ue(i,e.pos);else{if(r)le(U(),T,w);else if(n){if(V.nodes.length>50)Yt(V,T,w);else{let e=Xt(V.files,V.importsOf,T,w);ue(V.nodes,new Map(e.map(e=>[e.file,e])))}}else qt(V,T,w);let e=new Map;for(let t of i)e.set(t.file,{x:t.x,y:t.y});s.layoutCache={files:t.files,w:T,h:w,pos:e,focused:n,pkgView:r}}E=!1}function me(){if(F()&&z){if(W().nodes.length<=100){let e=12;g.save(),g.font=`11px SFMono-Regular, Consolas, "Liberation Mono", monospace`;for(let t of W().nodes){let n=t.label.length>38?`${t.label.slice(0,36)}\u2026`:t.label;e=Math.max(e,g.measureText(n).width/2+4)}return g.restore(),Zt([...z.nodes.values()],b,y,{statsHeight:x,left:e,top:12,bottom:27})}let e=Math.max(20,Math.min(b,y)*.04),t=Math.min((b-e*2)/z.width,(y-e*2-x)/z.height,2.5),n=Math.max(.05,t);return{k:n,tx:(b-z.width*n)/2,ty:(y-x-z.height*n)/2}}if(P()&&R){let e=Math.min((b-24)/(R.width+185),(y-70)/(R.height+R.gap),1.5),t=Math.max(.05,e);return{k:t,tx:(b-(R.width+185)*t)/2+145*t,ty:24+Math.max(0,(y-70-(R.height+R.gap)*t)/2)}}let e=L()?U().nodes:V.nodes;if(e.length<=50){let t=0,n=0,r=0;g.save(),g.font=`600 11px ui-monospace, SFMono-Regular, Menlo, Monaco, monospace`;for(let i of e){let e=L()?Y(i):(i.isHub?6:4)*s.nodeSize,a=e*1.85+5;n=Math.max(n,a,g.measureText(i.label).width/2+6),r=Math.max(r,a),t=Math.max(t,a,e+4+13+4)}return g.restore(),Zt(e,b,y,{statsHeight:x,left:n,top:r,bottom:t})}if(e.length===0)return{k:1,tx:b/2,ty:(y-x)/2};let t=-1/0,n=-1/0,r=1/0,i=1/0;for(let a of e)a.x<r&&(r=a.x),a.y<i&&(i=a.y),a.x>t&&(t=a.x),a.y>n&&(n=a.y);let a=Math.max(20,n-i),o=Math.max(20,t-r),c=(r+t)/2,l=(i+n)/2,u=Math.max(20,Math.min(b,y)*(s.focusedPkg?.04:.03)),d=Math.min((b-u*2)/o,(y-u*2-x)/a,4),f=Math.max(.05,d);return{k:f,tx:b/2-c*f,ty:(y-x)/2-l*f}}function he(){let e=me();S.k=e.k,S.tx=e.tx,S.ty=e.ty}function ge(){if(!F()){f&&(f.textContent=`${Math.round(S.k*100)}%`);return}let e=Ct(S.k,me().k,!0);f&&(f.textContent=`${e.percent}%`),Ge&&(Ge.disabled=S.k<=e.min*1.0001),We&&(We.disabled=S.k>=e.max*.9999)}function G(e,t){return[e*S.k+S.tx,t*S.k+S.ty]}function _e(e,t){return[(e-S.tx)/S.k,(t-S.ty)/S.k]}function K(e){return!s.hidden.has(e.pkg)}function ye(e,t,n,r,i){let a=n+(r===`critical`?4.2:r===`high`?3.4:2.8),o=r===`critical`?1.8:r===`high`?1.5:r===`medium`?1.3:1.1;g.strokeStyle=hn[r],g.globalAlpha=i,g.lineWidth=o,g.beginPath(),g.arc(e,t,a,0,Math.PI*2),g.stroke(),g.globalAlpha=1}function be(e,t,n,r,i,a,o){let s=o?.1:.9,c=2*(1-s)*(n-e)+2*s*(i-n),l=2*(1-s)*(r-t)+2*s*(a-r),u=Math.sqrt(c*c+l*l)||1,d=c/u,f=l/u;g.beginPath(),o?(g.moveTo(e,t),g.lineTo(e+d*7-f*2.94,t+f*7+d*2.94),g.lineTo(e+d*7+f*2.94,t+f*7-d*2.94)):(g.moveTo(i,a),g.lineTo(i-d*7+f*2.94,a-f*7-d*2.94),g.lineTo(i-d*7-f*2.94,a-f*7+d*2.94)),g.closePath()}function xe(e){if(!t.issuesHidden&&s.selectedSeverities.size>0){let t=e.severitySet;if(!t)return!0;let n=!1;for(let e of s.selectedSeverities)if(t.has(e)){n=!0;break}if(!n)return!0}if(!t.issuesHidden&&s.selectedColors.size>0){let t=e.colorSet;if(!t)return!0;let n=!1;for(let e of s.selectedColors)if(t.has(e)){n=!0;break}if(!n)return!0}if(s.solo&&e.pkg!==s.solo&&!L()&&!I())return!0;let n=s.pathFilter;if(n){let t=n.toLowerCase(),r=e.pathText?e.pathText.includes(t):e.file.toLowerCase().includes(t),i=e.pkg&&e.pkg.toLowerCase().includes(t),a=e.label&&e.label.toLowerCase().includes(t);if(!r&&!i&&!a)return!0}return!1}function q(e){return(e.isHub?4.9:3.5)*s.nodeSize*Math.max(.6,Math.min(1.6,S.k))}function Se(){let e=u.getBoundingClientRect(),t=y,n=b;b=Math.max(80,e.width),y=Math.max(80,e.height),x=d?(parseFloat(getComputedStyle(d).lineHeight)||0)+8:0,_=window.devicePixelRatio||1,o.width=b*_,o.height=y*_,M=null,A.delete(V),H&&A.delete(H),o.style.width=b+`px`,o.style.height=y+`px`,g.setTransform(_,0,0,_,0,0),(T===0||w===0)&&(T=b,w=y,E=!0),fe();let r=n>0&&(Math.abs(b-n)/n>.15||Math.abs(y-t)/t>.15);h?(S.k=h.k,S.tx=h.tx+(b-h.W)/2,S.ty=h.ty+(y-h.H)/2,h=null):(D||r)&&(he(),D=!1),J()}let Ce=null,we=!0,Te=!1,Ee=!1;function J(){we=!0,!(Te||Ee)&&(Te=!0,Ce=requestAnimationFrame(()=>{Te=!1,we&&!Ee&&(we=!1,De())}))}function De(){let e=L()?U():V;if(N?.graph!==e){N={graph:e,x0:1/0,y0:1/0,x1:-1/0,y1:-1/0};for(let t of e.nodes)N.x0=Math.min(N.x0,t.x),N.x1=Math.max(N.x1,t.x),N.y0=Math.min(N.y0,t.y),N.y1=Math.max(N.y1,t.y)}let t=q({isHub:!0})*6+8,n=N.x0*S.k+S.tx>t&&N.y0*S.k+S.ty>t&&N.x1*S.k+S.tx<b-t&&N.y1*S.k+S.ty<y-t&&S.k<=1.4&&e.nodes.length>50&&!P()&&!F(),r={tx:S.tx,ty:S.ty,key:JSON.stringify([S.k,yn().bg,s.nodeSize,s.edgeOpacity,C,s.selected,s.solo,s.focusedPkg,L(),s.showAll,s.pathFilter,[...s.selectedSeverities],[...s.selectedColors],[...s.hidden]])},i=n?pn(M,r,b,y,_):null;g.save();try{if(i){g.save(),g.setTransform(1,0,0,1,0,0),g.globalCompositeOperation=`copy`,g.drawImage(o,i.dx,i.dy),g.restore(),g.beginPath();for(let e of i.rects)g.rect(e.x,e.y,e.w,e.h);g.clip()}Oe(i),M=n?r:null}finally{g.restore()}}function Oe(e){let t=yn();g.fillStyle=t.bg,g.fillRect(0,0,b,y),ke(t);let n=F(),r=L(),i=n?W():r?U():V,o=I()||r?s.solo:s.selected,c=o?i.nodeByFile.get(o):null,l=c?o:null;if(n){nn(g,z,i,{theme:t,viewport:S,width:b,height:y,colorOf:m,selected:l,hovered:C,query:s.pathFilter,dimmed:e=>xe(e)}),ge();return}if(P()){g.save(),g.translate(S.tx,S.ty),g.scale(S.k,S.k),$t(g,R,{theme:t,scale:S.k,selected:l,hovered:C,colorOf:m,labelOf:se,sizeLabel:e=>a(typeof e==`number`?e:i.byPkg.get(e).size)||`Size unknown`,dimmed:e=>xe(i.byPkg.get(e))}),g.restore(),ge();return}if(r&&i.nodes.length<=50){je(t);return}if(s.focusedPkg&&i.nodes.length<=50){Ae(t,l,c);return}A.has(i)||A.set(i,rn(i));let u=A.get(i),d=JSON.stringify([S.k,S.tx,S.ty,s.nodeSize,t.bg,s.solo,s.pathFilter,[...s.selectedSeverities],[...s.selectedColors],[...s.hidden]]);an(u,{viewport:S,selected:l,paintKey:d,visible:K,dimmed:xe,radius:q,color:m});let f=on(u,s.edgeOpacity,t.edgeIntra,!!l),p=l||C,h=.85/S.k,_=.55/S.k,v=null,x=null,w=null;g.save(),g.translate(S.tx,S.ty),g.scale(S.k,S.k);for(let t of u.edges){let{edge:n,a:r,b:i}=t;if(!r.visible||!i.visible||ln(r,i,b,y)||mn(e,Math.min(r.x,i.x)-2,Math.min(r.y,i.y)-2,Math.max(r.x,i.x)+2,Math.max(r.y,i.y)+2))continue;let a=p&&(n.a===p||n.b===p),o=r.dimmed&&i.dimmed?a?f.emphasisDim:f.baseDim:a?f.emphasis:f.base,s=n.cross?sn(t,g):o.neutral,c=n.cross?o.opacity:1,l=n.cross?h:_;s!==x&&(g.strokeStyle=s,x=s),c!==v&&(g.globalAlpha=c,v=c),l!==w&&(g.lineWidth=l,w=l),g.beginPath(),g.moveTo(r.node.x,r.node.y),g.lineTo(i.node.x,i.node.y),g.stroke()}g.restore();for(let t of u.nodes){if(!t.visible)continue;let n=t.node,r=n.file===C,i=n.file===l;if(!n.isHub&&!r&&!i||t.dimmed&&!r&&!i)continue;let a=t.radius,o=t.x,s=t.y,c=a*(i?6:r?4.5:3);un(o,s,c,b,y)||mn(e,o-c-2,s-c-2,o+c+2,s+c+2)||(g.fillStyle=cn(t,c,g),g.beginPath(),g.arc(o,s,c,0,Math.PI*2),g.fill())}for(let n of u.nodes){if(!n.visible)continue;let r=n.node,i=n.radius,a=n.x,o=n.y;if(un(a,o,i+6,b,y)||mn(e,a-i-8,o-i-8,a+i+8,o+i+8))continue;let s=1,c=l&&r.file===l;l&&!c&&(s=u.neighbors.has(r.file)?1:.25),!c&&n.dimmed&&(s=Math.min(s,.1)),g.fillStyle=n.color+$(s),g.beginPath(),g.arc(a,o,i,0,Math.PI*2),g.fill(),r.isHub&&(g.strokeStyle=t.hubRing(.55*s),g.lineWidth=.8,g.stroke()),r.issue&&ye(a,o,i,r.issue,s)}if(S.k>1.4){let e=0;if(S.k<9&&!s.showLabels)for(let t of i.nodes){if(!K(t))continue;let[n,r]=G(t.x,t.y);if(!(n<0||n>b||r<0||r>y)&&(e++,e>=50))break}let n=S.k>=9||e<50;if(s.showLabels||n){g.font=`10px ui-monospace, SFMono-Regular, Menlo, Monaco, monospace`,g.fillStyle=t.labelFill,g.textAlign=`left`,g.textBaseline=`middle`;let e=(e,t)=>e>-250&&e<b+250&&t>-250&&t<y+250,n=[];for(let t of i.nodes){if(!K(t))continue;let[r,i]=G(t.x,t.y);if(!e(r,i))continue;let a=q(t);n.push({file:t.file,x0:r-a,x1:r+a,y0:i-a,y1:i+a})}let r=[];for(let t of i.nodes){if(!K(t)||!t.isHub&&S.k<2.4)continue;let[n,i]=G(t.x,t.y);if(!e(n,i))continue;let a=n+q(t)+4,o=i+1,s=g.measureText(t.label).width+2,c=t.file===l,u=t.file===C,d=c?3:u?2:+!!t.isHub;r.push({file:t.file,n:t,tx:a,ty:o,prio:d,x0:a-2,x1:a+s,y0:o-11/2,y1:o+11/2})}let a=xn(r.filter(e=>!n.some(t=>t.file!==e.file&&bn(e,t))));for(let e of a)g.fillText(e.n.label,e.tx,e.ty)}}if(c&&K(c)){let[e,n]=G(c.x,c.y),r=q(c);g.strokeStyle=t.selectRing,g.lineWidth=1.5,g.beginPath(),g.arc(e,n,r+5,0,Math.PI*2),g.stroke()}ge()}function ke(e){if(S.k<.4)return;let t=(S.tx%80+80)%80,n=(S.ty%80+80)%80;g.strokeStyle=e.grid,g.lineWidth=1,g.beginPath();for(let e=t;e<b;e+=80)g.moveTo(e,0),g.lineTo(e,y);for(let e=n;e<y;e+=80)g.moveTo(0,e),g.lineTo(b,e);g.stroke()}function Ae(e,t,n){let r=m(s.focusedPkg),i=e.hubRing(.55),a=new Set;if(C){a.add(C);for(let e of V.adj.get(C)??[]){let t=V.edges[e];a.add(t.a),a.add(t.b)}}let o=e=>(e.isHub?6:4)*s.nodeSize;for(let e of V.edges){let n=V.nodeByFile.get(e.a),i=V.nodeByFile.get(e.b);if(!n||!i||!K(n)||!K(i))continue;let a=e.fromLo&&e.fromHi,c=!a&&e.fromHi,l=c?i:n,u=c?n:i,d=C&&(e.a===C||e.b===C),f=t&&(e.a===t||e.b===t),p=(t||C)&&!d&&!f,m=o(l),h=o(u),[_,v]=G(l.x,l.y),[y,b]=G(u.x,u.y),x=y-_,S=b-v,w=Math.sqrt(x*x+S*S)||1,T=x/w,E=S/w,D=_+T*(m+1.5),O=v+E*(m+1.5),k=y-T*(h+3.5),A=b-E*(h+3.5),j=Math.min(w*.15,30),M=(D+k)/2-E*j,N=(O+A)/2+T*j;g.beginPath(),g.moveTo(D,O),g.quadraticCurveTo(M,N,k,A);let P;P=f?.9:d?.85:p?.05:Math.min(.85,s.edgeOpacity*3),g.strokeStyle=r+$(P),g.lineWidth=f||d?1.5:.85,g.stroke(),!p&&(be(D,O,M,N,k,A,!1),g.fillStyle=r+$(Math.min(1,P+.15)),g.fill(),a&&(be(D,O,M,N,k,A,!0),g.fill()))}for(let e of V.nodes){if(!K(e))continue;let[n,s]=G(e.x,e.y),c=o(e),l=e.file===C,u=e.file===t,d=(t||C)&&!a.has(e.file)&&!u?.15:1;if(g.globalAlpha=d,u||l||e.isHub){let e=c*(u?4:l?3:2.4),t=g.createRadialGradient(n,s,c*.6,n,s,e);t.addColorStop(0,r+$(u?.4:.25)),t.addColorStop(1,r+`00`),g.fillStyle=t,g.beginPath(),g.arc(n,s,e,0,Math.PI*2),g.fill()}g.fillStyle=r,g.beginPath(),g.arc(n,s,c,0,Math.PI*2),g.fill(),e.isHub&&(g.strokeStyle=i,g.lineWidth=.9,g.stroke()),e.issue&&ye(n,s,c,e.issue,d),g.globalAlpha=1}g.font=`600 11px ui-monospace, SFMono-Regular, Menlo, Monaco, monospace`,g.textAlign=`center`,g.textBaseline=`top`,g.lineJoin=`round`;let c=[];for(let e of V.nodes){if(!K(e))continue;let[n,r]=G(e.x,e.y),i=r+o(e)+4,a=g.measureText(e.label).width/2+2,s=e.file===t,l=e.file===C,u=s?3:l?2:+!!e.isHub;c.push({n:e,sx:n,ty:i,halfW:a,isSel:s,isHov:l,prio:u,x0:n-a,x1:n+a,y0:i,y1:i+13})}let l=xn(c);for(let n of l){let{n:r,sx:i,ty:o,isSel:s,isHov:c}=n,l=(t||C)&&!a.has(r.file)&&!s?.2:1;g.globalAlpha=l,g.shadowColor=e.labelShadow,g.shadowBlur=4,g.strokeStyle=e.labelOutline,g.lineWidth=3,g.strokeText(r.label,i,o),g.shadowBlur=0,g.fillStyle=s?e.labelSelected:c?e.labelHover:e.labelDefault,g.fillText(r.label,i,o),g.globalAlpha=1}if(n&&K(n)){let[t,r]=G(n.x,n.y),i=o(n);g.strokeStyle=e.selectRing,g.lineWidth=1.8,g.beginPath(),g.arc(t,r,i+4,0,Math.PI*2),g.stroke()}ge()}function Y(e){return Math.min(26,5+Math.sqrt(e.fileCount)*1.7)*s.nodeSize}function je(e){let t=U(),n=s.solo&&t.byPkg.has(s.solo)?s.solo:null,r=C??n,i=new Set;if(r){i.add(r);for(let e of t.edges)e.a===r?i.add(e.b):e.b===r&&i.add(e.a)}let a=e=>{if(e.pkg===n||e.pkg===C)return 1;let t=1;return r&&!i.has(e.pkg)&&(t=.2),xe(e)&&(t=Math.min(t,.1)),t};for(let e of t.edges){let n=t.byPkg.get(e.a),i=t.byPkg.get(e.b);if(!n||!i||!K(n)||!K(i))continue;let a=e.fromLo&&e.fromHi,o=!a&&e.fromHi,s=o?i:n,c=o?n:i,l=r!==null&&(e.a===r||e.b===r),u=xe(n)&&xe(i),d=r!==null&&!l||u,f=Y(s),p=Y(c),[h,_]=G(s.x,s.y),[v,y]=G(c.x,c.y),b=v-h,x=y-_,S=Math.sqrt(b*b+x*x)||1,C=b/S,w=x/S,T=h+C*(f+1.5),E=_+w*(f+1.5),D=v-C*(p+3.5),O=y-w*(p+3.5),k=Math.min(S*.15,30),A=(T+D)/2-w*k,j=(E+O)/2+C*k,M;M=u?.05:l?.9:d?.06:.5;let N=g.createLinearGradient(T,E,D,O);N.addColorStop(0,m(s.pkg)+$(M)),N.addColorStop(1,m(c.pkg)+$(M)),g.beginPath(),g.moveTo(T,E),g.quadraticCurveTo(A,j,D,O),g.strokeStyle=N,g.lineWidth=Math.min(3.5,.8+Math.sqrt(e.count)*.3)*(l?1.3:1),g.stroke(),!d&&(be(T,E,A,j,D,O,!1),g.fillStyle=m(c.pkg)+$(Math.min(1,M+.15)),g.fill(),a&&(be(T,E,A,j,D,O,!0),g.fillStyle=m(s.pkg)+$(Math.min(1,M+.15)),g.fill()))}for(let e of t.nodes){if(!K(e))continue;let[t,r]=G(e.x,e.y),i=Y(e),o=e.pkg===C,s=e.pkg===n,c=m(e.pkg),l=a(e);if(s||o){let e=i*(s?2.6:2.2),n=g.createRadialGradient(t,r,i*.6,t,r,e);n.addColorStop(0,c+$(s?.4:.25)),n.addColorStop(1,c+`00`),g.fillStyle=n,g.beginPath(),g.arc(t,r,e,0,Math.PI*2),g.fill()}g.fillStyle=c+$(l),g.beginPath(),g.arc(t,r,i,0,Math.PI*2),g.fill(),e.issue&&ye(t,r,i,e.issue,l)}g.font=`600 11px ui-monospace, SFMono-Regular, Menlo, Monaco, monospace`,g.textAlign=`center`,g.textBaseline=`top`,g.lineJoin=`round`;let o=[];for(let e of t.nodes){if(!K(e))continue;let[t,r]=G(e.x,e.y),i=r+Y(e)+4,a=g.measureText(e.label).width/2+2,s=e.pkg===n,c=e.pkg===C,l=s?1/0:c?1e9:e.fileCount;o.push({p:e,sx:t,ty:i,isSel:s,isHov:c,prio:l,x0:t-a,x1:t+a,y0:i,y1:i+13})}let c=xn(o);for(let t of c){let{p:n,sx:r,ty:i,isSel:o,isHov:s}=t;g.globalAlpha=Math.max(.25,a(n)),g.shadowColor=e.labelShadow,g.shadowBlur=4,g.strokeStyle=e.labelOutline,g.lineWidth=3,g.strokeText(n.label,r,i),g.shadowBlur=0,g.fillStyle=o?e.labelSelected:s?e.labelHover:e.labelDefault,g.fillText(n.label,r,i),g.globalAlpha=1}if(n){let r=t.byPkg.get(n),[i,a]=G(r.x,r.y);g.strokeStyle=e.selectRing,g.lineWidth=1.8,g.beginPath(),g.arc(i,a,Y(r)+4,0,Math.PI*2),g.stroke()}ge()}function X(e,t){if(F()){let[n,r]=_e(e,t),i=null,a=1/0;for(let[e,t]of z.nodes){let o=(t.x-n)**2+(t.y-r)**2;o<a&&o<(14/Math.max(S.k,.1))**2&&(a=o,i=W().nodeByFile.get(e))}return i}if(P()){let[n,r]=_e(e,t);for(let e of R.rects.values())if(e.width>0&&n>=e.x&&n<e.x+e.width&&r>=e.y&&r<=e.y+e.height)return U().byPkg.get(e.id);return null}let n=L(),r=n?U():V,i=n&&r.nodes.length<=50;if(r.nodes.length>50){j??=fn(r.nodes);let n=4.9*s.nodeSize*Math.max(.6,Math.min(1.6,S.k));return j(e,t,S,n,q,K)}let a=null,o=1/0;for(let n of r.nodes){if(!K(n))continue;let[r,s]=G(n.x,n.y),c=r-e,l=s-t,u=c*c+l*l,d=(i?Y(n):q(n))+6;u<d*d&&u<o&&(o=u,a=n)}return a}function Me(e,t,n){if(!l)return;let r=m(e.pkg),i=B(e.pkg),a=ie(e.file,e.pkg);k(O`<div class="g2-tt-path">${a}</div><div class="g2-tt-head"><span class="g2-tt-dot" style="${v({background:r})}"></span> <span class="g2-tt-pkg">${i}</span></div>${e.totalIssues>0?ve(e.own):null}`,l),Pe(t,n)}function Ne(e,n,r){if(!l)return;let i=m(e.pkg),o=a(e.size),s=t.packagesOnly?re(t,e.pkg):[],c=t.packagesOnly?s.length>1?`${s.length} versions`:s[0]??``:`${e.fileCount} ${e.fileCount===1?`file`:`files`}${o?` \xB7 ${o}`:``}`;k(O`<div class="g2-tt-path">${P()?se(e.pkg):e.label}</div>${F()||t.packagesOnly?O`<div class="g2-tt-pkg">${W().importedBy.get(e.pkg)?.length??0} ${ne(t).importers} · ${W().importsOf.get(e.pkg)?.length??0} dependencies</div>`:null} ${P()?O`<div class="g2-tt-pkg">${R.depth.has(e.pkg)?`Level ${R.depth.get(e.pkg)} \xB7 shortest import distance from App`:`No known import path from App`}</div>`:null}<div class="g2-tt-head"><span class="g2-tt-dot" style="${v({background:i})}"></span> <span class="g2-tt-pkg">${c}</span></div>${e.totalIssues>0?ve(e.own):null}`,l),Pe(n,r)}function Pe(e,t){let n=u.getBoundingClientRect();l.classList.add(`show`);let r=l.offsetWidth,i=l.offsetHeight,a=e-n.left,o=t-n.top,s=n.width,c=n.height,d=a+12;d+r>s-4&&(d=a-r-12),d<4&&(d=4);let f=o+12;f+i>c-4&&(f=o-i-12),f<4&&(f=4),l.style.left=`${d}px`,l.style.top=`${f}px`}function Fe(){l&&l.classList.remove(`show`)}let Ie=!1,Z=null,Le=!1,Re=e=>{e.button===0&&(e.target.closest(`.g2-stage-overlay, .g2-stage-overlay-tr, .g2-zoom-ctrl`)||(Ie=!0,Le=!1,Z={x:e.clientX,y:e.clientY,tx:S.tx,ty:S.ty}))},ze=e=>{let t=u.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;if(Ie){let t=e.clientX-Z.x,n=e.clientY-Z.y;Math.abs(t)+Math.abs(n)>3&&(Le=!0),S.tx=Z.tx+t,S.ty=Z.ty+n,Fe(),J();return}let i=X(n,r),a=C;C=i?.file??null,o.style.cursor=`default`,i?L()||I()?Ne(i,e.clientX,e.clientY):Me(i,e.clientX,e.clientY):a&&Fe(),C!==a&&J()},Be=e=>{if(Ie&&!Le){let t=u.getBoundingClientRect(),i=X(e.clientX-t.left,e.clientY-t.top);L()||I()?(s.solo=i&&s.solo!==i.pkg?i.pkg:null,s.selected=null,n(),r?.()):(s.selected=i?.file??null,n()),J()}Ie=!1},Ve=()=>{let e=C!==null;C=null,Fe(),e&&J()},He=e=>{e.preventDefault();let t=u.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=Math.exp(-e.deltaY*.0015),a=me();if(i<1&&S.k<=a.k*1.0001){S.k=a.k;let e=Math.min(.4,(1-i)*3);S.tx+=(a.tx-S.tx)*e,S.ty+=(a.ty-S.ty)*e,J();return}let[o,s]=_e(n,r),c=Ct(S.k,a.k,F()),l=Math.max(c.min,Math.min(c.max,S.k*i));S.k=l,S.tx=n-o*S.k,S.ty=r-s*S.k,J()};u.addEventListener(`mousedown`,Re),window.addEventListener(`mousemove`,ze),window.addEventListener(`mouseup`,Be),u.addEventListener(`mouseleave`,Ve),u.addEventListener(`wheel`,He,{passive:!1});function Ue(e){let t=Ct(S.k,me().k,F());e=Math.max(t.min,Math.min(t.max,e));let n=b/2,r=y/2,[i,a]=_e(n,r);S.k=e,S.tx=n-i*S.k,S.ty=r-a*S.k,J()}let We=i.querySelector(`#g2-zoom-in`),Ge=i.querySelector(`#g2-zoom-out`),Ke=i.querySelector(`#g2-zoom-fit`);We?.addEventListener(`click`,()=>Ue(S.k*1.4)),Ge?.addEventListener(`click`,()=>Ue(S.k/1.4)),Ke?.addEventListener(`click`,()=>{he(),J()}),Se();let qe=new ResizeObserver(()=>Se());qe.observe(u);let Je=new MutationObserver(e=>{for(let t of e){if((t.oldValue||``).includes(`report-fullscreen`)!==document.body.classList.contains(`report-fullscreen`)){T=0,w=0,E=!0,D=!0,s.layoutCache=null,setTimeout(()=>Se(),80);return}J()}});Je.observe(document.body,{attributes:!0,attributeFilter:[`class`],attributeOldValue:!0}),J(),s.graphState={requestDraw:J,_cleanup:({keepViewport:e=!1}={})=>{let t=u.getBoundingClientRect();s.keptViewport=e&&t.width>0&&t.height>0?{key:p,k:S.k,tx:S.tx,ty:S.ty,W:b,H:y,layoutW:T,layoutH:w}:null,Ee=!0,cancelAnimationFrame(Ce),qe.disconnect(),Je.disconnect(),u.removeEventListener(`mousedown`,Re),window.removeEventListener(`mousemove`,ze),window.removeEventListener(`mouseup`,Be),u.removeEventListener(`mouseleave`,Ve),u.removeEventListener(`wheel`,He)}}}function wn(e,t,n=document.querySelector(`graph-layout`)){let r=n?.shadowRoot;if(!r)return;let i=En(e),a=r.querySelector(`#g2-selection-area`);a&&k(Se(i,t),a);let o=r.querySelector(`#g2-focus-overlay-slot`);o&&k(be(i),o)}function Tn(e,t=document.querySelector(`graph-layout`)){let n=t?.shadowRoot;if(!n)return;let r=n.querySelector(`#g2-top-pkgs-block`);r&&k(q(En(e)),r)}function En(e){let t=R(e.treeData,e.files,e.ownCounts,e.transitiveCounts,e.severitySets,e.colorSets,e.fileFindings,e.options);if(e.strippedToOrig)for(let n of t.nodes)n.origFile=e.strippedToOrig.get(n.file);return t.canPackagesView=e.canPackagesView??!1,t.packagesOnly=e.packagesOnly??!1,t.supportsLayers=e.supportsLayers??!1,t.layerRoots=e.layerRoots,t.flowEntries=e.flowEntries,t.ownSourcePackages=e.ownSourcePackages,t.entryPackages=e.entryPackages,t.ownSourceFiles=e.ownSourceFiles,t.reasons=e.reasons??[],t.issuesHidden=e.issuesShown===!1,t.viewId=e.viewId??null,t}export{Cn as attachGraph2Interaction,En as buildGraphFromPrep,wn as refreshSidebar,Tn as refreshTopPkgs};