sparkforensics-server 0.3.0 → 0.4.0

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 (382) hide show
  1. package/index.js +5 -4
  2. package/package.json +1 -1
  3. package/public/assets/AutoscalingChurn-CUSIvvab.js +1 -0
  4. package/public/assets/CacheUtilization-Ce0K6_X2.js +1 -0
  5. package/public/assets/CachingOpportunity-Cn-LmRA4.js +1 -0
  6. package/public/assets/ColdStart-BoiYzEyV.js +1 -0
  7. package/public/assets/ConfigAudit-BoJc6PAw.js +1 -0
  8. package/public/assets/CoreUsageArea-BFfXKu7K.js +1 -0
  9. package/public/assets/Dashboard-Bo_1jGqH.js +2 -0
  10. package/public/assets/DisclosureContext-LYzHroHO.js +1 -0
  11. package/public/assets/DuplicatePlanSubtree-BaAuGAoo.js +1 -0
  12. package/public/assets/ExecutorUtilization-OE6VMFkG.js +1 -0
  13. package/public/assets/GcPressure-AoL_ZNrV.js +1 -0
  14. package/public/assets/IncompleteRun-Bv6IzgsQ.js +1 -0
  15. package/public/assets/JobFailures-DF3U2z1f.js +1 -0
  16. package/public/assets/MemoryUtilization-B65OVZlq.js +1 -0
  17. package/public/assets/OverBroadcast-DXbJREDl.js +1 -0
  18. package/public/assets/PartitionSizing-DZLnjy0d.js +1 -0
  19. package/public/assets/PlanExplorer-DdmPkKO1.js +1 -0
  20. package/public/assets/PlanGraphRoute-C-BGmC6j.js +1 -0
  21. package/public/assets/RetryWaste-BbEPsdMw.js +1 -0
  22. package/public/assets/ShuffleIO-wZB94LS8.js +1 -0
  23. package/public/assets/Skew-SpQE7zeJ.js +1 -0
  24. package/public/assets/SlowHost-DwDBCTvr.js +1 -0
  25. package/public/assets/SmallFiles-yjY_6sT1.js +1 -0
  26. package/public/assets/SpeculationWaste-73PDmj0c.js +1 -0
  27. package/public/assets/Spill-DEw0Kd1i.js +1 -0
  28. package/public/assets/StageFailed-BEfXdEJc.js +1 -0
  29. package/public/assets/StageFindingGroup-Bzm2TY03.js +1 -0
  30. package/public/assets/StageHeader-BSV8ALhT.js +1 -0
  31. package/public/assets/StageShape-CzR4jHOt.js +1 -0
  32. package/public/assets/StageSlowness-vMPsnAaa.js +1 -0
  33. package/public/assets/Straggler-Cf__OGl5.js +1 -0
  34. package/public/assets/TaskFailures-BZ8kLZiO.js +1 -0
  35. package/public/assets/{TinyTask-Be-pvTjJ.js → TinyTask-CIPRxWfT.js} +1 -1
  36. package/public/assets/UnderBroadcast-CBm8ZPoS.js +1 -0
  37. package/public/assets/{finding-anchor-vVODA_VC.js → finding-anchor-DF1cSHO1.js} +1 -1
  38. package/public/assets/impact-sort-7z0ZcBZf.js +1 -0
  39. package/public/assets/index-BcqTLKFp.css +2 -0
  40. package/public/assets/index-CEM9bz_x.js +13 -0
  41. package/public/assets/{parser-worker-jAP0kWvS.js → parser-worker-Q5KCPdKT.js} +9 -9
  42. package/public/assets/react-vendor-BAKt3vny.js +9 -0
  43. package/public/assets/select-Cy5pmbrh.js +1 -0
  44. package/public/assets/usePagedRows-BjPOpUU8.js +1 -0
  45. package/public/assets/useRecentFiles-BrBl-AP1.js +11 -0
  46. package/public/assets/useSortMode-CU0vzThu.js +1 -0
  47. package/public/docs/404.html +2 -2
  48. package/public/docs/assets/{app.C5E-wy6e.js → app.C6w47a9W.js} +1 -1
  49. package/public/docs/assets/chunks/@localSearchIndexroot.DbZy5EtM.js +1 -0
  50. package/public/docs/assets/chunks/{VPLocalSearchBox.DtyygpbL.js → VPLocalSearchBox.BcTNvT55.js} +1 -1
  51. package/public/docs/assets/chunks/{theme.DQS9-w_Z.js → theme.D-mE6j02.js} +2 -2
  52. package/public/docs/assets/{contributor-guide_architecture_board-widgets.md.9ToZXcTk.js → contributor-guide_architecture_board-widgets.md.VTcYTH4d.js} +1 -1
  53. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CsqZHz_T.js +1 -0
  54. package/public/docs/assets/{contributor-guide_architecture_detector-contract.md.CsCytCho.lean.js → contributor-guide_architecture_detector-contract.md.CsqZHz_T.lean.js} +1 -1
  55. package/public/docs/assets/contributor-guide_architecture_drill-down.md.CFNCE8JB.js +1 -0
  56. package/public/docs/assets/{contributor-guide_architecture_drill-down.md.Bawx6NgP.lean.js → contributor-guide_architecture_drill-down.md.CFNCE8JB.lean.js} +1 -1
  57. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.HT9IJGIl.js +1 -0
  58. package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.sf9DU2bA.lean.js → contributor-guide_architecture_impact-estimation.md.HT9IJGIl.lean.js} +1 -1
  59. package/public/docs/assets/contributor-guide_architecture_overview.md.CTEqVeV4.js +1 -0
  60. package/public/docs/assets/contributor-guide_architecture_overview.md.CTEqVeV4.lean.js +1 -0
  61. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DOTVHjTV.js +1 -0
  62. package/public/docs/assets/{contributor-guide_architecture_state-and-history.md.B8Wc_ZTg.lean.js → contributor-guide_architecture_state-and-history.md.DOTVHjTV.lean.js} +1 -1
  63. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BmpARZve.js +1 -0
  64. package/public/docs/assets/{contributor-guide_architecture_widget-rendering.md.DYwFeyjV.lean.js → contributor-guide_architecture_widget-rendering.md.BmpARZve.lean.js} +1 -1
  65. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.21pTYhFF.js +6 -0
  66. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.21pTYhFF.lean.js +1 -0
  67. package/public/docs/assets/contributor-guide_development-setup.md.CjgZJwjK.js +15 -0
  68. package/public/docs/assets/contributor-guide_development-setup.md.CjgZJwjK.lean.js +1 -0
  69. package/public/docs/assets/contributor-guide_testing.md.DTwhpoN2.js +1 -0
  70. package/public/docs/assets/{contributor-guide_testing.md.Cnn6gz1C.lean.js → contributor-guide_testing.md.DTwhpoN2.lean.js} +1 -1
  71. package/public/docs/assets/tuning-reference_anti-patterns.md.D08Uaod7.js +1 -0
  72. package/public/docs/assets/tuning-reference_anti-patterns.md.D08Uaod7.lean.js +1 -0
  73. package/public/docs/assets/tuning-reference_aqe.md.C1Ae6A8u.js +1 -0
  74. package/public/docs/assets/tuning-reference_aqe.md.C1Ae6A8u.lean.js +1 -0
  75. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.6wjKuJNE.js +1 -0
  76. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.6wjKuJNE.lean.js +1 -0
  77. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.BVQbsuHP.js +7 -0
  78. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.BVQbsuHP.lean.js +1 -0
  79. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.DtaYnaiF.js +1 -0
  80. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.DtaYnaiF.lean.js +1 -0
  81. package/public/docs/assets/{tuning-reference_bottleneck-failures.md.CAsFf3RR.js → tuning-reference_bottleneck-failures.md.Z1Tdmdd3.js} +2 -2
  82. package/public/docs/assets/tuning-reference_bottleneck-failures.md.Z1Tdmdd3.lean.js +1 -0
  83. package/public/docs/assets/tuning-reference_bottleneck-gc.md.BCnXLf1n.js +6 -0
  84. package/public/docs/assets/tuning-reference_bottleneck-gc.md.BCnXLf1n.lean.js +1 -0
  85. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.CcvQj2g9.js +8 -0
  86. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.CcvQj2g9.lean.js +1 -0
  87. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.B-C0-8h-.js +7 -0
  88. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.B-C0-8h-.lean.js +1 -0
  89. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.DCnhWiqj.js +1 -0
  90. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.DCnhWiqj.lean.js +1 -0
  91. package/public/docs/assets/{tuning-reference_bottleneck-shuffle.md.DDMQVOW6.js → tuning-reference_bottleneck-shuffle.md.B5OMJCd3.js} +2 -2
  92. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.B5OMJCd3.lean.js +1 -0
  93. package/public/docs/assets/{tuning-reference_bottleneck-skew.md.B0MzhWcX.js → tuning-reference_bottleneck-skew.md.Cvo6NQm_.js} +1 -1
  94. package/public/docs/assets/tuning-reference_bottleneck-skew.md.Cvo6NQm_.lean.js +1 -0
  95. package/public/docs/assets/{tuning-reference_bottleneck-slow-host.md.BlIo6UDW.js → tuning-reference_bottleneck-slow-host.md.ja5qr3wq.js} +1 -1
  96. package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.ja5qr3wq.lean.js +1 -0
  97. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.Crjtb0i2.js +5 -0
  98. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.Crjtb0i2.lean.js +1 -0
  99. package/public/docs/assets/tuning-reference_bottleneck-spill.md.Bl8KtSRg.js +6 -0
  100. package/public/docs/assets/tuning-reference_bottleneck-spill.md.Bl8KtSRg.lean.js +1 -0
  101. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.B0VN8reT.js +7 -0
  102. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.B0VN8reT.lean.js +1 -0
  103. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.DQCftGhu.js +8 -0
  104. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.DQCftGhu.lean.js +1 -0
  105. package/public/docs/assets/{tuning-reference_bottleneck-utilization.md.DqC_iGkw.js → tuning-reference_bottleneck-utilization.md.BXDl30f9.js} +1 -1
  106. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.BXDl30f9.lean.js +1 -0
  107. package/public/docs/assets/tuning-reference_caching.md.CcaiMn_7.js +1 -0
  108. package/public/docs/assets/tuning-reference_caching.md.CcaiMn_7.lean.js +1 -0
  109. package/public/docs/assets/tuning-reference_cluster-config.md.DbWG1yZq.js +1 -0
  110. package/public/docs/assets/tuning-reference_cluster-config.md.DbWG1yZq.lean.js +1 -0
  111. package/public/docs/assets/tuning-reference_config.md.YUqSpwFB.js +1 -0
  112. package/public/docs/assets/tuning-reference_config.md.YUqSpwFB.lean.js +1 -0
  113. package/public/docs/assets/tuning-reference_data-formats.md.C5DX5xL4.js +1 -0
  114. package/public/docs/assets/tuning-reference_data-formats.md.C5DX5xL4.lean.js +1 -0
  115. package/public/docs/assets/tuning-reference_index.md.ZVIpQ6Dk.js +1 -0
  116. package/public/docs/assets/tuning-reference_index.md.ZVIpQ6Dk.lean.js +1 -0
  117. package/public/docs/assets/tuning-reference_intro.md.BSSaDlqx.js +1 -0
  118. package/public/docs/assets/tuning-reference_intro.md.BSSaDlqx.lean.js +1 -0
  119. package/public/docs/assets/tuning-reference_joins.md.BVhNCDnE.js +1 -0
  120. package/public/docs/assets/tuning-reference_joins.md.BVhNCDnE.lean.js +1 -0
  121. package/public/docs/assets/tuning-reference_memory-model.md.CfjFdgbl.js +1 -0
  122. package/public/docs/assets/tuning-reference_memory-model.md.CfjFdgbl.lean.js +1 -0
  123. package/public/docs/assets/tuning-reference_metrics.md.C64VNEL4.js +1 -0
  124. package/public/docs/assets/tuning-reference_metrics.md.C64VNEL4.lean.js +1 -0
  125. package/public/docs/assets/tuning-reference_partitioning.md.CtLK0xsS.js +1 -0
  126. package/public/docs/assets/tuning-reference_partitioning.md.CtLK0xsS.lean.js +1 -0
  127. package/public/docs/assets/tuning-reference_pyspark.md.D-92XgF8.js +6 -0
  128. package/public/docs/assets/tuning-reference_pyspark.md.D-92XgF8.lean.js +1 -0
  129. package/public/docs/assets/tuning-reference_shuffle.md.Iq2v1oHJ.js +1 -0
  130. package/public/docs/assets/tuning-reference_shuffle.md.Iq2v1oHJ.lean.js +1 -0
  131. package/public/docs/assets/tuning-reference_spark-architecture.md._qwnE_Sc.js +1 -0
  132. package/public/docs/assets/tuning-reference_spark-architecture.md._qwnE_Sc.lean.js +1 -0
  133. package/public/docs/assets/tuning-reference_table-formats.md.BSYEK-eN.js +1 -0
  134. package/public/docs/assets/tuning-reference_table-formats.md.BSYEK-eN.lean.js +1 -0
  135. package/public/docs/assets/user-guide_getting-started.md.CEa2ZX-l.js +6 -0
  136. package/public/docs/assets/user-guide_getting-started.md.CEa2ZX-l.lean.js +1 -0
  137. package/public/docs/assets/{user-guide_mcp-tools.md.DrphooJv.js → user-guide_mcp-tools.md.dQwIvdTF.js} +13 -7
  138. package/public/docs/assets/user-guide_mcp-tools.md.dQwIvdTF.lean.js +1 -0
  139. package/public/docs/assets/user-guide_run-comparison.md.ChLI3MK0.js +1 -0
  140. package/public/docs/assets/user-guide_run-comparison.md.ChLI3MK0.lean.js +1 -0
  141. package/public/docs/assets/{user-guide_understanding-findings.md.YBBLOwWi.js → user-guide_understanding-findings.md.D1ccs60C.js} +1 -1
  142. package/public/docs/assets/{user-guide_understanding-findings.md.YBBLOwWi.lean.js → user-guide_understanding-findings.md.D1ccs60C.lean.js} +1 -1
  143. package/public/docs/contributor-guide/architecture/board-widgets.html +5 -5
  144. package/public/docs/contributor-guide/architecture/detector-contract.html +5 -5
  145. package/public/docs/contributor-guide/architecture/drill-down.html +5 -5
  146. package/public/docs/contributor-guide/architecture/impact-estimation.html +5 -5
  147. package/public/docs/contributor-guide/architecture/index.html +3 -3
  148. package/public/docs/contributor-guide/architecture/overview.html +5 -5
  149. package/public/docs/contributor-guide/architecture/state-and-history.html +5 -5
  150. package/public/docs/contributor-guide/architecture/widget-rendering.html +5 -5
  151. package/public/docs/contributor-guide/architecture/worker-protocol.html +6 -6
  152. package/public/docs/contributor-guide/contributing.html +3 -3
  153. package/public/docs/contributor-guide/development-setup.html +7 -7
  154. package/public/docs/contributor-guide/testing.html +5 -5
  155. package/public/docs/hashmap.json +1 -1
  156. package/public/docs/index.html +3 -3
  157. package/public/docs/tuning-reference/anti-patterns.html +6 -6
  158. package/public/docs/tuning-reference/aqe.html +6 -6
  159. package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +6 -6
  160. package/public/docs/tuning-reference/bottleneck-cold-start.html +6 -6
  161. package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +6 -6
  162. package/public/docs/tuning-reference/bottleneck-failures.html +6 -6
  163. package/public/docs/tuning-reference/bottleneck-gc.html +6 -6
  164. package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +6 -6
  165. package/public/docs/tuning-reference/bottleneck-memory-utilization.html +6 -6
  166. package/public/docs/tuning-reference/bottleneck-retry-waste.html +6 -6
  167. package/public/docs/tuning-reference/bottleneck-shuffle.html +6 -6
  168. package/public/docs/tuning-reference/bottleneck-skew.html +6 -6
  169. package/public/docs/tuning-reference/bottleneck-slow-host.html +6 -6
  170. package/public/docs/tuning-reference/bottleneck-small-files.html +6 -6
  171. package/public/docs/tuning-reference/bottleneck-spill.html +6 -6
  172. package/public/docs/tuning-reference/bottleneck-straggler.html +6 -6
  173. package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +6 -6
  174. package/public/docs/tuning-reference/bottleneck-utilization.html +6 -6
  175. package/public/docs/tuning-reference/caching.html +6 -6
  176. package/public/docs/tuning-reference/cluster-config.html +6 -6
  177. package/public/docs/tuning-reference/config.html +6 -6
  178. package/public/docs/tuning-reference/data-formats.html +6 -6
  179. package/public/docs/tuning-reference/index.html +6 -6
  180. package/public/docs/tuning-reference/intro.html +6 -6
  181. package/public/docs/tuning-reference/joins.html +6 -6
  182. package/public/docs/tuning-reference/memory-model.html +6 -6
  183. package/public/docs/tuning-reference/metrics.html +6 -6
  184. package/public/docs/tuning-reference/partitioning.html +6 -6
  185. package/public/docs/tuning-reference/pyspark.html +6 -6
  186. package/public/docs/tuning-reference/shuffle.html +6 -6
  187. package/public/docs/tuning-reference/spark-architecture.html +6 -6
  188. package/public/docs/tuning-reference/table-formats.html +6 -6
  189. package/public/docs/user-guide/alternative-log-retrieval.html +3 -3
  190. package/public/docs/user-guide/getting-started.html +9 -6
  191. package/public/docs/user-guide/mcp-tools.html +15 -9
  192. package/public/docs/user-guide/run-comparison.html +5 -5
  193. package/public/docs/user-guide/understanding-findings.html +5 -5
  194. package/public/export-template.html +111 -0
  195. package/public/index.html +4 -3
  196. package/vendor-core/analyzer.js +156 -48
  197. package/vendor-core/check-coverage.js +88 -0
  198. package/vendor-core/cli/budgets.js +31 -18
  199. package/vendor-core/cli/collect-run.js +76 -31
  200. package/vendor-core/cli/threshold-config.js +28 -0
  201. package/vendor-core/comparison-verdict.js +177 -0
  202. package/vendor-core/core-source-hash.txt +1 -0
  203. package/vendor-core/core-usage-locality.js +56 -2
  204. package/vendor-core/detector-docs.js +58 -0
  205. package/vendor-core/detectors.js +918 -458
  206. package/vendor-core/docs-config.js +0 -36
  207. package/vendor-core/docs-content/chapters/nav-index.json +31 -0
  208. package/vendor-core/docs-content/detection/cstor.md +9 -0
  209. package/vendor-core/docs-site-config.js +3 -0
  210. package/vendor-core/event-handlers.js +170 -6
  211. package/vendor-core/event-schemas.js +21 -0
  212. package/vendor-core/evidence-report.js +421 -112
  213. package/vendor-core/export-data.js +79 -6
  214. package/vendor-core/finding-action-label.js +9 -88
  215. package/vendor-core/finding-filter-predicate.js +9 -0
  216. package/vendor-core/finding-generic-recommendation.js +6 -104
  217. package/vendor-core/finding-names.js +21 -45
  218. package/vendor-core/finding-presentation.js +333 -0
  219. package/vendor-core/finding-tag-help.js +110 -0
  220. package/vendor-core/finding-types.js +361 -0
  221. package/vendor-core/findings-of-type.js +11 -0
  222. package/vendor-core/format-utils.js +92 -27
  223. package/vendor-core/html-export.js +51 -0
  224. package/vendor-core/impact-band.js +21 -8
  225. package/vendor-core/impact-estimator.js +8 -521
  226. package/vendor-core/impact-format.js +114 -0
  227. package/vendor-core/impact-model.js +175 -0
  228. package/vendor-core/ingest.js +2 -0
  229. package/vendor-core/intervals.js +13 -0
  230. package/vendor-core/list-runs.js +2 -3
  231. package/vendor-core/load-vendored.js +70 -5
  232. package/vendor-core/mcp-server-factory.js +14 -10
  233. package/vendor-core/mcp-tools.js +105 -45
  234. package/vendor-core/model-assembler.js +12 -0
  235. package/vendor-core/occupancy.js +1 -1
  236. package/vendor-core/parser-worker.js +1 -1
  237. package/vendor-core/plan-graph-model.js +3 -2
  238. package/vendor-core/plan-node-detail.js +1 -1
  239. package/vendor-core/recommendation-rollup.js +63 -3
  240. package/vendor-core/redact.js +45 -27
  241. package/vendor-core/run-comparison.js +32 -7
  242. package/vendor-core/run-interpretation.js +290 -0
  243. package/vendor-core/run-outcome.js +74 -0
  244. package/vendor-core/run-payload.js +17 -0
  245. package/vendor-core/run-shape.js +40 -0
  246. package/vendor-core/run-verdict.js +353 -0
  247. package/vendor-core/scaling-sim.js +4 -5
  248. package/vendor-core/scorecard-estimates.js +62 -0
  249. package/vendor-core/sql-stages.js +11 -0
  250. package/vendor-core/stage-quantiles.js +2 -0
  251. package/vendor-core/threshold-overrides.js +160 -0
  252. package/vendor-core/threshold-summary.js +11 -33
  253. package/vendor-core/types.js +6 -42
  254. package/vendor-core/wall-clock.js +1 -12
  255. package/vendor-core/wasted-core-hours.js +2 -2
  256. package/public/assets/AutoscalingChurn-lxZHWIwq.js +0 -1
  257. package/public/assets/CacheUtilization-DuAJ-Lve.js +0 -1
  258. package/public/assets/CachingOpportunity-DC1t7o2_.js +0 -1
  259. package/public/assets/ColdStart-BOYXeiUZ.js +0 -1
  260. package/public/assets/ConfigAudit-MCPrJomC.js +0 -1
  261. package/public/assets/CoreUsageArea-ChNuqGA0.js +0 -1
  262. package/public/assets/Dashboard-VuyUGvZx.js +0 -1
  263. package/public/assets/DuplicatePlanSubtree-JZut9xwq.js +0 -1
  264. package/public/assets/DurationHistogram-_7C1w0l4.js +0 -1
  265. package/public/assets/EmptyState-D_ulfIIi.js +0 -1
  266. package/public/assets/ExecutorUtilization-B08E76jT.js +0 -1
  267. package/public/assets/GcPressure-BZMi2fTx.js +0 -1
  268. package/public/assets/ImpactEstimate-36WxuPdV.js +0 -1
  269. package/public/assets/IncompleteRun-t8JU7HRt.js +0 -1
  270. package/public/assets/JobFailures-CguB1bec.js +0 -1
  271. package/public/assets/MemoryUtilization-DDk8lz9-.js +0 -1
  272. package/public/assets/OverBroadcast-BHXLt6s7.js +0 -1
  273. package/public/assets/PartitionSizing-COj3uwV-.js +0 -1
  274. package/public/assets/PlanExplorer-CnCdEY_i.js +0 -1
  275. package/public/assets/PlanGraphRoute-BesZOW1n.js +0 -1
  276. package/public/assets/RetryWaste-CcU4ctAn.js +0 -1
  277. package/public/assets/RowPagination-D2aIcfGv.js +0 -1
  278. package/public/assets/ShuffleIO-NPHkWbg1.js +0 -1
  279. package/public/assets/Skew-CzztP-C4.js +0 -1
  280. package/public/assets/SlowHost-Dh2KHypN.js +0 -1
  281. package/public/assets/SmallFiles-CgYSuZQw.js +0 -1
  282. package/public/assets/SpeculationWaste-C8J5z1WS.js +0 -1
  283. package/public/assets/Spill-DwTQPZ_L.js +0 -1
  284. package/public/assets/StageFailed-aFeIEh3p.js +0 -1
  285. package/public/assets/StageFindingGroup-DQmAE3uk.js +0 -1
  286. package/public/assets/StageHeader-D6GBbcZp.js +0 -1
  287. package/public/assets/StagePill-CSKyM8Kd.js +0 -1
  288. package/public/assets/StageShape-J6U4cUcM.js +0 -1
  289. package/public/assets/StageSlowness-C5F2v_ZO.js +0 -1
  290. package/public/assets/Straggler-DcP3dFGA.js +0 -1
  291. package/public/assets/TaskFailures-C-vIEheo.js +0 -1
  292. package/public/assets/UnderBroadcast-DfjYGhoK.js +0 -1
  293. package/public/assets/WidgetLeadSummary-BdUUi7L5.js +0 -1
  294. package/public/assets/downsample-WmNM1qc9.js +0 -1
  295. package/public/assets/impact-sort-DxaUheWV.js +0 -1
  296. package/public/assets/inbox-LtbS_kBS.js +0 -1
  297. package/public/assets/index-27MbqTFr.js +0 -11
  298. package/public/assets/index-CWjjbtyo.css +0 -2
  299. package/public/assets/react-vendor-D2TLlSzI.js +0 -9
  300. package/public/assets/select-CC2Lyrmi.js +0 -1
  301. package/public/assets/toggle-group-lmgO21t9.js +0 -1
  302. package/public/assets/usePagedRows-jNUWgVTD.js +0 -1
  303. package/public/assets/useRecentFiles-qH5Ap4xm.js +0 -12
  304. package/public/assets/useSortMode-CvPY99UV.js +0 -1
  305. package/public/docs/assets/chunks/@localSearchIndexroot.CJBoRv1b.js +0 -1
  306. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CsCytCho.js +0 -1
  307. package/public/docs/assets/contributor-guide_architecture_drill-down.md.Bawx6NgP.js +0 -1
  308. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.sf9DU2bA.js +0 -1
  309. package/public/docs/assets/contributor-guide_architecture_overview.md.rhfxoGsI.js +0 -1
  310. package/public/docs/assets/contributor-guide_architecture_overview.md.rhfxoGsI.lean.js +0 -1
  311. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.B8Wc_ZTg.js +0 -1
  312. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.DYwFeyjV.js +0 -1
  313. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.CBJkwH24.js +0 -6
  314. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.CBJkwH24.lean.js +0 -1
  315. package/public/docs/assets/contributor-guide_development-setup.md.s85j2l8b.js +0 -15
  316. package/public/docs/assets/contributor-guide_development-setup.md.s85j2l8b.lean.js +0 -1
  317. package/public/docs/assets/contributor-guide_testing.md.Cnn6gz1C.js +0 -1
  318. package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.js +0 -1
  319. package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.lean.js +0 -1
  320. package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.js +0 -1
  321. package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.lean.js +0 -1
  322. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.js +0 -1
  323. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.lean.js +0 -1
  324. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.js +0 -7
  325. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.lean.js +0 -1
  326. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.js +0 -1
  327. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.lean.js +0 -1
  328. package/public/docs/assets/tuning-reference_bottleneck-failures.md.CAsFf3RR.lean.js +0 -1
  329. package/public/docs/assets/tuning-reference_bottleneck-gc.md.B4T3kJYV.js +0 -6
  330. package/public/docs/assets/tuning-reference_bottleneck-gc.md.B4T3kJYV.lean.js +0 -1
  331. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.js +0 -8
  332. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.lean.js +0 -1
  333. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.js +0 -7
  334. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.lean.js +0 -1
  335. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.js +0 -1
  336. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.lean.js +0 -1
  337. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.DDMQVOW6.lean.js +0 -1
  338. package/public/docs/assets/tuning-reference_bottleneck-skew.md.B0MzhWcX.lean.js +0 -1
  339. package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.BlIo6UDW.lean.js +0 -1
  340. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.DHGMTmPs.js +0 -5
  341. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.DHGMTmPs.lean.js +0 -1
  342. package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.js +0 -6
  343. package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.lean.js +0 -1
  344. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DIbXdAcQ.js +0 -7
  345. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DIbXdAcQ.lean.js +0 -1
  346. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.CB05v3zh.js +0 -8
  347. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.CB05v3zh.lean.js +0 -1
  348. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DqC_iGkw.lean.js +0 -1
  349. package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.js +0 -1
  350. package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.lean.js +0 -1
  351. package/public/docs/assets/tuning-reference_cluster-config.md.CD6vzYtD.js +0 -1
  352. package/public/docs/assets/tuning-reference_cluster-config.md.CD6vzYtD.lean.js +0 -1
  353. package/public/docs/assets/tuning-reference_config.md.UvveiWG3.js +0 -1
  354. package/public/docs/assets/tuning-reference_config.md.UvveiWG3.lean.js +0 -1
  355. package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.js +0 -1
  356. package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.lean.js +0 -1
  357. package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.js +0 -1
  358. package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.lean.js +0 -1
  359. package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.js +0 -1
  360. package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.lean.js +0 -1
  361. package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.js +0 -1
  362. package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.lean.js +0 -1
  363. package/public/docs/assets/tuning-reference_memory-model.md.CWhvgevP.js +0 -1
  364. package/public/docs/assets/tuning-reference_memory-model.md.CWhvgevP.lean.js +0 -1
  365. package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.js +0 -1
  366. package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.lean.js +0 -1
  367. package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.js +0 -1
  368. package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.lean.js +0 -1
  369. package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.js +0 -6
  370. package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.lean.js +0 -1
  371. package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.js +0 -1
  372. package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.lean.js +0 -1
  373. package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.js +0 -1
  374. package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.lean.js +0 -1
  375. package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.js +0 -1
  376. package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.lean.js +0 -1
  377. package/public/docs/assets/user-guide_getting-started.md.Cpe0U-eO.js +0 -3
  378. package/public/docs/assets/user-guide_getting-started.md.Cpe0U-eO.lean.js +0 -1
  379. package/public/docs/assets/user-guide_mcp-tools.md.DrphooJv.lean.js +0 -1
  380. package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.js +0 -1
  381. package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.lean.js +0 -1
  382. /package/public/docs/assets/{contributor-guide_architecture_board-widgets.md.9ToZXcTk.lean.js → contributor-guide_architecture_board-widgets.md.VTcYTH4d.lean.js} +0 -0
package/index.js CHANGED
@@ -12,13 +12,14 @@ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/
12
12
  const DEFAULT_PORT = 4173;
