sparkforensics-server 0.2.4 → 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 (399) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -1
  3. package/index.js +5 -4
  4. package/package.json +1 -1
  5. package/public/assets/AutoscalingChurn-CUSIvvab.js +1 -0
  6. package/public/assets/CacheUtilization-Ce0K6_X2.js +1 -0
  7. package/public/assets/CachingOpportunity-Cn-LmRA4.js +1 -0
  8. package/public/assets/ColdStart-BoiYzEyV.js +1 -0
  9. package/public/assets/ConfigAudit-BoJc6PAw.js +1 -0
  10. package/public/assets/CoreUsageArea-BFfXKu7K.js +1 -0
  11. package/public/assets/Dashboard-Bo_1jGqH.js +2 -0
  12. package/public/assets/DisclosureContext-LYzHroHO.js +1 -0
  13. package/public/assets/DuplicatePlanSubtree-BaAuGAoo.js +1 -0
  14. package/public/assets/ExecutorUtilization-OE6VMFkG.js +1 -0
  15. package/public/assets/GcPressure-AoL_ZNrV.js +1 -0
  16. package/public/assets/IncompleteRun-Bv6IzgsQ.js +1 -0
  17. package/public/assets/JobFailures-DF3U2z1f.js +1 -0
  18. package/public/assets/MemoryUtilization-B65OVZlq.js +1 -0
  19. package/public/assets/OverBroadcast-DXbJREDl.js +1 -0
  20. package/public/assets/PartitionSizing-DZLnjy0d.js +1 -0
  21. package/public/assets/PlanExplorer-DdmPkKO1.js +1 -0
  22. package/public/assets/PlanGraphRoute-C-BGmC6j.js +1 -0
  23. package/public/assets/RetryWaste-BbEPsdMw.js +1 -0
  24. package/public/assets/ShuffleIO-wZB94LS8.js +1 -0
  25. package/public/assets/Skew-SpQE7zeJ.js +1 -0
  26. package/public/assets/SlowHost-DwDBCTvr.js +1 -0
  27. package/public/assets/SmallFiles-yjY_6sT1.js +1 -0
  28. package/public/assets/SpeculationWaste-73PDmj0c.js +1 -0
  29. package/public/assets/Spill-DEw0Kd1i.js +1 -0
  30. package/public/assets/StageFailed-BEfXdEJc.js +1 -0
  31. package/public/assets/StageFindingGroup-Bzm2TY03.js +1 -0
  32. package/public/assets/StageHeader-BSV8ALhT.js +1 -0
  33. package/public/assets/StageShape-CzR4jHOt.js +1 -0
  34. package/public/assets/StageSlowness-vMPsnAaa.js +1 -0
  35. package/public/assets/Straggler-Cf__OGl5.js +1 -0
  36. package/public/assets/TaskFailures-BZ8kLZiO.js +1 -0
  37. package/public/assets/{TinyTask-DYXks5sT.js → TinyTask-CIPRxWfT.js} +1 -1
  38. package/public/assets/UnderBroadcast-CBm8ZPoS.js +1 -0
  39. package/public/assets/{finding-anchor-CDbHtqKT.js → finding-anchor-DF1cSHO1.js} +1 -1
  40. package/public/assets/impact-sort-7z0ZcBZf.js +1 -0
  41. package/public/assets/index-BcqTLKFp.css +2 -0
  42. package/public/assets/index-CEM9bz_x.js +13 -0
  43. package/public/assets/parser-worker-Q5KCPdKT.js +122 -0
  44. package/public/assets/react-vendor-BAKt3vny.js +9 -0
  45. package/public/assets/select-Cy5pmbrh.js +1 -0
  46. package/public/assets/usePagedRows-BjPOpUU8.js +1 -0
  47. package/public/assets/useRecentFiles-BrBl-AP1.js +11 -0
  48. package/public/assets/useSortMode-CU0vzThu.js +1 -0
  49. package/public/docs/404.html +2 -2
  50. package/public/docs/assets/{app.DsFQcynM.js → app.C6w47a9W.js} +1 -1
  51. package/public/docs/assets/chunks/@localSearchIndexroot.DbZy5EtM.js +1 -0
  52. package/public/docs/assets/chunks/{VPLocalSearchBox.oa8NbaiV.js → VPLocalSearchBox.BcTNvT55.js} +1 -1
  53. package/public/docs/assets/chunks/{theme.Ca4dR9dL.js → theme.D-mE6j02.js} +2 -2
  54. package/public/docs/assets/{contributor-guide_architecture_board-widgets.md.9ToZXcTk.js → contributor-guide_architecture_board-widgets.md.VTcYTH4d.js} +1 -1
  55. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CsqZHz_T.js +1 -0
  56. package/public/docs/assets/{contributor-guide_architecture_detector-contract.md.aQQfP7pj.lean.js → contributor-guide_architecture_detector-contract.md.CsqZHz_T.lean.js} +1 -1
  57. package/public/docs/assets/contributor-guide_architecture_drill-down.md.CFNCE8JB.js +1 -0
  58. package/public/docs/assets/{contributor-guide_architecture_drill-down.md.Bawx6NgP.lean.js → contributor-guide_architecture_drill-down.md.CFNCE8JB.lean.js} +1 -1
  59. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.HT9IJGIl.js +1 -0
  60. package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.sf9DU2bA.lean.js → contributor-guide_architecture_impact-estimation.md.HT9IJGIl.lean.js} +1 -1
  61. package/public/docs/assets/contributor-guide_architecture_overview.md.CTEqVeV4.js +1 -0
  62. package/public/docs/assets/contributor-guide_architecture_overview.md.CTEqVeV4.lean.js +1 -0
  63. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DOTVHjTV.js +1 -0
  64. package/public/docs/assets/{contributor-guide_architecture_state-and-history.md.C-xxn0q7.lean.js → contributor-guide_architecture_state-and-history.md.DOTVHjTV.lean.js} +1 -1
  65. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BmpARZve.js +1 -0
  66. package/public/docs/assets/{contributor-guide_architecture_widget-rendering.md.DYwFeyjV.lean.js → contributor-guide_architecture_widget-rendering.md.BmpARZve.lean.js} +1 -1
  67. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.21pTYhFF.js +6 -0
  68. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.21pTYhFF.lean.js +1 -0
  69. package/public/docs/assets/contributor-guide_contributing.md.B2E9ni79.js +1 -0
  70. package/public/docs/assets/contributor-guide_contributing.md.B2E9ni79.lean.js +1 -0
  71. package/public/docs/assets/contributor-guide_development-setup.md.CjgZJwjK.js +15 -0
  72. package/public/docs/assets/{contributor-guide_development-setup.md.DvMV1xhQ.lean.js → contributor-guide_development-setup.md.CjgZJwjK.lean.js} +1 -1
  73. package/public/docs/assets/contributor-guide_testing.md.DTwhpoN2.js +1 -0
  74. package/public/docs/assets/contributor-guide_testing.md.DTwhpoN2.lean.js +1 -0
  75. package/public/docs/assets/tuning-reference_anti-patterns.md.D08Uaod7.js +1 -0
  76. package/public/docs/assets/tuning-reference_anti-patterns.md.D08Uaod7.lean.js +1 -0
  77. package/public/docs/assets/tuning-reference_aqe.md.C1Ae6A8u.js +1 -0
  78. package/public/docs/assets/tuning-reference_aqe.md.C1Ae6A8u.lean.js +1 -0
  79. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.6wjKuJNE.js +1 -0
  80. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.6wjKuJNE.lean.js +1 -0
  81. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.BVQbsuHP.js +7 -0
  82. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.BVQbsuHP.lean.js +1 -0
  83. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.DtaYnaiF.js +1 -0
  84. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.DtaYnaiF.lean.js +1 -0
  85. package/public/docs/assets/{tuning-reference_bottleneck-failures.md.CAsFf3RR.js → tuning-reference_bottleneck-failures.md.Z1Tdmdd3.js} +2 -2
  86. package/public/docs/assets/tuning-reference_bottleneck-failures.md.Z1Tdmdd3.lean.js +1 -0
  87. package/public/docs/assets/tuning-reference_bottleneck-gc.md.BCnXLf1n.js +6 -0
  88. package/public/docs/assets/tuning-reference_bottleneck-gc.md.BCnXLf1n.lean.js +1 -0
  89. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.CcvQj2g9.js +8 -0
  90. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.CcvQj2g9.lean.js +1 -0
  91. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.B-C0-8h-.js +7 -0
  92. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.B-C0-8h-.lean.js +1 -0
  93. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.DCnhWiqj.js +1 -0
  94. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.DCnhWiqj.lean.js +1 -0
  95. package/public/docs/assets/{tuning-reference_bottleneck-shuffle.md.DDMQVOW6.js → tuning-reference_bottleneck-shuffle.md.B5OMJCd3.js} +2 -2
  96. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.B5OMJCd3.lean.js +1 -0
  97. package/public/docs/assets/{tuning-reference_bottleneck-skew.md.B0MzhWcX.js → tuning-reference_bottleneck-skew.md.Cvo6NQm_.js} +1 -1
  98. package/public/docs/assets/tuning-reference_bottleneck-skew.md.Cvo6NQm_.lean.js +1 -0
  99. package/public/docs/assets/{tuning-reference_bottleneck-slow-host.md.BlIo6UDW.js → tuning-reference_bottleneck-slow-host.md.ja5qr3wq.js} +1 -1
  100. package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.ja5qr3wq.lean.js +1 -0
  101. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.Crjtb0i2.js +5 -0
  102. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.Crjtb0i2.lean.js +1 -0
  103. package/public/docs/assets/tuning-reference_bottleneck-spill.md.Bl8KtSRg.js +6 -0
  104. package/public/docs/assets/tuning-reference_bottleneck-spill.md.Bl8KtSRg.lean.js +1 -0
  105. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.B0VN8reT.js +7 -0
  106. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.B0VN8reT.lean.js +1 -0
  107. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.DQCftGhu.js +8 -0
  108. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.DQCftGhu.lean.js +1 -0
  109. package/public/docs/assets/{tuning-reference_bottleneck-utilization.md.DqC_iGkw.js → tuning-reference_bottleneck-utilization.md.BXDl30f9.js} +1 -1
  110. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.BXDl30f9.lean.js +1 -0
  111. package/public/docs/assets/tuning-reference_caching.md.CcaiMn_7.js +1 -0
  112. package/public/docs/assets/tuning-reference_caching.md.CcaiMn_7.lean.js +1 -0
  113. package/public/docs/assets/tuning-reference_cluster-config.md.DbWG1yZq.js +1 -0
  114. package/public/docs/assets/tuning-reference_cluster-config.md.DbWG1yZq.lean.js +1 -0
  115. package/public/docs/assets/tuning-reference_config.md.YUqSpwFB.js +1 -0
  116. package/public/docs/assets/tuning-reference_config.md.YUqSpwFB.lean.js +1 -0
  117. package/public/docs/assets/tuning-reference_data-formats.md.C5DX5xL4.js +1 -0
  118. package/public/docs/assets/tuning-reference_data-formats.md.C5DX5xL4.lean.js +1 -0
  119. package/public/docs/assets/tuning-reference_index.md.ZVIpQ6Dk.js +1 -0
  120. package/public/docs/assets/tuning-reference_index.md.ZVIpQ6Dk.lean.js +1 -0
  121. package/public/docs/assets/tuning-reference_intro.md.BSSaDlqx.js +1 -0
  122. package/public/docs/assets/tuning-reference_intro.md.BSSaDlqx.lean.js +1 -0
  123. package/public/docs/assets/tuning-reference_joins.md.BVhNCDnE.js +1 -0
  124. package/public/docs/assets/tuning-reference_joins.md.BVhNCDnE.lean.js +1 -0
  125. package/public/docs/assets/tuning-reference_memory-model.md.CfjFdgbl.js +1 -0
  126. package/public/docs/assets/tuning-reference_memory-model.md.CfjFdgbl.lean.js +1 -0
  127. package/public/docs/assets/tuning-reference_metrics.md.C64VNEL4.js +1 -0
  128. package/public/docs/assets/tuning-reference_metrics.md.C64VNEL4.lean.js +1 -0
  129. package/public/docs/assets/tuning-reference_partitioning.md.CtLK0xsS.js +1 -0
  130. package/public/docs/assets/tuning-reference_partitioning.md.CtLK0xsS.lean.js +1 -0
  131. package/public/docs/assets/tuning-reference_pyspark.md.D-92XgF8.js +6 -0
  132. package/public/docs/assets/tuning-reference_pyspark.md.D-92XgF8.lean.js +1 -0
  133. package/public/docs/assets/tuning-reference_shuffle.md.Iq2v1oHJ.js +1 -0
  134. package/public/docs/assets/tuning-reference_shuffle.md.Iq2v1oHJ.lean.js +1 -0
  135. package/public/docs/assets/tuning-reference_spark-architecture.md._qwnE_Sc.js +1 -0
  136. package/public/docs/assets/tuning-reference_spark-architecture.md._qwnE_Sc.lean.js +1 -0
  137. package/public/docs/assets/tuning-reference_table-formats.md.BSYEK-eN.js +1 -0
  138. package/public/docs/assets/tuning-reference_table-formats.md.BSYEK-eN.lean.js +1 -0
  139. package/public/docs/assets/{user-guide_alternative-log-retrieval.md.B4tPGIal.js → user-guide_alternative-log-retrieval.md.ZHPSbBkF.js} +1 -1
  140. package/public/docs/assets/{user-guide_alternative-log-retrieval.md.B4tPGIal.lean.js → user-guide_alternative-log-retrieval.md.ZHPSbBkF.lean.js} +1 -1
  141. package/public/docs/assets/user-guide_getting-started.md.CEa2ZX-l.js +6 -0
  142. package/public/docs/assets/user-guide_getting-started.md.CEa2ZX-l.lean.js +1 -0
  143. package/public/docs/assets/{user-guide_mcp-tools.md.DGvolGzt.js → user-guide_mcp-tools.md.dQwIvdTF.js} +13 -7
  144. package/public/docs/assets/user-guide_mcp-tools.md.dQwIvdTF.lean.js +1 -0
  145. package/public/docs/assets/user-guide_run-comparison.md.ChLI3MK0.js +1 -0
  146. package/public/docs/assets/user-guide_run-comparison.md.ChLI3MK0.lean.js +1 -0
  147. package/public/docs/assets/user-guide_understanding-findings.md.D1ccs60C.js +1 -0
  148. package/public/docs/assets/{user-guide_understanding-findings.md.B29f0ucS.lean.js → user-guide_understanding-findings.md.D1ccs60C.lean.js} +1 -1
  149. package/public/docs/contributor-guide/architecture/board-widgets.html +5 -5
  150. package/public/docs/contributor-guide/architecture/detector-contract.html +5 -5
  151. package/public/docs/contributor-guide/architecture/drill-down.html +5 -5
  152. package/public/docs/contributor-guide/architecture/impact-estimation.html +5 -5
  153. package/public/docs/contributor-guide/architecture/index.html +3 -3
  154. package/public/docs/contributor-guide/architecture/overview.html +5 -5
  155. package/public/docs/contributor-guide/architecture/state-and-history.html +5 -5
  156. package/public/docs/contributor-guide/architecture/widget-rendering.html +5 -5
  157. package/public/docs/contributor-guide/architecture/worker-protocol.html +6 -6
  158. package/public/docs/contributor-guide/contributing.html +5 -5
  159. package/public/docs/contributor-guide/development-setup.html +13 -10
  160. package/public/docs/contributor-guide/testing.html +5 -5
  161. package/public/docs/hashmap.json +1 -1
  162. package/public/docs/index.html +3 -3
  163. package/public/docs/tuning-reference/anti-patterns.html +6 -6
  164. package/public/docs/tuning-reference/aqe.html +6 -6
  165. package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +6 -6
  166. package/public/docs/tuning-reference/bottleneck-cold-start.html +6 -6
  167. package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +6 -6
  168. package/public/docs/tuning-reference/bottleneck-failures.html +6 -6
  169. package/public/docs/tuning-reference/bottleneck-gc.html +6 -6
  170. package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +6 -6
  171. package/public/docs/tuning-reference/bottleneck-memory-utilization.html +6 -6
  172. package/public/docs/tuning-reference/bottleneck-retry-waste.html +6 -6
  173. package/public/docs/tuning-reference/bottleneck-shuffle.html +6 -6
  174. package/public/docs/tuning-reference/bottleneck-skew.html +6 -6
  175. package/public/docs/tuning-reference/bottleneck-slow-host.html +6 -6
  176. package/public/docs/tuning-reference/bottleneck-small-files.html +6 -6
  177. package/public/docs/tuning-reference/bottleneck-spill.html +6 -6
  178. package/public/docs/tuning-reference/bottleneck-straggler.html +6 -6
  179. package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +6 -6
  180. package/public/docs/tuning-reference/bottleneck-utilization.html +6 -6
  181. package/public/docs/tuning-reference/caching.html +6 -6
  182. package/public/docs/tuning-reference/cluster-config.html +6 -6
  183. package/public/docs/tuning-reference/config.html +6 -6
  184. package/public/docs/tuning-reference/data-formats.html +6 -6
  185. package/public/docs/tuning-reference/index.html +6 -6
  186. package/public/docs/tuning-reference/intro.html +6 -6
  187. package/public/docs/tuning-reference/joins.html +6 -6
  188. package/public/docs/tuning-reference/memory-model.html +6 -6
  189. package/public/docs/tuning-reference/metrics.html +6 -6
  190. package/public/docs/tuning-reference/partitioning.html +6 -6
  191. package/public/docs/tuning-reference/pyspark.html +6 -6
  192. package/public/docs/tuning-reference/shuffle.html +6 -6
  193. package/public/docs/tuning-reference/spark-architecture.html +6 -6
  194. package/public/docs/tuning-reference/table-formats.html +6 -6
  195. package/public/docs/user-guide/alternative-log-retrieval.html +5 -5
  196. package/public/docs/user-guide/getting-started.html +9 -6
  197. package/public/docs/user-guide/mcp-tools.html +15 -9
  198. package/public/docs/user-guide/run-comparison.html +5 -5
  199. package/public/docs/user-guide/understanding-findings.html +5 -5
  200. package/public/export-template.html +111 -0
  201. package/public/index.html +4 -3
  202. package/vendor-core/analyzer.js +156 -48
  203. package/vendor-core/check-coverage.js +88 -0
  204. package/vendor-core/cli/budgets.js +31 -18
  205. package/vendor-core/cli/collect-run.js +76 -31
  206. package/vendor-core/cli/native-zstd.js +2 -2
  207. package/vendor-core/cli/threshold-config.js +28 -0
  208. package/vendor-core/comparison-verdict.js +177 -0
  209. package/vendor-core/core-source-hash.txt +1 -0
  210. package/vendor-core/core-usage-locality.js +56 -2
  211. package/vendor-core/detector-docs.js +58 -0
  212. package/vendor-core/detectors.js +933 -459
  213. package/vendor-core/docs-config.js +0 -36
  214. package/vendor-core/docs-content/chapters/nav-index.json +31 -0
  215. package/vendor-core/docs-content/detection/cstor.md +9 -0
  216. package/vendor-core/docs-content/detection/fail.md +6 -2
  217. package/vendor-core/docs-site-config.js +3 -0
  218. package/vendor-core/event-handlers.js +191 -6
  219. package/vendor-core/event-schemas.js +29 -0
  220. package/vendor-core/evidence-report.js +440 -112
  221. package/vendor-core/export-data.js +79 -6
  222. package/vendor-core/finding-action-label.js +9 -88
  223. package/vendor-core/finding-filter-predicate.js +9 -0
  224. package/vendor-core/finding-generic-recommendation.js +6 -104
  225. package/vendor-core/finding-names.js +21 -45
  226. package/vendor-core/finding-presentation.js +333 -0
  227. package/vendor-core/finding-tag-help.js +110 -0
  228. package/vendor-core/finding-types.js +361 -0
  229. package/vendor-core/findings-of-type.js +11 -0
  230. package/vendor-core/format-utils.js +92 -27
  231. package/vendor-core/html-export.js +51 -0
  232. package/vendor-core/impact-band.js +21 -8
  233. package/vendor-core/impact-estimator.js +8 -521
  234. package/vendor-core/impact-format.js +114 -0
  235. package/vendor-core/impact-model.js +175 -0
  236. package/vendor-core/ingest.js +2 -0
  237. package/vendor-core/intervals.js +13 -0
  238. package/vendor-core/list-runs.js +2 -3
  239. package/vendor-core/load-vendored.js +70 -5
  240. package/vendor-core/mcp-server-factory.js +14 -10
  241. package/vendor-core/mcp-tools.js +105 -45
  242. package/vendor-core/model-assembler.js +12 -0
  243. package/vendor-core/occupancy.js +1 -1
  244. package/vendor-core/parser-worker.js +22 -5
  245. package/vendor-core/plan-graph-model.js +3 -2
  246. package/vendor-core/plan-node-detail.js +1 -1
  247. package/vendor-core/recommendation-rollup.js +63 -3
  248. package/vendor-core/redact.js +68 -28
  249. package/vendor-core/run-comparison.js +40 -7
  250. package/vendor-core/run-interpretation.js +290 -0
  251. package/vendor-core/run-outcome.js +74 -0
  252. package/vendor-core/run-payload.js +17 -0
  253. package/vendor-core/run-shape.js +40 -0
  254. package/vendor-core/run-verdict.js +353 -0
  255. package/vendor-core/scaling-sim.js +4 -5
  256. package/vendor-core/scorecard-estimates.js +62 -0
  257. package/vendor-core/shs-fetch.js +175 -65
  258. package/vendor-core/shs-load.js +1 -1
  259. package/vendor-core/sql-stages.js +11 -0
  260. package/vendor-core/stage-quantiles.js +14 -0
  261. package/vendor-core/task-failure.js +151 -0
  262. package/vendor-core/threshold-overrides.js +160 -0
  263. package/vendor-core/threshold-summary.js +11 -33
  264. package/vendor-core/types.js +6 -42
  265. package/vendor-core/vendor/fflate.js +1 -1
  266. package/vendor-core/wall-clock.js +1 -12
  267. package/vendor-core/wasted-core-hours.js +2 -2
  268. package/vendor-core/zip-archive.js +167 -0
  269. package/public/assets/AutoscalingChurn-BOiUUfuY.js +0 -1
  270. package/public/assets/CacheUtilization-DwX7lisd.js +0 -1
  271. package/public/assets/CachingOpportunity-DUE3GKpx.js +0 -1
  272. package/public/assets/ColdStart-ZHxPrJmI.js +0 -1
  273. package/public/assets/ConfigAudit-BkVnq2XE.js +0 -1
  274. package/public/assets/CoreUsageArea-DobrSXk2.js +0 -1
  275. package/public/assets/Dashboard-y3_9iQJo.js +0 -1
  276. package/public/assets/DuplicatePlanSubtree-BSQZFeNq.js +0 -1
  277. package/public/assets/DurationHistogram-DlQv4ZCB.js +0 -1
  278. package/public/assets/EmptyState-DqnSxTjJ.js +0 -1
  279. package/public/assets/ExecutorUtilization-CuQUxaCd.js +0 -1
  280. package/public/assets/GcPressure-CLT5hkMJ.js +0 -1
  281. package/public/assets/ImpactEstimate-Df_laG-n.js +0 -1
  282. package/public/assets/IncompleteRun-CpIkS4XZ.js +0 -1
  283. package/public/assets/JobFailures-DKbvYc4J.js +0 -1
  284. package/public/assets/MemoryUtilization-C5kHmXIb.js +0 -1
  285. package/public/assets/OverBroadcast-C5pF66aq.js +0 -1
  286. package/public/assets/PartitionSizing-BvEJQ5M1.js +0 -1
  287. package/public/assets/PlanExplorer-DjGTZifP.js +0 -1
  288. package/public/assets/PlanGraphRoute-DoIGA7_H.js +0 -1
  289. package/public/assets/RetryWaste-C0znHd_w.js +0 -1
  290. package/public/assets/RowPagination-2icPidMP.js +0 -1
  291. package/public/assets/ShuffleIO-L_XSnJ_V.js +0 -1
  292. package/public/assets/Skew-w4uV5H_g.js +0 -1
  293. package/public/assets/SlowHost-D5tWJ1UR.js +0 -1
  294. package/public/assets/SmallFiles-CTtNiSOh.js +0 -1
  295. package/public/assets/SpeculationWaste-xCKwjz2K.js +0 -1
  296. package/public/assets/Spill-BT8my24K.js +0 -1
  297. package/public/assets/StageFailed-De3vVDbc.js +0 -1
  298. package/public/assets/StageFindingGroup-R4OW-g4U.js +0 -1
  299. package/public/assets/StageHeader-CGeWqC-0.js +0 -1
  300. package/public/assets/StagePill-BwwKLcFl.js +0 -1
  301. package/public/assets/StageShape-D4LmPVyV.js +0 -1
  302. package/public/assets/StageSlowness-8-z6qn4Q.js +0 -1
  303. package/public/assets/Straggler-BIgxsowI.js +0 -1
  304. package/public/assets/TaskFailures-B9lLt6Rw.js +0 -1
  305. package/public/assets/UnderBroadcast-BWqWMpeG.js +0 -1
  306. package/public/assets/WidgetLeadSummary-BdUUi7L5.js +0 -1
  307. package/public/assets/downsample-WmNM1qc9.js +0 -1
  308. package/public/assets/impact-sort-DxaUheWV.js +0 -1
  309. package/public/assets/inbox-M_EuWNiK.js +0 -1
  310. package/public/assets/index-CjVklAdW.css +0 -2
  311. package/public/assets/index-pnImGbgQ.js +0 -9
  312. package/public/assets/parser-worker-C3BAO6z9.js +0 -117
  313. package/public/assets/react-vendor-D2TLlSzI.js +0 -9
  314. package/public/assets/select-C-MZGNpb.js +0 -1
  315. package/public/assets/toggle-group-C3nz7UQ_.js +0 -1
  316. package/public/assets/usePagedRows-jNUWgVTD.js +0 -1
  317. package/public/assets/useRecentFiles-0XuhS91q.js +0 -11
  318. package/public/assets/useSortMode-DHlKZeWv.js +0 -1
  319. package/public/docs/assets/chunks/@localSearchIndexroot.BEfYag5Q.js +0 -1
  320. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.aQQfP7pj.js +0 -1
  321. package/public/docs/assets/contributor-guide_architecture_drill-down.md.Bawx6NgP.js +0 -1
  322. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.sf9DU2bA.js +0 -1
  323. package/public/docs/assets/contributor-guide_architecture_overview.md.BXQdgG5u.js +0 -1
  324. package/public/docs/assets/contributor-guide_architecture_overview.md.BXQdgG5u.lean.js +0 -1
  325. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.C-xxn0q7.js +0 -1
  326. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.DYwFeyjV.js +0 -1
  327. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.P7d1vtEJ.js +0 -6
  328. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.P7d1vtEJ.lean.js +0 -1
  329. package/public/docs/assets/contributor-guide_contributing.md.CvRsdr6J.js +0 -1
  330. package/public/docs/assets/contributor-guide_contributing.md.CvRsdr6J.lean.js +0 -1
  331. package/public/docs/assets/contributor-guide_development-setup.md.DvMV1xhQ.js +0 -12
  332. package/public/docs/assets/contributor-guide_testing.md.BU6vyA-9.js +0 -1
  333. package/public/docs/assets/contributor-guide_testing.md.BU6vyA-9.lean.js +0 -1
  334. package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.js +0 -1
  335. package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.lean.js +0 -1
  336. package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.js +0 -1
  337. package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.lean.js +0 -1
  338. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.js +0 -1
  339. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.lean.js +0 -1
  340. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.js +0 -7
  341. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.lean.js +0 -1
  342. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.js +0 -1
  343. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.lean.js +0 -1
  344. package/public/docs/assets/tuning-reference_bottleneck-failures.md.CAsFf3RR.lean.js +0 -1
  345. package/public/docs/assets/tuning-reference_bottleneck-gc.md.B4T3kJYV.js +0 -6
  346. package/public/docs/assets/tuning-reference_bottleneck-gc.md.B4T3kJYV.lean.js +0 -1
  347. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.js +0 -8
  348. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.lean.js +0 -1
  349. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.js +0 -7
  350. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.lean.js +0 -1
  351. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.js +0 -1
  352. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.lean.js +0 -1
  353. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.DDMQVOW6.lean.js +0 -1
  354. package/public/docs/assets/tuning-reference_bottleneck-skew.md.B0MzhWcX.lean.js +0 -1
  355. package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.BlIo6UDW.lean.js +0 -1
  356. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.DHGMTmPs.js +0 -5
  357. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.DHGMTmPs.lean.js +0 -1
  358. package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.js +0 -6
  359. package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.lean.js +0 -1
  360. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DIbXdAcQ.js +0 -7
  361. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DIbXdAcQ.lean.js +0 -1
  362. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.CB05v3zh.js +0 -8
  363. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.CB05v3zh.lean.js +0 -1
  364. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DqC_iGkw.lean.js +0 -1
  365. package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.js +0 -1
  366. package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.lean.js +0 -1
  367. package/public/docs/assets/tuning-reference_cluster-config.md.CD6vzYtD.js +0 -1
  368. package/public/docs/assets/tuning-reference_cluster-config.md.CD6vzYtD.lean.js +0 -1
  369. package/public/docs/assets/tuning-reference_config.md.UvveiWG3.js +0 -1
  370. package/public/docs/assets/tuning-reference_config.md.UvveiWG3.lean.js +0 -1
  371. package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.js +0 -1
  372. package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.lean.js +0 -1
  373. package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.js +0 -1
  374. package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.lean.js +0 -1
  375. package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.js +0 -1
  376. package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.lean.js +0 -1
  377. package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.js +0 -1
  378. package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.lean.js +0 -1
  379. package/public/docs/assets/tuning-reference_memory-model.md.CWhvgevP.js +0 -1
  380. package/public/docs/assets/tuning-reference_memory-model.md.CWhvgevP.lean.js +0 -1
  381. package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.js +0 -1
  382. package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.lean.js +0 -1
  383. package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.js +0 -1
  384. package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.lean.js +0 -1
  385. package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.js +0 -6
  386. package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.lean.js +0 -1
  387. package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.js +0 -1
  388. package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.lean.js +0 -1
  389. package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.js +0 -1
  390. package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.lean.js +0 -1
  391. package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.js +0 -1
  392. package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.lean.js +0 -1
  393. package/public/docs/assets/user-guide_getting-started.md.BJvwLEIM.js +0 -3
  394. package/public/docs/assets/user-guide_getting-started.md.BJvwLEIM.lean.js +0 -1
  395. package/public/docs/assets/user-guide_mcp-tools.md.DGvolGzt.lean.js +0 -1
  396. package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.js +0 -1
  397. package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.lean.js +0 -1
  398. package/public/docs/assets/user-guide_understanding-findings.md.B29f0ucS.js +0 -1
  399. /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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Agustin Recoba
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -2,5 +2,9 @@
2
2
 
3
3
  Local companion server for the SparkForensics dashboard.
4
4
 
5
+ ```bash
6
+ npx sparkforensics-server
7
+ ```
8
+
5
9
  See the [main README](https://github.com/shuffle-works/sparkforensics#readme)
6
- for install instructions and usage.
10
+ for configuration and usage.
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.2.4",
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};