13
13
  const DEFAULT_HOST = '127.0.0.1';
14
14
 
15
- // vendor-core/ exists only in a published install (populated by vendor-core.mjs
16
- // at publish time); the monorepo falls back to the packages/core/src/ sibling.
15
+ // vendor-core/ is populated by vendor-core.mjs at publish time. In the monorepo the
16
+ // packages/core/src/ sibling's load-vendored.js is used, which prefers a leftover
17
+ // vendor-core/ only while it still matches core/src and warns when it does not.
17
18
  // load-vendored.js is the one module located by hand; the rest load through its
18
19
  // exported loadVendored().
19
20
  async function loadVendoredCore(dir, moduleName, opts) {
20
- const vendoredHelper = join(dir, 'vendor-core', 'load-vendored.js');
21
- const helperPath = existsSync(vendoredHelper) ? vendoredHelper : join(dir, '..', 'core', 'src', 'load-vendored.js');
21
+ const srcHelper = join(dir, '..', 'core', 'src', 'load-vendored.js');
22
+ const helperPath = existsSync(srcHelper) ? srcHelper : join(dir, 'vendor-core', 'load-vendored.js');
22
23
  const { loadVendored } = await import(pathToFileURL(helperPath).href);
23
24
  return loadVendored(dir, moduleName, opts);
24
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sparkforensics-server",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Local companion server for the SparkForensics dashboard: serves the app and proxies Spark History Server fetches to avoid browser CORS restrictions.",
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t,T as n,f as r,l as i,o as a,s as o,t as s,v as c,w as l}from"./charts-vendor-0VMaLVLN.js";import{S as u,d,u as f}from"./DisclosureContext-LYzHroHO.js";import{p}from"./plan-graph-vendor-B0sEms9Z.js";import{_ as m,b as h}from"./useRecentFiles-BrBl-AP1.js";import{S as g}from"./index-CEM9bz_x.js";import{o as _,s as v,t as y}from"./Dashboard-Bo_1jGqH.js";var b=e(t(),1),x=p(),S=60,C=6e4,w=220;function T(e,t,n,r,i){if(e.length===0&&t.length===0)return[];let a=Math.max(i,r-n),o=Math.max(1,Math.ceil(a/i)),s=[];for(let e=0;e<o;e++)s.push({tStart:n+e*i,adds:0,removes:0});let c=e=>Math.min(o-1,Math.max(0,Math.floor((e-n)/i)));for(let t of e)s[c(t.timestamp)].adds++;for(let e of t)s[c(e.timestamp)].removes++;return s}function E(e,t){let n=Math.max(1,t-e);return Math.max(C,Math.ceil(n/S))}function D(e){if(e<=0)return 1;let t=10**Math.floor(Math.log10(e)),n=e/t;return(n<=1?1:n<=2?2:n<=5?5:10)*t}function O(e){let t=D(e.reduce((e,t)=>Math.max(e,Math.abs(t.added),Math.abs(t.removed)),0));return{domain:[-t,t],ticks:[-t,-t/2,0,t/2,t]}}function k(e){return Math.abs(e.height)<1?null:(0,x.jsx)(l,{...e})}function A({finding:e}){return(0,x.jsxs)(`div`,{className:`flex flex-col gap-1 transition-colors`,children:[(0,x.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Short-lived executors: `,(0,x.jsxs)(`strong`,{children:[e.value,`%`]})]}),(0,x.jsx)(y,{finding:e}),(0,x.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2 text-sm`,children:[(0,x.jsx)(f,{impactBand:e.impactBand,className:`mt-1.5`}),(0,x.jsxs)(`span`,{children:[e.recommendation,` `,(0,x.jsx)(u,{anchor:`#config-autoscale-bounds`,children:`Tuning executorIdleTimeout and the min/max bounds`}),`.`]})]})]})}var j=(0,b.memo)(function({appModel:e,activeFileId:t,catalog:l=[],defaultCollapsed:u=!0}){let f=(0,b.useMemo)(()=>{let t=e.executors.added,n=e.executors.removed;if(t.length===0&&n.length===0)return{hasEvents:!1,added:t,removed:n};let r=e.app,i=r?.startTime??0,a=r?.endTime??i,o=E(i,a),s=v(T(t,n,i,a,o)).map(e=>({t:`${Math.round((e.tStart-i)/1e3)}s`,added:e.adds,removed:-e.removes}));return{hasEvents:!0,added:t,removed:n,rows:s,yAxisScale:O(s)}},[e,t]);if(!f.hasEvents)return(0,x.jsx)(g,{title:`Autoscaling Churn`,summary:(0,x.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:`No executor add/remove events (static allocation).`}),children:(0,x.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`No executor add/remove events (static allocation).`})});let{added:p,removed:y,rows:S,yAxisScale:C}=f,D=l.find(e=>e.type===`autoscalingChurn`);return(0,x.jsx)(g,{title:`Autoscaling Churn`,impactBand:D?.impactBand,badges:D&&(0,x.jsx)(d,{type:`autoscalingChurn`,impactBand:D.impactBand}),defaultCollapsed:u,summary:(0,x.jsx)(_,{value:`${p.length} added / ${y.length} removed`,context:D?`${D.value}% short-lived executors, ${D.impactBand}`:`executor churn events`}),children:(0,x.jsxs)(`div`,{className:`space-y-2`,children:[D&&(0,x.jsx)(A,{finding:D}),(0,x.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`executors added / removed over time`}),(0,x.jsx)(h,{ariaLabel:`Executor added and removed counts per time bucket over the run.`,height:w,table:{caption:`Executor added/removed counts by time bucket`,columns:[`Time`,`Executors added`,`Executors removed`],rows:S.map(e=>[e.t,e.added,Math.abs(e.removed)]),align:[`right`,`right`,`right`]},children:(0,x.jsxs)(s,{data:S,children:[(0,x.jsx)(r,{stroke:m.muted,strokeOpacity:.2}),(0,x.jsx)(o,{dataKey:`t`,tick:{fontSize:10}}),(0,x.jsx)(a,{tick:{fontSize:10},width:32,domain:C.domain,ticks:C.ticks}),(0,x.jsx)(c,{formatter:(e,t)=>[Math.abs(Number(e)),t]}),(0,x.jsx)(n,{wrapperStyle:{fontSize:10}}),(0,x.jsx)(i,{dataKey:`added`,name:`Added`,stackId:`churn`,fill:m.clean,shape:k}),(0,x.jsx)(i,{dataKey:`removed`,name:`Removed`,stackId:`churn`,fill:m.muted,shape:k})]})})]})})});export{j as AutoscalingChurn};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{$ as n,J as r,R as i,S as a,W as o,at as s,d as c,et as l,p as u,u as d}from"./DisclosureContext-LYzHroHO.js";import{p as f}from"./plan-graph-vendor-B0sEms9Z.js";import{m as p}from"./useRecentFiles-BrBl-AP1.js";import{D as m,F as h,I as g,L as _,M as v,P as y,S as b,j as x}from"./index-CEM9bz_x.js";import{o as S,r as C,t as w}from"./Dashboard-Bo_1jGqH.js";import{n as T}from"./finding-anchor-DF1cSHO1.js";import{t as E}from"./usePagedRows-BjPOpUU8.js";var D=e(t(),1),O=f(),k=70;function A(e){if(!e)return`—`;let t=[];return e.useMemory&&t.push(`Memory`),e.useDisk&&t.push(`Disk`),e.deserialized?t.push(`Deserialized`):(e.useMemory||e.useDisk)&&t.push(`Serialized`),(e.replication??1)>1&&t.push(`x${e.replication}`),t.join(` · `)||`—`}function j(e){return e.name||`RDD ${e.id}`}function M(e){let t=l(j(e));return t.length<=k?t:`${t.slice(0,k)}…`}function N(e){if(e.variant===`storageUnobserved`)return`No block updates logged: cached partition counts and sizes are unknown`;let t=r(`pct`,n(e));return e.variant===`diskSpillover`?`${t} spilled to disk: ${o(e.diskSize??0)} disk / ${o(e.memorySize??0)} memory`:`${t} cached (${e.numCachedPartitions??0}/${e.numPartitions??0} partitions)`}function P({finding:e}){let t=T([e]),n=e.dataUnavailable?`Cache storage not logged`:e.rddName??`RDD ${e.rddId}`;return(0,O.jsxs)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-1 transition-colors ${t.flashClassName}`,children:[(0,O.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2`,children:[(0,O.jsx)(d,{impactBand:e.impactBand,className:`mt-1.5`}),(0,O.jsx)(`span`,{children:n})]}),(0,O.jsx)(u,{children:(0,O.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:N(e)})}),(0,O.jsx)(w,{finding:e}),(0,O.jsx)(`p`,{className:`text-sm`,children:e.recommendation})]})}var F=(0,D.memo)(function({appModel:e,catalog:t}){let[r,l]=(0,D.useState)(0),[u,f]=(0,D.useState)(0),w=e.app?.rddInfo,T=(0,D.useMemo)(()=>w?[...w.values()].filter(e=>(e.storageLevel?.useMemory||e.storageLevel?.useDisk)&&(e.numCachedPartitions??0)>0).sort((e,t)=>(t.memorySize??0)+(t.diskSize??0)-((e.memorySize??0)+(e.diskSize??0))):[],[w]),k=(0,D.useMemo)(()=>p(t,`cacheUtilization`).sort((e,t)=>i[e.impactBand]-i[t.impactBand]),[t]),N=E(T,r,l),F=m(),I=F?k.findIndex(e=>e===F.finding):null,L=E(k,u,f,I),R=k.find(e=>e.dataUnavailable);if(T.length===0&&!R)return null;let z=e=>k.filter(t=>t.rddId===e),B=T.reduce((e,t)=>e+(t.memorySize??0)+(t.diskSize??0),0);return(0,O.jsx)(`div`,{"data-widget":`cache-utilization`,children:(0,O.jsxs)(b,{title:`Cache Storage`,impactBand:s(k),badges:(0,O.jsxs)(O.Fragment,{children:[k.length>0?(0,O.jsx)(c,{type:`cacheUtilization`,impactBand:s(k)??`info`}):null,(0,O.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[T.length>0?`${T.length} cached RDD${T.length===1?``:`s`}`:`cache storage not logged`,`, see`,` `,(0,O.jsx)(a,{anchor:`#memory-model`,children:`how Spark accounts cached memory`})]})]}),defaultCollapsed:!0,summary:T.length>0?(0,O.jsx)(S,{value:o(B),context:`cached across memory + disk`}):(0,O.jsx)(S,{value:`Unknown`,context:`${n(R)} persisted, no block updates`}),children:[T.length>0?(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(x,{children:[(0,O.jsx)(g,{children:(0,O.jsxs)(_,{children:[(0,O.jsx)(h,{children:`RDD`}),(0,O.jsx)(h,{children:`Storage level`}),(0,O.jsx)(h,{className:`text-right`,children:`Cached partitions`}),(0,O.jsx)(h,{className:`text-right`,children:`Memory`}),(0,O.jsx)(h,{className:`text-right`,children:`Disk`})]})}),(0,O.jsx)(v,{children:N.visible.map(e=>{let t=j(e),n=M(e),r=z(e.id);return(0,O.jsxs)(_,{children:[(0,O.jsxs)(y,{className:`max-w-80 truncate`,title:t===n?void 0:t,children:[n,r.length>0&&(0,O.jsx)(d,{impactBand:s(r)??`info`,className:`ml-1.5`})]}),(0,O.jsx)(y,{children:A(e.storageLevel)}),(0,O.jsxs)(y,{className:`text-right`,children:[e.numCachedPartitions,` / `,e.numPartitions]}),(0,O.jsx)(y,{className:`text-right`,children:o(e.memorySize??0)}),(0,O.jsx)(y,{className:`text-right`,children:o(e.diskSize??0)})]},e.id)})})]}),(0,O.jsx)(C,{page:N.effectivePage,totalPages:N.totalPages,onPrev:()=>l(e=>e-1),onNext:()=>l(e=>e+1)})]}):null,k.length>0?(0,O.jsxs)(`div`,{className:`mt-3 space-y-2 text-sm`,children:[L.visible.map(e=>(0,O.jsx)(P,{finding:e},e.id)),(0,O.jsx)(C,{page:L.effectivePage,totalPages:L.totalPages,onPrev:()=>f(e=>e-1),onNext:()=>f(e=>e+1)})]}):null]})})});export{F as CacheUtilization};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{E as n,W as r,d as i,dt as a,p as o}from"./DisclosureContext-LYzHroHO.js";import{p as s}from"./plan-graph-vendor-B0sEms9Z.js";import{h as c,m as l}from"./useRecentFiles-BrBl-AP1.js";import{D as u,F as d,I as f,L as p,M as m,P as h,S as g,j as _}from"./index-CEM9bz_x.js";import{o as v,r as y,t as b}from"./Dashboard-Bo_1jGqH.js";import{n as x}from"./finding-anchor-DF1cSHO1.js";import{t as S}from"./usePagedRows-BjPOpUU8.js";var C={name:`git-merge`,size:24,node:[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M6 21V9a9 9 0 0 0 9 9`,key:`7kw0sc`}]]};C.node;var w=a(C),T=e(t(),1),E=s();function D({relations:e,operator:t}){let n=t===`union`?`union`:`join`;return(0,E.jsx)(`span`,{className:`inline-flex flex-wrap items-baseline`,children:e.map((e,t)=>(0,E.jsxs)(`span`,{children:[t>0?(0,E.jsxs)(E.Fragment,{children:[` `,(0,E.jsx)(`span`,{className:`mx-1 font-semibold uppercase text-xs tracking-wide text-primary`,children:n}),` `]}):null,e.relation]},e.relation))})}function O({finding:e}){let t=x([e]),i=e.variant===`composite`;return(0,E.jsxs)(p,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`transition-colors ${t.flashClassName}`,children:[(0,E.jsx)(h,{children:(0,E.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[i?(0,E.jsx)(w,{className:`size-3.5 text-muted-foreground`,"aria-hidden":`true`}):null,i&&e.relations&&e.relations.length>0?(0,E.jsx)(D,{relations:e.relations,operator:e.operator}):(0,E.jsx)(`span`,{children:e.relation}),i?(0,E.jsx)(n,{variant:`outline`,className:`text-xs uppercase border-dashed`,children:e.operator?.toUpperCase()}):(0,E.jsx)(n,{variant:`secondary`,className:`text-xs uppercase`,children:e.format})]})}),(0,E.jsxs)(h,{children:[e.value,` queries`]}),(0,E.jsx)(h,{className:`text-right`,children:r(e.totalReadBytes)}),(0,E.jsxs)(h,{children:[(0,E.jsx)(b,{finding:e}),(0,E.jsx)(`p`,{className:`mt-1`,children:e.recommendation}),(0,E.jsx)(o,{children:(0,E.jsx)(c,{confidence:e.confidence,validationRequired:e.validationRequired})})]})]})}var k=(0,T.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[n,r]=(0,T.useState)(0),a=(0,T.useMemo)(()=>l(e,`cachingOpportunity`).sort((e,t)=>t.totalReadBytes-e.totalReadBytes||(t.value??0)-(e.value??0)),[e]),s=u(),c=s?a.findIndex(e=>e===s.finding):null,{totalPages:h,effectivePage:b,visible:x}=S(a,n,r,c);if(a.length===0)return null;let C=a[0];return(0,E.jsx)(g,{title:`Caching Opportunities`,impactBand:`info`,badges:(0,E.jsx)(i,{type:`cachingOpportunity`,impactBand:`info`}),defaultCollapsed:t,summary:(0,E.jsx)(v,{value:`${C.value}×`,context:`read by ${C.value} queries: ${C.relation}`}),children:(0,E.jsxs)(`div`,{className:`space-y-3`,children:[(0,E.jsxs)(_,{children:[(0,E.jsx)(f,{children:(0,E.jsxs)(p,{children:[(0,E.jsx)(d,{children:`Relation`}),(0,E.jsx)(d,{children:`Read by`}),(0,E.jsx)(d,{className:`text-right`,children:`Data read`}),(0,E.jsx)(d,{children:`Recommendation`})]})}),(0,E.jsx)(m,{children:x.map((e,t)=>(0,E.jsx)(O,{finding:e},`${e.format}:${e.relation}:${(e.executionIds??[]).join(`,`)}:${t}`))})]}),(0,E.jsx)(o,{children:(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Reuse is inferred from plan structure, not confirmed by execution. Verify before caching.`})}),(0,E.jsx)(y,{page:b,totalPages:h,onPrev:()=>r(e=>e-1),onNext:()=>r(e=>e+1)})]})})});export{k as CachingOpportunity};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{R as n,d as r,u as i}from"./DisclosureContext-LYzHroHO.js";import{p as a}from"./plan-graph-vendor-B0sEms9Z.js";import{D as o,S as s}from"./index-CEM9bz_x.js";import{o as c,r as l,t as u}from"./Dashboard-Bo_1jGqH.js";import{r as d}from"./impact-sort-7z0ZcBZf.js";import{n as f}from"./finding-anchor-DF1cSHO1.js";import{t as p}from"./usePagedRows-BjPOpUU8.js";import{n as m,t as h}from"./useSortMode-CU0vzThu.js";var g=e(t(),1),_=a();function v(e){return`${e.value}s`}function y({finding:e}){let t=f([e]);return(0,_.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-1 text-sm transition-colors ${t.flashClassName}`,children:[(0,_.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,_.jsx)(i,{impactBand:e.impactBand}),(0,_.jsx)(`strong`,{children:v(e)})]}),(0,_.jsx)(u,{finding:e}),(0,_.jsx)(`p`,{className:`text-muted-foreground pt-1`,children:e.recommendation})]})}var b=(0,g.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:i,setSortMode:a,orderBy:u}=h(),[f,b]=(0,g.useState)(!t),[x,S]=(0,g.useState)(0),C=e.filter(e=>e.type===`coldStart`).slice().sort((e,t)=>n[e.impactBand]-n[t.impactBand]),w=u(C,e=>[e],e=>e.stageId??null),T=o(),E=T?w.findIndex(e=>e===T.finding):null,{totalPages:D,effectivePage:O,visible:k}=p(w,x,S,E);return C.length===0?null:(0,_.jsxs)(s,{title:`Cold Start`,impactBand:C[0].impactBand,badges:(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(r,{type:`coldStart`,impactBand:C[0].impactBand}),d(C,C.length,f)?(0,_.jsx)(m,{mode:i,onChange:a}):null]}),open:f,onOpenChange:b,summary:(0,_.jsx)(c,{value:v(C[0]),context:`${C.length} issue${C.length===1?``:`s`} flagged`}),children:[(0,_.jsx)(`ul`,{className:`space-y-2`,children:k.map(e=>(0,_.jsx)(y,{finding:e},e.id))}),(0,_.jsx)(l,{page:O,totalPages:D,onPrev:()=>S(e=>e-1),onNext:()=>S(e=>e+1)})]})});export{b as ColdStart};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{R as n,S as r,at as i,d as a,j as o,p as s,u as c}from"./DisclosureContext-LYzHroHO.js";import{p as l}from"./plan-graph-vendor-B0sEms9Z.js";import{h as u,m as d}from"./useRecentFiles-BrBl-AP1.js";import{D as f,S as p}from"./index-CEM9bz_x.js";import{o as m,r as h,t as g}from"./Dashboard-Bo_1jGqH.js";import{n as _}from"./finding-anchor-DF1cSHO1.js";import{t as v}from"./usePagedRows-BjPOpUU8.js";var y=e(t(),1),b=l();function x({finding:e}){let t=_([e]);return(0,b.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-1 transition-colors ${t.flashClassName}`,children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(c,{impactBand:e.impactBand}),(0,b.jsx)(`code`,{className:`text-xs`,children:e.property}),(0,b.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`=`}),(0,b.jsx)(`code`,{className:`rounded bg-accent/10 px-1.5 py-0.5 font-mono text-xs text-accent`,children:e.valueText})]}),(0,b.jsx)(g,{finding:e}),(0,b.jsxs)(`p`,{className:`text-sm`,children:[e.recommendation,e.docAnchor?(0,b.jsxs)(b.Fragment,{children:[` `,(0,b.jsxs)(r,{anchor:e.docAnchor,children:[`Why `,e.property,` matters`]})]}):null]})]})}var S=(0,y.memo)(function({appModel:e,configFindings:t,defaultCollapsed:r=!0}){let[c,l]=(0,y.useState)(0),g=(0,y.useMemo)(()=>d(t??[],`configAudit`).sort((e,t)=>n[e.impactBand]-n[t.impactBand]),[t]),_=f(),S=_?g.findIndex(e=>e===_.finding):null,{totalPages:C,effectivePage:w,visible:T}=v(g,c,l,S);if(g.length===0){let t=e.evidenceAvailability?.entries.find(e=>e.key===`sparkConfiguration`),n;if(t)n=t.state===`present`?`No misconfigurations detected.`:t.state===`unknown`&&t.reasonCode===`parseIncomplete`?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(`span`,{children:[t.summary,` `]}),(0,b.jsx)(s,{children:(0,b.jsx)(u,{evidenceKey:`sparkConfiguration`})})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(`span`,{children:`No environment info captured in this log. `}),(0,b.jsx)(s,{children:(0,b.jsx)(u,{evidenceKey:`sparkConfiguration`})})]});else{let t=e.app?.evidenceInputs;n=(t?t.environmentUpdates>0:Object.keys(e.app?.config??{}).length>0||e.app?.resources)?`No misconfigurations detected.`:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(`span`,{children:`No environment info captured in this log. `}),(0,b.jsx)(s,{children:(0,b.jsx)(u,{evidenceKey:`sparkConfiguration`})})]})}let r=(0,b.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:n});return(0,b.jsx)(p,{title:`Config Audit`,compact:!0,summary:r,children:r})}let E=i(g);return(0,b.jsxs)(p,{title:`Config Audit`,impactBand:E,badges:(0,b.jsx)(a,{type:`configAudit`,impactBand:E??`info`,docAnchor:o(g)}),statusBadge:(0,b.jsx)(s,{children:(0,b.jsx)(u,{evidenceKey:`sparkConfiguration`})}),defaultCollapsed:r,summary:(0,b.jsx)(m,{value:`${g.length}`,context:`misconfiguration${g.length===1?``:`s`} flagged`}),children:[(0,b.jsx)(`ul`,{className:`space-y-4`,children:T.map(e=>(0,b.jsx)(x,{finding:e},e.id))}),(0,b.jsx)(h,{page:w,totalPages:C,onPrev:()=>l(e=>e-1),onNext:()=>l(e=>e+1)})]})});export{S as ConfigAudit};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t,T as n,f as r,n as i,o as a,s as o,u as s,v as c}from"./charts-vendor-0VMaLVLN.js";import{G as l,S as u,b as d,d as f,p,u as m}from"./DisclosureContext-LYzHroHO.js";import{p as h}from"./plan-graph-vendor-B0sEms9Z.js";import{_ as g,b as _,h as v,y}from"./useRecentFiles-BrBl-AP1.js";import{S as b}from"./index-CEM9bz_x.js";import{d as x,f as S,o as C,r as w,s as T,t as E}from"./Dashboard-Bo_1jGqH.js";import{t as D}from"./usePagedRows-BjPOpUU8.js";var O=e(t(),1),k=h(),A=240,j={PROCESS_LOCAL:`Process-local`,NODE_LOCAL:`Node-local`,RACK_LOCAL:`Rack-local`,NO_PREF:`No preference`,ANY:`Any`,OTHER:`Other`,idle:`Idle`},M={PROCESS_LOCAL:g.clean,NODE_LOCAL:g.accent,RACK_LOCAL:g.warning,NO_PREF:g.muted,ANY:g.critical,OTHER:g.muted,idle:g.muted},N=`Core Usage by Locality`,P=(0,O.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[h,P]=(0,O.useState)(0),F=d()?.data.coreLocality,I=(0,O.useMemo)(()=>{let e=F?.chart??{hasActivity:!1};return e.hasActivity?{...e,sampled:T(e.points)}:e},[F]),L=F?.ratio.topStages??[],R=e.find(e=>e.type===`coreLocality`),z=e.some(e=>e.type===`memoryUtilization`&&e.variant===`idleCores`),B=L.filter(e=>e.nonLocalTasks>0),{totalPages:V,effectivePage:H,visible:U}=D(B,h,P);if(!I.hasActivity)return(0,k.jsx)(b,{title:N,summary:(0,k.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:`No stage activity to plot.`}),children:(0,k.jsx)(x,{tone:`neutral`,icon:S,title:`No stage activity to plot.`})});let{order:W,points:G,sampled:K,peakCores:q}=I;return(0,k.jsx)(b,{title:N,impactBand:R?.impactBand,badges:R?(0,k.jsx)(f,{type:`coreLocality`,impactBand:R.impactBand}):null,defaultCollapsed:t,summary:(0,k.jsx)(C,{value:`${l(q)} cores`,context:`busy at the peak`}),children:(0,k.jsxs)(`div`,{className:`space-y-2`,children:[(0,k.jsx)(p,{children:(0,k.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`approximate: stage-level attribution`,R?null:(0,k.jsxs)(k.Fragment,{children:[`, see `,(0,k.jsx)(u,{anchor:`#bottleneck-utilization`,children:`how utilization is measured`})]})]})}),R?(0,k.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2 text-sm`,children:[(0,k.jsx)(m,{impactBand:R.impactBand,className:`mt-1.5`}),(0,k.jsxs)(`span`,{children:[(0,k.jsxs)(`strong`,{children:[R.value,`% non-local`]}),`: `,R.recommendation]})]}):null,R?(0,k.jsx)(E,{finding:R}):null,(0,k.jsx)(p,{children:R?(0,k.jsx)(v,{confidence:R.confidence,validationRequired:R.validationRequired}):null}),(0,k.jsx)(_,{ariaLabel:`Approximate concurrent core usage over time, stacked by task locality tier, with idle capacity shown. See the legend for tier colors.`,height:A,table:{caption:`Concurrent core usage over time by locality tier`,columns:[`Time (s)`,...W.map(e=>j[e]??e)],rows:G.map(e=>[e.t,...W.map(t=>Math.round(e[t]))]),align:Array.from({length:W.length+1},()=>`right`)},children:(0,k.jsxs)(i,{data:K,children:[(0,k.jsx)(r,{vertical:!1,stroke:g.muted,strokeOpacity:.2}),(0,k.jsx)(o,{dataKey:`t`,tick:{fontSize:10},label:{value:`seconds from app start`,position:`insideBottom`,offset:-2,fontSize:10}}),(0,k.jsx)(a,{tick:{fontSize:10},width:36,label:{value:`avg concurrent cores`,angle:-90,position:`insideLeft`,fontSize:10}}),(0,k.jsx)(c,{...y}),(0,k.jsx)(n,{wrapperStyle:{fontSize:10}}),W.map(e=>(0,k.jsx)(s,{type:`monotone`,dataKey:e,name:j[e]??e,stackId:`cores`,stroke:M[e]??g.muted,fill:M[e]??g.muted,fillOpacity:e===`idle`?.15:.8,isAnimationActive:!1},e))]})}),(0,k.jsx)(p,{children:U.length>0?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`ul`,{className:`space-y-1 text-xs text-muted-foreground`,children:U.map(e=>(0,k.jsxs)(`li`,{children:[`Stage `,e.stageId,`: `,Math.round(e.ratio*100),`% non-local (`,e.nonLocalTasks,`/`,e.taskCount,` tasks)`]},e.stageId))}),(0,k.jsx)(w,{page:H,totalPages:V,onPrev:()=>P(e=>e-1),onNext:()=>P(e=>e+1)})]}):null}),(0,k.jsx)(p,{children:z?(0,k.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Idle cores also flagged → see Memory Utilization widget`}):null})]})})});export{P as CoreUsageArea};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Skew-SpQE7zeJ.js","./rolldown-runtime-hePW80VL.js","./charts-vendor-0VMaLVLN.js","./DisclosureContext-LYzHroHO.js","./react-vendor-BAKt3vny.js","./plan-graph-vendor-B0sEms9Z.js","./plan-graph-vendor-DLioOiRN.css","./StageFindingGroup-Bzm2TY03.js","./useRecentFiles-BrBl-AP1.js","./index-CEM9bz_x.js","./index-BcqTLKFp.css","./impact-sort-7z0ZcBZf.js","./finding-anchor-DF1cSHO1.js","./usePagedRows-BjPOpUU8.js","./useSortMode-CU0vzThu.js","./StageHeader-BSV8ALhT.js","./PlanExplorer-DdmPkKO1.js","./StageShape-CzR4jHOt.js","./TinyTask-CIPRxWfT.js","./ShuffleIO-wZB94LS8.js","./select-Cy5pmbrh.js","./PartitionSizing-DZLnjy0d.js","./Spill-DEw0Kd1i.js","./GcPressure-AoL_ZNrV.js","./StageFailed-BEfXdEJc.js","./TaskFailures-BZ8kLZiO.js","./RetryWaste-BbEPsdMw.js","./SlowHost-DwDBCTvr.js","./StageSlowness-vMPsnAaa.js","./Straggler-Cf__OGl5.js","./SpeculationWaste-73PDmj0c.js","./ColdStart-BoiYzEyV.js","./MemoryUtilization-B65OVZlq.js","./ExecutorUtilization-OE6VMFkG.js","./CachingOpportunity-Cn-LmRA4.js","./JobFailures-DF3U2z1f.js","./ConfigAudit-BoJc6PAw.js","./DuplicatePlanSubtree-BaAuGAoo.js","./SmallFiles-yjY_6sT1.js","./UnderBroadcast-CBm8ZPoS.js","./OverBroadcast-DXbJREDl.js","./CacheUtilization-Ce0K6_X2.js","./CoreUsageArea-BFfXKu7K.js","./AutoscalingChurn-CUSIvvab.js","./IncompleteRun-Bv6IzgsQ.js"])))=>i.map(i=>d[i]);
2
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{D as t,M as n,O as r,T as i,_ as a,a as o,d as s,f as c,i as l,l as u,n as d,o as f,p,s as m,u as h,v as g}from"./charts-vendor-0VMaLVLN.js";import{A as _,D as v,E as y,M as b,O as x,P as S,j as C,k as ee}from"./react-vendor-BAKt3vny.js";import{B as te,E as w,H as ne,K as T,O as re,P as E,R as ie,S as D,T as O,V as ae,W as k,X as oe,_ as se,at as ce,b as A,d as j,dt as le,et as ue,ft as de,g as fe,h as pe,it as me,j as he,l as ge,lt as _e,m as ve,mt as M,o as ye,p as N,pt as P,s as be,st as xe,u as Se,ut as Ce,v as we,vt as Te,x as Ee,y as De,yt as F}from"./DisclosureContext-LYzHroHO.js";import{p as Oe}from"./plan-graph-vendor-B0sEms9Z.js";import{A as ke,C as Ae,D as je,E as Me,F as Ne,I as Pe,M as Fe,N as Ie,O as Le,P as Re,S as ze,T as Be,_ as I,a as Ve,b as He,c as Ue,d as We,f as Ge,g as Ke,h as qe,i as Je,j as Ye,k as Xe,n as Ze,o as Qe,p as $e,r as et,s as tt,t as nt,u as rt,v as it,w as at,x as ot,y as st}from"./useRecentFiles-BrBl-AP1.js";import{A as ct,C as lt,Ct as L,D as ut,E as dt,F as ft,H as pt,I as mt,L as R,M as ht,P as z,S as B,T as V,a as gt,b as _t,bt as vt,c as yt,j as bt,l as xt,pt as St,s as Ct,tt as wt,w as Tt,wt as Et,y as H,yt as Dt}from"./index-CEM9bz_x.js";var Ot={name:`circle-dashed`,size:24,node:[[`path`,{d:`M10.1 2.182a10 10 0 0 1 3.8 0`,key:`5ilxe3`}],[`path`,{d:`M13.9 21.818a10 10 0 0 1-3.8 0`,key:`11zvb9`}],[`path`,{d:`M17.609 3.721a10 10 0 0 1 2.69 2.7`,key:`1iw5b2`}],[`path`,{d:`M2.182 13.9a10 10 0 0 1 0-3.8`,key:`c0bmvh`}],[`path`,{d:`M20.279 17.609a10 10 0 0 1-2.7 2.69`,key:`1ruxm7`}],[`path`,{d:`M21.818 10.1a10 10 0 0 1 0 3.8`,key:`qkgqxc`}],[`path`,{d:`M3.721 6.391a10 10 0 0 1 2.7-2.69`,key:`1mcia2`}],[`path`,{d:`M6.391 20.279a10 10 0 0 1-2.69-2.7`,key:`1fvljs`}]]};Ot.node;var kt=le(Ot),At={name:`circle-x`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]],aliases:[`x-circle`]};At.node;var jt=le(At),Mt={name:`copy`,size:24,node:[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]};Mt.node;var Nt=le(Mt),Pt={name:`inbox`,size:24,node:[[`polyline`,{points:`22 12 16 12 14 15 10 15 8 12 2 12`,key:`o97t9d`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}]]};Pt.node;var Ft=le(Pt),It={name:`list-filter`,size:24,node:[[`path`,{d:`M2 5h20`,key:`1fs1ex`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M9 19h6`,key:`456am0`}]]};It.node;var Lt=le(It),Rt={name:`search-x`,size:24,node:[[`path`,{d:`m13.5 8.5-5 5`,key:`1cs55j`}],[`path`,{d:`m8.5 8.5 5 5`,key:`a8mexj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`path`,{d:`m21 21-4.3-4.3`,key:`1qie3q`}]]};Rt.node;var zt=le(Rt),U=e(n(),1),Bt=(0,U.lazy)(()=>H(()=>import(`./Skew-SpQE7zeJ.js`).then(e=>({default:e.Skew})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]),import.meta.url)),Vt=(0,U.lazy)(()=>H(()=>import(`./StageShape-CzR4jHOt.js`).then(e=>({default:e.StageShape})),__vite__mapDeps([17,1,2,5,6,7,3,4,8,9,10,11,12,13,14,15,16]),import.meta.url)),Ht=(0,U.lazy)(()=>H(()=>import(`./TinyTask-CIPRxWfT.js`).then(e=>({default:e.TinyTask})),__vite__mapDeps([18,1,2,5,6,7,3,4,8,9,10,11,12,13,14,15,16]),import.meta.url)),Ut=(0,U.lazy)(()=>H(()=>import(`./ShuffleIO-wZB94LS8.js`).then(e=>({default:e.ShuffleIO})),__vite__mapDeps([19,1,2,3,4,5,6,8,9,10,11,12,13,14,15,20,16]),import.meta.url)),Wt=(0,U.lazy)(()=>H(()=>import(`./PartitionSizing-DZLnjy0d.js`).then(e=>({default:e.PartitionSizing})),__vite__mapDeps([21,1,2,3,4,5,6,8,9,10,11,12,13,14,15,20,16]),import.meta.url)),Gt=(0,U.lazy)(()=>H(()=>import(`./Spill-DEw0Kd1i.js`).then(e=>({default:e.Spill})),__vite__mapDeps([22,1,2,3,4,5,6,8,9,10,11,12,13,14,16]),import.meta.url)),Kt=(0,U.lazy)(()=>H(()=>import(`./GcPressure-AoL_ZNrV.js`).then(e=>({default:e.GcPressure})),__vite__mapDeps([23,1,2,3,4,5,6,8,9,10,11,12,13,14,15]),import.meta.url)),qt=(0,U.lazy)(()=>H(()=>import(`./StageFailed-BEfXdEJc.js`).then(e=>({default:e.StageFailed})),__vite__mapDeps([24,1,2,3,4,5,6,8,9,10,11,12,13,14]),import.meta.url)),Jt=(0,U.lazy)(()=>H(()=>import(`./TaskFailures-BZ8kLZiO.js`).then(e=>({default:e.TaskFailures})),__vite__mapDeps([25,1,2,3,4,5,6,8,9,10,11,12,13,14]),import.meta.url)),Yt=(0,U.lazy)(()=>H(()=>import(`./RetryWaste-BbEPsdMw.js`).then(e=>({default:e.RetryWaste})),__vite__mapDeps([26,1,2,3,4,5,6,8,9,10,11,12,13,14]),import.meta.url)),Xt=(0,U.lazy)(()=>H(()=>import(`./SlowHost-DwDBCTvr.js`).then(e=>({default:e.SlowHost})),__vite__mapDeps([27,1,2,3,4,5,6,8,9,10,11,12,13,14,15]),import.meta.url)),Zt=(0,U.lazy)(()=>H(()=>import(`./StageSlowness-vMPsnAaa.js`).then(e=>({default:e.StageSlowness})),__vite__mapDeps([28,1,2,3,4,5,6,9,10,11,8,12,13,14,15]),import.meta.url)),Qt=(0,U.lazy)(()=>H(()=>import(`./Straggler-Cf__OGl5.js`).then(e=>({default:e.Straggler})),__vite__mapDeps([29,1,2,3,4,5,6,8,9,10,11,12,13,14,15]),import.meta.url)),$t=(0,U.lazy)(()=>H(()=>import(`./SpeculationWaste-73PDmj0c.js`).then(e=>({default:e.SpeculationWaste})),__vite__mapDeps([30,1,2,3,4,5,6,9,10,11,8,12,13,14,15]),import.meta.url)),en=(0,U.lazy)(()=>H(()=>import(`./ColdStart-BoiYzEyV.js`).then(e=>({default:e.ColdStart})),__vite__mapDeps([31,1,2,3,4,5,6,9,10,11,8,12,13,14]),import.meta.url)),tn=(0,U.lazy)(()=>H(()=>import(`./MemoryUtilization-B65OVZlq.js`).then(e=>({default:e.MemoryUtilization})),__vite__mapDeps([32,1,2,3,4,5,6,8,9,10,12,13]),import.meta.url)),nn=(0,U.lazy)(()=>H(()=>import(`./ExecutorUtilization-OE6VMFkG.js`).then(e=>({default:e.ExecutorUtilization})),__vite__mapDeps([33,1,2,3,4,5,6,9,10,12,13]),import.meta.url)),rn=(0,U.lazy)(()=>H(()=>import(`./CachingOpportunity-Cn-LmRA4.js`).then(e=>({default:e.CachingOpportunity})),__vite__mapDeps([34,1,2,3,4,5,6,8,9,10,12,13]),import.meta.url)),an=(0,U.lazy)(()=>H(()=>import(`./JobFailures-DF3U2z1f.js`).then(e=>({default:e.JobFailures})),__vite__mapDeps([35,3,1,2,4,5,6,8,9,10]),import.meta.url)),on=(0,U.lazy)(()=>H(()=>import(`./ConfigAudit-BoJc6PAw.js`).then(e=>({default:e.ConfigAudit})),__vite__mapDeps([36,1,2,3,4,5,6,8,9,10,12,13]),import.meta.url)),sn=(0,U.lazy)(()=>H(()=>import(`./DuplicatePlanSubtree-BaAuGAoo.js`).then(e=>({default:e.DuplicatePlanSubtree})),__vite__mapDeps([37,1,2,3,4,5,6,8,9,10,11,12,13,14]),import.meta.url)),cn=(0,U.lazy)(()=>H(()=>import(`./SmallFiles-yjY_6sT1.js`).then(e=>({default:e.SmallFiles})),__vite__mapDeps([38,1,2,3,4,5,6,8,9,10,11,12,13,14]),import.meta.url)),ln=(0,U.lazy)(()=>H(()=>import(`./UnderBroadcast-CBm8ZPoS.js`).then(e=>({default:e.UnderBroadcast})),__vite__mapDeps([39,1,2,3,4,5,6,8,9,10,11,12,13,14]),import.meta.url)),un=(0,U.lazy)(()=>H(()=>import(`./OverBroadcast-DXbJREDl.js`).then(e=>({default:e.OverBroadcast})),__vite__mapDeps([40,1,2,3,4,5,6,8,9,10,11,12,13,14]),import.meta.url)),dn=(0,U.lazy)(()=>H(()=>import(`./CacheUtilization-Ce0K6_X2.js`).then(e=>({default:e.CacheUtilization})),__vite__mapDeps([41,1,2,3,4,5,6,8,9,10,12,13]),import.meta.url)),fn=(0,U.lazy)(()=>H(()=>import(`./CoreUsageArea-BFfXKu7K.js`).then(e=>({default:e.CoreUsageArea})),__vite__mapDeps([42,1,2,3,4,5,6,8,9,10,13]),import.meta.url)),pn=(0,U.lazy)(()=>H(()=>import(`./AutoscalingChurn-CUSIvvab.js`).then(e=>({default:e.AutoscalingChurn})),__vite__mapDeps([43,1,2,3,4,5,6,8,9,10]),import.meta.url)),mn=(0,U.lazy)(()=>H(()=>import(`./IncompleteRun-Bv6IzgsQ.js`).then(e=>({default:e.IncompleteRun})),__vite__mapDeps([44,3,1,2,4,5,6,9,10]),import.meta.url));function W(e,t){e.displayName=t}W(Bt,`Skew`),W(Vt,`StageShape`),W(Ht,`TinyTask`),W(Ut,`ShuffleIO`),W(Wt,`PartitionSizing`),W(Gt,`Spill`),W(Kt,`GcPressure`),W(qt,`StageFailed`),W(Jt,`TaskFailures`),W(Yt,`RetryWaste`),W(Xt,`SlowHost`),W(Zt,`StageSlowness`),W(Qt,`Straggler`),W($t,`SpeculationWaste`),W(en,`ColdStart`),W(tn,`MemoryUtilization`),W(nn,`ExecutorUtilization`),W(rn,`CachingOpportunity`),W(an,`JobFailures`),W(on,`ConfigAudit`),W(sn,`DuplicatePlanSubtree`),W(cn,`SmallFiles`),W(ln,`UnderBroadcast`),W(un,`OverBroadcast`),W(dn,`CacheUtilization`),W(fn,`CoreUsageArea`),W(pn,`AutoscalingChurn`),W(mn,`IncompleteRun`);var hn={incompleteRun:{component:mn,region:`action`,widgetId:`incomplete-run`,routeable:!0},skew:{component:Bt,region:`action`,widgetId:`skew`,routeable:!0},stageShape:{component:Vt,region:`action`,widgetId:`stage-shape`,routeable:!0},tinyTask:{component:Ht,region:`action`,widgetId:`tiny-task`,routeable:!0},shuffle:{component:Ut,region:`action`,widgetId:`shuffle-io`,routeable:!0},partitionSizing:{component:Wt,region:`action`,widgetId:`partition-sizing`,routeable:!0},spill:{component:Gt,region:`action`,widgetId:`spill`,routeable:!0},gc:{component:Kt,region:`action`,widgetId:`gc-pressure`,routeable:!0},stageFailed:{component:qt,region:`action`,widgetId:`stage-failed`,routeable:!0},failures:{component:Jt,region:`action`,widgetId:`task-failures`,routeable:!0},retryWaste:{component:Yt,region:`action`,widgetId:`retry-waste`,routeable:!0},slowHost:{component:Xt,region:`action`,widgetId:`slow-host`,routeable:!0},stageSlowness:{component:Zt,region:`action`,widgetId:`stage-slowness`,routeable:!0},straggler:{component:Qt,region:`action`,widgetId:`straggler`,routeable:!0},speculationWaste:{component:$t,region:`action`,widgetId:`speculation-waste`,routeable:!0},coldStart:{component:en,region:`action`,widgetId:`cold-start`,routeable:!0},memoryUtilization:{component:tn,region:`reference`,widgetId:`memory-utilization`,routeable:!0},utilization:{component:nn,region:`reference`,widgetId:`executor-utilization`,routeable:!0},coreLocality:{component:fn,region:`reference`,widgetId:`core-usage-area`,routeable:!0},cachingOpportunity:{component:rn,region:`action`,widgetId:`caching-opportunity`,routeable:!0},cacheUtilization:{component:dn,region:`reference`,widgetId:`cache-utilization`,routeable:!0},jobFailureRate:{component:an,region:`action`,widgetId:`job-failures`,routeable:!0},autoscalingChurn:{component:pn,region:`action`,widgetId:`autoscaling-churn`,routeable:!0},configAudit:{component:on,region:`action`,widgetId:`config-audit`,routeable:!0},duplicatePlanSubtree:{component:sn,region:`action`,widgetId:`duplicate-plan-subtree`,routeable:!0},smallFiles:{component:cn,region:`action`,widgetId:`small-files`,routeable:!0},underBroadcast:{component:ln,region:`action`,widgetId:`under-broadcast`,routeable:!0},overBroadcast:{component:un,region:`action`,widgetId:`over-broadcast`,routeable:!0}},gn={action:0,reference:1};function _n(e){return Object.entries(e).filter(([e])=>hn[e]!==void 0).map(([e,{order:t}])=>({entry:hn[e],type:e,order:t})).sort((e,t)=>gn[e.entry.region]-gn[t.entry.region]||e.order-t.order).map(({entry:e,type:t})=>({component:e.component,region:e.region,widgetId:e.widgetId,type:t}))}var vn=new Set([`cacheUtilization`,`memoryUtilization`,`utilization`]);function yn(e){let t=hn[e];return t!==void 0&&t.region===`reference`&&!vn.has(e)}function bn(){return Object.entries(hn).filter(([e])=>yn(e)).map(([,e])=>({component:e.component,widgetId:e.widgetId}))}var G=Oe(),xn={clean:{box:`border-clean/40 bg-clean/10`,icon:`text-clean`,title:`text-clean`},neutral:{box:`border-border/60 bg-muted/40`,icon:`text-muted-foreground`,title:`text-foreground`}};function Sn({icon:e,tone:t=`neutral`,title:n,description:r,action:i,className:a}){let o=xn[t];return(0,G.jsxs)(`div`,{className:F(`flex items-start gap-3 rounded-xl border p-4`,o.box,a),children:[(0,G.jsx)(e,{"aria-hidden":`true`,className:F(`mt-0.5 size-4 shrink-0`,o.icon)}),(0,G.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,G.jsx)(`p`,{className:F(`text-sm font-medium`,o.title),children:n}),r?(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r}):null]}),i]})}var Cn=[`critical`,`warning`,`info`];function wn(){return{impactBands:new Set,types:new Set,stages:new Set}}function Tn(e){return e.impactBands.size===0&&e.types.size===0&&e.stages.size===0}function En(e,t){return gt(e,{impactBand:t.impactBands,type:t.types,stageId:t.stages})}function Dn(e,t){return e.filter(e=>En(e,t))}function On(e,t){return[`impactBands`,`types`,`stages`].filter(n=>!En(e,{...wn(),[n]:t[n]}))}function kn(e,t){let n=new Set,r=new Set,i=new Set;for(let a of[...e,...t])n.add(a.impactBand),r.add(a.type),a.stageId!=null&&i.add(a.stageId);return{impactBands:Cn.filter(e=>n.has(e)),types:[...r].sort(),stages:[...i].sort((e,t)=>e-t)}}function An(e){return e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}function jn(e,t){let n=new URLSearchParams(e),r=wn();for(let e of An(n.get(`impact`)))Cn.includes(e)&&r.impactBands.add(e);let i=new Set(t.types);for(let e of An(n.get(`type`)))i.has(e)&&r.types.add(e);for(let e of An(n.get(`stage`))){let t=Number(e);Number.isInteger(t)&&r.stages.add(t)}return r}function Mn(e){let t=[];return e.impactBands.size&&t.push(`impact=${Cn.filter(t=>e.impactBands.has(t)).join(`,`)}`),e.types.size&&t.push(`type=${[...e.types].sort().join(`,`)}`),e.stages.size&&t.push(`stage=${[...e.stages].sort((e,t)=>e-t).join(`,`)}`),t.length?`?${t.join(`&`)}`:``}var Nn=(0,U.createContext)(null);function Pn(e,t){let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n}function Fn({options:e,fileId:t,children:n}){let[r,i]=(0,U.useState)(()=>jn(typeof window>`u`?``:window.location.search,e));(0,U.useEffect)(()=>{if(typeof window>`u`)return;let e=Mn(r),t=`${window.location.pathname}${e}${window.location.hash}`;window.history.replaceState(window.history.state,``,t)},[r]);let a=(0,U.useRef)(t);(0,U.useEffect)(()=>{a.current!==t&&(a.current=t,i(wn()))},[t]),(0,U.useEffect)(()=>()=>{if(typeof window>`u`)return;let e=`${window.location.pathname}${window.location.hash}`;window.history.replaceState(window.history.state,``,e)},[]),(0,U.useEffect)(()=>{if(typeof window>`u`)return;let t=()=>i(jn(window.location.search,e));return window.addEventListener(`popstate`,t),()=>window.removeEventListener(`popstate`,t)},[e]);let o=(0,U.useCallback)(e=>i(t=>({...t,impactBands:Pn(t.impactBands,e)})),[]),s=(0,U.useCallback)(e=>i(t=>({...t,types:Pn(t.types,e)})),[]),c=(0,U.useCallback)(e=>i(t=>({...t,stages:Pn(t.stages,e)})),[]),l=(0,U.useCallback)(()=>i(wn()),[]),u=(0,U.useMemo)(()=>({selection:r,toggleImpactBand:o,toggleType:s,toggleStage:c,clearAll:l,replaceSelection:i}),[r,o,s,c,l]);return(0,G.jsx)(Nn.Provider,{value:u,children:n})}function In(){let e=(0,U.useContext)(Nn);if(!e)throw Error(`useFindingFilter outside FindingFilterProvider`);return e}function Ln(){let{clearAll:e}=In();return(0,G.jsx)(Sn,{icon:zt,title:`No findings match the active filters`,description:`Adjust or clear the filters to see findings.`,action:(0,G.jsx)(`button`,{type:`button`,onClick:e,className:`cursor-pointer text-sm underline`,children:`Clear all filters`})})}function Rn({className:e,orientation:t=`horizontal`,...n}){return(0,G.jsx)(S,{"data-slot":`separator`,orientation:t,className:F(`shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch`,e),...n})}var zn=U.createContext({size:`default`,variant:`default`,spacing:2,orientation:`horizontal`});function Bn({className:e,variant:t,size:n,spacing:r=2,orientation:i=`horizontal`,children:a,...o}){return(0,G.jsx)(C,{"data-slot":`toggle-group`,"data-variant":t,"data-size":n,"data-spacing":r,"data-orientation":i,style:{"--gap":r},className:F(`group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-vertical:flex-col data-vertical:items-stretch`,e),...o,children:(0,G.jsx)(zn.Provider,{value:{variant:t,size:n,spacing:r,orientation:i},children:a})})}function Vn({className:e,children:t,variant:n=`default`,size:r=`default`,...i}){let a=U.useContext(zn);return(0,G.jsx)(b,{"data-slot":`toggle-group-item`,"data-variant":a.variant||n,"data-size":a.size||r,"data-spacing":a.spacing,className:F(`shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t`,ze({variant:a.variant||n,size:a.size||r}),e),...i,children:t})}var Hn={critical:`aria-pressed:bg-critical/10 aria-pressed:text-critical`,warning:`aria-pressed:bg-warning/10 aria-pressed:text-warning`,info:`aria-pressed:bg-info/10 aria-pressed:text-info`};function Un(e,t,n){let r=new Set(e);for(let e of r)t.has(e)||n(e);for(let e of t)r.has(e)||n(e)}function Wn({label:e,count:t,children:n}){return(0,G.jsxs)(at,{children:[(0,G.jsxs)(je,{className:F(Et({variant:`outline`,size:`sm`}),`gap-1.5`),"aria-label":`Filter by ${e.toLowerCase()}`,children:[e,t>0&&(0,G.jsx)(`span`,{className:`rounded-full bg-primary px-1.5 text-xs font-medium text-primary-foreground`,children:t}),(0,G.jsx)(Ce,{"aria-hidden":`true`,className:`opacity-60`})]}),(0,G.jsx)(Me,{align:`start`,className:`max-h-72 w-56 overflow-y-auto`,children:n})]})}function Gn({options:e,resultCount:t}){let{selection:n,toggleImpactBand:r,toggleType:i,toggleStage:a,clearAll:o}=In(),[s,c]=(0,U.useState)(``),[l,u]=(0,U.useState)(``),d=(0,U.useMemo)(()=>{let t=s.trim();return t?e.stages.filter(e=>String(e).includes(t)):e.stages},[e.stages,s]),f=(0,U.useMemo)(()=>{let t=l.trim().toLowerCase();return t?e.types.filter(e=>e.toLowerCase().includes(t)||me(e).toLowerCase().includes(t)):e.types},[e.types,l]);if(e.impactBands.length===0&&e.types.length===0&&e.stages.length===0)return null;let p=!Tn(n),m=[...[...n.impactBands].map(e=>({key:`impact-${e}`,label:`impact ${e}`,onRemove:()=>r(e)})),...[...n.types].map(e=>({key:`type-${e}`,label:`type ${e}`,onRemove:()=>i(e)})),...[...n.stages].map(e=>({key:`stage-${e}`,label:`stage ${e}`,onRemove:()=>a(e)}))];return(0,G.jsxs)(`section`,{"aria-label":`Filter findings`,className:`flex flex-wrap items-center gap-x-3 gap-y-2 rounded-xl border border-border/60 p-2`,children:[(0,G.jsxs)(`span`,{title:`Narrow the whole dashboard to findings matching the chosen impact bands, types, or stages`,className:`flex items-center gap-1.5 text-xs font-medium text-muted-foreground`,children:[(0,G.jsx)(Lt,{"aria-hidden":`true`,className:`size-3.5`}),`Filter findings`]}),(0,G.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`text-xs text-muted-foreground`,children:p?`${t} finding${t===1?``:`s`} match${t===1?`es`:``} the active filters`:`Showing all ${t} finding${t===1?``:`s`}`}),(0,G.jsx)(Rn,{orientation:`vertical`,className:`h-6`}),e.impactBands.length>0&&(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:`Impact`}),(0,G.jsx)(Bn,{multiple:!0,"aria-label":`Filter by impact`,value:[...n.impactBands],onValueChange:e=>Un(e,n.impactBands,r),children:e.impactBands.map(e=>(0,G.jsxs)(Vn,{value:e,variant:`outline`,size:`sm`,"aria-label":`Filter by impact: ${e}`,className:F(`tap-target-comfortable gap-1.5`,Hn[e]),children:[(0,G.jsx)(Se,{impactBand:e}),e]},e))})]}),e.types.length>0&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Rn,{orientation:`vertical`,className:`h-6`}),(0,G.jsxs)(Wn,{label:`Type`,count:n.types.size,children:[(0,G.jsx)(`div`,{className:`p-1`,children:(0,G.jsx)(Ae,{type:`text`,value:l,onChange:e=>u(e.target.value),onKeyDown:e=>e.stopPropagation(),placeholder:`Search type…`,"aria-label":`Search types`,autoComplete:`off`,className:`h-8`})}),f.map(e=>(0,G.jsxs)(Be,{checked:n.types.has(e),onCheckedChange:()=>i(e),"aria-label":`Filter by type: ${e}`,children:[(0,G.jsx)(`span`,{className:`rounded bg-muted px-1 text-xs font-medium text-foreground!`,children:me(e)}),` `,e]},e)),f.length===0&&(0,G.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`No matching type`})]})]}),e.stages.length>0&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Rn,{orientation:`vertical`,className:`h-6`}),(0,G.jsxs)(Wn,{label:`Stage`,count:n.stages.size,children:[(0,G.jsx)(`div`,{className:`p-1`,children:(0,G.jsx)(Ae,{type:`text`,value:s,onChange:e=>c(e.target.value),onKeyDown:e=>e.stopPropagation(),placeholder:`Search stage id…`,"aria-label":`Search stages`,autoComplete:`off`,className:`h-8`})}),d.map(e=>(0,G.jsxs)(Be,{checked:n.stages.has(e),onCheckedChange:()=>a(e),"aria-label":`Filter by stage: ${e}`,children:[`Stage `,e]},e)),d.length===0&&(0,G.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`No matching stage`})]})]}),p&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Rn,{orientation:`vertical`,className:`h-6`}),(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[m.map(e=>(0,G.jsxs)(`button`,{type:`button`,onClick:e.onRemove,"aria-label":`Remove filter: ${e.label}`,className:`tap-target-comfortable inline-flex cursor-pointer items-center gap-1 rounded-full border border-border bg-muted px-2 py-0.5 text-xs hover:bg-muted/70`,children:[e.label,` `,(0,G.jsx)(St,{"aria-hidden":`true`,className:`size-3`})]},e.key)),(0,G.jsx)(`button`,{type:`button`,onClick:o,className:`tap-target-comfortable cursor-pointer text-xs underline`,children:`Clear all filters`})]})]})]})}function Kn(e,t){let n=[];for(let{launch:t,finish:r}of e)r>t&&(n.push({t,delta:1}),n.push({t:r,delta:-1}));n.sort((e,t)=>e.t-t.t||e.delta-t.delta);let r=[],i=0;for(let e=0;e<n.length;e++){let a=n[e];i+=a.delta;let o=n[e+1];if(!o||o.t===a.t)continue;let s=t==null?i:Math.min(i,t);r.push({tStart:a.t,tEnd:o.t,busy:s})}return r}function qn(e,{bucketBy:t=`time`,bucketWidthMs:n=1e3,hypotheticalCores:r=null}={}){let i=Kn(e,r);if(t===`coreCount`){let e=[];for(let t of i)e[t.busy]=(e[t.busy]??0)+(t.tEnd-t.tStart);for(let t=0;t<e.length;t++)e[t]===void 0&&(e[t]=0);return{mode:`coreCount`,histogram:e}}if(i.length===0)return{mode:`time`,bucketWidthMs:n,startTime:null,endTime:null,buckets:[]};let a=i[0].tStart,o=i[i.length-1].tEnd,s=[];for(let e=a;e<o;e+=n){let t=e+n,r=0;for(let n of i){let i=Math.max(n.tStart,e),a=Math.min(n.tEnd,t);a>i&&(r+=n.busy*(a-i))}s.push({tStart:e,tEnd:t,busyCoreMs:r,avgBusyCores:r/n})}return{mode:`time`,bucketWidthMs:n,startTime:a,endTime:o,buckets:s}}async function Jn(e,t){let n=[...e.stages.keys()],r=await Promise.all(n.map(e=>t(e).catch(()=>null))),i=[],a=!1;for(let e of r){if(!e){a=!0;continue}let{metrics:t,fieldNames:n}=e,r=n.length,o=n.indexOf(`launchTime`),s=n.indexOf(`finishTime`);if(o!==-1&&s!==-1)for(let e=0;e<t.length;e+=r)i.push({launch:t[e+o],finish:t[e+s]})}return{intervals:i,incomplete:a}}async function Yn(e,t){let{intervals:n,incomplete:r}=await Jn(e,t),{histogram:i}=qn(n,{bucketBy:`coreCount`});return{histogram:i??[],incomplete:r}}function Xn(e){let t=P(e=>e.exportMode);return{exportMode:t,getTaskData:t?void 0:e}}function Zn(e,t=2e3){if(e.length<=t)return e;if(t<=1)return e.length?[e[0]]:[];let n=e.length-1,r=n/(t-1),i=Array(t);for(let a=0;a<t;a++)i[a]=e[Math.min(n,Math.round(a*r))];return i}function K({value:e,context:t}){return(0,G.jsx)(`div`,{className:`space-y-2`,children:(0,G.jsxs)(`p`,{className:`flex min-h-[4rem] flex-wrap content-start items-baseline gap-x-2`,children:[(0,G.jsx)(`span`,{className:`line-clamp-2 text-2xl font-semibold tracking-tight`,title:typeof e==`string`?e:void 0,children:e}),(0,G.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:t})]})})}var Qn=220;function $n({appModel:e,getTaskData:t}){let{exportMode:n,getTaskData:r}=Xn(t),[i,a]=(0,U.useState)(null),[o,s]=(0,U.useState)(!1),[d,p]=(0,U.useState)(!1),h=e.stages.size>0;if((0,U.useEffect)(()=>{if(!h||!d||i!==null||!r)return;let t=!1;return Yn(e,r).then(({histogram:e,incomplete:n})=>{t||(a(e),s(n))}),()=>{t=!0}},[e,r,h,d,i]),!h)return null;let g=(i??[]).map((e,t)=>({cores:String(t),coreCount:t,ms:e})),_=Zn(g),v=g.reduce((e,t)=>t.ms>e.ms?t:e,g[0]);return(0,G.jsx)(B,{title:`Core-Usage Distribution`,id:`core-usage-histogram`,open:d,onOpenChange:p,summary:i!==null&&v?(0,G.jsx)(K,{value:T(v.ms),context:`at ${v.coreCount} concurrent core${v.coreCount===1?``:`s`}`}):void 0,children:i===null?n?(0,G.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Core-usage detail isn’t included in exported reports.`}):(0,G.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Loading core usage…`}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(He,{ariaLabel:`Wall-clock time spent at each concurrent-core count across the run. See the table below for exact values.`,height:Qn,table:{caption:`Wall-clock time by concurrent-core count`,columns:[`Concurrent cores`,`Time`],rows:i.map((e,t)=>[t,T(e)]),align:[`right`,`right`]},children:(0,G.jsxs)(l,{data:_,children:[(0,G.jsx)(c,{vertical:!1,stroke:I.muted,strokeOpacity:.2}),(0,G.jsx)(m,{dataKey:`cores`,tick:{fontSize:10},label:{value:`Concurrent busy cores`,position:`insideBottom`,offset:-5,fontSize:10}}),(0,G.jsx)(f,{tick:{fontSize:10},width:48,tickFormatter:e=>T(e)}),(0,G.jsx)(u,{dataKey:`ms`,name:`Time`,fill:I.accent})]})}),o?(0,G.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Reopen this file to compute full core usage because some task data was released.`}):null,(0,G.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`See `,(0,G.jsx)(D,{anchor:`#bottleneck-utilization`,children:`how to read concurrent-core utilization`}),`.`]})]})})}var er=`This estimate is derived from a simplified compute model; compare it against wall-clock data before acting on it.`,q=e=>`${Math.round(e*100)/100} core-h`;function tr(){return(0,G.jsx)(N,{children:(0,G.jsx)(qe,{confidence:`low`,validationRequired:er})})}function nr(){let e=A()?.data,t=e?.efficiency;if(!e||!t||t.availableComputeHours<=0)return null;let n=null;return t.dominantWaste===`driver`?n=(0,G.jsxs)(`p`,{children:[(0,G.jsx)(`strong`,{children:`Driver-bound waste dominates.`}),` Review driver sizing (spark.driver.memory / spark.driver.cores) before scaling executors.`]}):t.dominantWaste===`executor`&&(n=(0,G.jsxs)(`p`,{children:[(0,G.jsx)(`strong`,{children:`Executor-bound waste dominates.`}),` Review executor count / cores by reducing cluster size or enabling dynamic allocation.`]})),(0,G.jsx)(B,{title:`Compute Efficiency`,statusBadge:(0,G.jsx)(tr,{}),defaultCollapsed:!0,summary:(0,G.jsx)(K,{value:t.wastagePct==null?q(t.availableComputeHours):`${t.wastagePct}% wasted`,context:`of ${q(t.availableComputeHours)} available`}),children:(0,G.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[!e.wallClockReliable&&(0,G.jsx)(N,{children:(0,G.jsx)(`p`,{className:`text-muted-foreground`,children:`This run used concurrent job groups: the driver/executor split below is approximate, not precise.`})}),(0,G.jsxs)(`p`,{children:[`Available: `,(0,G.jsx)(`strong`,{children:q(t.availableComputeHours)}),t.wastagePct!=null&&(0,G.jsxs)(G.Fragment,{children:[` `,`· wasted `,(0,G.jsxs)(`strong`,{children:[t.wastagePct,`%`]})]})]}),(0,G.jsxs)(`p`,{children:[(0,G.jsx)(Se,{impactBand:`info`}),` Driver-bound waste: `,(0,G.jsx)(`strong`,{children:q(t.driverWasteHours)})]}),(0,G.jsxs)(`p`,{children:[(0,G.jsx)(Se,{impactBand:`info`}),` Executor-bound waste: `,(0,G.jsx)(`strong`,{children:q(t.executorWasteHours)})]}),(0,G.jsxs)(`p`,{className:`text-muted-foreground`,children:[`Floor (same executors, zero skew): `,T(t.floorZeroSkewMs)]}),n]})})}var rr=[{label:`Extract`,key:`extract`},{label:`Transform`,key:`transform`},{label:`Load`,key:`load`}];function ir(){let e=A()?.data.etlPhases;if(!e||e.extract+e.transform+e.load===0)return null;let t=rr.reduce((t,n)=>e[n.key]>e[t.key]?n:t);return(0,G.jsx)(B,{title:`ETL Phase Attribution`,defaultCollapsed:!0,summary:(0,G.jsx)(K,{value:`${t.label} ${T(e[t.key])}`,context:`largest phase`}),children:(0,G.jsxs)(`div`,{className:`space-y-1`,children:[rr.map(({label:t,key:n})=>(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`strong`,{children:t}),`: `,T(e[n])]},n)),(0,G.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Each phase adds up the run time of its stages. Stages that run at the same time both count, so a phase can add up to more than the run's wall-clock.`}),(0,G.jsx)(N,{children:(0,G.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Heuristic: a stage that both shuffles and writes counts in Transform and Load, so phases can overlap and need not sum to wall-clock.`})})]})})}var ar=220;function or(e){let t=e.app,n=e.executors.added,r=e.executors.removed;if(t?.startTime==null||t?.endTime==null)return{times:[],counts:[]};let i=t.endTime-t.startTime,a=Math.max(5e3,Math.floor(i/100)),o=[],s=[],c=new Map(r.map(e=>[e.executorId,e.timestamp]));for(let e=t.startTime;e<=t.endTime;e+=a){let r=n.filter(t=>{let n=c.get(t.executorId)??1/0;return t.timestamp<=e&&e<n}).length;o.push(((e-t.startTime)/1e3).toFixed(0)+`s`),s.push(r)}return{times:o,counts:s}}function sr({active:e,payload:t,label:n}){return!e||!t||t.length===0?null:(0,G.jsxs)(`div`,{style:it,"data-testid":`executor-count-tooltip`,children:[`At `,String(n),`: Active executors `,String(t[0].value)]})}var cr=(0,U.memo)(function({appModel:e,activeFileId:t}){let{chartData:n,sampled:r,hasSeries:i,peak:a}=(0,U.useMemo)(()=>{let{times:t,counts:n}=or(e),r=t.map((e,t)=>({label:e,count:n[t]})),i=Zn(r),a=n.length>0;return{chartData:r,sampled:i,hasSeries:a,peak:a?Math.max(...n):0}},[e,t]);return i?(0,G.jsx)(B,{title:`Executor Count Over Time`,summary:(0,G.jsx)(K,{value:`${a} peak`,context:`concurrent executors`}),children:(0,G.jsx)(He,{ariaLabel:`Executor count over time. See the table below for exact values.`,height:ar,table:{caption:`Executor timeline: active executor count over time`,columns:[`Time`,`Active executors`],rows:n.map(e=>[e.label,e.count]),align:[`left`,`right`]},children:(0,G.jsxs)(d,{data:r,children:[(0,G.jsx)(c,{vertical:!1,stroke:I.muted,strokeOpacity:.2}),(0,G.jsx)(m,{dataKey:`label`,tick:{fontSize:10},minTickGap:24}),(0,G.jsx)(f,{allowDecimals:!1,tick:{fontSize:10},width:32}),(0,G.jsx)(g,{content:sr}),(0,G.jsx)(h,{type:`stepAfter`,dataKey:`count`,name:`Active executors`,stroke:I.clean,fill:I.clean,fillOpacity:.15})]})})}):(0,G.jsx)(B,{title:`Executor Count Over Time`,summary:(0,G.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:`Timeline unavailable: no end time recorded.`}),children:(0,G.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`This run has no ApplicationEnd event, so the executor timeline can't be plotted without fabricating an end time. See the Incomplete Run finding for what's still reliable.`})})}),lr=[10,20,50,80,100,110,120,150,200,300,400,500];function ur(e,t,n){return t<=0||n<=0?0:e/Math.min(n,t)}function dr(e,t){let n=0;for(let r of Object.keys(e)){let{totalTaskDurationSum:i,taskCount:a}=e[r];n+=ur(i,a,t)}return n}function fr({app:e,observedActiveMs:t,runAggregates:n,executorsAdded:r}){let i=n?.perStage??{},a=wt(e??{},r),o=a>0?dr(i,a):0,s=t>0?Math.round(Math.abs(o-t)/t*100):null,c=o>0?t/o:1;return{baselineCores:a,testPercentages:lr,predictions:lr.map(e=>{let t=Math.max(1,Math.round(a*e/100));return{pct:e,cores:t,estMakespanMs:Math.round(dr(i,t)*c)}}),modelErrorPct:s}}var pr=`What-If Executor Scaling`,mr=220,hr=20;function gr([e,t]){let n=(t-e)*.1;return[Math.max(0,e-n),t+n]}function _r(e){return[...e.stages.values()].some(e=>{let t=e.submittedAt,n=e.completedAt;return typeof t==`number`&&Number.isFinite(t)&&typeof n==`number`&&Number.isFinite(n)&&n>t})}function vr(e){return e.evidenceAvailability?.entries.find(e=>e.key===`taskCoreTime`)}function yr({reason:e,evidence:t}){return(0,G.jsx)(B,{title:pr,summary:(0,G.jsxs)(`span`,{className:`text-muted-foreground text-xs`,children:[`Not available: `,e]}),children:(0,G.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Not available: `,e,` `,(0,G.jsx)(qe,{evidenceKey:t})]})})}function br(e){if(e===100)return`with the current executors`;if(e<100)return`with ${e}% of the executors`;let t=e/100;return`with ${Number.isInteger(t)?t:t.toFixed(1)}× the executors`}function xr({appModel:e}){let t=A()?.data,n=vr(e);if(!Te(e.runAggregates)||n!=null&&n.state!==`present`)return(0,G.jsx)(yr,{reason:n?.summary??`No usable task and core-time evidence in this log.`,evidence:`taskCoreTime`});if(!t)return null;let r=fr({app:e.app,observedActiveMs:t.wallClock.stagesActive,runAggregates:e.runAggregates,executorsAdded:e.executors.added});if(r.baselineCores<=0)return(0,G.jsx)(yr,{reason:`Baseline executor/core capacity is unavailable in this log.`});if(!_r(e))return(0,G.jsx)(yr,{reason:`Usable stage timing is unavailable in this log.`});let i=r.modelErrorPct!=null&&r.modelErrorPct>=hr,a=Zn(r.predictions),l=r.predictions.reduce((e,t)=>t.estMakespanMs<e.estMakespanMs?t:e);return(0,G.jsx)(B,{title:pr,defaultCollapsed:!0,summary:(0,G.jsx)(K,{value:T(l.estMakespanMs),context:`best case, ${br(l.pct)}`}),children:(0,G.jsxs)(`div`,{className:`space-y-3`,children:[(0,G.jsx)(N,{children:(0,G.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Model Error:`,` `,(0,G.jsx)(`strong`,{className:i?`text-warning`:void 0,children:r.modelErrorPct==null?`—`:`${r.modelErrorPct}%`}),` `,`(idealized makespan vs. observed); higher means all estimates below carry more error, since a single log only observes one scale.`]})}),(0,G.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Move along this curve by changing `,(0,G.jsx)(`code`,{children:`spark.dynamicAllocation`}),`’s executor bounds, see the `,(0,G.jsx)(D,{anchor:`#config-autoscale-bounds`,children:`autoscaling config guide`}),`.`]}),t.wallClockReliable?null:(0,G.jsx)(N,{children:(0,G.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`This run used concurrent job groups, so the wall-clock-based estimates below may be unreliable.`})}),(0,G.jsx)(N,{children:(0,G.jsx)(`p`,{className:`text-xs`,children:(0,G.jsx)(qe,{evidenceKey:`taskCoreTime`})})}),(0,G.jsx)(He,{ariaLabel:`Estimated makespan by executor percentage: diminishing-returns curve.`,height:mr,table:{caption:`Estimated makespan by executor percentage`,columns:[`% Executors`,`Cores`,`Est. makespan`],rows:r.predictions.map(e=>[`${e.pct}%`,e.cores,T(e.estMakespanMs)]),align:[`right`,`right`,`right`]},children:(0,G.jsxs)(o,{data:a,children:[(0,G.jsx)(c,{stroke:I.muted,strokeOpacity:.2}),(0,G.jsx)(m,{dataKey:`pct`,tickFormatter:e=>`${e}%`,tick:{fontSize:10}}),(0,G.jsx)(f,{domain:gr,tickFormatter:e=>T(e),tick:{fontSize:10},width:56}),(0,G.jsx)(g,{formatter:e=>[T(Number(e)),`Est. makespan`],labelFormatter:e=>`${e}% executors`}),(0,G.jsx)(s,{type:`monotone`,dataKey:`estMakespanMs`,name:`Est. makespan`,stroke:I.accent,dot:{r:3}})]})})]})})}function Sr(e){let t=hn[e.type],n=typeof e.recommendation==`string`?e.recommendation.trim():``;return!t?.routeable||!n?null:{finding:e,widgetId:t.widgetId,region:t.region,findingLabel:yt(e.type),stageId:typeof e.stageId==`number`?e.stageId:null,recommendation:n}}function Cr(e,t){return t.includes(e)?Sr(e):null}function wr(e,t){return Tr(e,t)[0]??null}function Tr(e,t){return se(e,t).map(Sr).filter(e=>e!==null)}function Er(e,t){return`${e} ${t}${e===1?``:`s`}`}function Dr({text:e,label:t,testId:n}){let[r,i]=(0,U.useState)(!1);return(0,G.jsxs)(L,{variant:`outline`,size:`sm`,"data-testid":n,onClick:()=>{ot(e).then(()=>{i(!0),setTimeout(()=>i(!1),1500)}).catch(()=>{})},children:[r?(0,G.jsx)(Pe,{"aria-hidden":`true`}):(0,G.jsx)(Nt,{"aria-hidden":`true`}),r?`Copied`:t]})}function Or({text:e}){let[t,n]=(0,U.useState)(!1),r=async()=>{try{await ot(e),n(!0),setTimeout(()=>n(!1),1500)}catch{}};return(0,G.jsxs)(L,{variant:`ghost`,size:`sm`,"data-testid":`copy-finding-button`,onClick:()=>void r(),children:[t?(0,G.jsx)(Pe,{"aria-hidden":`true`}):(0,G.jsx)(Nt,{"aria-hidden":`true`}),t?`Copied`:`Copy`]})}function kr({step:e,finding:t,interpretation:n,index:r,onRoute:i}){let{openStage:a}=_t(),o=Ee[me(t.type)],s=we(n,t),c=s?.figure??null,l=s?.meaning??null,u=`next-step-${r}-title`,d=M()===`advanced`,f=d?s?.provenance??null:null,p=d&&t.confidence&&t.confidence!==`high`?t.confidence:null;return(0,G.jsxs)(`li`,{className:`flex gap-3`,"data-testid":`next-step`,"aria-labelledby":u,children:[(0,G.jsx)(`span`,{"aria-hidden":`true`,className:F(`mt-0.5 flex size-6 shrink-0 items-center justify-center rounded-full text-xs font-semibold tabular-nums`,r===0?`bg-primary text-primary-foreground`:`bg-muted text-foreground`),children:r+1}),(0,G.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1.5 [overflow-wrap:anywhere]`,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1`,children:[(0,G.jsx)(j,{type:t.type,impactBand:t.impactBand,docAnchor:t.docAnchor}),(0,G.jsxs)(`h3`,{id:u,className:`text-sm font-semibold`,children:[Ct(t),e.stageId==null?null:(0,G.jsxs)(`span`,{className:`font-normal text-muted-foreground`,children:[` in Stage `,e.stageId]})]}),c?(0,G.jsxs)(`span`,{className:`font-mono text-xs text-muted-foreground tabular-nums sm:ml-auto`,children:[(0,G.jsx)(`span`,{className:`font-sans`,children:`Potential savings `}),(0,G.jsx)(`span`,{className:`font-semibold text-foreground`,children:c}),l?(0,G.jsxs)(`span`,{className:`font-sans`,children:[` `,l]}):null]}):null]}),o?(0,G.jsxs)(`p`,{className:`text-sm`,children:[(0,G.jsx)(`span`,{className:`font-medium`,children:`What's happening: `}),o.description]}):null,(0,G.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[(0,G.jsx)(`span`,{className:`font-medium text-foreground`,children:`What to try: `}),e.recommendation]}),f||p?(0,G.jsxs)(`p`,{className:`text-xs text-muted-foreground`,"data-testid":`next-step-provenance`,children:[f?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`span`,{className:`font-medium text-foreground`,children:`Estimate: `}),f]}):null,p?(0,G.jsxs)(`span`,{title:typeof t.validationRequired==`string`?t.validationRequired:void 0,children:[f?` `:``,`${p[0].toUpperCase()}${p.slice(1)} confidence: verify before acting.`]}):null]}):null,e.relatedTypes.length>0?(0,G.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Also flagged here: `,e.relatedTypes.map(yt).join(`, `),`. These often share this cause, so the same fix may clear them too.`]}):null,(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 pt-1`,children:[(0,G.jsxs)(L,{size:`sm`,variant:r===0?`default`:`outline`,"data-shortcut-target":!0,onClick:()=>{let e=Sr(t);e&&i(e)},children:[`Show evidence`,(0,G.jsx)(vt,{"aria-hidden":`true`})]}),e.stageId==null?null:(0,G.jsxs)(L,{size:`sm`,variant:`ghost`,onClick:()=>a(e.stageId),children:[`Stage `,e.stageId,` details`]}),(0,G.jsx)(Or,{text:e.copyText})]})]})]})}var Ar=`docs/user-guide/understanding-findings.html`;function jr(){let[e,t]=(0,U.useState)(!1),n=O(),r=P(e=>e.exportMode);return(0,G.jsxs)(`div`,{className:`text-sm`,children:[(0,G.jsxs)(`button`,{type:`button`,className:`tap-target-comfortable inline-flex cursor-pointer items-center gap-1 rounded-sm text-left font-medium text-primary underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,"aria-expanded":e,"aria-controls":`newcomer-primer`,onClick:()=>t(e=>!e),children:[`New to Spark tuning? How to read this report`,e?(0,G.jsx)(_e,{"aria-hidden":`true`,className:`size-4`}):(0,G.jsx)(Ce,{"aria-hidden":`true`,className:`size-4`})]}),e?(0,G.jsxs)(`div`,{id:`newcomer-primer`,className:`mt-2 max-w-prose space-y-2 rounded-md border border-border bg-muted/40 p-3 text-muted-foreground`,children:[(0,G.jsxs)(`p`,{children:[(0,G.jsx)(`span`,{className:`font-medium text-foreground`,children:`Stages and tasks.`}),` Spark splits each job into stages. A stage runs the same code as many tasks, one per slice (partition) of the data, and it finishes only when its slowest task does. Stage numbers match the Spark UI.`]}),(0,G.jsxs)(`p`,{children:[(0,G.jsx)(`span`,{className:`font-medium text-foreground`,children:`Executors and cores.`}),` Tasks run on executors, the worker processes of your cluster, one task per core at a time. Idle capacity is how much of those cores ran nothing.`]}),(0,G.jsxs)(`p`,{children:[(0,G.jsx)(`span`,{className:`font-medium text-foreground`,children:`Shuffle.`}),` Moving data between stages, for example for a join or a group-by. It is often the most expensive part of a job.`]}),(0,G.jsxs)(`p`,{children:[(0,G.jsx)(`span`,{className:`font-medium text-foreground`,children:`Potential savings and colors.`}),` A time figure, such as 58.6s of run time, estimates how much sooner the run could finish; it is not a guarantee. A resource figure in core-hours (core-h) or gigabyte-hours of memory (GB-h) is cluster time a fix would free up: it cuts cost, but may not shorten the run. Red (critical), amber (warning) and blue (info) show how serious each finding is. When a finding shows a time-savings figure, its color usually follows that figure.`]}),r?null:(0,G.jsx)(`a`,{href:Ar,target:`_blank`,rel:`noopener noreferrer`,className:`inline-block text-primary underline-offset-4 hover:underline`,onClick:e=>{!n||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||(e.preventDefault(),n.openSite(Ar))},children:`What every finding means`})]}):null]})}function Mr({interpretation:e,onRoute:t}){let{title:n,summary:r,failed:i,clean:a,failureReason:o,remaining:s,copyText:c}=e.data.verdict,l=e.data.verdict.steps.map(t=>({step:t,finding:fe(e,t.leadIndex)})).filter(e=>e.finding!=null),u=M();return(0,G.jsxs)(`section`,{id:`run-verdict`,tabIndex:-1,"aria-labelledby":`run-verdict-title`,"data-testid":`run-verdict`,className:F(`scroll-mt-20 space-y-4 rounded-xl border bg-card p-4 outline-none focus-visible:ring-2 focus-visible:ring-ring sm:p-5`,a?`border-clean/40`:i?`border-critical/40`:`border-border`),children:[(0,G.jsxs)(`div`,{className:`space-y-1`,children:[(0,G.jsxs)(`h2`,{id:`run-verdict-title`,className:F(`flex items-center gap-2 font-heading text-lg font-semibold`,a&&`text-clean`,i&&`text-critical`),children:[a?(0,G.jsx)(Dt,{"aria-hidden":`true`,className:`size-5 shrink-0`}):null,i?(0,G.jsx)(jt,{"aria-hidden":`true`,className:`size-5 shrink-0`}):null,n]}),(0,G.jsx)(`p`,{className:`max-w-prose text-sm text-muted-foreground`,children:r.join(` `)}),o?(0,G.jsxs)(`p`,{"data-testid":`run-failure-reason`,className:`max-w-prose pt-1 text-sm`,children:[(0,G.jsx)(`span`,{className:`font-medium`,children:`Spark's recorded reason: `}),(0,G.jsx)(`code`,{className:`font-mono text-xs [overflow-wrap:anywhere]`,children:o})]}):null]}),u===`advanced`?null:(0,G.jsx)(jr,{}),l.length>0?(0,G.jsx)(`ol`,{"aria-label":`Next steps`,className:`space-y-4`,children:l.map(({step:n,finding:r},i)=>(0,G.jsx)(kr,{step:n,finding:r,interpretation:e,index:i,onRoute:t},n.key))}):null,l.length>0?(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[s>0?(0,G.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[Er(s,`more place`),` to look at in the full list under Findings.`]}):(0,G.jsx)(`span`,{}),(0,G.jsx)(Dr,{label:`Copy next steps`,testId:`copy-plan-button`,text:c??``})]}):null,u===`advanced`&&l.length>1?(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:i?`Order: failures first, then by the high end of potential savings; impact band breaks ties.`:`Order: by the high end of potential savings, quantified estimates before unquantified ones; impact band breaks ties.`}):null]})}function Nr(){let e=P(e=>e.activeFileId),t=P(e=>e.exportMode),{resetToDropZone:n}=pt(),r=O();return t||e!==`sample-run`?null:(0,G.jsxs)(`section`,{"aria-label":`Sample run`,"data-testid":`sample-run-notice`,className:`flex flex-col gap-3 rounded-xl border border-primary/30 bg-primary/5 p-4 text-sm sm:flex-row sm:items-center sm:justify-between`,children:[(0,G.jsxs)(`p`,{className:`max-w-prose`,children:[(0,G.jsx)(`span`,{className:`font-medium`,children:`This is the sample run`}),`, a real Spark job from a public example corpus, picked because it shows several common problems. Everything below works the same on your own event log.`]}),(0,G.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2`,children:[(0,G.jsxs)(L,{size:`sm`,variant:`outline`,onClick:n,children:[`Load my event log`,(0,G.jsx)(vt,{"aria-hidden":`true`})]}),(0,G.jsx)(`a`,{href:re,target:`_blank`,rel:`noopener noreferrer`,className:`tap-target-comfortable inline-flex items-center rounded-sm px-2 text-primary underline-offset-4 hover:underline`,onClick:e=>{!r||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||(e.preventDefault(),r.openSite(re))},children:`Where do I find my log?`})]})]})}var Pr={critical:`inset 4px 0 0 var(--color-critical)`,warning:`inset 4px 0 0 var(--color-warning)`};function Fr({eyebrow:e,value:t,meta:n,flag:r=null,bar:i,dataTestid:a}){return(0,G.jsxs)(`div`,{"data-testid":a,className:`flex flex-col gap-1 p-3`,style:r?{boxShadow:Pr[r]}:void 0,children:[(0,G.jsxs)(`span`,{className:F(`flex items-center gap-1.5 text-xs font-medium text-muted-foreground`,r&&ge[r]),children:[r&&(0,G.jsx)(Se,{impactBand:r}),e]}),(0,G.jsx)(`div`,{className:F(`font-heading text-2xl font-semibold`,r&&ge[r]),children:t}),(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n}),i]})}function Ir({pct:e,flag:t,label:n}){let r=Math.max(0,Math.min(100,e));return(0,G.jsx)(`div`,{role:`img`,"aria-label":n,className:`mt-0.5 h-1.5 w-full overflow-hidden rounded-full bg-muted`,children:(0,G.jsx)(`div`,{className:F(`h-full rounded-full`,t?be[t]:`bg-clean`),style:{width:`${r}%`}})})}function Lr({active:e,total:t}){let n=t>0?Math.max(0,Math.min(100,e/t*100)):0;return(0,G.jsxs)(`div`,{role:`img`,"aria-label":`Active ${T(e)} of ${T(t)} total`,className:`mt-0.5 flex h-1.5 w-full overflow-hidden rounded-full bg-muted`,children:[(0,G.jsx)(`div`,{className:`h-full bg-clean`,style:{width:`${n}%`}}),(0,G.jsx)(`div`,{className:`h-full flex-1 bg-muted-foreground/60`})]})}function Rr(e){return e>0?`Ran ${T(e)}`:`No stage activity recorded`}function zr(){return(0,G.jsxs)(`div`,{className:`flex items-start gap-2 rounded-xl border border-warning/40 bg-warning/10 p-4`,children:[(0,G.jsx)(Se,{impactBand:`warning`,className:`mt-1.5`}),(0,G.jsxs)(`p`,{className:`text-sm text-warning`,children:[(0,G.jsx)(`span`,{className:`font-semibold tracking-wide uppercase`,children:`Timing unavailable`}),`. This run has no complete application timing interval, so wall-clock, efficiency, and unused core time can’t be measured.`]})]})}function Br({interpretation:e,catalog:t}){let n=M(),{runShape:r,coverage:i,wallClock:a}=e;if(r.wallClockMs==null)return(0,G.jsx)(zr,{});let o=r.wallClockMs,s=a.stagesActive,c=!i.noFinishedStages,l=r.efficiencyPct,u=r.efficiencyFlag,d=t.find(e=>e.type===`coldStart`),f=r.unusedCoreTimePct,p=r.unusedCoreTimeFlag;return(0,G.jsx)(ct,{className:`overflow-hidden py-0`,children:(0,G.jsxs)(`div`,{className:`grid grid-cols-1 divide-y divide-border sm:grid-cols-3 sm:divide-x sm:divide-y-0`,children:[(0,G.jsx)(Fr,{eyebrow:`Wall-clock`,dataTestid:`kpi-wall-clock`,value:o>0?T(o):`—`,meta:n===`advanced`||s<=0?(0,G.jsxs)(G.Fragment,{children:[Rr(s),d?` · ${d.value}s cold start`:``]}):`Total run time. Stages were running for ${T(s)} of it.`,bar:(0,G.jsx)(Lr,{active:s,total:o})}),(0,G.jsx)(Fr,{eyebrow:`Efficiency`,dataTestid:`kpi-efficiency`,value:c?l==null?`Unavailable`:(0,G.jsxs)(G.Fragment,{children:[l,(0,G.jsx)(`small`,{children:`%`})]}):`Not measured`,flag:u,meta:c?l==null?`This run has no complete application timing interval.`:n===`advanced`?o>s?`${Rr(s)} · ${T(o-s)} idle/gap time`:`executors active the whole run`:`Share of the run with a stage running. Higher is better.`:`No stage in this log recorded an end, so there is no stage time to measure.`,bar:l==null?void 0:(0,G.jsx)(Ir,{pct:l,flag:u,label:`Efficiency ${l}%`})}),(0,G.jsx)(Fr,{eyebrow:`Unused core time`,dataTestid:`kpi-wastage`,value:f==null?`Unavailable`:(0,G.jsxs)(G.Fragment,{children:[f,(0,G.jsx)(`small`,{children:`%`})]}),flag:p,meta:r.unusedCoreTimeUnavailableReason===`application-timing`?`Unused core time needs complete application timing.`:r.unusedCoreTimeUnavailableReason===`core-usage-summary`?`Unused core time needs the core-usage summary.`:r.unusedCoreTimeUnavailableReason===`executor-capacity`?`Unused core time needs usable executor-capacity data.`:n===`advanced`?`Driver-idle + executor-slack core-hours as a share of available capacity. Directional, not a cost figure.`:`Driver idle plus executor slack across the whole run, so it can run higher than the idle capacity a verdict step reports. Lower is better. Not a cost figure.`,bar:f==null?void 0:(0,G.jsx)(Ir,{pct:f,flag:p,label:`Unused core time ${f}%`})})]})})}function Vr({className:e,...t}){return(0,G.jsx)(_,{"data-slot":`accordion`,className:F(`flex w-full flex-col`,e),...t})}function Hr({className:e,...t}){return(0,G.jsx)(ee,{"data-slot":`accordion-item`,className:F(`not-last:border-b`,e),...t})}function Ur({className:e,children:t,headingLevel:n=3,...r}){let i=`h${n}`;return(0,G.jsx)(x,{className:`flex`,render:(0,G.jsx)(i,{}),children:(0,G.jsxs)(v,{"data-slot":`accordion-trigger`,className:F(`group/accordion-trigger relative flex flex-1 cursor-pointer items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:cursor-default aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground`,e),...r,children:[t,(0,G.jsx)(Ce,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden`}),(0,G.jsx)(_e,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline`})]})})}function Wr({className:e,children:t,...n}){return(0,G.jsx)(y,{"data-slot":`accordion-content`,className:`h-(--accordion-panel-height) overflow-hidden text-sm transition-[height] duration-150 ease-out data-ending-style:h-0 data-starting-style:h-0 motion-reduce:transition-none`,...n,children:(0,G.jsx)(`div`,{className:F(`pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4`,e),children:t})})}function Gr(e){return e.length===0?e:e[0].toUpperCase()+e.slice(1)}function Kr({type:e,label:t,thresholdSummary:n,status:r=`passed`}){let i=r===`notRun`;return(0,G.jsxs)(R,{"data-testid":`clean-check-row`,"data-clean-check-type":e,"data-clean-check-status":r,children:[(0,G.jsx)(z,{className:`w-px`,children:(0,G.jsxs)(`span`,{className:i?`inline-flex h-6 items-center gap-1 rounded-full bg-muted px-2 font-mono text-xs font-medium whitespace-nowrap text-muted-foreground`:`inline-flex h-6 items-center gap-1 rounded-full bg-clean/10 px-2 font-mono text-xs font-medium whitespace-nowrap text-clean`,children:[(0,G.jsx)(i?kt:Dt,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}),me(e)]})}),(0,G.jsxs)(z,{className:`whitespace-normal`,children:[(0,G.jsx)(`span`,{className:`block text-sm font-medium text-foreground`,children:Gr(t)}),(0,G.jsx)(N,{children:(0,G.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:Gr(`${n}.`)})})]})]})}var qr=`suggested-improvements`,Jr={stage:`per-stage`,app:`app-level`,sql:`sql-scope`,config:`config-scope`},Yr=[`per-stage`,`app-level`,`sql-scope`,`config-scope`],Xr={"per-stage":`Per-stage checks`,"app-level":`App-level checks`,"sql-scope":`SQL plan checks`,"config-scope":`Config checks`};function Zr(e,t,n){let r=[...e,...t].filter(E);return _n(n).filter(({type:e})=>!yn(e)).map(({component:e,widgetId:t,type:n},i)=>{let a=r.filter(e=>e.type===n);return{component:e,widgetId:t,index:i,findings:a,impactBand:ce(a)}}).filter(e=>e.impactBand!==void 0).sort((e,t)=>ie[e.impactBand]-ie[t.impactBand]||e.index-t.index)}function Qr({catalog:e,configFindings:t=[],coverage:n,detectors:r}){let i=[...e,...t].filter(E),a=e=>e in n.notRunReasons,o=Object.keys(hn).filter(e=>!yn(e)).filter(e=>!i.some(t=>t.type===e)).map(e=>({type:e,findingLabel:yt(e)})),s=o.filter(({type:e})=>!a(e)),c=o.filter(({type:e})=>a(e)),l=c.length>0?n.gaps:[],u=new Map;for(let e of s){let t=r[e.type]?.scope,n=t?Jr[t]:`app-level`;u.has(n)||u.set(n,[]),u.get(n).push(e)}return(0,G.jsx)(Vr,{children:(0,G.jsxs)(Hr,{value:`clean-checks`,children:[(0,G.jsx)(Ur,{children:`Clean checks`}),(0,G.jsxs)(Wr,{children:[c.length>0?(0,G.jsxs)(`div`,{"data-testid":`clean-checks-not-run`,className:`pb-4`,children:[(0,G.jsx)(`p`,{className:`pb-1 text-xs font-medium text-muted-foreground`,children:`Not checked on this log`}),(0,G.jsx)(`p`,{className:`pb-2 text-xs text-muted-foreground`,children:`The log lacked the data these checks need, so they neither passed nor failed.`}),l.length>0?(0,G.jsx)(`ul`,{"data-testid":`clean-checks-not-run-reasons`,className:`list-disc space-y-0.5 pb-2 pl-5 text-xs text-muted-foreground [overflow-wrap:anywhere]`,children:l.map(e=>(0,G.jsx)(`li`,{children:e},e))}):null,(0,G.jsx)(bt,{children:(0,G.jsx)(ht,{children:c.map(({type:e,findingLabel:t})=>(0,G.jsx)(Kr,{type:e,label:t,thresholdSummary:r[e]?.thresholdSummary??``,status:`notRun`},e))})})]}):null,(0,G.jsxs)(`p`,{className:`pb-2 text-xs text-muted-foreground`,children:[s.length===0?`No check could run on this log.`:`Every check below passed. No fix needed.`,(0,G.jsx)(N,{children:` Each line's caption states the threshold it was measured against.`})]}),Yr.map(e=>{let t=u.get(e);return!t||t.length===0?null:(0,G.jsxs)(`div`,{className:`pt-3 first:pt-0`,children:[(0,G.jsx)(`p`,{className:`pb-1 text-xs font-medium text-muted-foreground`,children:Xr[e]}),(0,G.jsx)(bt,{children:(0,G.jsx)(ht,{children:t.map(({type:e,findingLabel:t})=>(0,G.jsx)(Kr,{type:e,label:t,thresholdSummary:r[e]?.thresholdSummary??``},e))})})]},e)})]})]})})}function $r(e){return xe(e.type)?.genericRecommendation(e)}var ei=`inline-flex h-7 shrink-0 cursor-pointer items-center gap-1 rounded-full border border-border bg-background px-2.5 text-xs font-medium whitespace-nowrap outline-none transition-colors hover:bg-muted focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50`;function ti({stageId:e,className:t}){let{openStage:n}=_t();return(0,G.jsxs)(`button`,{type:`button`,className:F(ei,t),title:`Open details for Stage ${e}`,"aria-label":`Open details for Stage ${e}`,onClick:()=>n(e),children:[`Stage `,(0,G.jsx)(`b`,{children:e})]})}var ni=30;function ri(e,{limit:t=6,chunk:n=ni,dataset:r=e}={}){let[i,a]=(0,U.useState)({dataset:r,revealed:0}),o=!Object.is(i.dataset,r);o&&a({dataset:r,revealed:0});let s=t+(o?0:i.revealed);return{visible:e.slice(0,s),remaining:Math.max(0,e.length-s),revealMore:()=>a(e=>({dataset:r,revealed:(Object.is(e.dataset,r)?e.revealed:0)+n})),revealThrough:e=>a(n=>{let i=Object.is(n.dataset,r)?n.revealed:0,a=Math.max(i,e-t+1);return a>i?{dataset:r,revealed:a}:n})}}function ii({pills:e}){let t=new Set,n=e.filter(e=>!t.has(e.id)&&(t.add(e.id),!0)),{visible:r,remaining:i,revealMore:a}=ri(n,{limit:6,dataset:JSON.stringify(n.map(({id:e})=>e))}),o=n.slice(r.length);return(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[r.map(e=>(0,G.jsx)(ti,{stageId:e.id},e.id)),i>0&&(0,G.jsxs)(`button`,{type:`button`,className:F(ei,`bg-muted`),title:`Also flagged: Stage ${o.map(e=>e.id).join(`, Stage `)}`,"aria-label":`Show ${i} more stage${i===1?``:`s`}`,onClick:a,children:[`+`,i]})]})}function ai({page:e,totalPages:t,onPrev:n,onNext:r,renderJumpControl:i}){return t<=1?null:(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs ${i?`justify-between`:`justify-end`}`,children:[i?.(),(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(L,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable tap-target-comfortable--sm`,onClick:n,disabled:e===0,children:`Previous`}),(0,G.jsxs)(`span`,{className:`text-muted-foreground`,children:[`Page `,e+1,` of `,t]}),(0,G.jsx)(L,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable tap-target-comfortable--sm`,onClick:r,disabled:e===t-1,children:`Next`})]})]})}var oi=10,si=`max-sm:flex max-sm:flex-wrap max-sm:items-start`,ci=`max-sm:w-auto max-sm:shrink-0`,li=`max-sm:min-w-0 max-sm:flex-1 max-sm:whitespace-normal max-sm:[overflow-wrap:anywhere]`,ui=`max-sm:w-full max-sm:basis-full max-sm:pt-0 max-sm:text-left`;function di(e){let t=$e(e),n=e.stageId==null?t&&t.length>0?`St.${oe(t)}`:null:`St.${e.stageId}`;if(e.type===`duplicatePlanSubtree`&&e.rootName!=null){let t=fi(e);return n&&t?`${n} · ${t}`:t??n}return n||(e.type===`configAudit`?e.property:null)}function fi(e){if(e.type!==`duplicatePlanSubtree`||e.rootName==null)return null;let t=ue(e.rootName),n=e.groupIndex==null?t:`${t} #${Number(e.groupIndex)+1}`;return e.executionId==null?n:`${n} (SQL ${e.executionId})`}function pi({finding:e,textClassName:t}){let{stageId:n}=e,r=$e(e);if(n!=null)return(0,G.jsx)(ti,{stageId:n});if(r&&r.length>0){let n=fi(e);return(0,G.jsxs)(`span`,{className:`inline-flex min-w-0 flex-wrap items-center gap-1.5`,children:[(0,G.jsx)(ii,{pills:r.map(e=>({id:e}))}),n?(0,G.jsx)(`span`,{className:F(`truncate`,t),title:n,children:n}):null]})}let i=di(e);return i?(0,G.jsx)(`span`,{className:F(`min-w-0 truncate`,t),title:i,children:i}):null}function mi({finding:e,allFindings:t,onRoute:n}){let r=Cr(e,t),i=di(e),a=De(e)?.figure??null,o=xt(e),s=Ct(e);return(0,G.jsxs)(R,{"data-testid":`fix-these-first-row`,"data-finding-type":e.type,className:si,children:[(0,G.jsx)(z,{className:F(`w-px`,ci),children:(0,G.jsx)(j,{type:e.type,impactBand:e.impactBand,docAnchor:e.docAnchor})}),(0,G.jsx)(z,{className:F(`whitespace-normal`,li),children:(0,G.jsxs)(`button`,{type:`button`,"data-shortcut-target":!0,className:`cursor-pointer rounded-sm text-left focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:()=>r&&n(r),children:[(0,G.jsx)(`span`,{className:`block text-sm font-medium`,children:s}),(0,G.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:o})]})}),(0,G.jsx)(z,{className:F(`w-px text-right font-mono text-xs text-muted-foreground`,ui),title:[i,a].filter(Boolean).join(` · `),children:(0,G.jsxs)(`span`,{className:`flex items-center justify-end gap-1.5 max-sm:justify-start`,children:[(0,G.jsx)(pi,{finding:e}),a?(0,G.jsx)(`span`,{className:`shrink-0`,children:a}):null]})})]})}function hi({finding:e,allFindings:t,onRoute:n,id:r}){let i=Cr(e,t),a=di(e),o=De(e)?.figure??null,s=xt(e),c=Ct(e),l=e.stageId!=null||a!=null;return(0,G.jsxs)(R,{id:r,"data-testid":`fix-these-first-row`,"data-finding-type":e.type,className:`bg-muted/50`,children:[(0,G.jsxs)(z,{colSpan:2,className:`whitespace-normal`,children:[l?(0,G.jsx)(`div`,{className:`mb-1`,children:(0,G.jsx)(pi,{finding:e,textClassName:`line-clamp-1 break-words text-xs font-medium font-mono`})}):null,(0,G.jsxs)(`button`,{type:`button`,"data-shortcut-target":!0,className:`block w-full cursor-pointer rounded-sm text-left focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:()=>i&&n(i),children:[l?null:(0,G.jsx)(`span`,{className:`line-clamp-1 break-words text-xs font-medium`,children:c}),(0,G.jsx)(`span`,{className:`line-clamp-1 break-words text-xs text-muted-foreground`,children:s})]})]}),(0,G.jsx)(z,{className:`w-px text-right font-mono text-xs text-muted-foreground`,children:o})]})}function gi({group:e,allFindings:t,expanded:n,onToggle:r,onRoute:i}){let[a,o]=(0,U.useState)(0),s=e.findings,c=s[0],l=$r(c),u=Ct(c),d=Math.ceil(s.length/oi),f=Math.min(a,Math.max(0,d-1)),p=s.slice(f*oi,f*oi+oi),m=`fix-these-first-group-content-${e.kind}-${e.type}${e.unit?`-${e.unit}`:``}`;return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(R,{"data-testid":`fix-these-first-group-row`,"data-finding-type":e.type,className:si,children:[(0,G.jsx)(z,{className:F(`w-px`,ci),children:(0,G.jsx)(j,{type:e.type,impactBand:c.impactBand,docAnchor:he(e.findings)})}),(0,G.jsx)(z,{className:F(`whitespace-normal`,li),children:(0,G.jsxs)(`button`,{type:`button`,"aria-expanded":n,"aria-controls":m,"data-shortcut-target":!0,className:`cursor-pointer rounded-sm text-left focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:r,children:[(0,G.jsx)(`span`,{className:`block text-sm font-medium`,children:u}),l?(0,G.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:l}):null]})}),(0,G.jsx)(z,{className:F(`w-px text-right font-mono text-xs text-muted-foreground`,ui),children:(0,G.jsxs)(`span`,{className:`inline-flex items-center justify-end gap-1.5`,title:e.statTitle,children:[e.stat,n?(0,G.jsx)(_e,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):(0,G.jsx)(Ce,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`})]})})]}),n&&p.map((e,n)=>(0,G.jsx)(hi,{finding:e,allFindings:t,onRoute:i,id:n===0?m:void 0},e.id)),n&&d>1&&(0,G.jsx)(R,{className:`bg-muted/50`,children:(0,G.jsx)(z,{colSpan:3,children:(0,G.jsx)(ai,{page:f,totalPages:d,onPrev:()=>o(e=>e-1),onNext:()=>o(e=>e+1)})})})]})}function _i(e,t,n,r){let{eligible:i,groups:a}=ve(r,[...e,...t],n);return{eligible:i,groups:a,triageTarget:wr(r,i)}}var vi={critical:`Critical`,warning:`Warning`,info:`Info`},yi=[`critical`,`warning`,`info`];function bi({impactBand:e,groups:t,widgets:n,allFindings:r,expandedGroupKey:i,onToggleGroup:a,onRoute:o,appModel:s,catalog:c,configFindings:l,getTaskData:u,activeFileId:d}){let f=M(),[p,m]=(0,U.useState)(!1),h=ut(),g=h!=null&&n.some(e=>e.widgetId===h.widgetId);if((0,U.useLayoutEffect)(()=>{g&&m(!0)},[g]),t.length===0&&n.length===0)return null;let _=`impact-band-${e}-heading`,v=`impact-band-${e}-evidence`,y=f===`basic`&&t.length>0&&n.length>0,b=!y||p||g;return(0,G.jsxs)(`section`,{"aria-labelledby":_,className:`space-y-3`,children:[(0,G.jsx)(`h2`,{id:_,tabIndex:-1,className:`scroll-mt-20 rounded-sm font-heading text-base font-semibold outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:vi[e]}),t.length>0&&(0,G.jsx)(bt,{children:(0,G.jsx)(ht,{children:t.map(e=>{if(e.findings.length===1)return(0,G.jsx)(mi,{finding:e.findings[0],allFindings:r,onRoute:o},e.findings[0].id);let{key:t}=e;return(0,G.jsx)(gi,{group:e,allFindings:r,expanded:i===t,onToggle:()=>a(t),onRoute:o},t)})})}),y?(0,G.jsxs)(L,{variant:`ghost`,size:`sm`,"aria-expanded":b,"aria-controls":v,onClick:()=>m(!b),children:[b?`Hide the evidence`:`Show the evidence (${n.length} ${n.length===1?`card`:`cards`})`,b?(0,G.jsx)(_e,{"aria-hidden":`true`}):(0,G.jsx)(Ce,{"aria-hidden":`true`})]}):null,n.length>0&&b&&(0,G.jsx)(`div`,{id:v,children:(0,G.jsx)(Tt,{children:n.map(({component:e,widgetId:t,index:n})=>(0,G.jsx)(V,{cardId:`alert-${n}`,widgetId:t,children:(0,G.jsx)(U.Suspense,{fallback:(0,G.jsx)(lt,{}),children:(0,G.jsx)(e,{appModel:s,catalog:c,configFindings:l,getTaskData:u,activeFileId:d,defaultCollapsed:!0})})},t))})})]})}function xi({appModel:e,catalog:t,configFindings:n=[],stages:r,getTaskData:i,activeFileId:a,onRoute:o}){let s=A(),{groups:c}=(0,U.useMemo)(()=>_i(t,n,r,s),[t,n,r,s]),l=[...t,...n],u=s?.data.detectors,d=(0,U.useMemo)(()=>u?Zr(t,n,u):[],[t,n,u]),[f,p]=(0,U.useState)(null),{groupsByImpactBand:m,widgetsByImpactBand:h}=(0,U.useMemo)(()=>{let e=new Map;for(let t of c){let n=t.band;e.has(n)||e.set(n,[]),e.get(n).push(t)}let t=new Map;for(let e of d)t.has(e.impactBand)||t.set(e.impactBand,[]),t.get(e.impactBand).push(e);return{groupsByImpactBand:e,widgetsByImpactBand:t}},[c,d]);return(0,G.jsxs)(`div`,{id:qr,className:`space-y-6 scroll-mt-20`,children:[yi.map(r=>(0,G.jsx)(bi,{impactBand:r,groups:m.get(r)??[],widgets:h.get(r)??[],allFindings:l,expandedGroupKey:f,onToggleGroup:e=>p(t=>t===e?null:e),onRoute:o,appModel:e,catalog:t,configFindings:n,getTaskData:i,activeFileId:a},r)),s?(0,G.jsx)(Qr,{catalog:t,configFindings:n,coverage:s.data.coverage,detectors:s.data.detectors}):null]})}var Si=5,Ci=30,wi=220;function Ti(e,t){if(e.length<2)return e[0]??null;let n=e[1]-e[0],r=Math.round((t-e[0])/n);return e[Math.min(e.length-1,Math.max(0,r))]}function Ei({metrics:e,fieldNames:t,markers:n={}}){let r=t.indexOf(`duration`);if(r===-1)return null;let i=t.length,a=e.length/i,o=[];for(let t=0;t<a;t++)o.push(e[t*i+r]);if(o.length<Si)return(0,G.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Too few tasks (`,o.length,`) for a distribution.`]});let{labels:s,data:d}=ne(o,Ci),h=s[1]-s[0],_=s.map((e,t)=>({bin:`${(e/1e3).toFixed(1)}s`,range:`${(e/1e3).toFixed(1)}s – ${((e+h)/1e3).toFixed(1)}s`,ms:e,count:d[t]})),v=n.p50==null?null:Ti(s,n.p50),y=n.p95==null?null:Ti(s,n.p95),b=v==null?void 0:_.find(e=>e.ms===v)?.bin,x=y==null?void 0:_.find(e=>e.ms===y)?.bin;return(0,G.jsx)(He,{title:`Task duration`,ariaLabel:`Task duration histogram`,height:wi,table:{caption:`Task duration histogram`,columns:[`Duration bin`,`Task count`],rows:_.map(e=>[e.range,e.count]),align:[`right`,`right`]},children:(0,G.jsxs)(l,{data:_,children:[(0,G.jsx)(c,{vertical:!1,stroke:I.muted,strokeOpacity:.2}),(0,G.jsx)(m,{dataKey:`bin`,tick:{fontSize:10}}),(0,G.jsx)(f,{allowDecimals:!1,tick:{fontSize:10},width:32}),(0,G.jsx)(g,{...st,formatter:e=>[`${Number(e)} task${Number(e)===1?``:`s`}`,`Count`],labelFormatter:(e,t)=>t?.[0]?.payload?.range??e}),(0,G.jsx)(u,{dataKey:`count`,name:`Tasks`,fill:I.accent}),b?(0,G.jsx)(p,{x:b,stroke:I.accent,label:`P50`}):null,x?(0,G.jsx)(p,{x,stroke:I.warning,label:`P95`}):null]})})}function Di({finding:e}){let t=(0,U.useId)(),n=De(e),r=e.impactEstimate;if(!r)return null;let i=n?.board;if(!i)return null;let a=`Estimate method: ${r.estimateMethod}`;return(0,G.jsxs)(`span`,{className:`impact-estimate text-xs text-muted-foreground`,title:a,tabIndex:0,"aria-describedby":t,children:[`Potential savings: `,(0,G.jsx)(`strong`,{children:i}),(0,G.jsx)(`span`,{id:t,className:`sr-only`,children:a})]})}var Oi=[`PROCESS_LOCAL`,`NODE_LOCAL`,`RACK_LOCAL`,`NO_PREF`,`ANY`],ki=[I.clean,I.accent,I.warning,I.muted,I.critical];function Ai(e){return e?new Date(e).toLocaleString():`—`}function ji({stats:e}){let t=new Map(e.map(e=>[e.locality,e.count])),n=Oi.filter(e=>t.has(e));for(let t of e)Oi.includes(t.locality)||n.push(t.locality);let r=n.map((e,n)=>({locality:e,count:t.get(e)??0,color:ki[Math.min(n,ki.length-1)]}));return(0,G.jsx)(He,{ariaLabel:`Task locality distribution`,height:140,table:{caption:`Task locality distribution`,columns:[`Locality tier`,`Task count`],rows:r.map(e=>[e.locality,e.count]),align:[`left`,`right`]},children:(0,G.jsxs)(l,{data:r,children:[(0,G.jsx)(c,{vertical:!1,stroke:I.muted,strokeOpacity:.2}),(0,G.jsx)(m,{dataKey:`locality`,tick:{fontSize:10}}),(0,G.jsx)(f,{allowDecimals:!1,tick:{fontSize:10},width:32}),(0,G.jsx)(g,{formatter:e=>[`${Number(e)} task${Number(e)===1?``:`s`}`,`Tasks`]}),(0,G.jsx)(u,{dataKey:`count`,name:`Tasks`,children:r.map(e=>(0,G.jsx)(a,{fill:e.color},e.locality))})]})})}function Mi(e,t){let n=new Map;for(let t of e){n.has(t.type)||n.set(t.type,{impactBand:t.impactBand,finding:t,recs:new Map});let e=n.get(t.type);ie[t.impactBand]<ie[e.impactBand]&&(e.impactBand=t.impactBand,e.finding=t),t.recommendation&&!e.recs.has(t.recommendation)&&e.recs.set(t.recommendation,{extended:t.type===`retryWaste`?t.extended??null:null})}let r=e=>t.includes(e)?t.indexOf(e):t.length;return[...n.entries()].sort(([e],[t])=>r(e)-r(t))}function Ni({rec:e,extended:t,finding:n,showImpactEstimate:r}){return(0,G.jsxs)(`div`,{className:`space-y-1 text-sm`,children:[(0,G.jsxs)(`p`,{className:`max-w-full leading-normal break-words`,children:[(0,G.jsx)(`span`,{className:`font-medium`,children:`What to try: `}),e]}),t?(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:t}):null,r?(0,G.jsx)(Di,{finding:n}):null]})}function Pi(e,t){return`${e} ${t}${e===1?``:`s`}`}function Fi(e,t,n){let r=(e.completedAt??0)-(e.submittedAt??0),i=[];if(r>0){let e=t!=null&&t>0?Math.round(r/t*100):null;i.push(`Ran for ${T(r)}${e==null?``:`, ${e}% of this ${T(t)} run`}`)}return(e.taskCount??0)>0&&i.push(`split into ${Pi(e.taskCount,`task`)}`),[i.length>0?`${i.join(`, `)}.`:``,n===0?`Nothing was flagged on this stage.`:n===1?`1 finding here.`:`${n} findings here. They often share one cause, so start with the first.`].filter(Boolean).join(` `)}function Ii({stage:e,findings:t,typeOrder:n,catalog:r,runMs:i,onShowEvidence:a}){let o=A(),s=Mi(t,n);return(0,G.jsxs)(`section`,{"aria-label":`Why this stage was flagged`,className:`space-y-3`,children:[(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:Fi(e,i,s.length)}),s.length>0?(0,G.jsx)(`ol`,{className:`space-y-4 rounded-md border p-3`,children:s.map(([e,{impactBand:t,finding:n,recs:i}])=>{let s=we(o,n)?.compact!=null,c=Ee[me(e)],l=a?Cr(n,r):null;return(0,G.jsxs)(`li`,{className:`space-y-1.5`,"data-testid":`stage-finding`,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,G.jsx)(j,{type:e,impactBand:t}),(0,G.jsx)(`h3`,{className:`text-sm font-semibold`,children:Ct(n)})]}),c?(0,G.jsxs)(`p`,{className:`text-sm`,children:[(0,G.jsx)(`span`,{className:`font-medium`,children:`What's happening: `}),c.description]}):null,[...i.entries()].map(([e,{extended:t}],r)=>(0,G.jsx)(Ni,{rec:e,extended:t,finding:n,showImpactEstimate:r===0&&s},r)),l&&a?(0,G.jsxs)(L,{size:`sm`,variant:`outline`,onClick:()=>a(l),children:[`Show evidence`,(0,G.jsx)(vt,{"aria-hidden":`true`})]}):null]},e)})}):null]})}function Li({stage:e,appModel:t}){return Je(e.id,t)?(0,G.jsx)(Ge,{title:`Query Plan`,children:(0,G.jsx)(et,{stageId:e.id,appModel:t})}):null}function Ri({stage:e,appModel:t,catalog:n,getTaskData:r,onShowEvidence:i}){let{exportMode:a,getTaskData:o}=Xn(r),[s,c]=(0,U.useState)(null),[l,u]=(0,U.useState)(!1),[d,f]=(0,U.useState)(0),p=(e.taskCount??0)>0,m=A(),h=m?.data.stages[String(e.id)],g=m&&h?h.findingIndexes.map(e=>fe(m,e)).filter(e=>e!=null):[];(0,U.useEffect)(()=>{if(!p||!o)return;let t=!1;return u(!1),o(e.id).catch(()=>null).then(e=>{t||(e?c(e):u(!0))}),()=>{t=!0}},[d]);let _=(e.completedAt??0)-(e.submittedAt??0),v=(e.memoryBytesSpilled??0)>0||(e.diskBytesSpilled??0)>0,y=(e.jvmGCTime??0)>0||(e.gcPct??0)>0,b=e.fetchWaitTime??0,x=b>0&&_>0?Math.round(b/_*100):null,S=(e.inputBytes??0)>0?((e.outputBytes??0)/(e.inputBytes??0)).toFixed(2):null,C=e.localityStats??[];return(0,G.jsxs)(`div`,{className:`space-y-6`,children:[(0,G.jsx)(Ii,{stage:e,findings:g,typeOrder:h?.typeOrder??[],catalog:n,runMs:m?.data.runShape.wallClockMs??null,onShowEvidence:i}),(0,G.jsx)(Ve,{title:`Overview`,collapsible:!0,defaultOpen:!0,rows:[[`Duration`,T(_)],[`Submitted`,Ai(e.submittedAt)],[`Completed`,Ai(e.completedAt)],e.sqlExecutionId!=null&&[`SQL Execution`,`#${e.sqlExecutionId}`],e.stageType?[`Stage type`,e.stageType]:!1]}),(0,G.jsx)(Ve,{title:`Tasks`,collapsible:!0,rows:[[`Total`,String(e.taskCount)],[`Failed`,String(e.failedTasks)],[`P50 duration`,(e.taskDurationP50??0)>0?T(e.taskDurationP50):`—`],[`P95 duration`,(e.taskDurationP95??0)>0?T(e.taskDurationP95):`—`],[`Max duration`,(e.taskDurationMax??0)>0?T(e.taskDurationMax):`—`],(e.peakExecutionMemoryMax??0)>0&&[`Peak execution memory`,k(e.peakExecutionMemoryMax)]],children:p?a?(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Per-task duration data isn’t included in exported reports.`}):s?(0,G.jsx)(Ei,{metrics:s.metrics,fieldNames:s.fieldNames,markers:{p50:e.taskDurationP50,p95:e.taskDurationP95}}):l?(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Couldn’t load task data for this stage.`}),(0,G.jsx)(L,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>f(e=>e+1),children:`Retry`})]}):(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading task data…`}):null}),(0,G.jsx)(Ve,{title:`Locality`,collapsible:!0,rows:[],children:C.length>0?(0,G.jsx)(ji,{stats:C}):null}),(0,G.jsx)(Ve,{title:`I/O`,collapsible:!0,rows:[[`Input`,k(e.inputBytes)],[`Output`,k(e.outputBytes)],[`Shuffle read`,k(e.shuffleReadBytes)],[`Shuffle write`,k(e.shuffleWriteBytes)],b>0&&[`Fetch wait`,`${T(b)}${x==null?``:` (${x}%)`}`],S!=null&&[`I/O ratio`,S]]}),v?(0,G.jsx)(Ve,{title:`Spill`,collapsible:!0,rows:[[`Memory spilled`,k(e.memoryBytesSpilled)],[`Disk spilled`,k(e.diskBytesSpilled)],(e.memoryBytesSpilled??0)>0&&[`Classification`,e.spillClassification??`unclassified`]]}):null,y?(0,G.jsx)(Ve,{title:`GC`,collapsible:!0,rows:[[`JVM GC time`,T(e.jvmGCTime)],[`Executor run time`,T(e.executorRunTime)],[`GC %`,`${(e.gcPct??0).toFixed(1)}%`]]}):null,e.details?(0,G.jsx)(N,{children:(0,G.jsx)(Ge,{title:`Call Stack`,children:(0,G.jsx)(`pre`,{className:`overflow-x-auto rounded-md bg-muted p-2 text-xs whitespace-pre-wrap`,children:e.details})})}):null,(0,G.jsx)(Li,{stage:e,appModel:t})]})}function zi({appModel:e,catalog:t,getTaskData:n,onRoute:r}){let{stageId:i,close:a}=_t(),o=i==null?void 0:e.stages.get(i),s=o!=null,c=(0,U.useRef)(!1),l=r?e=>{c.current=!0,a(),r(e)}:void 0;return(0,G.jsx)(Qe,{open:s,onOpenChange:e=>{e||a()},children:(0,G.jsx)(tt,{className:`max-h-[85vh] overflow-y-auto sm:max-w-4xl`,finalFocus:()=>{let e=c.current;return c.current=!1,!e},children:o?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(rt,{children:[(0,G.jsxs)(We,{children:[`Stage `,o.id]}),o.name?(0,G.jsxs)(Ue,{className:`font-mono text-xs [overflow-wrap:anywhere]`,children:[(0,G.jsx)(`span`,{className:`font-sans`,children:`Code location: `}),o.name]}):null]}),(0,G.jsx)(Ri,{stage:o,appModel:e,catalog:t,getTaskData:n,onShowEvidence:l},o.id)]}):null})})}function Bi(e){return Vi(e)||typeof e==`function`||Hi(e)}function Vi(e){return typeof e==`function`&&(()=>{let t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function Hi(e){return typeof e==`object`&&typeof e.$$typeof==`symbol`&&[`react.memo`,`react.forward_ref`].includes(e.$$typeof.description)}function Ui(e,t){return e==null?null:Bi(e)?U.createElement(e,t):e}function Wi(e){if(`cell`in e&&e.cell){let t=e.cell,n=t.column.columnDef,r=t,i=n;return r.getIsAggregated?.()?Ui(i.aggregatedCell??n.cell,t.getContext()):r.getIsPlaceholder?.()?null:Ui(n.cell,t.getContext())}return`header`in e&&e.header?Ui(e.header.column.columnDef.header,e.header.getContext()):`footer`in e&&e.footer?Ui(e.footer.column.columnDef.footer,e.footer.getContext()):null}function Gi({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&60?a&12?a&4?!(a&48)&&c(e,i)?(i.flags=a|40,a&=1):a=0:i.flags=a&-9|32:a=0:i.flags=a|32,a&2&&t(i),a&1){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(1)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&16)a=!0;else if((c&17)==17){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&33)==33){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=-33;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(1)}function s(e){do{let n=e.sub,r=n.flags;(r&48)==32&&(n.flags=r|16,(r&6)==2&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function Ki(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var qi=[],Ji=0,{link:Yi,unlink:Xi,propagate:Zi,checkDirty:Qi,shallowPropagate:$i}=Gi({update(e){return e._update()},notify(e){qi[ta++]=e,e.flags&=-3},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,ia(e))}}),ea=0,ta=0,J,na=0;function ra(e){try{++na,e()}finally{--na||aa()}}function ia(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=Xi(n,e)}function aa(){if(!(na>0)){for(;ea<ta;){let e=qi[ea];qi[ea++]=void 0,e.notify()}ea=0,ta=0}}function oa(e,t){let n=typeof e==`function`,r=e,i={_snapshot:n?void 0:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:+!n,get(){return J!==void 0&&Yi(i,J,Ji),i._snapshot},subscribe(e){let t=Ki(e),n={current:!1},r=sa(()=>{i.get(),n.current?t.next?.(i._snapshot):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=J,o=t?.compare??Object.is;if(n)J=i,++Ji,i.depsTail=void 0;else if(e===void 0)return!1;n&&(i.flags=5);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{J=a,n&&(i.flags&=-5),ia(i)}}};return n?(i.flags=17,i.get=function(){let e=i.flags;if(e&16||e&32&&Qi(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&$i(e)}}else e&32&&(i.flags=e&-33);return J!==void 0&&Yi(i,J,Ji),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(Zi(e),$i(e),aa())}},i}function sa(e){let t=()=>{let t=J;J=n,++Ji,n.depsTail=void 0,n.flags=6;try{return e()}finally{J=t,n.flags&=-5,ia(n)}},n={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:6,notify(){let e=this.flags;e&16||e&32&&Qi(this.deps,this)?t():this.flags=2},stop(){this.flags=0,this.depsTail=void 0,ia(this)}};return t(),n}function ca(e,t){if(Object.is(e,t))return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(let[n,r]of e)if(!t.has(n)||!Object.is(r,t.get(n)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();let n=la(e);if(n.length!==la(t).length)return!1;for(let r=0;r<n.length;r++)if(!Object.prototype.hasOwnProperty.call(t,n[r])||!Object.is(e[n[r]],t[n[r]]))return!1;return!0}function la(e){return Object.keys(e).concat(Object.getOwnPropertySymbols(e))}var ua=e(r(),1);function da(e,t){return e===t}function fa(e,t=e=>e,n){let r=n?.compare??da,i=(0,U.useCallback)(t=>{let{unsubscribe:n}=e.subscribe(t);return n},[e]),a=(0,U.useCallback)(()=>e.get(),[e]);return(0,ua.useSyncExternalStoreWithSelector)(i,a,a,t,r)}function pa(e){let t=fa(e.source,e.selector,{compare:ca});return typeof e.children==`function`?e.children(t):e.children}function ma(e){let t=e;return Object.defineProperty(e,"state",{get(){return e.get()}}),`set`in e&&(t.setState=e.set.bind(e)),t}function ha(e){let{createAtom:t,batch:n}=e,r=t(0);return{createOptionsStore:!1,wrapExternalAtoms:!1,addSubscription:()=>{throw Error(`Feature not supported in current reactivity implementation`)},unmount:()=>{throw Error(`Feature not supported in current reactivity implementation`)},schedule:e.schedule??(e=>queueMicrotask(e)),batch:n,untrack:e=>e(),createReadonlyAtom:(e,n)=>{let i=n?.compare??Object.is,a=!1,o,s=()=>{let t=e();return(!a||!i(o,t))&&(o=t,a=!0),o},c=t(()=>(r.get(),s()),{compare:i});return{get:s,subscribe:c.subscribe.bind(c)}},createWritableAtom:(e,n)=>t(e,{compare:n?.compare}),commit:()=>{r.set(e=>e+1)}}}function ga(e,t=Object.is){let n=!1,r;return{get:e.get,markCommitted:e=>{r=e,n=!0},subscribe:i=>e.subscribe(e=>{(!n||!t(r,e))&&i(e)})}}function _a(){return ha({createAtom:oa,batch:ra})}function va(e,t){return typeof e==`function`?e(t):e}function Y(e){if(Array.isArray(e))return e.map(Y);if(e&&typeof e==`object`){let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)return e;let n=t===null?X():{},r=Object.keys(e);for(let t=0;t<r.length;t++){let i=r[t];Object.defineProperty(n,i,{configurable:!0,enumerable:!0,value:Y(e[i]),writable:!0})}return n}return e}function ya(e,t){let n=Object.keys(t),r=e;for(let e=0;e<n.length;e++){let i=n[e];!i.startsWith(`_memo_`)&&i!==`_cellsCache`&&(r[i]=t[i])}return e}function X(){return Object.create(null)}function ba(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function xa(e,t){return n=>{(t.options.atoms?.[e]??t.baseAtoms[e]).set(e=>va(n,e))}}function Sa(e){if(typeof e!=`object`||!e)return!1;if(Array.isArray(e))return!0;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Ca(e){return Reflect.ownKeys(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}var wa=3;function Ta(e,t){return Ea(e,t,wa)}function Ea(e,t,n){if(Object.is(e,t))return!0;if(n<=0||!Sa(e)||!Sa(t)||(Array.isArray(e)||Array.isArray(t))&&(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length))return!1;let r=Ca(e),i=Ca(t);if(r.length!==i.length)return!1;let a=e,o=t;for(let e=0;e<r.length;e++){let i=r[e];if(!Object.prototype.propertyIsEnumerable.call(t,i)||!Ea(a[i],o[i],n-1))return!1}return!0}function Da(e,t,n,r=Ta){let i=`on${t.charAt(0).toUpperCase()}${t.slice(1)}Change`,a=e.options[i];a&&a(e=>{let t=va(n,e);return r(e,t)?e:t})}function Oa(e){return e instanceof Function}function ka(e,t){let n=[],r=e=>{e.forEach(e=>{n.push(e);let i=t(e);i.length&&r(i)})};return r(e),n}var Aa=({fn:e,memoDeps:t,onAfterCompare:n,onAfterUpdate:r,onBeforeCompare:i,onBeforeUpdate:a})=>{let o=[],s;return c=>{i?.();let l=t?.(c),u=!l||l.length!==o?.length;if(!u&&l){for(let e=0;e<l.length;e++)if(l[e]!==o[e]){u=!0;break}}return n?.(u),u?(o=l,a?.(),s=e(...l??[]),r?.(s),s):s}};function ja(e){let t=!1;return()=>{if(!t){t=!0;return}e()}}function Ma({feature:e,fnName:t,objectId:n,onAfterUpdate:r,table:i,...a}){let o=()=>{if(!r)return;let{schedule:e,untrack:t}=i._reactivity;e(()=>t(()=>r()))},s={onAfterUpdate:()=>{o()}};return Aa({...a,...s})}function Na(e,t=`_`){let[n,r]=e.split(t);return{fnKey:r,fnName:`${n}.${r}`,parentName:n}}function Z(e,t,n){for(let[r,{fn:i,memoDeps:a}]of Object.entries(n)){let{fnKey:n,fnName:o}=Na(r);t[n]=a?Ma({memoDeps:a,fn:i,fnName:o,table:t,feature:e}):i}}function Pa(e,t,n,r){for(let[i,{fn:a,memoDeps:o}]of Object.entries(r)){let{fnKey:r,fnName:s}=Na(i);if(o){let i=`_memo_${r}`;t[r]=function(...t){if(!this[i]){let t=this;this[i]=Ma({memoDeps:e=>o(t,e),fn:(...e)=>a(t,...e),fnName:s,objectId:t.id,table:n,feature:e})}return this[i](...t)}}else t[r]=function(...e){return a(this,...e)}}}function Q(e,t,n,...r){return e[t]?.(...r)??n(e,...r)}function Fa(e){return e.row.getValue(e.column.id)}function Ia(e){return e.getValue()??e.table.options.renderFallbackValue}function La(e){return{table:e.table,column:e.column,row:e.row,cell:e,getValue:()=>e.getValue(),renderValue:()=>e.renderValue()}}var Ra={assignCellPrototype:(e,t)=>{Pa(`coreCellsFeature`,e,t,{cell_getValue:{fn:e=>Fa(e)},cell_renderValue:{fn:e=>Ia(e)},cell_getContext:{fn:e=>La(e),memoDeps:e=>[e]}})}};function za(e){if(!e._headerPrototype){e._headerPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignHeaderPrototype?.(e._headerPrototype,e)}return e._headerPrototype}function Ba(e,t,n){let r=za(e),i=Object.create(r);i.colSpan=0,i.column=t,i.depth=n.depth,i.headerGroup=null,i.id=n.id??t.id,i.index=n.index,i.isPlaceholder=!!n.isPlaceholder,i.placeholderId=n.placeholderId,i.rowSpan=0,i.subHeaders=[];let a=e._headerInstanceInitFns;for(let e=0;e<a.length;e++)a[e](i);return i}function Va(){return{start:[],end:[]}}function Ha(){return X()}function Ua(e,t){Wa(e)&&Xa(e.table,n=>{let r=Object.assign(X(),n),i=t??!Q(e,`getIsVisible`,$),a=e.getLeafColumns();for(let e=0;e<a.length;e++){let t=a[e];Wa(t)&&(r[t.id]=i)}return r})}function $(e){let t=e.table.atoms.columnVisibility?.get();if(!t)return!0;let n=e.columns;return n.length?n.some(e=>Q(e,`getIsVisible`,$)):(ba(t,e.id)?t[e.id]:void 0)??!0}function Wa(e){return(e.columnDef.enableHiding??!0)&&(e.table.options.enableHiding??!0)}function Ga(e){return t=>{Ua(e,t.target.checked)}}function Ka(e){let t=e.getAllCells(),n=[];for(let e=0;e<t.length;e++){let r=t[e];Q(r.column,`getIsVisible`,$)&&n.push(r)}let{start:r,end:i}=e.table.atoms.columnPinning?.get()??Va();if(!r.length&&!i.length)return n;let a=Q(e,`getVisibleCellsByColumnId`,qa),o=[];for(let e=0;e<r.length;e++){let t=a[r[e]];t&&o.push(t)}let s=[];for(let e=0;e<i.length;e++){let t=a[i[e]];t&&s.push(t)}let c=[];for(let e=0;e<n.length;e++){let t=n[e],a=t.column.id;!r.includes(a)&&!i.includes(a)&&c.push(t)}return[...o,...c,...s]}function qa(e){let t=X(),n=e.getAllCells();for(let e=0;e<n.length;e++){let r=n[e];Q(r.column,`getIsVisible`,$)&&(t[r.column.id]=r)}return t}function Ja(e){return e.getAllFlatColumns().filter(e=>Q(e,`getIsVisible`,$))}function Ya(e){return e.getAllLeafColumns().filter(e=>Q(e,`getIsVisible`,$))}function Xa(e,t){Da(e,`columnVisibility`,t)}function Za(e,t){Xa(e,t?X():Object.assign(X(),Y(e.initialState.columnVisibility??{})))}function Qa(e,t){t??=!$a(e);let n=X(),r=e.getAllLeafColumns();for(let e=0;e<r.length;e++){let i=r[e];n[i.id]=t||!Wa(i)}Xa(e,n)}function $a(e){return!e.getAllLeafColumns().some(e=>!Q(e,`getIsVisible`,$))}function eo(e){return e.getAllLeafColumns().some(e=>Q(e,`getIsVisible`,$))}function to(e){return t=>{Qa(e,t.target.checked)}}function no(e,t=1){let n=t;for(let r=0;r<e.length;r++){let i=e[r];Q(i,`getIsVisible`,$)&&i.columns.length&&(n=Math.max(n,no(i.columns,t+1)))}return n}function ro(e,t){return e?`${e}_${t}`:String(t)}function io(e,t,n,r){let i=e??``;return t&&(i=i?`${i}_${t}`:String(t)),n&&(i=i?`${i}_${n}`:n),r&&(i=i?`${i}_${r}`:r),i}function ao(e,t){let n=0;for(let r=0;r<e.length;r++)e[r].column===t&&n++;return n}function oo(e,t,n,r,i,a){let o={depth:t,id:ro(r,t),headers:[]},s=[];for(let i=0;i<e.length;i++){if(!(i in e))continue;let a=e[i],c=s[s.length-1],l=a.column.depth===o.depth,u,d=!1;if(l&&a.column.parent?u=a.column.parent:(u=a.column,d=!0),c&&c.column===u)c.subHeaders.push(a);else{let e=Ba(n,u,{id:io(r,t,u.id,a.id),isPlaceholder:d,placeholderId:d?String(ao(s,u)):void 0,depth:t,index:s.length});e.subHeaders.push(a),s.push(e)}o.headers.push(a),a.headerGroup=o}for(let e=0;e<a.length;e++)a[e](o);i.push(o),t>0&&oo(s,t-1,n,r,i,a)}function so(e){for(let t=0;t<e.length;t++){let n=e[t];if(!Q(n.column,`getIsVisible`,$))continue;let r=0;if(n.subHeaders.length){so(n.subHeaders);for(let e=0;e<n.subHeaders.length;e++){let t=n.subHeaders[e];Q(t.column,`getIsVisible`,$)&&(r+=t.colSpan)}}else r=1;if(n.colSpan=r,n.isPlaceholder&&n.subHeaders.length===1&&n.subHeaders[0].column===n.column){let e=1,t=n.subHeaders[0];for(;t;)t.rowSpan=0,e++,t=t.subHeaders.length===1&&t.subHeaders[0].column===n.column?t.subHeaders[0]:void 0;n.rowSpan=e}else n.rowSpan=1}}function co(e,t,n,r){let i=no(e),a=[],o=n._headerGroupInstanceInitFns,s=Array(t.length);for(let e=0;e<t.length;e++)e in t&&(s[e]=Ba(n,t[e],{depth:i,index:e}));return oo(s,i-1,n,r,a,o),a.reverse(),so(a[0]?.headers??[]),a}function lo(e){if(!e._columnPrototype){e._columnPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignColumnPrototype?.(e._columnPrototype,e)}return e._columnPrototype}function uo(e,t,n,r){let i={...e.getDefaultColumnDef(),...t},a=i.accessorKey,o=a===void 0?void 0:String(a),s=i.id??o?.replaceAll(`.`,`_`)??(typeof i.header==`string`?i.header:void 0),c;if(i.accessorFn)c=i.accessorFn;else if(a!==void 0){if(typeof a==`string`&&a.includes(`.`)){let e=a.split(`.`);c=t=>{let n=t;for(let t=0;t<e.length;t++){let r=e[t];n=n?.[r]}return n}}else c=e=>e[i.accessorKey]}if(!s)throw Error();let l=lo(e),u=Object.create(l);u.accessorFn=c,u.columnDef=i,u.columns=[],u.depth=n,u.id=`${String(s)}`,u.parent=r;let d=e._columnInstanceInitFns;for(let e=0;e<d.length;e++)d[e](u);return u}function fo(e){let t=e.atoms.columnOrder?.get();return n=>{let r=[];if(!t?.length)r=n;else{let e=new Map;for(let t=0;t<n.length;t++){let r=n[t];e.set(r.id,r)}for(let n=0;n<t.length;n++){let i=t[n],a=e.get(i);a&&(r.push(a),e.delete(i))}for(let t=0;t<n.length;t++){let i=n[t];e.has(i.id)&&r.push(i)}}return po(e,r)}}function po(e,t){let n=e.atoms.grouping?.get()??[],{groupedColumnMode:r}=e.options;if(!n.length||!r)return t;let i=t.filter(e=>!n.includes(e.id));if(r===`remove`)return i;let a=new Map;for(let e=0;e<t.length;e++){let n=t[e];a.set(n.id,n)}let o=[];for(let e=0;e<n.length;e++){let t=a.get(n[e]);t&&o.push(t)}return[...o,...i]}function mo(e){return[e,...e.columns.flatMap(e=>e.getFlatColumns())]}function ho(e){if(e.columns.length){let t=e.columns.flatMap(e=>e.getLeafColumns());return Q(e.table,`getOrderColumns`,fo)(t)}return[e]}function go(e){return{header:e=>{let t=e.header.column.columnDef;return t.accessorKey?t.accessorKey:t.accessorFn?t.id:null},cell:e=>e.renderValue()?.toString?.()??null,...Object.values(e._features).reduce((e,t)=>Object.assign(e,t.getDefaultColumnDef?.()),{}),...e.options.defaultColumn}}function _o(e,t,n,r=0){let i=Array(t.length);for(let a=0;a<t.length;a++){if(!(a in t))continue;let o=t[a],s=uo(e,o,r,n),c=o;s.columns=c.columns?_o(e,c.columns,s,r+1):[],i[a]=s}return i}function vo(e){return _o(e,e.options.columns)}function yo(e){return e.getAllColumns().flatMap(e=>e.getFlatColumns())}function bo(e){let t=X(),n=e.getAllFlatColumns();for(let e=0;e<n.length;e++){let r=n[e];t[r.id]=r}return t}function xo(e){let t=e.getAllColumns().flatMap(e=>e.getLeafColumns());return Q(e,`getOrderColumns`,fo)(t)}function So(e){let t=X(),n=e.getAllLeafColumns();for(let e=0;e<n.length;e++){let r=n[e];t[r.id]=r}return t}function Co(e,t){return e.getAllFlatColumnsById()[t]}var wo={assignColumnPrototype:(e,t)=>{Pa(`coreColumnsFeature`,e,t,{column_getFlatColumns:{fn:e=>mo(e),memoDeps:e=>[e.table.options.columns]},column_getLeafColumns:{fn:e=>ho(e),memoDeps:e=>[e.table.atoms.columnOrder?.get(),e.table.atoms.grouping?.get(),e.table.options.columns,e.table.options.groupedColumnMode]}})},constructTableAPIs:e=>{Z(`coreColumnsFeature`,e,{table_getDefaultColumnDef:{fn:()=>go(e),memoDeps:()=>[e.options.defaultColumn]},table_getAllColumns:{fn:()=>vo(e),memoDeps:()=>[e.options.columns]},table_getAllFlatColumns:{fn:()=>yo(e),memoDeps:()=>[e.options.columns]},table_getAllFlatColumnsById:{fn:()=>bo(e),memoDeps:()=>[e.options.columns]},table_getAllLeafColumns:{fn:()=>xo(e),memoDeps:()=>[e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_getAllLeafColumnsById:{fn:()=>So(e),memoDeps:()=>[e.getAllLeafColumns()]},table_getColumn:{fn:t=>Co(e,t)}})}};function To(e,t){for(let n=0;n<e.subHeaders.length;n++)To(e.subHeaders[n],t);t.push(e)}function Eo(e){let t=[];return To(e,t),t}function Do(e){return{column:e.column,header:e,table:e.column.table}}function Oo(e){let{start:t,end:n}=e.atoms.columnPinning?.get()??Va(),r=e.getAllColumns(),i=Q(e,`getVisibleLeafColumns`,Ya);if(!t.length&&!n.length)return co(r,i,e);let a=e.getAllLeafColumnsById(),o=[];for(let e=0;e<t.length;e++){let n=a[t[e]];n&&Q(n,`getIsVisible`,$)&&o.push(n)}let s=[];for(let e=0;e<n.length;e++){let t=a[n[e]];t&&Q(t,`getIsVisible`,$)&&s.push(t)}let c=i.filter(e=>!t.includes(e.id)&&!n.includes(e.id));return co(r,[...o,...c,...s],e)}function ko(e){return[...e.getHeaderGroups()].reverse()}function Ao(e){let t=e.getHeaderGroups(),n=[];for(let e=0;e<t.length;e++){let r=t[e].headers;for(let e=0;e<r.length;e++)n.push(r[e])}return n}function jo(e){let t=e.getHeaderGroups()[0]?.headers??[],n=[];for(let e=0;e<t.length;e++){let r=t[e].getLeafHeaders();for(let e=0;e<r.length;e++)n.push(r[e])}return n}var Mo={assignHeaderPrototype:(e,t)=>{Pa(`coreHeadersFeature`,e,t,{header_getLeafHeaders:{fn:e=>Eo(e),memoDeps:e=>[e.column.table.options.columns]},header_getContext:{fn:e=>Do(e),memoDeps:e=>[e.column.table.options.columns]}})},constructTableAPIs:e=>{Z(`coreHeadersFeature`,e,{table_getHeaderGroups:{fn:()=>Oo(e),memoDeps:()=>[e.options.columns,e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.atoms.columnPinning?.get(),e.atoms.columnVisibility?.get(),e.options.groupedColumnMode]},table_getFooterGroups:{fn:()=>ko(e),memoDeps:()=>[e.getHeaderGroups()]},table_getFlatHeaders:{fn:()=>Ao(e),memoDeps:()=>[e.getHeaderGroups()]},table_getLeafHeaders:{fn:()=>jo(e),memoDeps:()=>[e.getHeaderGroups()]}})}};function No(e){if(!e._rowPrototype){e._rowPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignRowPrototype?.(e._rowPrototype,e)}return e._rowPrototype}var Po=(e,t,n,r,i,a,o)=>{let s=No(e),c=Object.create(s);c._displayIndexCache=-1,c._uniqueValuesCache=X(),c._valuesCache=X(),c.depth=i,c.id=t,c.index=r,c.original=n,c.parentId=o,c.subRows=a??[];let l=e._rowInstanceInitFns;for(let e=0;e<l.length;e++)l[e](c);return c},Fo=/([0-9]+)/gm;function Io(e){let t=Object.assign((e,n,r)=>{let i=e.getValue(r),a=n.getValue(r),o=t.resolveDataValue;return o&&(i=o(i),a=o(a)),t.sort(i,a,e,n,r)},e);return t}Io({resolveDataValue:e=>Bo(e).toLowerCase(),sort:(e,t)=>Vo(e,t)}),Io({resolveDataValue:e=>Bo(e),sort:(e,t)=>Vo(e,t)}),Io({resolveDataValue:e=>Bo(e).toLowerCase(),sort:(e,t)=>Ro(e,t)}),Io({resolveDataValue:e=>Bo(e),sort:(e,t)=>Ro(e,t)}),Io({resolveDataValue:e=>zo(e),sort:(e,t)=>e>t?1:e<t?-1:0});var Lo=Io({sort:(e,t)=>Ro(e,t)});function Ro(e,t){return e===t?0:e>t?1:-1}function zo(e){return e instanceof Date?e.getTime():e}function Bo(e){return typeof e==`number`?isNaN(e)||e===1/0||e===-1/0?``:String(e):typeof e==`string`?e:``}function Vo(e,t){let n=0,r=0,i=e.length,a=t.length;for(;n<i&&r<a;){let i=Ho(e.charCodeAt(n)),a=Ho(t.charCodeAt(r)),o=Uo(e,n,i),s=Uo(t,r,a);if(!i&&!a){let i=Wo(e,n,o,t,r,s);if(i)return i;n=o,r=s;continue}if(i!==a)return i?1:-1;let c=Go(e,n,o,t,r,s);if(c)return c;n=o,r=s}return qo(e,n)-qo(t,r)}function Ho(e){return e>=48&&e<=57}function Uo(e,t,n){let r=t+1;for(;r<e.length&&Ho(e.charCodeAt(r))===n;)r++;return r}function Wo(e,t,n,r,i,a){let o=n-t,s=a-i,c=o<s?o:s;for(let n=0;n<c;n++){let a=e.charCodeAt(t+n),o=r.charCodeAt(i+n);if(a>o)return 1;if(o>a)return-1}return o>s?1:s>o?-1:0}function Go(e,t,n,r,i,a){let o=t;for(;o<n&&e.charCodeAt(o)===48;)o++;let s=i;for(;s<a&&r.charCodeAt(s)===48;)s++;let c=n-o,l=a-s;if(c===0&&l===0)return 0;if(c<=15&&l<=15){let t=Ko(e,o,n),i=Ko(r,s,a);return t>i?1:i>t?-1:0}let u=parseInt(e.slice(t,n),10),d=parseInt(r.slice(i,a),10);return u>d?1:d>u?-1:0}function Ko(e,t,n){let r=0;for(let i=t;i<n;i++)r=r*10+e.charCodeAt(i)-48;return r}function qo(e,t){let n=0,r=t;for(;r<e.length;)n++,r=Uo(e,r,Ho(e.charCodeAt(r)));return n}function Jo(){return[]}function Yo(e,t){Da(e,`cellSelection`,t?Jo():Y(e.initialState.cellSelection)??Jo())}function Xo(e){e.atoms.cellSelection&&(e.options.autoResetAll??e.options.autoResetCellSelection??!0)&&e._reactivity.schedule(()=>Yo(e))}function Zo(e){e.atoms.expanded&&(e.options.autoResetAll??e.options.autoResetExpanded??!e.options.manualExpanding)&&e._reactivity.schedule(()=>Qo(e))}function Qo(e,t){let n=e.initialState.expanded;Da(e,`expanded`,t?X():n===!0||Object.assign(X(),Y(n??{})))}function $o(e){let t=e.table.atoms.expanded?.get()??{};return!!(e.table.options.getIsRowExpanded?.(e)??(t===!0||es(t,e.id)))}function es(e,t){return!!(e&&e!==!0&&ba(e,t)&&e[t])}var ts=0,ns=10;function rs(){return{pageIndex:ts,pageSize:ns}}function is(e){if(e.options.autoResetAll??e.options.autoResetPageIndex??!e.options.manualPagination){if((e.atoms.pagination?.get()?.pageIndex??ts)===ts)return;cs(e,!0)}}function as(e,t){Da(e,`pagination`,t)}function os(e,t){as(e,t?rs():Y(e.initialState.pagination??rs()))}function ss(e,t){as(e,n=>{let r=va(t,n.pageIndex),i=e.options.pageCount===void 0||e.options.pageCount===-1?2**53-1:e.options.pageCount-1;return r=Math.max(0,Math.min(r,i)),{...n,pageIndex:r}})}function cs(e,t){ss(e,t?ts:e.initialState.pagination?.pageIndex??ts)}function ls(e,t){us(e,t?ns:e.initialState.pagination?.pageSize??ns)}function us(e,t){as(e,e=>{let n=Math.max(1,va(t,e.pageSize)),r=e.pageSize===1/0?0:e.pageSize*e.pageIndex,i=n===1/0?0:Math.floor(r/n);return{...e,pageIndex:i,pageSize:n}})}function ds(e){let t=ys(e),n=[];return t&&t>0&&(n=[...Array(t)].fill(null).map((e,t)=>t)),n}function fs(e){return(e.atoms.pagination?.get()?.pageIndex??0)>0}function ps(e){let t=e.atoms.pagination?.get()?.pageIndex??ts,n=ys(e);return n===-1||n!==0&&t<n-1}function ms(e){let t=e.atoms.pagination?.get()?.pageIndex??ts,n=ys(e);return Number.isFinite(n)&&n>0&&t<n-1}function hs(e){return ss(e,e=>e-1)}function gs(e){return ss(e,e=>e+1)}function _s(e){return ss(e,0)}function vs(e){let t=ys(e);if(!(!Number.isFinite(t)||t<=0))return ss(e,t-1)}function ys(e){let t=e.options.pageCount;if(t!=null)return t;let n=bs(e),r=e.atoms.pagination?.get()?.pageSize??ns;return r===1/0&&Number.isFinite(n)&&n>0?1:Math.ceil(n/r)}function bs(e){return e.options.rowCount??e.getPrePaginatedRowModel().rows.length}function xs(){return[]}function Ss(e,t){Da(e,`sorting`,t)}function Cs(e,t){Ss(e,t?[]:Y(e.initialState.sorting??[]))}function ws(e){e.atoms.sorting&&(e.options.autoResetAll??e.options.autoResetSorting??!1)&&Cs(e)}function Ts(e){let t=e.table._rowModelFns.sortFns,n=e.table.getFilteredRowModel().flatRows.slice(0,10),r,i=!1;for(let t=0;t<n.length;t++){let a=n[t].getValue(e.id);if(Object.prototype.toString.call(a)===`[object Date]`){r=`datetime`;break}if(typeof a==`string`&&(i=!0,a.split(Fo).length>1)){r=`alphanumeric`;break}}if(!r&&i&&(r=`text`),r){let e=t?.[r];if(e||r===`alphanumeric`&&(e=t?.text),e)return e}return Lo}function Es(e){let t=e.table.getFilteredRowModel().flatRows.slice(0,10);for(let n=0;n<t.length;n++){let r=t[n].getValue(e.id);if(r!=null)return typeof r==`string`?`asc`:`desc`}return`desc`}function Ds(e){let t=e.table._rowModelFns.sortFns;return Oa(e.columnDef.sortFn)?e.columnDef.sortFn:e.columnDef.sortFn===`auto`?Ts(e):t?.[e.columnDef.sortFn]??Lo}function Os(e,t,n){let r=As(e,n&&Ms(e)),i=t!==void 0;Ss(e.table,a=>{let o=a.findIndex(t=>t.id===e.id),s=o===-1?void 0:a[o],c=[],l,u=i?t:r===`desc`,d=!!(a.length&&Ms(e)&&n);return l=d?s?`toggle`:`add`:s?`toggle`:`replace`,l===`toggle`&&(i||r||(l=`remove`)),l===`add`?(c=[...a,{id:e.id,desc:u}],c.splice(0,c.length-(e.table.options.maxMultiSortColCount??2**53-1))):c=l===`toggle`?d?a.map(t=>t.id===e.id?{...t,desc:u}:t):[{id:e.id,desc:u}]:l===`remove`?d?a.filter(t=>t.id!==e.id):[]:[{id:e.id,desc:u}],c})}function ks(e){return e.columnDef.sortDescFirst??e.table.options.sortDescFirst??Es(e)===`desc`?`desc`:`asc`}function As(e,t){let n=ks(e),r=Ns(e);return r?r!==n&&(e.table.options.enableSortingRemoval??!0)&&(!t||(e.table.options.enableMultiRemove??!0))?!1:r===`desc`?`asc`:`desc`:n}function js(e){return(e.columnDef.enableSorting??!0)&&(e.table.options.enableSorting??!0)&&!!e.accessorFn}function Ms(e){return e.columnDef.enableMultiSort??e.table.options.enableMultiSort??!!e.accessorFn}function Ns(e){let t=e.table.atoms.sorting?.get()?.find(t=>t.id===e.id);return t?t.desc?`desc`:`asc`:!1}function Ps(e){return e.table.atoms.sorting?.get()?.findIndex(t=>t.id===e.id)??-1}function Fs(e){Ss(e.table,t=>t.length?t.filter(t=>t.id!==e.id):[])}function Is(e){let t=js(e);return n=>{t&&Os(e,void 0,Ms(e)?e.table.options.isMultiSortEvent?.(n):!1)}}function Ls(){return e=>Ma({feature:`coreRowModelsFeature`,table:e,fnName:`table.getCoreRowModel`,memoDeps:()=>[e.options.data],fn:()=>zs(e,e.options.data),onAfterUpdate:ja(()=>{Zo(e),is(e),ws(e),Xo(e)})})}function Rs(e,t,n,r=0,i){let a=[];for(let o=0;o<n.length;o++){let s=n[o],c=Po(e,e.getRowId(s,o,i),s,o,r,void 0,i?.id);t.flatRows.push(c),t.rowsById[c.id]=c,a.push(c),e.options.getSubRows&&(c.originalSubRows=e.options.getSubRows(s,o),c.originalSubRows?.length&&(c.subRows=Rs(e,t,c.originalSubRows,r+1,c)))}return a}function zs(e,t){let n={rows:[],flatRows:[],rowsById:X()};return n.rows=Rs(e,n,t),n}function Bs(e){return e._rowModels.coreRowModel||(e._rowModels.coreRowModel=e.options.features.coreRowModel?.(e)??Ls()(e)),e._rowModels.coreRowModel()}function Vs(e){return e.getCoreRowModel()}function Hs(e){return e._rowModels.filteredRowModel||(e._rowModels.filteredRowModel=e.options.features.filteredRowModel?.(e)),e.options.manualFiltering||!e._rowModels.filteredRowModel?e.getPreFilteredRowModel():e._rowModels.filteredRowModel()}function Us(e){return e.getFilteredRowModel()}function Ws(e){return e._rowModels.groupedRowModel||(e._rowModels.groupedRowModel=e.options.features.groupedRowModel?.(e)),e.options.manualGrouping||!e._rowModels.groupedRowModel?e.getPreGroupedRowModel():e._rowModels.groupedRowModel()}function Gs(e){return e.getGroupedRowModel()}function Ks(e){return e._rowModels.sortedRowModel||(e._rowModels.sortedRowModel=e.options.features.sortedRowModel?.(e)),e.options.manualSorting||!e._rowModels.sortedRowModel?e.getPreSortedRowModel():e._rowModels.sortedRowModel()}function qs(e){return e.getSortedRowModel()}function Js(e){return e._rowModels.expandedRowModel||(e._rowModels.expandedRowModel=e.options.features.expandedRowModel?.(e)),e.options.manualExpanding||!e._rowModels.expandedRowModel?e.getPreExpandedRowModel():e._rowModels.expandedRowModel()}function Ys(e){return e.getExpandedRowModel()}function Xs(e){return e._rowModels.paginatedRowModel||(e._rowModels.paginatedRowModel=e.options.features.paginatedRowModel?.(e)),e.options.manualPagination||!e._rowModels.paginatedRowModel?e.getPrePaginatedRowModel():e._rowModels.paginatedRowModel()}function Zs(e){return e.getPaginatedRowModel()}var Qs={constructTableAPIs:e=>{Z(`coreRowModelsFeature`,e,{table_getCoreRowModel:{fn:()=>Bs(e)},table_getPreFilteredRowModel:{fn:()=>Vs(e)},table_getFilteredRowModel:{fn:()=>Hs(e)},table_getPreGroupedRowModel:{fn:()=>Us(e)},table_getGroupedRowModel:{fn:()=>Ws(e)},table_getPreSortedRowModel:{fn:()=>Gs(e)},table_getSortedRowModel:{fn:()=>Ks(e)},table_getPreExpandedRowModel:{fn:()=>qs(e)},table_getExpandedRowModel:{fn:()=>Js(e)},table_getPrePaginatedRowModel:{fn:()=>Ys(e)},table_getPaginatedRowModel:{fn:()=>Xs(e)},table_getRowModel:{fn:()=>Zs(e)}})}};function $s(e){if(!e._cellPrototype){e._cellPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignCellPrototype?.(e._cellPrototype,e)}return e._cellPrototype}function ec(e,t,n){let r=$s(n),i=Object.create(r);i.column=e,i.id=`${t.id}_${e.id}`,i.row=t;let a=n._cellInstanceInitFns;for(let e=0;e<a.length;e++)a[e](i);return i}function tc(e){let t=e.table.getRowsInDisplayOrder(),n=e._displayIndexCache;return t[n]===e?n:-1}function nc(e){let t=e.getPrePaginatedRowModel().rows;if(e.options.paginateExpandedRows===!1){let e=[],n=t=>{t._displayIndexCache=e.length,e.push(t),t.subRows.length&&t.getIsExpanded?.()&&t.subRows.forEach(n)};return t.forEach(n),e}for(let e=0;e<t.length;e++)t[e]._displayIndexCache=e;return t}function rc(e,t){if(ba(e._valuesCache,t))return e._valuesCache[t];let n=e.table.getColumn(t);if(n?.accessorFn)return e._valuesCache[t]=n.accessorFn(e.original,e.index),e._valuesCache[t]}function ic(e,t){if(ba(e._uniqueValuesCache,t))return e._uniqueValuesCache[t];let n=e.table.getColumn(t);if(n?.accessorFn)return n.columnDef.getUniqueValues?(e._uniqueValuesCache[t]=n.columnDef.getUniqueValues(e.original,e.index),e._uniqueValuesCache[t]):(e._uniqueValuesCache[t]=[e.getValue(t)],e._uniqueValuesCache[t])}function ac(e,t){return e.getValue(t)??e.table.options.renderFallbackValue}function oc(e){return ka(e.subRows,e=>e.subRows)}function sc(e){let t=e.getCoreRowModel().flatRows,n=0;for(let e=0;e<t.length;e++)n=Math.max(n,t[e].depth);return n}function cc(e){if(e.parentId)return e.table.getCoreRowModel().rowsById[e.parentId]??e.table.getRow(e.parentId,!0)}function lc(e){let t=[],n=e;for(;;){let e=n.getParentRow();if(!e)break;t.push(e),n=e}return t.reverse()}function uc(e){let t=e.table.getAllLeafColumns(),n=e._cellsCache;n||=e._cellsCache=new WeakMap;let r=Array(t.length);for(let i=0;i<t.length;i++){let a=t[i],o=n.get(a);o||(o=ec(a,e,e.table),n.set(a,o)),r[i]=o}return r}function dc(e){let t=X(),n=e.getAllCells();for(let e=0;e<n.length;e++){let r=n[e];t[r.column.id]=r}return t}function fc(e,t,n,r){return t.options.getRowId?.(e,n,r)??(r?`${r.id}.${n}`:String(n))}function pc(e,t,n){let r=(n?e.getPrePaginatedRowModel():e.getRowModel()).rowsById[t];if(!r&&(r=e.getCoreRowModel().rowsById[t],!r))throw Error();return r}var mc={assignRowPrototype:(e,t)=>{Pa(`coreRowsFeature`,e,t,{row_getDisplayIndex:{fn:e=>tc(e)},row_getAllCellsByColumnId:{fn:e=>dc(e),memoDeps:e=>[e.getAllCells()]},row_getAllCells:{fn:e=>uc(e),memoDeps:e=>[e.table.getAllLeafColumns()]},row_getLeafRows:{fn:e=>oc(e),memoDeps:e=>[e.subRows]},row_getParentRow:{fn:e=>cc(e)},row_getParentRows:{fn:e=>lc(e)},row_getUniqueValues:{fn:(e,t)=>ic(e,t)},row_getValue:{fn:(e,t)=>rc(e,t)},row_renderValue:{fn:(e,t)=>ac(e,t)}})},constructTableAPIs:e=>{Z(`coreRowsFeature`,e,{table_getRowsInDisplayOrder:{fn:()=>nc(e),memoDeps:()=>[e.getPrePaginatedRowModel().rows,e.options.paginateExpandedRows,e.options.paginateExpandedRows===!1?e.atoms.expanded?.get():void 0]},table_getRowId:{fn:(t,n,r)=>fc(t,e,n,r)},table_getRow:{fn:(t,n)=>pc(e,t,n)},table_getMaxSubRowDepth:{fn:()=>sc(e),memoDeps:()=>[e.getCoreRowModel()]}})}};function hc(e,t,n=(e,t)=>e===t){let r=t===void 0?e.options.state:t;e._reactivity.batch(()=>{if(r)for(let t in r){let i=e.baseAtoms[t];if(!i)continue;let a=r[t],o=a===void 0?e.initialState[t]:a;n(e._reactivity.untrack(()=>i.get()),o)||i.set(()=>o)}})}function gc(e,t,n=(e,t)=>e===t){e._reactivity.batch(()=>{hc(e,t,n),e._reactivity.commit?.()})}function _c(e){let t=Y(e.initialState);e._reactivity.batch(()=>{let n=Object.keys(t);for(let r=0;r<n.length;r++){let i=n[r];e.baseAtoms[i].set(t[i])}});let n=Object.values(e._features);for(let t=0;t<n.length;t++)n[t].resetTableInstanceData?.(e)}function vc(e,t){let{features:n,atoms:r,initialState:i}=e.options;if(!e.options.mergeOptions)return{...e.options,...t,features:n,atoms:r,initialState:i};let a=e.options.mergeOptions(e.options,t),o={...Object.getOwnPropertyDescriptors(a)};return Object.defineProperties(Object.create(Object.getPrototypeOf(a)),{...o,features:{value:n,enumerable:!0,configurable:!0,writable:!0},atoms:{value:r,enumerable:!0,configurable:!0,writable:!0},initialState:{value:i,enumerable:!0,configurable:!0,writable:!0}})}function yc(e,t,n){let r=vc(e,va(t,e.options));e.optionsStore?e.optionsStore.set(()=>r):e.options=r,n?.syncExternalState!==!1&&gc(e,r.state??null)}var bc={coreCellsFeature:Ra,coreColumnsFeature:wo,coreHeadersFeature:Mo,coreRowModelsFeature:Qs,coreRowsFeature:mc,coreTablesFeature:{constructTableAPIs:e=>{Z(`coreTablesFeature`,e,{table_reset:{fn:()=>_c(e)},table_setOptions:{fn:t=>yc(e,t)}})}}};function xc(e){return e}function Sc(e,t={}){return Object.values(e).forEach(e=>{t=e.getInitialState?.(t)??t}),Y(t)}function Cc(e){let t=e.features.coreReactivityFeature,{aggregationFns:n,columnMeta:r,coreRowModel:i,expandedRowModel:a,facetedMinMaxValues:o,facetedRowModel:s,facetedUniqueValues:c,filterFns:l,filterMeta:u,filteredRowModel:d,groupedRowModel:f,paginatedRowModel:p,sortFns:m,sortedRowModel:h,tableMeta:g,..._}=e.features,v={_cellInstanceInitFns:[],_columnInstanceInitFns:[],_features:{...bc,..._},_headerGroupInstanceInitFns:[],_headerInstanceInitFns:[],_reactivity:t,_rowInstanceInitFns:[],_rowModelFns:{aggregationFns:n,filterFns:l,sortFns:m},_rowModels:{},atoms:{},baseAtoms:{}},y=Object.values(v._features),b={...y.reduce((e,t)=>Object.assign(e,t.getDefaultTableOptions?.(v)),{}),...e};if(t.wrapExternalAtoms&&b.atoms)for(let[e,n]of Object.entries(b.atoms)){let r=n,i=t.createWritableAtom(r.get(),{debugName:`externalAtom/${e}`});b.atoms[e]=i;let a=!1,o=r.subscribe(e=>{a||i.set(e)}),s=i.subscribe(e=>{a=!0,r.set(e),a=!1});t.addSubscription(o),t.addSubscription(s)}t.createOptionsStore?(v.optionsStore=t.createWritableAtom(b,{debugName:`table/optionsStore`}),Object.defineProperty(v,"options",{configurable:!0,enumerable:!0,get(){return v.optionsStore.get()},set(e){v.optionsStore.set(()=>e)}})):v.options=b,v.initialState=Sc(v._features,v.options.initialState);let x=Object.keys(v.initialState);for(let e=0;e<x.length;e++){let n=x[e];v.baseAtoms[n]=t.createWritableAtom(v.initialState[n],{debugName:`table/baseAtoms/${n}`}),v.atoms[n]=t.createReadonlyAtom(()=>{let e=v.options,t=e.atoms?.[n],r=t?t.get():v.baseAtoms[n].get();if(t)return r;let i=e.state;if(i&&ba(i,n)){let e=i[n];return e===void 0?v.initialState[n]:e}return r},{debugName:`table/atoms/${n}`})}hc(v),v.store=ma(t.createReadonlyAtom(()=>{let e={};for(let t=0;t<x.length;t++){let n=x[t];e[n]=v.atoms[n].get()}return e},{compare:ca,debugName:`table/store`}));for(let e=0;e<y.length;e++){let t=y[e];t.initTableInstanceData?.(v),t.initCellInstanceData&&v._cellInstanceInitFns.push(t.initCellInstanceData.bind(t)),t.initColumnInstanceData&&v._columnInstanceInitFns.push(t.initColumnInstanceData.bind(t)),t.initHeaderGroupInstanceData&&v._headerGroupInstanceInitFns.push(t.initHeaderGroupInstanceData.bind(t)),t.initHeaderInstanceData&&v._headerInstanceInitFns.push(t.initHeaderInstanceData.bind(t)),t.initRowInstanceData&&v._rowInstanceInitFns.push(t.initRowInstanceData.bind(t)),t.constructTableAPIs?.(v)}return v}var wc={getInitialState:e=>({columnVisibility:Ha(),...e}),getDefaultTableOptions:e=>({onColumnVisibilityChange:xa(`columnVisibility`,e)}),assignColumnPrototype:(e,t)=>{Pa(`columnVisibilityFeature`,e,t,{column_getIsVisible:{fn:e=>$(e),memoDeps:e=>[t.options.columns,t.atoms.columnVisibility?.get(),e.columns]},column_getCanHide:{fn:e=>Wa(e)},column_getToggleVisibilityHandler:{fn:e=>Ga(e)},column_toggleVisibility:{fn:(e,t)=>Ua(e,t)}})},assignRowPrototype:(e,t)=>{Pa(`columnVisibilityFeature`,e,t,{row_getVisibleCells:{fn:e=>Ka(e),memoDeps:e=>[e.getAllCells(),t.atoms.columnPinning?.get(),t.atoms.columnVisibility?.get()]},row_getVisibleCellsByColumnId:{fn:e=>qa(e),memoDeps:e=>[e.getAllCells(),t.atoms.columnVisibility?.get()]}})},constructTableAPIs:e=>{Z(`columnVisibilityFeature`,e,{table_getVisibleFlatColumns:{fn:()=>Ja(e),memoDeps:()=>[e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_getVisibleLeafColumns:{fn:()=>Ya(e),memoDeps:()=>[e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_setColumnVisibility:{fn:t=>Xa(e,t)},table_resetColumnVisibility:{fn:t=>Za(e,t)},table_toggleAllColumnsVisible:{fn:t=>Qa(e,t)},table_getIsAllColumnsVisible:{fn:()=>$a(e)},table_getIsSomeColumnsVisible:{fn:()=>eo(e)},table_getToggleAllColumnsVisibilityHandler:{fn:()=>to(e)}})}},Tc={getInitialState:e=>({...e,pagination:{...rs(),...e.pagination}}),getDefaultTableOptions:e=>({onPaginationChange:xa(`pagination`,e)}),constructTableAPIs:e=>{Z(`rowPaginationFeature`,e,{table_autoResetPageIndex:{fn:()=>is(e)},table_setPagination:{fn:t=>as(e,t)},table_resetPagination:{fn:t=>os(e,t)},table_setPageIndex:{fn:t=>ss(e,t)},table_resetPageIndex:{fn:t=>cs(e,t)},table_setPageSize:{fn:t=>us(e,t)},table_getPageCount:{fn:()=>ys(e)},table_resetPageSize:{fn:t=>ls(e,t)},table_getPageOptions:{fn:()=>ds(e)},table_getCanPreviousPage:{fn:()=>fs(e)},table_getCanNextPage:{fn:()=>ps(e)},table_getCanLastPage:{fn:()=>ms(e)},table_previousPage:{fn:()=>hs(e)},table_nextPage:{fn:()=>gs(e)},table_firstPage:{fn:()=>_s(e)},table_lastPage:{fn:()=>vs(e)},table_getRowCount:{fn:()=>bs(e)}})}},Ec={getInitialState(e){return{sorting:xs(),...e}},getDefaultColumnDef(){return{sortFn:`auto`,sortUndefined:1}},getDefaultTableOptions(e){return{autoResetSorting:!1,onSortingChange:xa(`sorting`,e),isMultiSortEvent:e=>e.shiftKey}},assignColumnPrototype(e,t){Pa(`rowSortingFeature`,e,t,{column_getAutoSortFn:{fn:e=>Ts(e)},column_getAutoSortDir:{fn:e=>Es(e)},column_getSortFn:{fn:e=>Ds(e)},column_toggleSorting:{fn:(e,t,n)=>Os(e,t,n)},column_getFirstSortDir:{fn:e=>ks(e)},column_getNextSortingOrder:{fn:(e,t)=>As(e,t)},column_getCanSort:{fn:e=>js(e)},column_getCanMultiSort:{fn:e=>Ms(e)},column_getIsSorted:{fn:e=>Ns(e)},column_getSortIndex:{fn:e=>Ps(e)},column_clearSorting:{fn:e=>Fs(e)},column_getToggleSortingHandler:{fn:e=>Is(e)}})},constructTableAPIs(e){Z(`rowSortingFeature`,e,{table_setSorting:{fn:t=>Ss(e,t)},table_resetSorting:{fn:t=>Cs(e,t)}})}};function Dc(e){let t=[],n=e=>{t.push(e),e.subRows.length&&$o(e)&&e.subRows.forEach(n)};return e.rows.forEach(n),{rows:t,flatRows:e.flatRows,rowsById:e.rowsById}}function Oc(){return e=>{let t=e;return Ma({feature:`rowPaginationFeature`,table:t,fnName:`table.getPaginatedRowModel`,memoDeps:()=>[t.getPrePaginatedRowModel(),t.atoms.pagination?.get(),t.options.paginateExpandedRows?void 0:t.atoms.expanded?.get()],fn:()=>kc(t)})}}function kc(e){let t=e.getPrePaginatedRowModel(),n=e.atoms.pagination?.get();if(!t.rows.length)return t;let{pageSize:r,pageIndex:i}=n??rs(),{rows:a,flatRows:o,rowsById:s}=t,c=a;if(r!==1/0||i!==0){let e=r*i,t=e+r;c=a.slice(e,t)}let l;l=e.options.paginateExpandedRows?{rows:c,flatRows:o,rowsById:s}:Dc({rows:c,flatRows:o,rowsById:s}),l.flatRows=[];let u=new Set,d=e=>{u.has(e.id)||(u.add(e.id),l.flatRows.push(e),e.subRows.length&&e.subRows.forEach(d))};return l.rows.forEach(d),l}function Ac(){return e=>{let t=e;return Ma({feature:`rowSortingFeature`,table:t,fnName:`table.getSortedRowModel`,memoDeps:()=>[t.atoms.sorting?.get(),t.getPreSortedRowModel()],fn:()=>jc(t),onAfterUpdate:ja(()=>is(t))})}}function jc(e){let t=e.getPreSortedRowModel(),n=e.atoms.sorting?.get();if(!t.rows.length||!n?.length)return t;let r=[],i=n.filter(t=>{let n=e.getColumn(t.id);return n?js(n):!1});if(!i.length)return t;let a=[];for(let t=0;t<i.length;t++){let n=i[t],r=e.getColumn(n.id);r&&a.push({id:n.id,desc:n.desc,sortUndefined:r.columnDef.sortUndefined,invertSorting:r.columnDef.invertSorting,sortFn:Ds(r)})}let o=(e,t)=>{for(let n=0;n<a.length;n++){let r=a[n],i=r.sortUndefined,o=r.desc,s=0;if(i){let n=e.getValue(r.id),a=t.getValue(r.id),o=n===void 0,c=a===void 0;if(o&&c)continue;if(o||c){if(i===`first`)return o?-1:1;if(i===`last`)return o?1:-1;s=o?i:-i}}if(s===0&&(s=r.sortFn(e,t,r.id)),s!==0)return o&&(s*=-1),r.invertSorting&&(s*=-1),s}return e.index-t.index},s=e=>{let t=e.slice();t.sort(o);let n=!1;for(let i=0;i<t.length;i++){let a=t[i];a!==e[i]&&(n=!0);let o=r.length;if(r.push(a),a.subRows.length){let e=s(a.subRows);if(e.changed){let s=Object.create(Object.getPrototypeOf(a));ya(s,a),s.subRows=e.rows,t[i]=s,r[o]=s,n=!0}}}return{rows:t,changed:n}};return{rows:s(t.rows).rows,flatRows:r,rowsById:t.rowsById}}var Mc=typeof window>`u`?U.useEffect:U.useLayoutEffect;function Nc(e,t){let[{table:n,rootSource:r}]=(0,U.useState)(()=>{let t=Cc({...e,features:{coreReactivityFeature:_a(),...e.features}});return t.Subscribe=(e=>pa({...e,source:e.source??t.store})),t.FlexRender=Wi,{table:t,rootSource:ga(t.store,ca)}}),i=n;yc(i,t=>({...t,...e}),{syncExternalState:!1});let a=i.options.state,o=r.get(),s=fa(r,t,{compare:ca});return Mc(()=>{r.markCommitted(o),gc(i,a??null,ca)}),(0,U.useMemo)(()=>({...n,options:e,state:s}),[n,e,s])}var Pc=xc({columnVisibilityFeature:wc,rowSortingFeature:Ec,rowPaginationFeature:Tc,sortedRowModel:Ac(),paginatedRowModel:Oc()}),Fc=10,Ic=10,Lc=new Set([`duration`,`taskCount`,`shuffleRead`,`fetchWait`,`gcPct`,`skew`,`spill`,`findingCount`]);function Rc(e,t){return e.length>t?`${e.slice(0,t)}…`:e}function zc(e){return e<=0?(0,G.jsx)(G.Fragment,{children:`0`}):(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[e,` `,(0,G.jsx)(ye,{label:`RETRY`,impactBand:`critical`})]})}function Bc(e,t,n){if(e<=0)return(0,G.jsx)(G.Fragment,{children:`—`});let r=T(e);if(t<=0)return(0,G.jsx)(G.Fragment,{children:r});let i=e/t;return i>.3?(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[r,` `,(0,G.jsx)(ye,{label:n===`advanced`?`${Math.round(i*100)}%`:`High`,impactBand:`critical`})]}):i>.15?(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[r,` `,(0,G.jsx)(ye,{label:n===`advanced`?`${Math.round(i*100)}%`:`Elevated`,impactBand:`info`})]}):(0,G.jsx)(G.Fragment,{children:r})}function Vc(e,t){if(!e||e<=0||!t||t<=0)return(0,G.jsx)(G.Fragment,{children:`—`});let n=t/e,r=n<.01?`${n.toExponential(1)}×`:`${n.toFixed(2)}×`;return n>2||n<.1?(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[r,` `,(0,G.jsx)(ye,{label:`extreme`,impactBand:`info`})]}):(0,G.jsx)(G.Fragment,{children:r})}function Hc(e,t){if(e<=0)return(0,G.jsx)(G.Fragment,{children:`—`});let n=t??`unclassified`;return(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[k(e),` `,(0,G.jsx)(ye,{label:te[n],impactBand:`warning`,title:ae[n]})]})}function Uc(e,t){return!e||e<=0?0:(t??0)/e}function Wc(e){let t=new Map;for(let n of e)t.has(n.type)||t.set(n.type,[]),t.get(n.type).push(n);return[...t.values()].map(e=>{let t=ce(e);return e.find(e=>e.impactBand===t)??e[0]})}function Gc({appModel:e,catalog:t,getTaskData:n,onRoute:r}){let{openStage:i}=_t(),a=M(),[o,s]=(0,U.useState)(!1),[c,l]=(0,U.useState)(``),[u,d]=(0,U.useState)([]),[f,p]=(0,U.useState)({pageIndex:0,pageSize:Fc}),{catalogByStage:m,flaggedStageIds:h}=(0,U.useMemo)(()=>{let e=new Map,n=new Set;for(let r of t)r.stageId!=null&&(n.add(r.stageId),e.has(r.stageId)||e.set(r.stageId,[]),e.get(r.stageId).push(r));return{catalogByStage:e,flaggedStageIds:n}},[t]),g=(0,U.useMemo)(()=>{let t=[...e.stages.values()],n=o?t.filter(e=>h.has(e.id)):[...t].sort((e,t)=>(t.completedAt??0)-(t.submittedAt??0)-((e.completedAt??0)-(e.submittedAt??0))).slice(0,Ic),r=c.trim().toLowerCase();return(r?n.filter(e=>(e.name??``).toLowerCase().includes(r)||String(e.id).includes(r)):n).map(e=>({stage:e,tags:Wc(m.get(e.id)??[])}))},[e.stages,o,h,m,c]),_=A(),v=(0,U.useMemo)(()=>{if(!r)return null;let e=new Map;for(let n of t){let r=Cr(n,t);r&&e.set(n,r)}return e},[t,r]),y=(0,U.useMemo)(()=>[{id:`id`,header:`Stage`,accessorFn:e=>e.stage.id,cell:({getValue:e})=>{let t=e();return(0,G.jsx)(`button`,{type:`button`,"aria-label":`Open Stage ${t} details`,className:`inline-flex cursor-pointer items-center rounded-sm hover:underline underline-offset-2 focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:e=>{e.stopPropagation(),i(t)},children:(0,G.jsx)(`strong`,{children:t})})}},{id:`name`,header:`Operation`,accessorFn:e=>e.stage.name??``,cell:({row:e})=>{let t=e.original.stage.id;return(0,G.jsxs)(`span`,{className:`inline-flex flex-wrap items-center gap-1.5`,children:[Rc(e.original.stage.name??``,40),e.original.tags.map((e,n)=>{let i=v?v.get(e)??null:null,a=i&&r?{target:i,onRoute:r}:null,o=we(_,e)?.compact??null;return(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[a?(0,G.jsx)(`button`,{type:`button`,"aria-label":`Investigate ${a.target.findingLabel} in Stage ${t}`,title:`Investigate ${a.target.findingLabel} in Stage ${t}`,className:`inline-flex cursor-pointer items-center rounded-full hover:underline underline-offset-2 focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:e=>{e.stopPropagation(),a.onRoute(a.target)},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&e.stopPropagation()},children:(0,G.jsx)(j,{type:e.type,impactBand:e.impactBand,plainBadge:!0})}):(0,G.jsx)(j,{type:e.type,impactBand:e.impactBand}),o?(0,G.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:o}):null]},n)})]})}},{id:`type`,header:`Type`,accessorFn:e=>e.stage.stageType??``,cell:({row:e})=>(0,G.jsx)(w,{variant:`outline`,children:e.original.stage.stageType??`—`})},{id:`duration`,header:`Duration`,accessorFn:e=>(e.stage.completedAt??0)-(e.stage.submittedAt??0),cell:({getValue:e})=>(0,G.jsx)(G.Fragment,{children:T(e())})},{id:`taskCount`,header:`Tasks`,accessorFn:e=>e.stage.taskCount},{id:`retried`,header:`Retried`,accessorFn:e=>e.stage.failedTasks??0,cell:({getValue:e})=>zc(e())},{id:`shuffleRead`,header:`Shuffle Read`,accessorFn:e=>e.stage.shuffleReadBytes??0,cell:({getValue:e})=>(0,G.jsx)(G.Fragment,{children:k(e())})},{id:`fetchWait`,header:`Fetch Wait`,accessorFn:e=>e.stage.fetchWaitTime??0,cell:({row:e})=>Bc(e.original.stage.fetchWaitTime??0,e.original.stage.executorRunTime??0,a)},...a===`advanced`?[{id:`ioRatio`,header:`I/O Ratio`,accessorFn:e=>e.stage.inputBytes?(e.stage.outputBytes??0)/e.stage.inputBytes:0,cell:({row:e})=>Vc(e.original.stage.inputBytes??0,e.original.stage.outputBytes??0)}]:[],{id:`spill`,header:`Spill (mem)`,accessorFn:e=>e.stage.memoryBytesSpilled??0,cell:({row:e})=>Hc(e.original.stage.memoryBytesSpilled??0,e.original.stage.spillClassification)},...a===`advanced`?[{id:`gcPct`,header:`GC%`,accessorFn:e=>e.stage.gcPct??0,cell:({getValue:e})=>(0,G.jsxs)(G.Fragment,{children:[e().toFixed(1),`%`]})},{id:`skew`,header:`Skew P95/median`,accessorFn:e=>Uc(e.stage.taskDurationP50,e.stage.taskDurationP95),cell:({getValue:e})=>{let t=e();return(0,G.jsx)(G.Fragment,{children:t>0?`${t.toFixed(1)}×`:`—`})}}]:[],{id:`findingCount`,header:`Findings`,accessorFn:e=>e.tags.length,cell:({getValue:e})=>{let t=e();return(0,G.jsx)(G.Fragment,{children:t>0?t:`—`})}}],[t,r,v,i,a,_]),b=Nc({features:Pc,data:g,columns:y,state:{sorting:u,pagination:f},sortDescFirst:!1,onSortingChange:d,onPaginationChange:p});function x(){s(e=>!e),d([]),p({pageIndex:0,pageSize:Fc})}let S=e=>e===`asc`?` ▲`:e===`desc`?` ▼`:``,C=e=>e===`asc`?`ascending`:e===`desc`?`descending`:`none`;return(0,G.jsx)(B,{title:`Stage Summary`,children:(0,G.jsxs)(`div`,{className:`space-y-3`,children:[(0,G.jsx)(Ae,{type:`text`,value:c,onChange:e=>{l(e.target.value),p(e=>({...e,pageIndex:0}))},placeholder:`Filter by stage name or ID…`,"aria-label":`Filter by stage name or ID`,className:`max-w-xs`}),(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Scroll sideways to see all columns →`}),(0,G.jsx)(L,{type:`button`,variant:`outline`,size:`sm`,onClick:x,children:o?`Top ${Ic} by duration`:`Problems only`})]}),(0,G.jsxs)(`p`,{className:`sr-only`,role:`status`,"aria-live":`polite`,children:[`Showing `,g.length,` stage`,g.length===1?``:`s`,`: `,` `,o?`problems only`:`top ${Ic} by duration`,`.`]}),(0,G.jsxs)(bt,{children:[(0,G.jsx)(mt,{children:b.getHeaderGroups().map(e=>(0,G.jsx)(R,{children:e.headers.map(e=>{let t=e.column.getIsSorted(),n=e.column.getToggleSortingHandler();return(0,G.jsxs)(ft,{scope:`col`,tabIndex:e.column.getCanSort()?0:void 0,"aria-sort":C(t),className:F(e.column.getCanSort()&&`tap-target-comfortable cursor-pointer select-none`,Lc.has(e.column.id)&&`text-right`),onClick:n,onKeyDown:e=>{n&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n(e))},children:[Ui(e.column.columnDef.header,e.getContext()),S(t)]},e.id)})},e.id))}),(0,G.jsx)(ht,{children:b.getRowModel().rows.length===0?(0,G.jsx)(R,{children:(0,G.jsx)(z,{colSpan:y.length,className:`text-muted-foreground`,children:(0,G.jsxs)(`span`,{className:`flex items-center justify-center gap-2 py-2`,children:[(0,G.jsx)(Ft,{"aria-hidden":`true`,className:`size-4 shrink-0`}),`No stages to show.`]})})}):b.getRowModel().rows.map(e=>(0,G.jsx)(R,{className:`cursor-pointer`,onClick:()=>i(e.original.stage.id),children:e.getVisibleCells().map(e=>(0,G.jsx)(z,{className:Lc.has(e.column.id)?`text-right`:void 0,children:Ui(e.column.columnDef.cell,e.getContext())},e.id))},e.id))})]}),b.getPageCount()>1?(0,G.jsxs)(`div`,{className:`flex items-center justify-end gap-2 text-xs`,children:[(0,G.jsx)(L,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:()=>b.previousPage(),disabled:!b.getCanPreviousPage(),children:`Previous`}),(0,G.jsxs)(`span`,{className:`text-muted-foreground`,children:[`Page `,f.pageIndex+1,` of `,b.getPageCount()]}),(0,G.jsx)(L,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:()=>b.nextPage(),disabled:!b.getCanNextPage(),children:`Next`})]}):null]})})}var Kc=20,qc=24,Jc=40,Yc=200,Xc=640;function Zc(e,t=Kc){let n=[...e].filter(e=>e.submittedAt&&e.completedAt),r=n.length;return r<=t?{stages:n.sort((e,t)=>e.submittedAt-t.submittedAt),total:r,capped:!1}:{stages:[...n].sort((e,t)=>t.completedAt-t.submittedAt-(e.completedAt-e.submittedAt)).slice(0,t).sort((e,t)=>e.submittedAt-t.submittedAt),total:r,capped:!0}}function Qc({appModel:e,catalog:t}){let{openStage:n}=_t(),r=[...e.stages.values()].filter(e=>e.submittedAt&&e.completedAt),i=r.length,o=r.reduce((e,t)=>Math.min(e,t.submittedAt),1/0),s=e.app?.startTime??(Number.isFinite(o)?o:0),d=new Set(t.filter(e=>e.stageId!=null).map(e=>e.stageId)),p=M(),[h,_]=(0,U.useState)(()=>p===`advanced`?i:Kc),{stages:v}=Zc(r,h),y=Zn(v).map(e=>({stageId:e.id,label:`Stage ${e.id}`,wait:e.submittedAt-s,duration:e.completedAt-e.submittedAt,flagged:d.has(e.id)})),b=Math.min(Xc,Math.max(Yc,y.length*qc+Jc)),x=b-Jc,S=Math.max(1,Math.floor(x/qc)),C=Math.max(1,Math.ceil(y.length/S));return(0,G.jsx)(B,{title:`Job Timeline`,summary:i>0?(0,G.jsx)(K,{value:`${i} stage${i===1?``:`s`}`,context:`${d.size} flagged`}):void 0,children:i===0?(0,G.jsx)(Sn,{tone:`neutral`,icon:Ft,title:`No stages in this run.`}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,G.jsx)(`label`,{htmlFor:`timeline-topn`,children:`showing top`}),(0,G.jsx)(`input`,{id:`timeline-topn`,type:`number`,min:1,max:i,value:Math.min(h,i),onChange:e=>{let t=parseInt(e.target.value,10);Number.isFinite(t)||(t=h),_(Math.max(1,Math.min(i,t)))},className:`w-16 rounded border border-input bg-transparent px-1 py-0.5`,"aria-label":`Number of stages to show`}),(0,G.jsxs)(`span`,{children:[`of `,i,` by duration · flagged in red`]})]}),(0,G.jsx)(He,{ariaLabel:`Job timeline: stage durations by time from app start.`,height:b,table:{caption:`Job timeline: stage durations by time from app start`,columns:[`Stage`,`Start`,`Duration`],rows:y.map(e=>[e.label,T(e.wait),T(e.duration)]),align:[`left`,`right`,`right`]},children:(0,G.jsxs)(l,{data:y,layout:`vertical`,children:[(0,G.jsx)(c,{stroke:I.muted,strokeOpacity:.2,horizontal:!1}),(0,G.jsx)(m,{type:`number`,tickFormatter:e=>`${Math.round(e/1e3)}s`,tick:{fontSize:10},tickCount:10}),(0,G.jsx)(f,{type:`category`,dataKey:`label`,tick:{fontSize:10},width:64,interval:0,tickFormatter:(e,t)=>t%C===0?e:``}),(0,G.jsx)(g,{formatter:(e,t)=>t===`Duration`?T(Number(e)):[null,null]}),(0,G.jsx)(u,{dataKey:`wait`,stackId:`timeline`,fill:`transparent`,name:`Wait`}),(0,G.jsx)(u,{dataKey:`duration`,stackId:`timeline`,name:`Duration`,cursor:`pointer`,onClick:e=>n(e.payload.stageId),children:y.map(e=>(0,G.jsx)(a,{fill:e.flagged?I.critical:I.accent,stroke:e.flagged?I.critical:`none`,strokeWidth:e.flagged?2:0},e.stageId))})]})})]})})}var $c={present:`present`,disabled:`disabled`,notEmitted:`not emitted`,notApplicable:`not applicable`,outsideEventLog:`outside event log`,unknown:`unknown`},el={present:`info`,disabled:`warning`,notEmitted:`warning`,notApplicable:`muted`,outsideEventLog:`muted`,unknown:`muted`};function tl({entry:e}){let t=e.evidence?.count,n=Ye(),r=`${e.summary}${t==null?``:` · ${t} observed`}`,{tooltipProps:i,srOnlyTooltip:a}=Ke(r);return(0,G.jsxs)(`li`,{id:`evidence-availability-${e.key}`,tabIndex:-1,ref:t=>n(e.key,t),className:`flex flex-col gap-0.5 rounded-md px-2 py-1 outline-none focus:ring-2 focus:ring-ring`,...i,children:[(0,G.jsxs)(`span`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,G.jsx)(Se,{impactBand:el[e.state]}),(0,G.jsx)(`span`,{className:`truncate text-sm font-medium`,children:Xe(e.key)})]}),(0,G.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:$c[e.state]}),a]}),(0,G.jsx)(N,{children:(0,G.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:r})})]})}function nl(e){return Object.keys($c).map(t=>[t,e.filter(e=>e.state===t).length]).filter(([,e])=>e>0).map(([e,t])=>`${t} ${$c[e]}`).join(` · `)}function rl({ledger:e}){let{evidenceCardOpen:t,setEvidenceCardOpen:n}=ke();return(0,G.jsx)(B,{title:`Evidence availability`,open:t,onOpenChange:n,summary:(0,G.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e?nl(e.entries):`Unavailable for this restored run`}),children:e?(0,G.jsx)(`ul`,{className:`grid grid-cols-1 gap-x-4 gap-y-0.5 sm:grid-cols-2`,"aria-label":`Evidence availability ledger`,children:e.entries.map(e=>(0,G.jsx)(tl,{entry:e},e.key))}):(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Evidence availability is unavailable for this restored run.`})})}var il=64;function al(e,t){return t>=1?e:`color-mix(in srgb, ${e} ${t*100}%, transparent)`}function ol(e){return[{key:`startup`,label:`Startup`,value:e.startup,color:I.info,fillOpacity:1},{key:`stagesActive`,label:`Stages active`,value:e.stagesActive,color:I.clean,fillOpacity:1},{key:`gaps`,label:`Scheduler gaps`,value:e.gaps,color:I.warning,fillOpacity:1},{key:`idle`,label:`Idle`,value:e.idle,color:I.muted,fillOpacity:.6}].filter(e=>e.value>0).map(e=>({...e,legendColor:al(e.color,e.fillOpacity)}))}var sl=(0,U.memo)(function(){let e=A()?.data.wallClock;if(!e||e.total<=0)return null;let n=ol(e),r=t=>e.total>0?t/e.total*100:0,a=n.reduce((e,t)=>t.value>e.value?t:e,n[0]),o=[n.reduce((e,t)=>({...e,[t.key]:t.value}),{name:`total`})];return(0,G.jsxs)(B,{title:`Wall-Clock Breakdown`,badges:(0,G.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[T(e.total),` total`]}),summary:(0,G.jsx)(K,{value:`${a.label} ${Math.round(r(a.value))}%`,context:`of ${T(e.total)} total`}),children:[(0,G.jsx)(He,{ariaLabel:`Wall-clock breakdown: ${T(e.total)} total, split across startup, active stages, scheduler gaps and idle time. See the table below for exact values.`,height:il,table:{caption:`Wall-clock time breakdown`,columns:[`Segment`,`Duration`,`% of total`],rows:n.map(e=>[e.label,T(e.value),`${Math.round(r(e.value))}%`]),align:[`left`,`right`,`right`]},children:(0,G.jsxs)(l,{data:o,layout:`vertical`,stackOffset:`expand`,margin:{top:0,right:0,bottom:0,left:0},children:[(0,G.jsx)(m,{type:`number`,hide:!0,domain:[0,1]}),(0,G.jsx)(f,{type:`category`,dataKey:`name`,hide:!0}),(0,G.jsx)(g,{shared:!1,labelFormatter:()=>``,formatter:(e,t)=>[T(Number(e)),t]}),(0,G.jsx)(i,{wrapperStyle:{fontSize:12},itemSorter:e=>n.findIndex(t=>t.key===e.dataKey),formatter:(e,t)=>{let r=n.find(e=>e.key===t.dataKey);return(0,G.jsx)(`span`,{style:{color:r?.color},children:e})},content:e=>(0,G.jsx)(t,{...e,payload:e.payload?.map(e=>{let t=n.find(t=>t.key===e.dataKey);return t?{...e,color:t.legendColor}:e})})}),n.map(e=>(0,G.jsx)(u,{dataKey:e.key,name:e.label,stackId:`wallclock`,fill:e.color,fillOpacity:e.fillOpacity},e.key))]})}),(0,G.jsx)(N,{children:(0,G.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-3 text-xs text-muted-foreground`,children:n.map(e=>(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,G.jsx)(`span`,{className:`inline-block size-2.5 rounded-sm`,style:{backgroundColor:e.color,opacity:e.fillOpacity}}),e.label,` (`,T(e.value),`)`]},e.key))})})]})});function cl(){let e=A()?.data.wastedCoreHours;if(e?.totalCoreHours==null)return null;let t=e.totalCoreHours>0?Math.round(e.wastedCoreHours/e.totalCoreHours*100):0;return(0,G.jsx)(B,{title:`Wasted Core-Hours`,statusBadge:(0,G.jsx)(tr,{}),defaultCollapsed:!0,summary:(0,G.jsx)(K,{value:(0,G.jsx)(`span`,{className:`whitespace-nowrap`,children:q(e.wastedCoreHours)}),context:`wasted of ${q(e.totalCoreHours)} allocated`}),children:(0,G.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,G.jsxs)(`p`,{children:[`Allocated: `,(0,G.jsx)(`strong`,{children:q(e.totalCoreHours)}),` · Used:`,` `,(0,G.jsx)(`strong`,{children:q(e.usefulCoreHours)})]}),(0,G.jsxs)(`p`,{children:[(0,G.jsx)(Se,{impactBand:`info`}),` Wasted: `,(0,G.jsx)(`strong`,{children:q(e.wastedCoreHours)}),` (`,t,`% of allocated)`]}),(0,G.jsx)(N,{children:(0,G.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Allocated = `,e.totalCores,` cores over the run; used = core-time that actually ran tasks.`]})}),e.topStages.length>0&&(0,G.jsxs)(`div`,{className:`space-y-1`,children:[(0,G.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Top stages by task core-time`}),(0,G.jsx)(`ul`,{className:`space-y-0.5`,children:e.topStages.map(e=>(0,G.jsxs)(`li`,{className:`flex justify-between gap-2`,children:[(0,G.jsxs)(`span`,{children:[`Stage `,e.stageId]}),(0,G.jsx)(`span`,{className:`text-muted-foreground tabular-nums`,children:q(e.coreMs/36e5)})]},e.stageId))})]})]})})}var ll=[`[data-testid="next-step"] [data-shortcut-target]`,`[data-testid="fix-these-first-row"] button[data-shortcut-target]`,`[data-testid="fix-these-first-group-row"] button[data-shortcut-target]`].join(`, `);function ul(e){if(e.defaultPrevented||e.metaKey||e.ctrlKey||e.altKey)return!0;let t=e.target,n=t?.tagName;return n===`INPUT`||n===`TEXTAREA`||n===`SELECT`||t?.isContentEditable||t?.closest?.(`[role="listbox"], [role="combobox"]`)?!0:[...document.querySelectorAll(`[role="dialog"], [role="menu"], [role="alertdialog"], [role="listbox"]`)].some(e=>!e.closest(`[hidden]`)&&e.getClientRects().length>0)}function dl(){return[...document.querySelectorAll(ll)].filter(e=>e.offsetParent!==null||e.getClientRects().length>0)}function fl(e){let t=dl();if(t.length===0)return null;let n=t.indexOf(document.activeElement),r=t[n===-1?e===1?0:t.length-1:Math.min(t.length-1,Math.max(0,n+e))],i=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1;return r.focus({preventScroll:!0}),r.scrollIntoView?.({block:`nearest`,behavior:i?`auto`:`smooth`}),r}function pl({enabled:e,showFindings:t,showFullReport:n}){(0,U.useEffect)(()=>{if(!e)return;function r(e){if(!ul(e))switch(e.key){case`j`:case`k`:{let n=e.key===`j`?1:-1;e.preventDefault(),t(),requestAnimationFrame(()=>fl(n));return}case`f`:{let t=document.querySelector(`[aria-label="Filter findings"] button`);if(!t)return;e.preventDefault(),t.focus();return}case`1`:t(),e.preventDefault();return;case`2`:n(),e.preventDefault();return}}return window.addEventListener(`keydown`,r),()=>window.removeEventListener(`keydown`,r)},[e,t,n])}function ml({appModel:e,catalog:t,configFindings:n,getTaskData:r,activeFileId:i,onRoute:a}){return(0,G.jsxs)(`div`,{className:`space-y-6`,children:[(0,G.jsx)(`h2`,{className:`sr-only`,children:`Full app report`}),(0,G.jsx)(sl,{}),(0,G.jsx)(Qc,{appModel:e,catalog:t}),(0,G.jsx)(cr,{appModel:e,activeFileId:i}),(0,G.jsx)(Gc,{appModel:e,catalog:t,getTaskData:r,onRoute:a}),(0,G.jsxs)(Tt,{children:[bn().map(({component:a,widgetId:o})=>(0,G.jsx)(V,{cardId:`reference-${o}`,widgetId:o,collapsedTile:!0,children:(0,G.jsx)(U.Suspense,{fallback:(0,G.jsx)(lt,{}),children:(0,G.jsx)(a,{appModel:e,catalog:t,configFindings:n,getTaskData:r,activeFileId:i,defaultCollapsed:!0})})},o)),(0,G.jsx)(V,{cardId:`reference-evidence-availability`,collapsedTile:!0,children:(0,G.jsx)(rl,{ledger:e.evidenceAvailability})}),(0,G.jsx)(V,{cardId:`reference-etl-phases`,collapsedTile:!0,children:(0,G.jsx)(ir,{})}),(0,G.jsx)(V,{cardId:`reference-scaling-sim`,collapsedTile:!0,children:(0,G.jsx)(xr,{appModel:e})}),(0,G.jsx)(V,{cardId:`reference-efficiency-model`,collapsedTile:!0,children:(0,G.jsx)(nr,{})}),(0,G.jsx)(V,{cardId:`reference-wasted-core-hours`,collapsedTile:!0,children:(0,G.jsx)(cl,{})}),(0,G.jsx)(V,{cardId:`reference-core-usage-histogram`,collapsedTile:!0,children:(0,G.jsx)($n,{appModel:e,getTaskData:r})})]})]})}function hl(e,t,n){let r=e.map(e=>e===`impactBands`?`${[...t.impactBands].join(`, `)} impact`:e===`types`?[...t.types].map(e=>yt(e)).join(`, `):[...t.stages].map(e=>`Stage ${e}`).join(`, `));return`Cleared the ${r.join(` and `)} filter${r.length===1?``:`s`} to show ${n}.`}function gl({appModel:e,catalog:t,configFindings:n,getTaskData:r,activeFileId:i,options:a,onRoute:o,activeTab:s,onActiveTabChange:c,renderTopbar:l}){let{selection:u,replaceSelection:d}=In(),f=M(),p=A(),[m,h]=(0,U.useState)(null),g=(0,U.useCallback)((e,t)=>{let n=On(e,u);if(n.length===0)return;let r={...u};for(let e of n)Object.assign(r,{[e]:wn()[e]});d(r),h({text:hl(n,u,t),selection:r})},[u,d]),_=(0,U.useCallback)(e=>{yn(e.finding.type)||g(e.finding,`this finding`),o(e)},[g,o]),v=(0,U.useCallback)(e=>{let t=pe(p).filter(t=>t.impactBand===e).reduce((e,t)=>!e||On(t,u).length<On(e,u).length?t:e,null);t&&g(t,`the ${e} findings`),c(`findings`),requestAnimationFrame(()=>{let t=document.getElementById(`impact-band-${e}-heading`);if(!t)return;let n=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1;t.scrollIntoView?.({block:`start`,behavior:n?`auto`:`smooth`}),t.focus({preventScroll:!0})})},[p,u,g,c]),y=(0,U.useMemo)(()=>Dn(t,u),[t,u]),b=(0,U.useMemo)(()=>Dn(n??[],u),[n,u]),x=y.length+b.length,S=t.length+(n??[]).length>0&&x===0,C=f===`advanced`||!Tn(u);return(0,G.jsxs)(G.Fragment,{children:[l(v),(0,G.jsxs)(`main`,{className:`flex-1 space-y-6 p-4`,children:[(0,G.jsx)(Nr,{}),p?(0,G.jsx)(Mr,{interpretation:p,onRoute:_}):null,p?(0,G.jsx)(Br,{interpretation:p.data,catalog:y}):null,C&&(0,G.jsx)(Gn,{options:a,resultCount:x}),C&&m?.selection===u?(0,G.jsx)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,children:m.text}):null,S&&(0,G.jsx)(Ln,{}),!S&&(0,G.jsxs)(Fe,{value:s,onValueChange:e=>c(e),children:[(0,G.jsxs)(Re,{variant:`chrome`,"aria-label":`Report view`,children:[(0,G.jsx)(Ne,{value:`findings`,className:`tap-target-comfortable`,children:`Findings`}),(0,G.jsx)(Ne,{value:`full-report`,className:`tap-target-comfortable`,children:`Full app report`})]}),(0,G.jsxs)(Ie,{value:`findings`,keepMounted:!0,children:[(0,G.jsx)(`h2`,{className:`sr-only`,children:`Findings`}),(0,G.jsx)(xi,{appModel:e,catalog:y,configFindings:b,stages:e.stages,getTaskData:r,activeFileId:i,onRoute:o})]}),(0,G.jsx)(Ie,{value:`full-report`,keepMounted:!0,children:(0,G.jsx)(ml,{appModel:e,catalog:y,getTaskData:r,configFindings:b,activeFileId:i,onRoute:o})})]}),(0,G.jsx)(zi,{appModel:e,catalog:t,getTaskData:r,onRoute:_})]})]})}function _l(){let{resetToDropZone:e,startLoad:t,getTaskData:n,compareWithAnotherRun:r}=pt(),i=P(e=>e.appModel),a=P(e=>e.catalog),o=P(e=>e.activeFileId),s=P(e=>e.exportMode),{recentEntries:c,onPickRecent:l,onRemoveRecent:u}=nt(o),[d,f]=(0,U.useState)(!1),[p,m]=(0,U.useState)(`findings`),h=M(),g=(0,U.useCallback)(()=>m(`findings`),[]),_=(0,U.useCallback)(()=>m(`full-report`),[]);pl({enabled:h===`advanced`,showFindings:g,showFullReport:_});let{referenceOpen:v}=ke(),[y,b]=(0,U.useState)(null),[x,S]=(0,U.useState)(null),[C,ee]=(0,U.useState)(null),te=(0,U.useRef)(0),w=(0,U.useRef)(null),ne=(0,U.useRef)(null),T=(0,U.useRef)(new Map),re=(0,U.useRef)(new Map),E=(0,U.useRef)(null),ie=y?.target??null;(0,U.useEffect)(()=>()=>{E.current&&clearTimeout(E.current)},[]),(0,U.useEffect)(()=>{v&&m(`full-report`)},[v]);let D=(0,U.useCallback)(e=>{w.current?.token===e&&(w.current=null,ne.current=null,b(t=>t?.token===e?null:t))},[]),O=(0,U.useCallback)(e=>{if(w.current?.token!==e.token)return null;let{catalog:t,configFindings:n,activeFileId:r}=de.getState();if(ne.current!==r)return null;let i=Cr(e.target.finding,[...t,...n]);return!i||i.widgetId!==e.target.widgetId||i.region!==e.target.region?null:i},[]),ae=(0,U.useCallback)(e=>{m(yn(e.finding.type)?`full-report`:`findings`);let t=te.current+1;te.current=t;let{catalog:n,configFindings:r,activeFileId:i}=de.getState(),a=Cr(e.finding,[...n,...r]);if(!a||a.widgetId!==e.widgetId||a.region!==e.region){w.current=null,ne.current=null,b(null);return}let o={target:a,token:t};w.current=o,ne.current=i,b(o)},[]),k=(0,U.useCallback)((e,t)=>{T.current.set(e,t);let n=w.current;return n?.target.widgetId===e&&O(n)&&t.open(),()=>{T.current.get(e)===t&&T.current.delete(e)}},[O]),oe=(0,U.useCallback)((e,t)=>(re.current.set(e,t),()=>{re.current.get(e)===t&&re.current.delete(e)}),[]),se=(0,U.useCallback)((e,t)=>{if(!t)return;let n=w.current;if(!n||n.target.widgetId!==e)return;let r=O(n);if(!r){D(n.token);return}let i=T.current.get(e);if(!i)return;let a=i.getDisclosureButton();if(!a){D(n.token);return}let o=window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,s=re.current.get(r.finding);s?(s.scrollIntoView({behavior:o?`auto`:`smooth`,block:`center`,inline:`nearest`}),s.focus({preventScroll:!0}),E.current&&clearTimeout(E.current),ee(r.finding),E.current=setTimeout(()=>{E.current=null,ee(null)},2e3)):(i.wrapperElement.scrollIntoView({behavior:o?`auto`:`smooth`,block:`start`,inline:`nearest`}),a.focus({preventScroll:!0}),S(e)),D(n.token)},[D,O]),ce=(0,U.useCallback)(e=>{S(t=>t===e?null:t)},[]);(0,U.useLayoutEffect)(()=>{if(!y)return;let e=O(y);if(!e){D(y.token);return}T.current.get(e.widgetId)?.open()},[D,O,y]),(0,U.useLayoutEffect)(()=>{let e=w.current;e&&!O(e)&&D(e.token)},[o,a,D,O]);let A=P(e=>e.configFindings),j=(0,U.useMemo)(()=>kn(a,A),[a,A]);return(0,G.jsxs)(`div`,{"data-testid":`dashboard`,className:`relative flex min-h-screen flex-col`,style:{paddingRight:`var(--docs-inset, 0px)`},onDragOver:e=>{s||(e.preventDefault(),f(!0))},onDragLeave:()=>f(!1),onDrop:e=>{if(s)return;e.preventDefault(),f(!1);let n=e.dataTransfer.files[0];n&&t(n)},children:[(0,G.jsx)(`button`,{type:`button`,className:`sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-50 focus:rounded-md focus:bg-background focus:px-3 focus:py-2 focus:text-sm focus:font-medium focus:shadow focus:ring-2 focus:ring-ring`,onClick:()=>{let e=document.getElementById(`run-verdict`);e?.scrollIntoView?.({block:`start`}),e?.focus({preventScroll:!0})},children:`Skip to the verdict`}),(0,G.jsx)(Fn,{options:j,fileId:o,children:(0,G.jsx)(dt,{registerWidget:k,registerFindingAnchor:oe,reportWidgetOpen:se,clearRouteFocus:ce,focusedWidgetId:x,activeRouteTarget:ie,flashedFinding:C,children:(0,G.jsx)(gl,{appModel:i,catalog:a,configFindings:A,getTaskData:n,activeFileId:o,options:j,onRoute:ae,activeTab:p,onActiveTabChange:m,renderTopbar:t=>(0,G.jsx)(Ze,{onJumpToFindings:t,onLoadNew:e,onCompare:r,recentEntries:c,activeFileId:o,onPickRecent:l,onRemoveRecent:u})})})}),d&&(0,G.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none fixed inset-0 z-50 flex items-center justify-center bg-background/80`,children:(0,G.jsx)(`p`,{className:`rounded-lg border-2 border-dashed border-primary px-6 py-4 text-lg font-medium`,children:`Drop to load a new event log`})})]})}function vl(){return(0,G.jsx)(Le,{children:(0,G.jsx)(_l,{})})}export{vl as Dashboard,ii as a,Xn as c,Sn as d,Ft as f,ti as i,Bn as l,Ei as n,K as o,ai as r,Zn as s,Di as t,Vn as u};