sparkforensics-server 0.5.0 → 0.5.2

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 (309) hide show
  1. package/package.json +3 -3
  2. package/public/assets/{AutoscalingChurn-9Zo6IMGS.js → AutoscalingChurn-8t3U3isq.js} +1 -1
  3. package/public/assets/{CacheUtilization-MBDfMsKC.js → CacheUtilization-CJs9tTum.js} +1 -1
  4. package/public/assets/CachingOpportunity-D1NcHs0V.js +1 -0
  5. package/public/assets/{ColdStart-BtS12b6_.js → ColdStart-CdRJ9gD8.js} +1 -1
  6. package/public/assets/{ConfigAudit-DNPV6EQg.js → ConfigAudit-B5Gbe5js.js} +1 -1
  7. package/public/assets/CoreUsageArea-a--NTRGY.js +1 -0
  8. package/public/assets/{Dashboard-CC_BXrNy.js → Dashboard-C1hNeX49.js} +2 -2
  9. package/public/assets/DisclosureContext-ZpE6CkHx.js +1 -0
  10. package/public/assets/{DuplicatePlanSubtree-vN3zqRsi.js → DuplicatePlanSubtree-dobXdz7E.js} +1 -1
  11. package/public/assets/{ExecutorUtilization-CZObSLIj.js → ExecutorUtilization-D9grwi7t.js} +1 -1
  12. package/public/assets/{GcPressure-ByJlLOua.js → GcPressure-8-G2ri10.js} +1 -1
  13. package/public/assets/{IncompleteRun-MzqV4W8y.js → IncompleteRun-B91lky7a.js} +1 -1
  14. package/public/assets/{JobFailures-LbMvAwAb.js → JobFailures-BsWvBMyJ.js} +1 -1
  15. package/public/assets/{MemoryUtilization-DH4jYvJK.js → MemoryUtilization-BM5schZI.js} +1 -1
  16. package/public/assets/{OverBroadcast-euk6HKg4.js → OverBroadcast-DdN8JIJH.js} +1 -1
  17. package/public/assets/{PartitionHint-DThaMMRT.js → PartitionHint-CUvbnnxy.js} +1 -1
  18. package/public/assets/{PartitionSizing-yIN-iZzx.js → PartitionSizing-CY5HDYtp.js} +1 -1
  19. package/public/assets/{PlanExplorer-Dd9WPK4S.js → PlanExplorer-DgHCDBD_.js} +1 -1
  20. package/public/assets/PlanGraphRoute-DH3KJb8j.js +1 -0
  21. package/public/assets/{RetryWaste-CXH4D-xH.js → RetryWaste-DOnE9vGF.js} +1 -1
  22. package/public/assets/{ShuffleIO-CW7U68ph.js → ShuffleIO-MMnDESkF.js} +1 -1
  23. package/public/assets/{Skew-PL79TppX.js → Skew-BmZZJ5ms.js} +1 -1
  24. package/public/assets/{SlowHost-GBO73hCi.js → SlowHost-CsJzfEqo.js} +1 -1
  25. package/public/assets/{SmallFiles-B5cUjEav.js → SmallFiles-BoK3R1Ex.js} +1 -1
  26. package/public/assets/{SpeculationWaste-mxi3jgb0.js → SpeculationWaste-CnVxB5AJ.js} +1 -1
  27. package/public/assets/Spill-BhNicyBy.js +1 -0
  28. package/public/assets/{StageFailed-YvxC11ii.js → StageFailed-mAhHU4l_.js} +1 -1
  29. package/public/assets/StageFindingGroup-BEtPWcT0.js +1 -0
  30. package/public/assets/{StageHeader-BMNmUy-s.js → StageHeader-DJkYkrsU.js} +1 -1
  31. package/public/assets/{StageShape-DO3mQ6NS.js → StageShape-BDxRknLp.js} +1 -1
  32. package/public/assets/{StageSlowness-SwRxfAEx.js → StageSlowness-BPRw-otN.js} +1 -1
  33. package/public/assets/{Straggler-DHLTiBY-.js → Straggler-CZCbnOWP.js} +1 -1
  34. package/public/assets/{TaskFailures-Bj0QxiOc.js → TaskFailures-C57YcLFQ.js} +1 -1
  35. package/public/assets/{TinyTask-COUQQ5bQ.js → TinyTask-Bi84qU7n.js} +1 -1
  36. package/public/assets/{UnderBroadcast-RAUbQ6vw.js → UnderBroadcast-DdQV7htE.js} +1 -1
  37. package/public/assets/{finding-anchor-Dl8mIHiU.js → finding-anchor-Cl6_5hfV.js} +1 -1
  38. package/public/assets/{impact-sort-Eihua9dY.js → impact-sort-CssZ6MT2.js} +1 -1
  39. package/public/assets/index-2h_TgUAb.css +2 -0
  40. package/public/assets/index-B-03mG7K.js +14 -0
  41. package/public/assets/parser-worker-CA5RxqKc.js +122 -0
  42. package/public/assets/{plan-graph-vendor-B0sEms9Z.js → plan-graph-vendor-BYl-AzN5.js} +1 -1
  43. package/public/assets/{react-vendor-BAKt3vny.js → react-vendor-DEdfrRTJ.js} +1 -1
  44. package/public/assets/{select-DkjFHlXR.js → select-CQjNhprm.js} +1 -1
  45. package/public/assets/{usePagedRows-Bo-aSztx.js → usePagedRows-Dyl6T8Ok.js} +1 -1
  46. package/public/assets/useRecentFiles-XZEnLlal.js +11 -0
  47. package/public/assets/{useSortMode-lDedD5a3.js → useSortMode-Dhvit8dt.js} +1 -1
  48. package/public/docs/404.html +2 -2
  49. package/public/docs/assets/{app.yjczoibf.js → app.eYTPqTeq.js} +1 -1
  50. package/public/docs/assets/chunks/@localSearchIndexroot.u_e5bQz4.js +1 -0
  51. package/public/docs/assets/chunks/{VPLocalSearchBox.DOBbPfix.js → VPLocalSearchBox.DsZrQKQR.js} +1 -1
  52. package/public/docs/assets/chunks/{theme.DFcAl8Ws.js → theme.DsTNE2pE.js} +2 -2
  53. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.YQcj5EI4.js +1 -0
  54. package/public/docs/assets/{contributor-guide_architecture_board-widgets.md.D0Kkk_r5.lean.js → contributor-guide_architecture_board-widgets.md.YQcj5EI4.lean.js} +1 -1
  55. package/public/docs/assets/contributor-guide_architecture_board-widgets_caching-and-memory.md.8bH1HnZp.js +1 -0
  56. package/public/docs/assets/contributor-guide_architecture_board-widgets_caching-and-memory.md.8bH1HnZp.lean.js +1 -0
  57. package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.RlzvUmNm.js +1 -0
  58. package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.RlzvUmNm.lean.js +1 -0
  59. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.DYgUpIJB.js +1 -0
  60. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.DYgUpIJB.lean.js +1 -0
  61. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.wj6Et6UD.js +1 -0
  62. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.wj6Et6UD.lean.js +1 -0
  63. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.js +1 -0
  64. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.lean.js +1 -0
  65. package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.CKjWG56Y.js +1 -0
  66. package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.CKjWG56Y.lean.js +1 -0
  67. package/public/docs/assets/contributor-guide_architecture_drill-down.md.CqZPrdo9.js +1 -0
  68. package/public/docs/assets/contributor-guide_architecture_drill-down.md.CqZPrdo9.lean.js +1 -0
  69. package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.DwOozIEs.js +1 -0
  70. package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.DwOozIEs.lean.js +1 -0
  71. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.CZv_ZGOp.js +1 -0
  72. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.CZv_ZGOp.lean.js +1 -0
  73. package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.BUucRc0A.js +1 -0
  74. package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.BUucRc0A.lean.js +1 -0
  75. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.js +1 -0
  76. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.lean.js +1 -0
  77. package/public/docs/assets/contributor-guide_architecture_index.md.tymxf1Fh.js +1 -0
  78. package/public/docs/assets/{contributor-guide_architecture_index.md.B9yZieYL.lean.js → contributor-guide_architecture_index.md.tymxf1Fh.lean.js} +1 -1
  79. package/public/docs/assets/contributor-guide_architecture_overview.md.C1sSvm9i.js +1 -0
  80. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DyCBdjuM.js +1 -0
  81. package/public/docs/assets/{contributor-guide_architecture_state-and-history.md.w4lwybdh.lean.js → contributor-guide_architecture_state-and-history.md.DyCBdjuM.lean.js} +1 -1
  82. package/public/docs/assets/contributor-guide_architecture_state-and-history_history-server-intake.md.C298hrHZ.js +1 -0
  83. package/public/docs/assets/contributor-guide_architecture_state-and-history_history-server-intake.md.C298hrHZ.lean.js +1 -0
  84. package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.CZA0JLtV.js +1 -0
  85. package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.CZA0JLtV.lean.js +1 -0
  86. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BOZ1azXG.js +1 -0
  87. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BOZ1azXG.lean.js +1 -0
  88. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.js +1 -0
  89. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.lean.js +1 -0
  90. package/public/docs/assets/contributor-guide_architecture_widget-rendering_investigation-routing.md.BGdiyElu.js +1 -0
  91. package/public/docs/assets/contributor-guide_architecture_widget-rendering_investigation-routing.md.BGdiyElu.lean.js +1 -0
  92. package/public/docs/assets/contributor-guide_architecture_widget-rendering_list-sort-mode.md.BuHKgH0C.js +1 -0
  93. package/public/docs/assets/contributor-guide_architecture_widget-rendering_list-sort-mode.md.BuHKgH0C.lean.js +1 -0
  94. package/public/docs/assets/contributor-guide_architecture_widget-rendering_reference-section.md.DWqC80bN.js +1 -0
  95. package/public/docs/assets/contributor-guide_architecture_widget-rendering_reference-section.md.DWqC80bN.lean.js +1 -0
  96. package/public/docs/assets/contributor-guide_architecture_widget-rendering_row-expand-contract.md.ZT89u9f1.js +1 -0
  97. package/public/docs/assets/contributor-guide_architecture_widget-rendering_row-expand-contract.md.ZT89u9f1.lean.js +1 -0
  98. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.BAnhi2-d.js +1 -0
  99. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.BAnhi2-d.lean.js +1 -0
  100. package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.DC1YqXBp.js +1 -0
  101. package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.DC1YqXBp.lean.js +1 -0
  102. package/public/docs/assets/contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DSVFPpWb.js +1 -0
  103. package/public/docs/assets/contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DSVFPpWb.lean.js +1 -0
  104. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-availability.md.CjimIDBY.js +6 -0
  105. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-availability.md.CjimIDBY.lean.js +1 -0
  106. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.DVGZOWvW.js +1 -0
  107. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.DVGZOWvW.lean.js +1 -0
  108. package/public/docs/assets/user-guide_alternative-log-retrieval.md.CJpYvHGo.js +4 -0
  109. package/public/docs/assets/user-guide_alternative-log-retrieval.md.CJpYvHGo.lean.js +1 -0
  110. package/public/docs/assets/user-guide_alternative-log-retrieval_managed-platforms.md.DvDwHNtC.js +4 -0
  111. package/public/docs/assets/user-guide_alternative-log-retrieval_managed-platforms.md.DvDwHNtC.lean.js +1 -0
  112. package/public/docs/assets/user-guide_alternative-log-retrieval_ssh-bastion.md.Gszzlplv.js +1 -0
  113. package/public/docs/assets/user-guide_alternative-log-retrieval_ssh-bastion.md.Gszzlplv.lean.js +1 -0
  114. package/public/docs/assets/user-guide_getting-started.md.DYHHHkQR.js +1 -0
  115. package/public/docs/assets/user-guide_getting-started.md.DYHHHkQR.lean.js +1 -0
  116. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.OUQqw3mI.js +23 -0
  117. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.OUQqw3mI.lean.js +1 -0
  118. package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.Obf3W3__.js +1 -0
  119. package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.Obf3W3__.lean.js +1 -0
  120. package/public/docs/assets/user-guide_getting-started_regression-metric-keys.md.B_gzr2Mw.js +1 -0
  121. package/public/docs/assets/user-guide_getting-started_regression-metric-keys.md.B_gzr2Mw.lean.js +1 -0
  122. package/public/docs/assets/user-guide_getting-started_tuning-thresholds.md.B_MyjyZm.js +4 -0
  123. package/public/docs/assets/user-guide_getting-started_tuning-thresholds.md.B_MyjyZm.lean.js +1 -0
  124. package/public/docs/assets/user-guide_mcp-tools.md.C65SjWUL.js +16 -0
  125. package/public/docs/assets/user-guide_mcp-tools.md.C65SjWUL.lean.js +1 -0
  126. package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.Cc_gLoix.js +56 -0
  127. package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.Cc_gLoix.lean.js +1 -0
  128. package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.BP1vnHA5.js +23 -0
  129. package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.BP1vnHA5.lean.js +1 -0
  130. package/public/docs/assets/user-guide_mcp-tools_evaluate-budgets.md.BB0nDY3Z.js +26 -0
  131. package/public/docs/assets/user-guide_mcp-tools_evaluate-budgets.md.BB0nDY3Z.lean.js +1 -0
  132. package/public/docs/assets/user-guide_mcp-tools_get-finding-documentation.md.BtTTHNV6.js +14 -0
  133. package/public/docs/assets/user-guide_mcp-tools_get-finding-documentation.md.BtTTHNV6.lean.js +1 -0
  134. package/public/docs/assets/user-guide_mcp-tools_get-finding-evidence.md.rKyu4wts.js +20 -0
  135. package/public/docs/assets/user-guide_mcp-tools_get-finding-evidence.md.rKyu4wts.lean.js +1 -0
  136. package/public/docs/assets/user-guide_mcp-tools_get-reference-doc.md.Yac4tH3u.js +5 -0
  137. package/public/docs/assets/user-guide_mcp-tools_get-reference-doc.md.Yac4tH3u.lean.js +1 -0
  138. package/public/docs/assets/user-guide_mcp-tools_get-run-summary.md.DpxZ4ZNp.js +15 -0
  139. package/public/docs/assets/user-guide_mcp-tools_get-run-summary.md.DpxZ4ZNp.lean.js +1 -0
  140. package/public/docs/assets/user-guide_mcp-tools_list-runs.md.DpQPeCM3.js +12 -0
  141. package/public/docs/assets/user-guide_mcp-tools_list-runs.md.DpQPeCM3.lean.js +1 -0
  142. package/public/docs/assets/user-guide_run-comparison.md.BUALkohi.js +1 -0
  143. package/public/docs/assets/user-guide_run-comparison.md.BUALkohi.lean.js +1 -0
  144. package/public/docs/assets/user-guide_run-comparison_how-stages-are-matched.md.DSXGu2tA.js +1 -0
  145. package/public/docs/assets/user-guide_run-comparison_how-stages-are-matched.md.DSXGu2tA.lean.js +1 -0
  146. package/public/docs/assets/user-guide_understanding-findings.md.C9YRruMT.js +1 -0
  147. package/public/docs/assets/user-guide_understanding-findings.md.C9YRruMT.lean.js +1 -0
  148. package/public/docs/contributor-guide/architecture/board-widgets/caching-and-memory.html +30 -0
  149. package/public/docs/contributor-guide/architecture/board-widgets/plan-advisor.html +30 -0
  150. package/public/docs/contributor-guide/architecture/board-widgets/visual-system-and-templating.html +30 -0
  151. package/public/docs/contributor-guide/architecture/board-widgets.html +5 -5
  152. package/public/docs/contributor-guide/architecture/detector-contract/plan-attribution.html +30 -0
  153. package/public/docs/contributor-guide/architecture/detector-contract/threshold-tables.html +30 -0
  154. package/public/docs/contributor-guide/architecture/detector-contract.html +5 -5
  155. package/public/docs/contributor-guide/architecture/drill-down/plan-graph.html +30 -0
  156. package/public/docs/contributor-guide/architecture/drill-down.html +5 -5
  157. package/public/docs/contributor-guide/architecture/impact-estimation/caveats-tuning-and-coverage.html +30 -0
  158. package/public/docs/contributor-guide/architecture/impact-estimation/stage-union-rollup.html +30 -0
  159. package/public/docs/contributor-guide/architecture/impact-estimation.html +5 -5
  160. package/public/docs/contributor-guide/architecture/index.html +5 -5
  161. package/public/docs/contributor-guide/architecture/overview.html +5 -5
  162. package/public/docs/contributor-guide/architecture/state-and-history/history-server-intake.html +30 -0
  163. package/public/docs/contributor-guide/architecture/state-and-history/run-comparison-internals.html +30 -0
  164. package/public/docs/contributor-guide/architecture/state-and-history.html +5 -5
  165. package/public/docs/contributor-guide/architecture/widget-rendering/findings-tab.html +30 -0
  166. package/public/docs/contributor-guide/architecture/widget-rendering/investigation-routing.html +30 -0
  167. package/public/docs/contributor-guide/architecture/widget-rendering/list-sort-mode.html +30 -0
  168. package/public/docs/contributor-guide/architecture/widget-rendering/reference-section.html +30 -0
  169. package/public/docs/contributor-guide/architecture/widget-rendering/row-expand-contract.html +30 -0
  170. package/public/docs/contributor-guide/architecture/widget-rendering.html +5 -5
  171. package/public/docs/contributor-guide/architecture/worker-protocol/cli-and-mcp.html +30 -0
  172. package/public/docs/contributor-guide/architecture/worker-protocol/core-and-event-validation.html +30 -0
  173. package/public/docs/contributor-guide/architecture/worker-protocol/evidence-availability.html +35 -0
  174. package/public/docs/contributor-guide/architecture/worker-protocol/evidence-report.html +30 -0
  175. package/public/docs/contributor-guide/architecture/worker-protocol.html +5 -10
  176. package/public/docs/contributor-guide/contributing.html +4 -4
  177. package/public/docs/contributor-guide/development-setup.html +4 -4
  178. package/public/docs/contributor-guide/testing.html +4 -4
  179. package/public/docs/hashmap.json +1 -1
  180. package/public/docs/index.html +3 -3
  181. package/public/docs/tuning-reference/anti-patterns.html +3 -3
  182. package/public/docs/tuning-reference/aqe.html +3 -3
  183. package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +3 -3
  184. package/public/docs/tuning-reference/bottleneck-cold-start.html +3 -3
  185. package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +3 -3
  186. package/public/docs/tuning-reference/bottleneck-failures.html +3 -3
  187. package/public/docs/tuning-reference/bottleneck-gc.html +3 -3
  188. package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +3 -3
  189. package/public/docs/tuning-reference/bottleneck-memory-utilization.html +3 -3
  190. package/public/docs/tuning-reference/bottleneck-retry-waste.html +3 -3
  191. package/public/docs/tuning-reference/bottleneck-shuffle.html +3 -3
  192. package/public/docs/tuning-reference/bottleneck-skew.html +3 -3
  193. package/public/docs/tuning-reference/bottleneck-slow-host.html +3 -3
  194. package/public/docs/tuning-reference/bottleneck-small-files.html +3 -3
  195. package/public/docs/tuning-reference/bottleneck-spill.html +3 -3
  196. package/public/docs/tuning-reference/bottleneck-straggler.html +3 -3
  197. package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +3 -3
  198. package/public/docs/tuning-reference/bottleneck-utilization.html +3 -3
  199. package/public/docs/tuning-reference/caching.html +3 -3
  200. package/public/docs/tuning-reference/cluster-config.html +3 -3
  201. package/public/docs/tuning-reference/config.html +3 -3
  202. package/public/docs/tuning-reference/data-formats.html +3 -3
  203. package/public/docs/tuning-reference/index.html +3 -3
  204. package/public/docs/tuning-reference/intro.html +3 -3
  205. package/public/docs/tuning-reference/joins.html +3 -3
  206. package/public/docs/tuning-reference/memory-model.html +3 -3
  207. package/public/docs/tuning-reference/metrics.html +3 -3
  208. package/public/docs/tuning-reference/partitioning.html +3 -3
  209. package/public/docs/tuning-reference/pyspark.html +3 -3
  210. package/public/docs/tuning-reference/shuffle.html +3 -3
  211. package/public/docs/tuning-reference/spark-architecture.html +3 -3
  212. package/public/docs/tuning-reference/table-formats.html +3 -3
  213. package/public/docs/user-guide/alternative-log-retrieval/managed-platforms.html +33 -0
  214. package/public/docs/user-guide/alternative-log-retrieval/ssh-bastion.html +30 -0
  215. package/public/docs/user-guide/alternative-log-retrieval.html +6 -9
  216. package/public/docs/user-guide/getting-started/ci-and-automation.html +52 -0
  217. package/public/docs/user-guide/getting-started/reading-the-dashboard.html +30 -0
  218. package/public/docs/user-guide/getting-started/regression-metric-keys.html +30 -0
  219. package/public/docs/user-guide/getting-started/tuning-thresholds.html +33 -0
  220. package/public/docs/user-guide/getting-started.html +5 -28
  221. package/public/docs/user-guide/mcp-tools/compare-runs.html +85 -0
  222. package/public/docs/user-guide/mcp-tools/diagnose-run.html +52 -0
  223. package/public/docs/user-guide/mcp-tools/evaluate-budgets.html +55 -0
  224. package/public/docs/user-guide/mcp-tools/get-finding-documentation.html +43 -0
  225. package/public/docs/user-guide/mcp-tools/get-finding-evidence.html +49 -0
  226. package/public/docs/user-guide/mcp-tools/get-reference-doc.html +34 -0
  227. package/public/docs/user-guide/mcp-tools/get-run-summary.html +44 -0
  228. package/public/docs/user-guide/mcp-tools/list-runs.html +41 -0
  229. package/public/docs/user-guide/mcp-tools.html +8 -140
  230. package/public/docs/user-guide/run-comparison/how-stages-are-matched.html +30 -0
  231. package/public/docs/user-guide/run-comparison.html +5 -5
  232. package/public/docs/user-guide/understanding-findings.html +5 -5
  233. package/public/export-template.html +45 -45
  234. package/public/index.html +5 -5
  235. package/vendor-core/analyzer.js +1 -1
  236. package/vendor-core/api-merge-writes.js +80 -0
  237. package/vendor-core/cli/budgets.js +62 -2
  238. package/vendor-core/cli/regression-budgets.js +35 -0
  239. package/vendor-core/comparison-output.js +50 -0
  240. package/vendor-core/core-source-hash.txt +1 -1
  241. package/vendor-core/delta-commands.js +13 -0
  242. package/vendor-core/delta-log-paths.js +42 -0
  243. package/vendor-core/delta-targets.js +127 -0
  244. package/vendor-core/detectors.js +219 -56
  245. package/vendor-core/docs-content/detection/chrn.md +3 -1
  246. package/vendor-core/docs-content/detection/cold.md +2 -1
  247. package/vendor-core/docs-content/detection/plan.md +9 -2
  248. package/vendor-core/docs-content/detection/shfl.md +8 -2
  249. package/vendor-core/docs-content/detection/skew.md +11 -5
  250. package/vendor-core/docs-content/detection/slow.md +6 -2
  251. package/vendor-core/docs-content/detection/spill.md +4 -1
  252. package/vendor-core/docs-content/detection/strag.md +5 -3
  253. package/vendor-core/docs-content/detection/tiny.md +3 -2
  254. package/vendor-core/event-handlers.js +95 -9
  255. package/vendor-core/event-schemas.js +3 -1
  256. package/vendor-core/evidence-report.js +24 -15
  257. package/vendor-core/finding-presentation.js +39 -13
  258. package/vendor-core/finding-types.js +50 -6
  259. package/vendor-core/mcp-server-factory.js +17 -6
  260. package/vendor-core/mcp-tools.js +53 -35
  261. package/vendor-core/median.js +8 -0
  262. package/vendor-core/plan-graph-model.js +1 -1
  263. package/vendor-core/plan-summary.js +13 -10
  264. package/vendor-core/run-comparison.js +81 -120
  265. package/vendor-core/run-output.js +26 -0
  266. package/vendor-core/sequence-alignment.js +83 -0
  267. package/vendor-core/stage-alignment.js +586 -0
  268. package/vendor-core/stage-identity.js +112 -0
  269. package/vendor-core/stage-quantiles.js +3 -1
  270. package/vendor-core/stage-structure.js +83 -0
  271. package/vendor-core/types.js +5 -0
  272. package/vendor-core/write-target-args.js +48 -0
  273. package/vendor-core/write-targets.js +35 -52
  274. package/public/assets/CachingOpportunity-Cfw3wAFa.js +0 -1
  275. package/public/assets/CoreUsageArea-BObEeenE.js +0 -1
  276. package/public/assets/DisclosureContext-Ds0hcZFn.js +0 -1
  277. package/public/assets/PlanGraphRoute-NV5mCXRm.js +0 -1
  278. package/public/assets/Spill-CH1bNpxL.js +0 -1
  279. package/public/assets/StageFindingGroup-B1A0nf-e.js +0 -1
  280. package/public/assets/index-BcqTLKFp.css +0 -2
  281. package/public/assets/index-DaC8A2FS.js +0 -13
  282. package/public/assets/parser-worker-CfDvPkwF.js +0 -122
  283. package/public/assets/useRecentFiles-Bb4-ukVz.js +0 -11
  284. package/public/docs/assets/chunks/@localSearchIndexroot.r9imX8Aq.js +0 -1
  285. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.D0Kkk_r5.js +0 -1
  286. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.caA46z-u.js +0 -1
  287. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.caA46z-u.lean.js +0 -1
  288. package/public/docs/assets/contributor-guide_architecture_drill-down.md.CdtlKHl-.js +0 -1
  289. package/public/docs/assets/contributor-guide_architecture_drill-down.md.CdtlKHl-.lean.js +0 -1
  290. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.BNp14LtL.js +0 -1
  291. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.BNp14LtL.lean.js +0 -1
  292. package/public/docs/assets/contributor-guide_architecture_index.md.B9yZieYL.js +0 -1
  293. package/public/docs/assets/contributor-guide_architecture_overview.md.DBGo-bwn.js +0 -1
  294. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.w4lwybdh.js +0 -1
  295. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.CcvqxnZI.js +0 -1
  296. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.CcvqxnZI.lean.js +0 -1
  297. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.CKeFttKj.js +0 -6
  298. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.CKeFttKj.lean.js +0 -1
  299. package/public/docs/assets/user-guide_alternative-log-retrieval.md.z-8npxNk.js +0 -7
  300. package/public/docs/assets/user-guide_alternative-log-retrieval.md.z-8npxNk.lean.js +0 -1
  301. package/public/docs/assets/user-guide_getting-started.md.BJW5oVhe.js +0 -24
  302. package/public/docs/assets/user-guide_getting-started.md.BJW5oVhe.lean.js +0 -1
  303. package/public/docs/assets/user-guide_mcp-tools.md.DcLiOa9t.js +0 -148
  304. package/public/docs/assets/user-guide_mcp-tools.md.DcLiOa9t.lean.js +0 -1
  305. package/public/docs/assets/user-guide_run-comparison.md.qin0a4IX.js +0 -1
  306. package/public/docs/assets/user-guide_run-comparison.md.qin0a4IX.lean.js +0 -1
  307. package/public/docs/assets/user-guide_understanding-findings.md.DzReyCXb.js +0 -1
  308. package/public/docs/assets/user-guide_understanding-findings.md.DzReyCXb.lean.js +0 -1
  309. /package/public/docs/assets/{contributor-guide_architecture_overview.md.DBGo-bwn.lean.js → contributor-guide_architecture_overview.md.C1sSvm9i.lean.js} +0 -0
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{A as t,M as n}from"./charts-vendor-0VMaLVLN.js";import{ct as r,et as i,nt as a,rt as o,tt as s}from"./react-vendor-DEdfrRTJ.js";import{p as c}from"./plan-graph-vendor-BYl-AzN5.js";var l=e(n(),1),u=e=>typeof e==`boolean`?`${e}`:e===0?`0`:e,d=t,f=(e,t)=>n=>{if(t?.variants==null)return d(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=u(t)||u(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return d(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)},p=(e,t)=>{let n=Array(e.length+t.length);for(let t=0;t<e.length;t++)n[t]=e[t];for(let r=0;r<t.length;r++)n[e.length+r]=t[r];return n},m=(e,t)=>({classGroupId:e,validator:t}),h=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),g=`-`,_=[],ee=`arbitrary..`,v=e=>{let t=te(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return b(e);let n=e.split(g);return y(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?p(i,t):t:i||_}return n[e]||_}}},y=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=y(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(g):e.slice(t).join(g),s=a.length;for(let e=0;e<s;e++){let t=a[e];if(t.validator(o))return t.classGroupId}},b=e=>e.slice(1,-1).indexOf(`:`)===-1?void 0:(()=>{let t=e.slice(1,-1),n=t.indexOf(`:`),r=t.slice(0,n);return r?ee+r:void 0})(),te=e=>{let{theme:t,classGroups:n}=e;return x(n,t)},x=(e,t)=>{let n=h();for(let r in e){let i=e[r];S(i,n,r,t)}return n},S=(e,t,n,r)=>{let i=e.length;for(let a=0;a<i;a++){let i=e[a];C(i,t,n,r)}},C=(e,t,n,r)=>{if(typeof e==`string`){ne(e,t,n);return}if(typeof e==`function`){re(e,t,n,r);return}ie(e,t,n,r)},ne=(e,t,n)=>{let r=e===``?t:ae(t,e);r.classGroupId=n},re=(e,t,n,r)=>{if(oe(e)){S(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(m(n,e))},ie=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e<a;e++){let[a,o]=i[e];S(o,ae(t,a),n,r)}},ae=(e,t)=>{let n=e,r=t.split(g),i=r.length;for(let e=0;e<i;e++){let t=r[e],i=n.nextPart.get(t);i||(i=h(),n.nextPart.set(t,i)),n=i}return n},oe=e=>`isThemeGetter`in e&&e.isThemeGetter===!0,w=e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null),i=(i,a)=>{n[i]=a,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(e){let t=n[e];if(t!==void 0)return t;if((t=r[e])!==void 0)return i(e,t),t},set(e,t){e in n?n[e]=t:i(e,t)}}},T=`!`,E=`:`,se=[],ce=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),D=e=>{let{prefix:t,experimentalParseClassName:n}=e,r=e=>{let t=[],n=0,r=0,i=0,a,o=e.length;for(let s=0;s<o;s++){let o=e[s];if(n===0&&r===0){if(o===E){t.push(e.slice(i,s)),i=s+1;continue}if(o===`/`){a=s;continue}}o===`[`?n++:o===`]`?n--:o===`(`?r++:o===`)`&&r--}let s=t.length===0?e:e.slice(i),c=s,l=!1;s.endsWith(T)?(c=s.slice(0,-1),l=!0):s.startsWith(T)&&(c=s.slice(1),l=!0);let u=a&&a>i?a-i:void 0;return ce(t,l,c,u)};if(t){let e=t+E,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):ce(se,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},le=e=>{let t=new Map;return e.orderSensitiveModifiers.forEach((e,n)=>{t.set(e,1e6+n)}),e=>{let n=[],r=[];for(let i=0;i<e.length;i++){let a=e[i],o=a[0]===`[`,s=t.has(a);o||s?(r.length>0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},ue=e=>({cache:w(e.cacheSize),parseClassName:D(e),sortModifiers:le(e),postfixLookupClassGroupIds:de(e),...v(e)}),de=e=>{let t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let e=0;e<n.length;e++)t[n[e]]=!0;return t},fe=/\s+/,O=(e,t)=>{let{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:a,postfixLookupClassGroupIds:o}=t,s=[],c=e.trim().split(fe),l=``;for(let e=c.length-1;e>=0;--e){let t=c[e],{isExternal:u,modifiers:d,hasImportantModifier:f,baseClassName:p,maybePostfixModifierPosition:m}=n(t);if(u){l=t+(l.length>0?` `+l:l);continue}let h=!!m,g;if(h){g=r(p.substring(0,m));let e=g&&o[g]?r(p):void 0;e&&e!==g&&(g=e,h=!1)}else g=r(p);if(!g){if(!h){l=t+(l.length>0?` `+l:l);continue}if(g=r(p),!g){l=t+(l.length>0?` `+l:l);continue}h=!1}let _=d.length===0?``:d.length===1?d[0]:a(d).join(`:`),ee=f?_+T:_,v=ee+g;if(s.indexOf(v)>-1)continue;s.push(v);let y=i(g,h);for(let e=0;e<y.length;++e){let t=y[e];s.push(ee+t)}l=t+(l.length>0?` `+l:l)}return l},k=(...e)=>{let t=0,n,r,i=``;for(;t<e.length;)(n=e[t++])&&(r=A(n))&&(i&&(i+=` `),i+=r);return i},A=e=>{if(typeof e==`string`)return e;let t,n=``;for(let r=0;r<e.length;r++)e[r]&&(t=A(e[r]))&&(n&&(n+=` `),n+=t);return n},pe=(e,...t)=>{let n,r,i,a,o=o=>(n=ue(t.reduce((e,t)=>t(e),e())),r=n.cache.get,i=n.cache.set,a=s,s(o)),s=e=>{let t=r(e);if(t)return t;let a=O(e,n);return i(e,a),a};return a=o,(...e)=>a(k(...e))},j=[],M=e=>{let t=t=>t[e]||j;return t.isThemeGetter=!0,t.themeKey=e,t},me=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,N=/^\((?:(\w[\w-]*):)?(.+)\)$/i,P=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,he=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,F=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,ge=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix|color|light-dark)\(.+\)$/,_e=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,ve=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,I=e=>P.test(e),L=e=>!!e&&!Number.isNaN(Number(e)),R=e=>!!e&&Number.isInteger(Number(e)),ye=e=>e.endsWith(`%`)&&L(e.slice(0,-1)),z=e=>he.test(e),be=()=>!0,xe=e=>F.test(e)&&!ge.test(e),Se=()=>!1,Ce=e=>_e.test(e),we=e=>ve.test(e),Te=e=>!B(e)&&!H(e),Ee=e=>e.startsWith(`@container`)&&(e[10]===`/`&&e[11]!==void 0||e[11]===`s`&&e[16]!==void 0&&e.startsWith(`-size/`,10)||e[11]===`n`&&e[18]!==void 0&&e.startsWith(`-normal/`,10)),De=e=>U(e,Ue,Se),B=e=>me.test(e),V=e=>U(e,We,xe),Oe=e=>U(e,Ge,L),ke=e=>U(e,qe,be),Ae=e=>U(e,Ke,Se),je=e=>U(e,Ve,Se),Me=e=>U(e,He,we),Ne=e=>U(e,Je,Ce),H=e=>N.test(e),Pe=e=>W(e,We),Fe=e=>W(e,Ke),Ie=e=>W(e,Ve),Le=e=>W(e,Ue),Re=e=>W(e,He),ze=e=>W(e,Je,!0),Be=e=>W(e,qe,!0),U=(e,t,n)=>{let r=me.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},W=(e,t,n=!1)=>{let r=N.exec(e);return r?r[1]?t(r[1]):n:!1},Ve=e=>e===`position`||e===`percentage`,He=e=>e===`image`||e===`url`,Ue=e=>e===`length`||e===`size`||e===`bg-size`,We=e=>e===`length`,Ge=e=>e===`number`,Ke=e=>e===`family-name`,qe=e=>e===`number`||e===`weight`,Je=e=>e===`shadow`,Ye=pe(()=>{let e=M(`color`),t=M(`font`),n=M(`text`),r=M(`font-weight`),i=M(`tracking`),a=M(`leading`),o=M(`breakpoint`),s=M(`container`),c=M(`spacing`),l=M(`radius`),u=M(`shadow`),d=M(`inset-shadow`),f=M(`text-shadow`),p=M(`drop-shadow`),m=M(`blur`),h=M(`perspective`),g=M(`aspect`),_=M(`ease`),ee=M(`animate`),v=()=>[`auto`,`avoid`,`all`,`avoid-page`,`page`,`left`,`right`,`column`],y=()=>[`center`,`top`,`bottom`,`left`,`right`,`top-left`,`left-top`,`top-right`,`right-top`,`bottom-right`,`right-bottom`,`bottom-left`,`left-bottom`],b=()=>[...y(),H,B],te=()=>[`auto`,`hidden`,`clip`,`visible`,`scroll`],x=()=>[`auto`,`contain`,`none`],S=()=>[H,B,c],C=()=>[I,`full`,`auto`,...S()],ne=()=>[R,`none`,`subgrid`,H,B],re=()=>[`auto`,{span:[`full`,R,H,B]},R,H,B],ie=()=>[R,`auto`,H,B],ae=()=>[`auto`,`min`,`max`,`fr`,H,B],oe=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],w=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],T=()=>[`auto`,...S()],E=()=>[I,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...S()],se=()=>[s,I,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,...S()],ce=()=>[I,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,...S()],D=()=>[e,H,B],le=()=>[...y(),Ie,je,{position:[H,B]}],ue=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],de=()=>[`auto`,`cover`,`contain`,Le,De,{size:[H,B]}],fe=()=>[ye,Pe,V],O=()=>[``,`none`,`full`,l,H,B],k=()=>[``,L,Pe,V],A=()=>[`solid`,`dashed`,`dotted`,`double`],pe=()=>[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],j=()=>[L,ye,Ie,je],me=()=>[``,`none`,m,H,B],N=()=>[`none`,L,H,B],P=()=>[`none`,L,H,B],he=()=>[L,H,B],F=()=>[I,`full`,...S()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[z],breakpoint:[z],color:[be],container:[z],"drop-shadow":[z],ease:[`in`,`out`,`in-out`],font:[Te],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[z],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[z],shadow:[z],spacing:[`px`,L],text:[z],"text-shadow":[z],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,I,B,H,g]}],container:[`container`],"container-type":[{"@container":[``,`normal`,`size`,H,B]}],"container-named":[Ee],columns:[{columns:[L,`auto`,B,H,s]}],"break-after":[{"break-after":v()}],"break-before":[{"break-before":v()}],"break-inside":[{"break-inside":[`auto`,`avoid`,`avoid-page`,`avoid-column`]}],"box-decoration":[{"box-decoration":[`slice`,`clone`]}],box:[{box:[`border`,`content`]}],display:[`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`table`,`inline-table`,`table-caption`,`table-cell`,`table-column`,`table-column-group`,`table-footer-group`,`table-header-group`,`table-row-group`,`table-row`,`flow-root`,`grid`,`inline-grid`,`contents`,`list-item`,`hidden`],sr:[`sr-only`,`not-sr-only`],float:[{float:[`right`,`left`,`none`,`start`,`end`]}],clear:[{clear:[`left`,`right`,`both`,`none`,`start`,`end`]}],isolation:[`isolate`,`isolation-auto`],"object-fit":[{object:[`contain`,`cover`,`fill`,`none`,`scale-down`]}],"object-position":[{object:b()}],overflow:[{overflow:te()}],"overflow-x":[{"overflow-x":te()}],"overflow-y":[{"overflow-y":te()}],overscroll:[{overscroll:x()}],"overscroll-x":[{"overscroll-x":x()}],"overscroll-y":[{"overscroll-y":x()}],position:[`static`,`fixed`,`absolute`,`relative`,`sticky`],inset:[{inset:C()}],"inset-x":[{"inset-x":C()}],"inset-y":[{"inset-y":C()}],start:[{"inset-s":C(),start:C()}],end:[{"inset-e":C(),end:C()}],"inset-bs":[{"inset-bs":C()}],"inset-be":[{"inset-be":C()}],top:[{top:C()}],right:[{right:C()}],bottom:[{bottom:C()}],left:[{left:C()}],visibility:[`visible`,`invisible`,`collapse`],z:[{z:[R,`auto`,H,B]}],basis:[{basis:[I,`full`,`auto`,s,...S()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[L,I,`auto`,`initial`,`none`,B]}],grow:[{grow:[``,L,H,B]}],shrink:[{shrink:[``,L,H,B]}],order:[{order:[R,`first`,`last`,`none`,H,B]}],"grid-cols":[{"grid-cols":ne()}],"col-start-end":[{col:re()}],"col-start":[{"col-start":ie()}],"col-end":[{"col-end":ie()}],"grid-rows":[{"grid-rows":ne()}],"row-start-end":[{row:re()}],"row-start":[{"row-start":ie()}],"row-end":[{"row-end":ie()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":ae()}],"auto-rows":[{"auto-rows":ae()}],gap:[{gap:S()}],"gap-x":[{"gap-x":S()}],"gap-y":[{"gap-y":S()}],"justify-content":[{justify:[...oe(),`normal`]}],"justify-items":[{"justify-items":[...w(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...w()]}],"align-content":[{content:[`normal`,...oe()]}],"align-items":[{items:[...w(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...w(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":oe()}],"place-items":[{"place-items":[...w(),`baseline`]}],"place-self":[{"place-self":[`auto`,...w()]}],p:[{p:S()}],px:[{px:S()}],py:[{py:S()}],ps:[{ps:S()}],pe:[{pe:S()}],pbs:[{pbs:S()}],pbe:[{pbe:S()}],pt:[{pt:S()}],pr:[{pr:S()}],pb:[{pb:S()}],pl:[{pl:S()}],m:[{m:T()}],mx:[{mx:T()}],my:[{my:T()}],ms:[{ms:T()}],me:[{me:T()}],mbs:[{mbs:T()}],mbe:[{mbe:T()}],mt:[{mt:T()}],mr:[{mr:T()}],mb:[{mb:T()}],ml:[{ml:T()}],"space-x":[{"space-x":S()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":S()}],"space-y-reverse":[`space-y-reverse`],size:[{size:E()}],"inline-size":[{inline:[`auto`,...se()]}],"min-inline-size":[{"min-inline":[`auto`,...se()]}],"max-inline-size":[{"max-inline":[`none`,...se()]}],"block-size":[{block:[`auto`,...ce()]}],"min-block-size":[{"min-block":[`auto`,...ce()]}],"max-block-size":[{"max-block":[`none`,...ce()]}],w:[{w:[s,`screen`,...E()]}],"min-w":[{"min-w":[s,`screen`,`none`,...E()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...E()]}],h:[{h:[`screen`,`lh`,...E()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...E()]}],"max-h":[{"max-h":[`screen`,`lh`,`none`,...E()]}],"font-size":[{text:[`base`,n,Pe,V]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,Be,ke]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,ye,B]}],"font-family":[{font:[Fe,Ae,t]}],"font-features":[{"font-features":[B]}],"fvn-normal":[`normal-nums`],"fvn-ordinal":[`ordinal`],"fvn-slashed-zero":[`slashed-zero`],"fvn-figure":[`lining-nums`,`oldstyle-nums`],"fvn-spacing":[`proportional-nums`,`tabular-nums`],"fvn-fraction":[`diagonal-fractions`,`stacked-fractions`],tracking:[{tracking:[i,H,B]}],"line-clamp":[{"line-clamp":[L,`none`,H,Oe]}],leading:[{leading:[`none`,a,...S()]}],"list-image":[{"list-image":[`none`,H,B]}],"list-style-position":[{list:[`inside`,`outside`]}],"list-style-type":[{list:[`disc`,`decimal`,`none`,H,B]}],"text-alignment":[{text:[`left`,`center`,`right`,`justify`,`start`,`end`]}],"placeholder-color":[{placeholder:D()}],"text-color":[{text:D()}],"text-decoration":[`underline`,`overline`,`line-through`,`no-underline`],"text-decoration-style":[{decoration:[...A(),`wavy`]}],"text-decoration-thickness":[{decoration:[L,`from-font`,`auto`,H,V]}],"text-decoration-color":[{decoration:D()}],"underline-offset":[{"underline-offset":[L,`auto`,H,B]}],"text-transform":[`uppercase`,`lowercase`,`capitalize`,`normal-case`],"text-overflow":[`truncate`,`text-ellipsis`,`text-clip`],"text-wrap":[{text:[`wrap`,`nowrap`,`balance`,`pretty`]}],indent:[{indent:S()}],"tab-size":[{tab:[R,H,B]}],"vertical-align":[{align:[`baseline`,`top`,`middle`,`bottom`,`text-top`,`text-bottom`,`sub`,`super`,H,B]}],whitespace:[{whitespace:[`normal`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]}],break:[{break:[`normal`,`words`,`all`,`keep`]}],wrap:[{wrap:[`break-word`,`anywhere`,`normal`]}],hyphens:[{hyphens:[`none`,`manual`,`auto`]}],content:[{content:[`none`,H,B]}],"bg-attachment":[{bg:[`fixed`,`local`,`scroll`]}],"bg-clip":[{"bg-clip":[`border`,`padding`,`content`,`text`]}],"bg-origin":[{"bg-origin":[`border`,`padding`,`content`]}],"bg-position":[{bg:le()}],"bg-repeat":[{bg:ue()}],"bg-size":[{bg:de()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},R,H,B],radial:[``,H,B],conic:[``,R,H,B]},Re,Me]}],"bg-color":[{bg:D()}],"gradient-from-pos":[{from:fe()}],"gradient-via-pos":[{via:fe()}],"gradient-to-pos":[{to:fe()}],"gradient-from":[{from:D()}],"gradient-via":[{via:D()}],"gradient-to":[{to:D()}],rounded:[{rounded:O()}],"rounded-s":[{"rounded-s":O()}],"rounded-e":[{"rounded-e":O()}],"rounded-t":[{"rounded-t":O()}],"rounded-r":[{"rounded-r":O()}],"rounded-b":[{"rounded-b":O()}],"rounded-l":[{"rounded-l":O()}],"rounded-ss":[{"rounded-ss":O()}],"rounded-se":[{"rounded-se":O()}],"rounded-ee":[{"rounded-ee":O()}],"rounded-es":[{"rounded-es":O()}],"rounded-tl":[{"rounded-tl":O()}],"rounded-tr":[{"rounded-tr":O()}],"rounded-br":[{"rounded-br":O()}],"rounded-bl":[{"rounded-bl":O()}],"border-w":[{border:k()}],"border-w-x":[{"border-x":k()}],"border-w-y":[{"border-y":k()}],"border-w-s":[{"border-s":k()}],"border-w-e":[{"border-e":k()}],"border-w-bs":[{"border-bs":k()}],"border-w-be":[{"border-be":k()}],"border-w-t":[{"border-t":k()}],"border-w-r":[{"border-r":k()}],"border-w-b":[{"border-b":k()}],"border-w-l":[{"border-l":k()}],"divide-x":[{"divide-x":k()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":k()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...A(),`hidden`,`none`]}],"divide-style":[{divide:[...A(),`hidden`,`none`]}],"border-color":[{border:D()}],"border-color-x":[{"border-x":D()}],"border-color-y":[{"border-y":D()}],"border-color-s":[{"border-s":D()}],"border-color-e":[{"border-e":D()}],"border-color-bs":[{"border-bs":D()}],"border-color-be":[{"border-be":D()}],"border-color-t":[{"border-t":D()}],"border-color-r":[{"border-r":D()}],"border-color-b":[{"border-b":D()}],"border-color-l":[{"border-l":D()}],"divide-color":[{divide:D()}],"outline-style":[{outline:[...A(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[L,H,B]}],"outline-w":[{outline:[``,L,Pe,V]}],"outline-color":[{outline:D()}],shadow:[{shadow:[``,`inner`,`none`,u,ze,Ne]}],"shadow-color":[{shadow:D()}],"inset-shadow":[{"inset-shadow":[`none`,d,ze,Ne]}],"inset-shadow-color":[{"inset-shadow":D()}],"ring-w":[{ring:k()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:D()}],"ring-offset-w":[{"ring-offset":[L,V]}],"ring-offset-color":[{"ring-offset":D()}],"inset-ring-w":[{"inset-ring":k()}],"inset-ring-color":[{"inset-ring":D()}],"text-shadow":[{"text-shadow":[`none`,f,ze,Ne]}],"text-shadow-color":[{"text-shadow":D()}],opacity:[{opacity:[L,H,B]}],"mix-blend":[{"mix-blend":[...pe(),`plus-darker`,`plus-lighter`]}],"bg-blend":[{"bg-blend":pe()}],"mask-clip":[{"mask-clip":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]},`mask-no-clip`],"mask-composite":[{mask:[`add`,`subtract`,`intersect`,`exclude`]}],"mask-image-linear-pos":[{"mask-linear":[L]}],"mask-image-linear-from-pos":[{"mask-linear-from":j()}],"mask-image-linear-to-pos":[{"mask-linear-to":j()}],"mask-image-linear-from-color":[{"mask-linear-from":D()}],"mask-image-linear-to-color":[{"mask-linear-to":D()}],"mask-image-t-from-pos":[{"mask-t-from":j()}],"mask-image-t-to-pos":[{"mask-t-to":j()}],"mask-image-t-from-color":[{"mask-t-from":D()}],"mask-image-t-to-color":[{"mask-t-to":D()}],"mask-image-r-from-pos":[{"mask-r-from":j()}],"mask-image-r-to-pos":[{"mask-r-to":j()}],"mask-image-r-from-color":[{"mask-r-from":D()}],"mask-image-r-to-color":[{"mask-r-to":D()}],"mask-image-b-from-pos":[{"mask-b-from":j()}],"mask-image-b-to-pos":[{"mask-b-to":j()}],"mask-image-b-from-color":[{"mask-b-from":D()}],"mask-image-b-to-color":[{"mask-b-to":D()}],"mask-image-l-from-pos":[{"mask-l-from":j()}],"mask-image-l-to-pos":[{"mask-l-to":j()}],"mask-image-l-from-color":[{"mask-l-from":D()}],"mask-image-l-to-color":[{"mask-l-to":D()}],"mask-image-x-from-pos":[{"mask-x-from":j()}],"mask-image-x-to-pos":[{"mask-x-to":j()}],"mask-image-x-from-color":[{"mask-x-from":D()}],"mask-image-x-to-color":[{"mask-x-to":D()}],"mask-image-y-from-pos":[{"mask-y-from":j()}],"mask-image-y-to-pos":[{"mask-y-to":j()}],"mask-image-y-from-color":[{"mask-y-from":D()}],"mask-image-y-to-color":[{"mask-y-to":D()}],"mask-image-radial":[{"mask-radial":[H,B]}],"mask-image-radial-from-pos":[{"mask-radial-from":j()}],"mask-image-radial-to-pos":[{"mask-radial-to":j()}],"mask-image-radial-from-color":[{"mask-radial-from":D()}],"mask-image-radial-to-color":[{"mask-radial-to":D()}],"mask-image-radial-shape":[{"mask-radial":[`circle`,`ellipse`]}],"mask-image-radial-size":[{"mask-radial":[{closest:[`side`,`corner`],farthest:[`side`,`corner`]}]}],"mask-image-radial-pos":[{"mask-radial-at":y()}],"mask-image-conic-pos":[{"mask-conic":[L]}],"mask-image-conic-from-pos":[{"mask-conic-from":j()}],"mask-image-conic-to-pos":[{"mask-conic-to":j()}],"mask-image-conic-from-color":[{"mask-conic-from":D()}],"mask-image-conic-to-color":[{"mask-conic-to":D()}],"mask-mode":[{mask:[`alpha`,`luminance`,`match`]}],"mask-origin":[{"mask-origin":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]}],"mask-position":[{mask:le()}],"mask-repeat":[{mask:ue()}],"mask-size":[{mask:de()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,H,B]}],filter:[{filter:[``,`none`,H,B]}],blur:[{blur:me()}],brightness:[{brightness:[L,H,B]}],contrast:[{contrast:[L,H,B]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,ze,Ne]}],"drop-shadow-color":[{"drop-shadow":D()}],grayscale:[{grayscale:[``,L,H,B]}],"hue-rotate":[{"hue-rotate":[L,H,B]}],invert:[{invert:[``,L,H,B]}],saturate:[{saturate:[L,H,B]}],sepia:[{sepia:[``,L,H,B]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,H,B]}],"backdrop-blur":[{"backdrop-blur":me()}],"backdrop-brightness":[{"backdrop-brightness":[L,H,B]}],"backdrop-contrast":[{"backdrop-contrast":[L,H,B]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,L,H,B]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[L,H,B]}],"backdrop-invert":[{"backdrop-invert":[``,L,H,B]}],"backdrop-opacity":[{"backdrop-opacity":[L,H,B]}],"backdrop-saturate":[{"backdrop-saturate":[L,H,B]}],"backdrop-sepia":[{"backdrop-sepia":[``,L,H,B]}],"border-collapse":[{border:[`collapse`,`separate`]}],"border-spacing":[{"border-spacing":S()}],"border-spacing-x":[{"border-spacing-x":S()}],"border-spacing-y":[{"border-spacing-y":S()}],"table-layout":[{table:[`auto`,`fixed`]}],caption:[{caption:[`top`,`bottom`]}],transition:[{transition:[``,`all`,`colors`,`opacity`,`shadow`,`transform`,`none`,H,B]}],"transition-behavior":[{transition:[`normal`,`discrete`]}],duration:[{duration:[L,`initial`,H,B]}],ease:[{ease:[`linear`,`initial`,_,H,B]}],delay:[{delay:[L,H,B]}],animate:[{animate:[`none`,ee,H,B]}],backface:[{backface:[`hidden`,`visible`]}],perspective:[{perspective:[h,H,B]}],"perspective-origin":[{"perspective-origin":b()}],rotate:[{rotate:N()}],"rotate-x":[{"rotate-x":N()}],"rotate-y":[{"rotate-y":N()}],"rotate-z":[{"rotate-z":N()}],scale:[{scale:P()}],"scale-x":[{"scale-x":P()}],"scale-y":[{"scale-y":P()}],"scale-z":[{"scale-z":P()}],"scale-3d":[`scale-3d`],skew:[{skew:he()}],"skew-x":[{"skew-x":he()}],"skew-y":[{"skew-y":he()}],transform:[{transform:[H,B,``,`none`,`gpu`,`cpu`]}],"transform-origin":[{origin:b()}],"transform-style":[{transform:[`3d`,`flat`]}],translate:[{translate:F()}],"translate-x":[{"translate-x":F()}],"translate-y":[{"translate-y":F()}],"translate-z":[{"translate-z":F()}],"translate-none":[`translate-none`],zoom:[{zoom:[R,H,B]}],accent:[{accent:D()}],appearance:[{appearance:[`none`,`auto`]}],"caret-color":[{caret:D()}],"color-scheme":[{scheme:[`normal`,`dark`,`light`,`light-dark`,`only-dark`,`only-light`]}],cursor:[{cursor:[`auto`,`default`,`pointer`,`wait`,`text`,`move`,`help`,`not-allowed`,`none`,`context-menu`,`progress`,`cell`,`crosshair`,`vertical-text`,`alias`,`copy`,`no-drop`,`grab`,`grabbing`,`all-scroll`,`col-resize`,`row-resize`,`n-resize`,`e-resize`,`s-resize`,`w-resize`,`ne-resize`,`nw-resize`,`se-resize`,`sw-resize`,`ew-resize`,`ns-resize`,`nesw-resize`,`nwse-resize`,`zoom-in`,`zoom-out`,H,B]}],"field-sizing":[{"field-sizing":[`fixed`,`content`]}],"pointer-events":[{"pointer-events":[`auto`,`none`]}],resize:[{resize:[`none`,``,`y`,`x`]}],"scroll-behavior":[{scroll:[`auto`,`smooth`]}],"scrollbar-thumb-color":[{"scrollbar-thumb":D()}],"scrollbar-track-color":[{"scrollbar-track":D()}],"scrollbar-gutter":[{"scrollbar-gutter":[`auto`,`stable`,`both`]}],"scrollbar-w":[{scrollbar:[`auto`,`thin`,`none`]}],"scroll-m":[{"scroll-m":S()}],"scroll-mx":[{"scroll-mx":S()}],"scroll-my":[{"scroll-my":S()}],"scroll-ms":[{"scroll-ms":S()}],"scroll-me":[{"scroll-me":S()}],"scroll-mbs":[{"scroll-mbs":S()}],"scroll-mbe":[{"scroll-mbe":S()}],"scroll-mt":[{"scroll-mt":S()}],"scroll-mr":[{"scroll-mr":S()}],"scroll-mb":[{"scroll-mb":S()}],"scroll-ml":[{"scroll-ml":S()}],"scroll-p":[{"scroll-p":S()}],"scroll-px":[{"scroll-px":S()}],"scroll-py":[{"scroll-py":S()}],"scroll-ps":[{"scroll-ps":S()}],"scroll-pe":[{"scroll-pe":S()}],"scroll-pbs":[{"scroll-pbs":S()}],"scroll-pbe":[{"scroll-pbe":S()}],"scroll-pt":[{"scroll-pt":S()}],"scroll-pr":[{"scroll-pr":S()}],"scroll-pb":[{"scroll-pb":S()}],"scroll-pl":[{"scroll-pl":S()}],"snap-align":[{snap:[`start`,`end`,`center`,`align-none`]}],"snap-stop":[{snap:[`normal`,`always`]}],"snap-type":[{snap:[`none`,`x`,`y`,`both`]}],"snap-strictness":[{snap:[`mandatory`,`proximity`]}],touch:[{touch:[`auto`,`none`,`manipulation`]}],"touch-x":[{"touch-pan":[`x`,`left`,`right`]}],"touch-y":[{"touch-pan":[`y`,`up`,`down`]}],"touch-pz":[`touch-pinch-zoom`],select:[{select:[`none`,`text`,`all`,`auto`]}],"will-change":[{"will-change":[`auto`,`scroll`,`contents`,`transform`,H,B]}],fill:[{fill:[`none`,...D()]}],"stroke-w":[{stroke:[L,Pe,V,Oe]}],stroke:[{stroke:[`none`,...D()]}],"forced-color-adjust":[{"forced-color-adjust":[`auto`,`none`]}]},conflictingClassGroups:{"container-named":[`container-type`],overflow:[`overflow-x`,`overflow-y`],overscroll:[`overscroll-x`,`overscroll-y`],inset:[`inset-x`,`inset-y`,`inset-bs`,`inset-be`,`start`,`end`,`top`,`right`,`bottom`,`left`],"inset-x":[`start`,`end`,`right`,`left`],"inset-y":[`inset-bs`,`inset-be`,`top`,`bottom`],flex:[`basis`,`grow`,`shrink`],gap:[`gap-x`,`gap-y`],p:[`px`,`py`,`ps`,`pe`,`pbs`,`pbe`,`pt`,`pr`,`pb`,`pl`],px:[`ps`,`pe`,`pr`,`pl`],py:[`pbs`,`pbe`,`pt`,`pb`],m:[`mx`,`my`,`ms`,`me`,`mbs`,`mbe`,`mt`,`mr`,`mb`,`ml`],mx:[`ms`,`me`,`mr`,`ml`],my:[`mbs`,`mbe`,`mt`,`mb`],size:[`w`,`h`],"font-size":[`leading`],"fvn-normal":[`fvn-ordinal`,`fvn-slashed-zero`,`fvn-figure`,`fvn-spacing`,`fvn-fraction`],"fvn-ordinal":[`fvn-normal`],"fvn-slashed-zero":[`fvn-normal`],"fvn-figure":[`fvn-normal`],"fvn-spacing":[`fvn-normal`],"fvn-fraction":[`fvn-normal`],"line-clamp":[`display`,`overflow`],rounded:[`rounded-s`,`rounded-e`,`rounded-t`,`rounded-r`,`rounded-b`,`rounded-l`,`rounded-ss`,`rounded-se`,`rounded-ee`,`rounded-es`,`rounded-tl`,`rounded-tr`,`rounded-br`,`rounded-bl`],"rounded-s":[`rounded-ss`,`rounded-es`],"rounded-e":[`rounded-se`,`rounded-ee`],"rounded-t":[`rounded-tl`,`rounded-tr`],"rounded-r":[`rounded-tr`,`rounded-br`],"rounded-b":[`rounded-br`,`rounded-bl`],"rounded-l":[`rounded-tl`,`rounded-bl`],"border-spacing":[`border-spacing-x`,`border-spacing-y`],"border-w":[`border-w-x`,`border-w-y`,`border-w-s`,`border-w-e`,`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-r`,`border-w-b`,`border-w-l`],"border-w-x":[`border-w-s`,`border-w-e`,`border-w-r`,`border-w-l`],"border-w-y":[`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-b`],"border-color":[`border-color-x`,`border-color-y`,`border-color-s`,`border-color-e`,`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-r`,`border-color-b`,`border-color-l`],"border-color-x":[`border-color-s`,`border-color-e`,`border-color-r`,`border-color-l`],"border-color-y":[`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-b`],translate:[`translate-x`,`translate-y`,`translate-none`],"translate-none":[`translate`,`translate-x`,`translate-y`,`translate-z`],"scroll-m":[`scroll-mx`,`scroll-my`,`scroll-ms`,`scroll-me`,`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mr`,`scroll-mb`,`scroll-ml`],"scroll-mx":[`scroll-ms`,`scroll-me`,`scroll-mr`,`scroll-ml`],"scroll-my":[`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mb`],"scroll-p":[`scroll-px`,`scroll-py`,`scroll-ps`,`scroll-pe`,`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pr`,`scroll-pb`,`scroll-pl`],"scroll-px":[`scroll-ps`,`scroll-pe`,`scroll-pr`,`scroll-pl`],"scroll-py":[`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pb`],touch:[`touch-x`,`touch-y`,`touch-pz`],"touch-x":[`touch`],"touch-y":[`touch`],"touch-pz":[`touch`]},conflictingClassGroupModifiers:{"font-size":[`leading`]},postfixLookupClassGroups:[`container-type`],orderSensitiveModifiers:[`*`,`**`,`after`,`backdrop`,`before`,`details-content`,`file`,`first-letter`,`first-line`,`marker`,`placeholder`,`selection`]}});function G(...e){return Ye(t(e))}var Xe=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},Ze=(e=>e?Xe(e):Xe),Qe=e=>e;function $e(e,t=Qe){let n=l.useSyncExternalStore(e.subscribe,l.useCallback(()=>t(e.getState()),[e,t]),l.useCallback(()=>t(e.getInitialState()),[e,t]));return l.useDebugValue(n),n}var et={observed:`Observed in this event log.`,explicitlyDisabled:`Explicitly disabled in this event log.`,noObservedExecutorMetrics:`Not emitted by this event log.`,noObservedStageSubmission:`Not emitted by this event log.`,noRddStorageSnapshot:`Stages were submitted without RDD storage snapshots.`,noResolvedSqlPlan:`Not emitted by this event log.`,noSqlExecution:`Not applicable to this event log.`,noEnvironmentUpdate:`Not emitted by this event log.`,noTaskRecords:`Not emitted by this event log.`,noUsableCoreTimeAggregate:`No usable aggregate was emitted.`,outsideEventLogScope:`Available outside local event-log scope.`,parseIncomplete:`Cannot determine from an incomplete parse.`};function tt(e,t,n){return{key:e,state:`present`,reasonCode:`observed`,summary:et.observed,evidence:{eventType:t,count:n}}}function K(e,t,n){return{key:e,state:t,reasonCode:n,summary:et[n]}}function q(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)&&n>0?n:0}function nt(e){return e!=null&&e.schemaVersion===1}function rt(e){return typeof e==`number`&&Number.isFinite(e)&&e>0}function it(e){let t=e?.perStage;return typeof t==`object`&&!!t&&!Array.isArray(t)&&Object.values(t).some(e=>rt(e?.taskCount)&&rt(e?.totalTaskDurationSum))}function at(e,t){return e!=null&&String(e).toLowerCase()===t}function J(e,t,n){return n?K(e,t===`noSqlExecution`?`notApplicable`:`notEmitted`,t):K(e,`unknown`,`parseIncomplete`)}function ot(e,{skippedLines:t=0}={}){let n=e?.app,r=n?.evidenceInputs??{},i=t===0&&q(r,`applicationEnds`)>0,a=q(r,`executorMetricRows`),o=q(r,`stageSubmissions`),s=q(r,`rddStorageSnapshots`),c=q(r,`resolvedSqlPlans`),l=q(r,`sqlExecutions`),u=q(r,`environmentUpdates`),d=q(r,`taskRecords`);return{schemaVersion:1,entries:[a>0?tt(`executorMetrics`,`executorMetricRows`,a):at(n?.config?.[`spark.eventLog.logStageExecutorMetrics`],`false`)?K(`executorMetrics`,`disabled`,`explicitlyDisabled`):J(`executorMetrics`,`noObservedExecutorMetrics`,i),s>0?tt(`rddStorageSnapshots`,`rddStorageSnapshots`,s):J(`rddStorageSnapshots`,o===0?`noObservedStageSubmission`:`noRddStorageSnapshot`,i),c>0?tt(`sqlPlan`,`resolvedSqlPlans`,c):l>0&&i?K(`sqlPlan`,`notEmitted`,`noResolvedSqlPlan`):J(`sqlPlan`,`noSqlExecution`,i),u>0?tt(`sparkConfiguration`,`environmentUpdates`,u):J(`sparkConfiguration`,`noEnvironmentUpdate`,i),d===0?J(`taskCoreTime`,`noTaskRecords`,i):it(e?.runAggregates)?tt(`taskCoreTime`,`taskRecords`,d):J(`taskCoreTime`,`noUsableCoreTimeAggregate`,i),K(`infrastructureContext`,`outsideEventLog`,`outsideEventLogScope`),K(`sourceContext`,`outsideEventLog`,`outsideEventLogScope`),K(`costContext`,`outsideEventLog`,`outsideEventLogScope`)]}}function st(e,t,n){return{app:e.app,stages:new Map(e.stages),executors:{added:[...e.executors.added],removed:[...e.executors.removed]},sql:new Map(e.sql),jobs:new Map(e.jobs),runAggregates:e.runAggregates,evidenceAvailability:e.evidenceAvailability,skippedLines:e.skippedLines,unreadableSqlExecutions:e.unreadableSqlExecutions&&[...e.unreadableSqlExecutions],catalog:[...t],taskData:new Map(n)}}function ct(e,t,n){e.app=n.app,e.stages=new Map(n.stages),e.executors={added:[...n.executors.added],removed:[...n.executors.removed]},e.sql=new Map(n.sql),e.jobs=new Map(n.jobs),e.runAggregates=n.runAggregates??null,e.evidenceAvailability=nt(n.evidenceAvailability)?n.evidenceAvailability:null,e.skippedLines=n.skippedLines,n.unreadableSqlExecutions?e.unreadableSqlExecutions=[...n.unreadableSqlExecutions]:delete e.unreadableSqlExecutions,t.clear();for(let[e,r]of n.taskData)t.set(e,r);return[...n.catalog]}function lt(){return{app:null,stages:new Map,executors:{added:[],removed:[]},sql:new Map,jobs:new Map,runAggregates:null,evidenceAvailability:null}}function ut(){if(typeof window>`u`)return`dark`;try{let e=window.localStorage.getItem(`shuffle-works-theme`);if(e===`light`||e===`dark`)return e}catch{}return window.matchMedia?.(`(prefers-color-scheme: light)`).matches?`light`:`dark`}var dt=`shuffle-works-widget-density`;function ft(){if(typeof window>`u`)return`basic`;try{let e=window.localStorage.getItem(dt);if(e===`basic`||e===`advanced`)return e}catch{}return`basic`}var pt=Ze(e=>({appModel:lt(),catalog:[],configFindings:[],interpretation:null,exportProvenance:null,activeFileId:null,sessionCache:new Map,taskDataCache:new Map,parse:{pct:0,lines:0,etaMs:null},status:`idle`,shsParsing:!1,errorMessage:null,errorNonce:0,theme:ut(),widgetDensity:ft(),exportMode:!1,skippedLines:0,comparison:{active:!1,baselineId:null,candidateId:null},compareLoad:null,compareSeed:null,planGraph:{active:!1,stageId:null,initialScope:`segment`},modelResetCount:0,setCompareSeed:t=>e({compareSeed:t}),openComparison:(t,n)=>e(e=>(e.activeFileId!=null&&e.appModel.app&&e.sessionCache.set(e.activeFileId,st(e.appModel,e.catalog,e.taskDataCache)),{comparison:{active:!0,baselineId:t,candidateId:n}})),setComparisonActive:t=>e(e=>({comparison:{...e.comparison,active:t}})),setCompareLoad:t=>e({compareLoad:t}),closeComparison:()=>e({comparison:{active:!1,baselineId:null,candidateId:null}}),openPlanGraph:(t,n)=>e({planGraph:{active:!0,stageId:t,initialScope:n?.initialScope??`segment`}}),closePlanGraph:()=>e({planGraph:{active:!1,stageId:null,initialScope:`segment`}}),resetModel:()=>e(e=>({appModel:lt(),catalog:[],configFindings:[],interpretation:null,taskDataCache:new Map,status:`idle`,shsParsing:!1,errorMessage:null,skippedLines:0,comparison:{active:!1,baselineId:null,candidateId:null},compareLoad:null,planGraph:{active:!1,stageId:null,initialScope:`segment`},modelResetCount:e.modelResetCount+1})),setStatus:t=>e({status:t}),setShsParsing:t=>e({shsParsing:t}),setParse:t=>e({parse:t}),setCatalog:t=>e({catalog:t}),setConfigFindings:t=>e({configFindings:t}),setFindings:(t,n,r)=>e(e=>({catalog:t,configFindings:n,...r===void 0?{}:{appModel:{...e.appModel,evidenceAvailability:r}}})),setInterpretation:t=>e({interpretation:t}),setTaskData:(t,n)=>e(e=>{let r=new Map(e.taskDataCache);return r.set(t,n),{taskDataCache:r}}),setActiveFile:t=>e({activeFileId:t}),setError:t=>e(e=>({errorMessage:t,errorNonce:t?e.errorNonce+1:e.errorNonce,status:t?`error`:e.status})),setTheme:t=>e({theme:t}),setWidgetDensity:t=>{try{window.localStorage.setItem(dt,t)}catch{}e({widgetDensity:t})},setSkippedLines:t=>e({skippedLines:t}),setEvidenceAvailability:t=>e(e=>({appModel:{...e.appModel,evidenceAvailability:t}}))}));function mt(e){return $e(pt,e)}function ht(){return mt(e=>e.widgetDensity)}var gt=e=>e?.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase();function _t(e,t,n=[]){if(t==null)throw Error(`[lucide]: iconNode is required when icon name is used`);return{name:gt(e),size:24,node:t,...n.length>0?{aliases:n}:{}}}var vt=e=>{let t=``,n=!1;for(let r of e){if(r===`-`||r===`_`||r<=` `){n=t.length>0;continue}t.length===0?t+=r.toLowerCase():t+=n?r.toUpperCase():r,n=!1}return t},yt=e=>{let t=vt(e);return t.charAt(0).toUpperCase()+t.slice(1)},bt=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),Y={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":2,"stroke-linecap":`round`,"stroke-linejoin":`round`};function xt(e){return e!=null}function St(e,t={}){let n=t.attributeNames??{},r=e=>n[e]??e,i=e.size??e.width??Y.width,a=e.size??e.height??Y.height,o=e.aliases?.filter(e=>typeof e==`string`&&e.trim()!==``).map(e=>`lucide-${e}`)??[],s=[...e.name?[`lucide-${e.name}`]:[],...o],c=t.className?.split(` `).filter(Boolean)??[],l=t.includeDefaultClasses===!1?bt(...c):bt(`lucide`,...s,...c),u=t.absoluteStrokeWidth?Number(t.strokeWidth??Y[`stroke-width`])*Number(e.size??e.width??Y.width)/Number(t.size??t.width??Y.width):t.strokeWidth??Y[`stroke-width`];return[`svg`,{...Object.entries(Y).reduce((e,[t,n])=>(e[r(t)]=n,e),{}),...`color`in t&&t.color&&{[r(`stroke`)]:t.color},...`size`in t&&xt(t.size)&&{[r(`width`)]:t.size,[r(`height`)]:t.size},...`width`in t&&xt(t.width)&&{[r(`width`)]:t.width},...`height`in t&&xt(t.height)&&{[r(`height`)]:t.height},[r(`stroke-width`)]:u,...l&&{[r(`class`)]:l},[r(`viewBox`)]:`0 0 ${i} ${a}`,...t.hasA11yProp===!1?{[r(`aria-hidden`)]:`true`}:{},...`attributes`in t&&t.attributes},e.node.map(e=>{let[n,i,a]=e,o=t.nonScalingStroke?{[r(`vector-effect`)]:`non-scaling-stroke`,...i}:i;return a?[n,o,a]:[n,o]})]}function Ct(e,t={}){return St(e,{...t,attributeNames:{...t.attributeNames,class:`className`,"stroke-width":`strokeWidth`,"stroke-linecap":`strokeLinecap`,"stroke-linejoin":`strokeLinejoin`,"vector-effect":`vectorEffect`}})}var wt=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Tt=(0,l.createContext)({}),Et=()=>(0,l.useContext)(Tt),Dt=(0,l.forwardRef)(({color:e,size:t,width:n,height:r,strokeWidth:i,absoluteStrokeWidth:a,nonScalingStroke:o,className:s=``,children:c,iconNode:u=[],icon:d={node:u,aliases:[],size:24},...f},p)=>{let{size:m=24,strokeWidth:h=2,absoluteStrokeWidth:g=!1,nonScalingStroke:_=!1,color:ee=`currentColor`,className:v=``}=Et()??{},y=!!c||wt(f),[b,te,x=[]]=Ct(d,{color:e??ee,width:n??t??m,height:r??t??m,strokeWidth:i??h,absoluteStrokeWidth:a??g,nonScalingStroke:o??_,className:bt(v,s),hasA11yProp:y,attributes:f});return(0,l.createElement)(b,{ref:p,...te},[...x.map(([e,t])=>(0,l.createElement)(e,t)),...Array.isArray(c)?c:[c]])});function Ot(e,t=[],n=[]){let r=typeof e==`string`?_t(e,t,n):e,i=(0,l.forwardRef)(({className:e,...t},n)=>(0,l.createElement)(Dt,{ref:n,icon:r,className:e,...t}));return r.name&&(i.displayName=yt(r.name)),i}var kt={name:`chevron-down`,size:24,node:[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]};kt.node;var At=Ot(kt),jt={name:`chevron-up`,size:24,node:[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]};jt.node;var Mt=Ot(jt),Nt={name:`file-text`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]};Nt.node;var Pt=Ot(Nt),Ft=e=>`${Math.round(e*1e6)/1e4}%`;function X(e,t){return e.remediation!=null&&!e.remediation.some(e=>e.key===t)}var It=`spark.sql.adaptive.skewJoin.enabled`,Lt=`AQE skew-join handling is already on, so salt the key or repartition on a better key.`,Rt=`AQE is off, so enable it (spark.sql.adaptive.enabled) for skew-join handling to apply; otherwise salt the key or repartition on a better key.`;function zt(e,t){return e.origin===`inputScan`?`Uneven input files: compact small files or split large ones (lower spark.sql.files.maxPartitionBytes).`:e.origin===`other`?`Work is uneven across tasks: salt the key or repartition on a better key.`:e.remediation?.some(e=>e.key===`spark.sql.adaptive.enabled`)?Rt:X(e,It)?Lt:t}var Bt=`spark.dynamicAllocation.enabled`,Vt={incompleteRun:{name:`incomplete run`,tag:`INCMP`,thresholdSummary:()=>`an event log missing its terminal ApplicationEnd event`,actionLabel:()=>void 0,genericRecommendation:()=>void 0},skew:{name:`task skew`,tag:`SKEW`,thresholdSummary:e=>`P95 task time over ${e.ratioWarn}× the median (the longest task on stages under ${e.minTasksForP95} tasks)`,actionLabel:()=>`Fix task skew`,genericRecommendation:e=>zt(e,`For join-driven skew, enable AQE skew-join handling (spark.sql.adaptive.skewJoin.enabled); otherwise salt the key or repartition on a better key.`)},stageShape:{name:`stage shape`,tag:`SHAPE`,thresholdSummary:e=>`under ${e.pRatioMax} tasks per core, output over ${e.oiRatioMax}× input, or one task spanning over ${Math.round(e.stageShareMin*100)}% of the stage's wall-clock at over ${e.skewWarn}× the median task`,actionLabel(e){switch(e.rule){case`lowParallelism`:return`Increase parallelism`;case`dataExplosion`:return`Check for exploding join`;case`taskStageSkew`:return`Fix straggler task`}},genericRecommendation(e){switch(e.rule){case`lowParallelism`:return`Too few tasks run relative to the cores available, leaving cluster capacity idle: repartition to use more of it.`;case`dataExplosion`:return`Output volume far exceeds input volume: check for an exploding join or a cross product.`;case`taskStageSkew`:return`A single straggler task gates the whole stage's wall-clock duration.`}}},tinyTask:{name:`tiny tasks`,tag:`TINY`,thresholdSummary:e=>`${e.minTasks}+ tasks with a median of ${e.maxP50}ms or less and a P95 of ${e.maxP95}ms or less`,actionLabel:()=>`Coalesce small tasks`,genericRecommendation:e=>e.reads!=null&&e.reads!==`shuffle`?`Scheduler overhead may dominate: coalesce down to fewer, larger tasks.`:`Scheduler overhead may dominate: lower spark.sql.shuffle.partitions, or coalesce down to fewer, larger tasks.`},shuffle:{name:`shuffle I/O`,tag:`SHFL`,thresholdSummary:e=>`stage shuffle read above ${e.minBytes/1048576} MiB`,actionLabel:()=>`Reduce shuffle size`,genericRecommendation:e=>{switch(e.partitions){case`sufficient`:return`The tasks are already a good size, so more partitions will not help: use a broadcast join for the smaller side.`;case`aqeCoalesced`:return`AQE coalesced the shuffle: lower spark.sql.adaptive.advisoryPartitionSizeInBytes, or use a broadcast join for the smaller side.`;case`ownPartitioning`:return`spark.sql.shuffle.partitions is already high enough, so raise this stage's own partition count (its repartition(n) or RDD parallelism), or use a broadcast join for the smaller side.`;default:return`Raise spark.sql.shuffle.partitions, or use a broadcast join for the smaller side.`}}},partitionSizing:{name:`partition sizing`,tag:`PART`,thresholdSummary:e=>`a shuffle partition over ${e.skewRatio}× the median or over ${e.maxPartBytes/1073741824} GiB, or ${e.lowParTotalBytes/1073741824} GiB of shuffle on ${e.lowParMaxTasks} tasks or fewer`,actionLabel(e){switch(e.rule){case`shufflePartitionSkew`:return`Fix skewed partition`;case`lowShuffleParallelism`:return`Add shuffle partitions`;case`maxPartitionTooBig`:return`Repartition oversized data`}},genericRecommendation(e){switch(e.rule){case`shufflePartitionSkew`:return zt(e,`For join skew, enable AQE skew-join handling (spark.sql.adaptive.skewJoin.enabled); otherwise salt the key or repartition on a better key.`);case`lowShuffleParallelism`:return e.partitions===`aqeCoalesced`?`AQE coalesced the shuffle into few tasks: lower spark.sql.adaptive.advisoryPartitionSizeInBytes so each partition is smaller.`:X(e,`spark.sql.shuffle.partitions`)?`spark.sql.shuffle.partitions is already high enough, so raise this stage's own partition count (its repartition(n) or RDD parallelism) so each partition is smaller.`:`Raise spark.sql.shuffle.partitions so each partition is smaller.`;case`maxPartitionTooBig`:return`Repartition to break up the oversized partition before this stage.`}}},spill:{name:`spill`,tag:`SPILL`,thresholdSummary:e=>`single-task disk spill above ${e.singleTaskDiskGiB} GiB`,actionLabel:()=>`Reduce spill`,genericRecommendation:e=>e.reads!=null&&e.reads!==`shuffle`?`If the spill is skew-driven, fix task skew first: adding memory will not help. Otherwise increase executor memory or process less data per task.`:`If the spill is skew-driven, fix task skew first: adding memory will not help. Otherwise raise spark.sql.shuffle.partitions or increase executor memory.`},gc:{name:`GC pressure`,tag:`GC`,thresholdSummary:e=>`GC above ${e.warnPct100}% (or below ${e.lowInfoPct100}%) of executor run time`,actionLabel:e=>e.direction===`low`?`Right-size executor memory`:`Reduce GC pressure`,genericRecommendation:e=>e.direction===`low`?`Memory may be over-provisioned here: consider reducing spark.executor.memory for cost savings.`:`Reduce object creation, use primitive types, avoid UDFs, or increase executor memory to cut GC time.`},stageFailed:{name:`failed stage`,tag:`SFAIL`,thresholdSummary:()=>`a stage that failed outright`,actionLabel:()=>`Inspect stage failure`,genericRecommendation:()=>`Inspect the driver log for the failure reason and the job that triggered it.`},failures:{name:`failed tasks`,tag:`FAIL`,thresholdSummary:e=>`over ${Ft(e.warnRate)} of a stage's tasks failing`,actionLabel:()=>`Investigate task failures`,genericRecommendation:()=>`Investigate driver logs for executor instability or data-driven errors.`},retryWaste:{name:`retry waste`,tag:`RETRY`,thresholdSummary:e=>`${e.minWasted}+ retried attempts wasting at least ${e.minWasteMs/1e3}s`,actionLabel:()=>`Investigate retry cause`,genericRecommendation:()=>`Investigate executor loss or fetch failures behind the retried attempts.`},slowHost:{name:`slow executor host`,tag:`HOST`,thresholdSummary:e=>`a host ${e.ratioWarn}× slower than its peers by mean task time (per-executor figures from ${e.ratioTiers[0]}×)`,actionLabel(e){return e.variant===`durationShare`?`Fix data locality`:e.variant===`multiDim`?`Investigate degraded executor`:`Check slow host`},genericRecommendation(e){if(e.variant===`durationShare`)return`Check for data locality or partition assignment skewing work onto one node.`;if(e.variant===`multiDim`)return`Investigate uneven partition assignment or a degraded executor.`;let t=`Check what this host was running: it may just hold data locality for its tasks or carry one heavy stage, rather than a hardware fault.`;return X(e,`spark.speculation`)?`${t} Speculation is already on, so a lagging task there is already relaunched.`:`${t} Enable spark.speculation to relaunch a lagging task automatically.`}},stageSlowness:{name:`slow stage`,tag:`SLOW`,thresholdSummary:()=>`a stage running far longer than its peers, not attributable to a single slow host`,actionLabel:()=>`Profile slow stage`,genericRecommendation:e=>e.reads===`input`?`Often too few or too uneven input partitions: check input file sizes and lower spark.sql.files.maxPartitionBytes, or look for a large per-task data volume driving heavy spill.`:e.reads===`other`?`Check what the stage computes and for a large per-task data volume driving heavy spill.`:`Often a partition-count problem: raise parallelism via spark.sql.shuffle.partitions or spark.default.parallelism, or check for a large per-task data volume driving heavy shuffle and spill.`},straggler:{name:`straggling task`,tag:`STRAG`,thresholdSummary:()=>`one or more tasks finishing far after the rest of their stage`,actionLabel:()=>`Fix stragglers`,genericRecommendation:e=>`Rule out a GC pause or a slow shuffle fetch before assuming a hardware issue. If uneven data is the cause: ${zt(e,`for join-driven skew, enable AQE skew-join handling (spark.sql.adaptive.skewJoin.enabled); otherwise salt the key or repartition on a better key.`)}`},speculationWaste:{name:`speculation waste`,tag:`SPEC`,thresholdSummary:e=>`${e.minWasted}+ discarded speculative attempts wasting at least ${e.minWasteMs/1e3}s`,actionLabel:()=>`Tune speculation settings`,genericRecommendation:()=>`If task durations are naturally variable rather than genuine stragglers, consider tuning spark.speculation.multiplier/quantile.`},coldStart:{name:`cold start`,tag:`COLD`,thresholdSummary:e=>`the first stage waiting over ${e.gapSeconds}s for an executor`,actionLabel:()=>`Pre-warm cluster`,genericRecommendation:e=>e.dynamicAllocation===`off`?`Keep a warm pool of idle executors: dynamic allocation is off, so no executor-count property applies.`:`Keep a warm pool of idle executors, or if using dynamic allocation, raise the minimum/initial executor count so it does not scale up from zero.`},memoryUtilization:{name:`memory utilization`,tag:`MEM`,thresholdSummary:()=>`executor heap usage outside the configured band`,actionLabel(e){switch(e.variant){case`idleCores`:return`Reduce idle cores`;case`wasteModel`:return`Right-size executor memory`;case`memoryBand`:return e.dataUnavailable?`Enable memory metrics`:e.rule===`heapNearCapacity`?`Increase executor memory`:`Reduce executor memory`}},genericRecommendation(e){switch(e.variant){case`idleCores`:return X(e,Bt)?`Dynamic allocation is already on, so reduce cluster size.`:`Reduce cluster size or enable dynamic allocation.`;case`wasteModel`:return`Review spark.executor.memory and executor count.`;case`memoryBand`:return e.dataUnavailable?void 0:e.rule===`heapNearCapacity`?`Memory may be too small: raise spark.executor.memory to avoid OOM/spill.`:`Memory may be over-provisioned: consider reducing spark.executor.memory for cost savings.`}}},utilization:{name:`executor utilization`,tag:`UTIL`,thresholdSummary:e=>`average executor utilization below ${Ft(e.minUtil)}`,actionLabel:()=>`Reduce cluster size`,genericRecommendation:e=>X(e,Bt)?`Dynamic allocation is already on, so consider reducing cluster size.`:`Consider reducing cluster size or enabling dynamic allocation.`},coreLocality:{name:`core locality`,tag:`LOCAL`,thresholdSummary:()=>`task placement missing data-local core assignment`,actionLabel:()=>`Fix data locality`,genericRecommendation:()=>`Check executor/data colocation.`},cachingOpportunity:{name:`caching opportunity`,tag:`CACHE`,thresholdSummary:()=>`a dataset re-read from source multiple times with no cache/persist`,actionLabel:e=>e.variant===`composite`?`Cache repeated result`:`Cache shared table`,genericRecommendation:e=>e.variant===`composite`?`Cache or persist the repeated join/union result so it is computed once instead of recomputed per query.`:`Cache the shared DataFrame, or broadcast it if it is a small join lookup.`},cacheUtilization:{name:`cache utilization`,tag:`CSTOR`,thresholdSummary:()=>`cached partitions evicted or spilled to disk`,actionLabel:e=>e.dataUnavailable?`Enable block-update logging`:`Increase cache memory`,genericRecommendation(e){switch(e.variant){case`partialCache`:return`Increase executor memory or reduce the cached dataset size so more of it stays cached.`;case`diskSpillover`:return`Executor memory may be too small for this cached dataset: increase executor memory or reduce its size.`}}},jobFailureRate:{name:`job failure rate`,tag:`JOBS`,thresholdSummary:e=>`at least ${Ft(e.infoRate)} of jobs failing`,actionLabel:()=>`Investigate failed jobs`,genericRecommendation:()=>`Inspect the driver log for the failed job(s) and the stage failures that triggered them.`},autoscalingChurn:{name:`autoscaling churn`,tag:`CHRN`,thresholdSummary:e=>`over ${Ft(e.warningPct)} of executors living under ${e.shortLivedMs/6e4} minutes`,actionLabel:()=>`Reduce autoscaling churn`,genericRecommendation:e=>e.dynamicAllocation===`off`?`Dynamic allocation is off, so the churn comes from executors lost or preempted: check the cluster manager's preemption and executor-loss logs.`:`This looks like wasteful re-provisioning rather than normal scale-down: consider raising spark.dynamicAllocation.executorIdleTimeout or widening the minExecutors/maxExecutors bounds to reduce flapping.`},configAudit:{name:`config audit`,tag:`CFG`,thresholdSummary:()=>`a Spark conf value outside the recommended range`,actionLabel(e){switch(e.property){case`spark.shuffle.service.enabled`:return`Enable shuffle service`;case`spark.dynamicAllocation.minExecutors`:return`Fix autoscaling bounds`;case`spark.dynamicAllocation.maxExecutors`:return`Set max executors`;case`spark.serializer`:return`Switch to Kryo`;case`spark.executor.memoryOverhead`:return`Raise memory overhead`}},genericRecommendation(e){switch(e.property){case`spark.shuffle.service.enabled`:return`Set spark.shuffle.service.enabled=true so shuffle data survives executor removal.`;case`spark.dynamicAllocation.minExecutors`:return`Set the minimum executor bound at or below the maximum.`;case`spark.dynamicAllocation.maxExecutors`:return`Set spark.dynamicAllocation.maxExecutors to cap cluster growth.`;case`spark.serializer`:return`Consider spark.serializer=org.apache.spark.serializer.KryoSerializer for faster, smaller buffers.`;case`spark.executor.memoryOverhead`:return`Raise executor memoryOverhead above Spark's default floor to avoid off-heap OOM-kills.`}}},duplicatePlanSubtree:{name:`duplicate plan subtree`,tag:`PLAN`,thresholdSummary:()=>`the same physical plan subtree executed more than once`,actionLabel:()=>`Dedupe repeated subtree`,genericRecommendation:()=>`Check whether the repeated subtree could be computed once and reused, or cache/persist the shared computation.`},smallFiles:{name:`small files`,tag:`PLAN`,thresholdSummary:e=>`over ${e.minFiles} files averaging under ${e.maxAvgFileSizeMB} MiB`,actionLabel:e=>e.direction===`write`?`Coalesce output files`:`Compact small files`,genericRecommendation:e=>e.direction===`write`?`Repartition or coalesce before writing to raise the average file size.`:`Compact the upstream output so fewer, larger files are produced.`},underBroadcast:{name:`missed broadcast join`,tag:`PLAN`,thresholdSummary:()=>`a join below the configured size floor that skipped broadcast`,actionLabel:()=>`Use broadcast join`,genericRecommendation:e=>e.broadcastThreshold===`notLimiting`?`The threshold already admits the smaller side, so it is not what stopped the broadcast: consider a broadcast() hint or collecting table statistics.`:`This could have been a broadcast join: consider a broadcast() hint or raising spark.sql.autoBroadcastJoinThreshold.`},overBroadcast:{name:`oversized broadcast join`,tag:`PLAN`,thresholdSummary:e=>`a broadcast over ${e.overBroadcastBytes/1073741824} GiB`,actionLabel:()=>`Fix oversized broadcast`,genericRecommendation:e=>e.broadcastThreshold===`notLimiting`?`The configured threshold is below this broadcast, so remove the broadcast() hint that forced it.`:X(e,`spark.sql.autoBroadcastJoinThreshold`)?`Automatic broadcast is already disabled, so remove the broadcast() hint that forced it.`:`Check for a misapplied broadcast hint or a misconfigured spark.sql.autoBroadcastJoinThreshold.`}};function Ht(e){return Vt[e]}var Ut=134217728,Wt=8e3,Gt=1.5,Z={critical:0,warning:1,info:2},Kt=Object.fromEntries(Object.keys(Vt).map(e=>[e,Vt[e].tag]));function qt(e){return Kt[e]??e.toUpperCase()}var Jt={skew:`Skew spill: a few heavy tasks spill while most do not; rebalance partitioning`,volume:`Volume spill: most tasks spill because data exceeds memory; add partitions`,unclassified:`Spill cause could not be classified`},Yt={skew:`skew`,volume:`vol`,unclassified:`?`},Xt=8;function Zt(e,t=Xt){return e.length<=t?e.join(`, `):`${e.slice(0,t).join(`, `)}, +${e.length-t} more`}function Qt(e){let t;for(let n of e)(t===void 0||Z[n.impactBand]<Z[t])&&(t=n.impactBand);return t}function $t(e){let t=String(e),n=t.match(/((?:hdfs?|s3[an]?):\/\/\S+|\/[^\s,)]+)/i);if(!n)return t;let r=n[1].replace(/[/,]+$/,``).split(`/`).filter(Boolean);return r[r.length-1]||t}function en(e){return e.split(`::`)[0]||e}function tn(e){return!e||e<=0?`—`:e>=1e9?`${(e/1e9).toFixed(1)} GB`:e>=1e6?`${(e/1e6).toFixed(0)} MB`:`${(e/1e3).toFixed(0)} KB`}function nn(e){return e/1e6}function rn(e){return e.value??0}function Q(e,t){switch(e){case`pct`:return`${t}%`;case`pctFraction`:return`${Math.round(t*100)}%`;case`ratio`:return`${t}×`;case`ms`:return ln(t);case`count`:return`${t}`}}var an={shuffleReadBytes:`bytes`,memoryBytesSpilled:`bytes`,shuffleReadMax:`bytes`,avgFileSizeBytes:`bytes`,smallerSideBytes:`bytes`,broadcastBytes:`bytes`,speculationWasteMs:`ms`,retryWasteMs:`ms`,taskDurationP50:`ms`,stageDurationMinutes:`minutes`,"P95/median":`ratio`,"max/median":`ratio`,pRatio:`ratio`,oiRatio:`ratio`,hostMeanRatio:`ratio`,execMaxMedianRatio:`ratio`,gcPct:`pct`,failureRate:`pct`,stragglerShare:`pct`,hostDurationShare:`pctFraction`,taskStageSkew:`pctFraction`,taskCount:`count`,speculativeTasks:`count`,subtreeOccurrences:`count`};function on(e){return e>0&&e<1e3?`${Math.round(e)} B`:tn(e)}function sn(e){let t=e.metric?an[e.metric]:void 0;if(!t||e.value==null)return null;switch(t){case`bytes`:return on(e.value);case`minutes`:return ln(e.value*6e4);case`ms`:return Q(`ms`,e.value);case`ratio`:return Q(`ratio`,e.value);case`pct`:return Q(`pct`,e.value);case`pctFraction`:return Q(`pctFraction`,e.value);case`count`:return Q(`count`,e.value)}}function cn(e){let t=sn(e),n=e.impactEstimate?.wallClock,r=[t,n?`~${ln(n.high)}`:null].filter(Boolean);return r.length>0?r.join(` · `):null}function ln(e){return!e||e<=0?`—`:e<1e3?`${Math.round(e)}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:e<36e5?`${Math.floor(e/6e4)}m ${Math.floor(e%6e4/1e3)}s`:`${Math.floor(e/36e5)}h ${Math.floor(e%36e5/6e4)}m`}function un(e){let t=e.shuffleReadBytes??0;if(t<=0)return null;let n=Math.min(Wt,Math.ceil(t/Ut)),r=e.taskCount??0;return n<=r*Gt?null:{recommended:n,current:r}}function dn(e,t){if(e.length===0)return{labels:[],data:[]};let n=e[0],r=e[0];for(let t=1;t<e.length;t++)e[t]<n&&(n=e[t]),e[t]>r&&(r=e[t]);let i=(r-n)/t||1,a=Array(t).fill(0);for(let r of e)a[Math.min(Math.floor((r-n)/i),t-1)]++;return{labels:a.map((e,t)=>Math.round(n+t*i)),data:a}}function fn(e){return e===0?`0s`:ln(e)}function pn(e,t){let n=fn(e),r=fn(t);return n===r?r:`${n}-${r}`}var mn=36e5,hn=3686400,gn=.1,_n=e=>(Math.round(e*10)/10).toLocaleString(`en-US`,{minimumFractionDigits:1,maximumFractionDigits:1});function vn(e){let t=Math.round(e.value*10)/10;switch(e.unit){case`bytes`:return tn(e.value);case`ms`:return fn(e.value);case`mbSeconds`:{let n=e.value/hn;return n>=gn?`${_n(n)} GB-h`:`${t.toLocaleString(`en-US`)} MB-s`}case`coreHours`:return`${t.toFixed(1)} core-h`;case`coreMs`:{let t=e.value/mn;return t>=gn?`${_n(t)} core-h`:`${_n(e.value/1e3)} core-s`}default:return String(e.value)}}function yn(e){return/^0(\.0+)?(?:[^0-9.]|$)/.test(e)}function bn(e){return e>=10?String(Math.round(e)):e.toFixed(1).replace(/\.0$/,``)}var xn=36e5,$=c();function Sn(e){if(e.length===0)return[];let t=[...e].sort((e,t)=>e[0]-t[0]),n=[[t[0][0],t[0][1]]];for(let e=1;e<t.length;e++){let r=n[n.length-1],i=t[e];i[0]<=r[1]?r[1]=Math.max(r[1],i[1]):n.push([i[0],i[1]])}return n}function Cn(e){return Ht(e.type)?.genericRecommendation(e)}function wn(e){let t=e.sampleRelation?` (touching ${e.sampleRelation})`:``;return`A ${e.subtreeSize}-node subtree rooted at ${$t(e.rootName)} repeats ${e.value}x in this plan${t}`}var Tn=`Their filters, columns or scanned tables differ, so the repeats may compute different data.`,En={taskTime:`task time`,inputBytes:`input read`,shuffleBytes:`shuffle read and write`,storageMemory:`storage memory`};function Dn(e,t){let n=[];for(let r of e){let e=t.get(r);e&&e.submittedAt!=null&&e.completedAt!=null&&n.push([e.submittedAt,e.completedAt])}return Sn(n).reduce((e,[t,n])=>e+(n-t),0)}function On(e){let t=new Map;for(let n of e){let e=t.get(n.type)??[];e.push(n),t.set(n.type,e)}return t}function kn(e){return`stageIds`in e?e.stageIds:e.stageId==null?[]:[e.stageId]}function An(e,t,n){let r=[...new Set(t.flatMap(kn))],i=t.reduce((e,t)=>e+(t.impactEstimate?.wallClock?.high??0),0),a=r.length>0?Math.min(i,Dn(r,n)):i;return{kind:`time`,type:e,findingCount:t.length,stageCount:r.length,recoverableMsHigh:a,findings:t}}function jn(e,t){let n=t[0].impactEstimate.rawWaste.unit,r=t.reduce((e,t)=>e+(t.impactEstimate?.rawWaste?.value??0),0);return{kind:`resource`,type:e,findingCount:t.length,unit:n,total:r,findings:t}}function Mn(e,t){let n={};for(let e of t)n[e.impactBand]=(n[e.impactBand]??0)+1;return{kind:`count`,type:e,findingCount:t.length,byImpactBand:n,findings:t}}var Nn={time:0,resource:1,count:2};function Pn(e,t){let n=[];for(let[r,i]of On(e)){let e=i.filter(e=>e.impactEstimate?.wallClock!=null),a=i.filter(e=>e.impactEstimate?.wallClock==null&&e.impactEstimate?.rawWaste!=null),o=i.filter(e=>e.impactEstimate?.wallClock==null&&e.impactEstimate?.rawWaste==null);if(e.length>0&&n.push(An(r,e,t)),a.length>0){let e=new Map;for(let t of a){let n=t.impactEstimate.rawWaste.unit,r=e.get(n)??[];r.push(t),e.set(n,r)}for(let t of e.values())n.push(jn(r,t))}o.length>0&&n.push(Mn(r,o))}return n.sort((e,t)=>{let n=Nn[e.kind]-Nn[t.kind];return n===0?e.kind===`time`&&t.kind===`time`?t.recoverableMsHigh-e.recoverableMsHigh:(Z[Qt(e.findings)??`info`]??9)-(Z[Qt(t.findings)??`info`]??9):n})}function Fn(e){let t=vn({value:e.total,unit:e.unit});return yn(t)?null:t}function In(e){if(e.kind===`time`){let t=pn(e.recoverableMsHigh,e.recoverableMsHigh);return{stat:`×${e.findingCount} · ${t} recoverable`,statTitle:`${e.findingCount} findings of this type; up to ${t} of run time could be recovered by fixing them`}}if(e.kind===`resource`){let t=Fn(e);return{stat:t?`×${e.findingCount} · ${t}`:`×${e.findingCount}`,statTitle:`${e.findingCount} findings of this type${t?`; ${t} in total, a resource cost, not run time`:``}`}}let t=Object.entries(e.byImpactBand);return{stat:t.length===1?`×${e.findingCount}`:`×${e.findingCount} · ${t.map(([e,t])=>`${t} ${e}`).join(`, `)}`,statTitle:`${e.findingCount} findings of this type, by impact`}}function Ln(e){return!(e.type===`memoryUtilization`&&e.variant===`memoryBand`&&e.dataUnavailable)}function Rn(e){return e.type===`incompleteRun`||`dataUnavailable`in e&&e.dataUnavailable?!1:Ln(e)}var zn=0,Bn=1,Vn=2;function Hn(e){let t=e.impactEstimate;return t?.wallClock?zn:t?.rawWaste?Bn:Vn}function Un(e){return[...e].sort((e,t)=>{let n=Hn(e)-Hn(t);return n===0?Hn(e)===zn?t.impactEstimate.wallClock.high-e.impactEstimate.wallClock.high:(Z[e.impactBand]??9)-(Z[t.impactBand]??9):n})}function Wn(e,t){return Pn(e,t).map(e=>{let t=Un(e.findings);return{kind:e.kind,type:e.type,unit:e.kind===`resource`?e.unit:null,band:t[0].impactBand,members:t,...In(e)}})}var Gn=`docs/tuning-reference`,Kn={"bottleneck-stage-shape":`bottleneck-skew`,"bottleneck-stage-slowness":`bottleneck-slow-host`,"bottleneck-partition-sizing":`bottleneck-shuffle`,"bottleneck-speculation-waste":`bottleneck-straggler`,"bottleneck-core-locality":`bottleneck-utilization`,"bottleneck-caching-opportunity":`bottleneck-utilization`,"bottleneck-autoscaling-churn":`cluster-config`,"bottleneck-cache-utilization":`memory-model`};function qn(e){return e.startsWith(`metric-`)?`metrics`:e.startsWith(`config-`)?`config`:Kn[e]??e}function Jn(e){let t=String(e).replace(/^#/,``);return`${Gn}/${qn(t)}.html#${encodeURIComponent(t)}`}var Yn=new Set([`#intro`,`#spark-architecture`,`#memory-model`,`#partitioning`,`#joins`,`#shuffle`,`#data-formats`,`#table-formats`,`#caching`,`#pyspark`,`#aqe`,`#cluster-config`,`#anti-patterns`,`#metrics`,`#config`,`#bottleneck-cold-start`,`#bottleneck-failures`,`#bottleneck-gc`,`#bottleneck-job-failure-rate`,`#bottleneck-retry-waste`,`#bottleneck-shuffle`,`#bottleneck-skew`,`#bottleneck-slow-host`,`#bottleneck-spill`,`#bottleneck-straggler`,`#bottleneck-tiny-tasks`,`#bottleneck-utilization`,`#bottleneck-memory-utilization`,`#bottleneck-broadcast-sizing`,`#bottleneck-duplicate-plan-subtree`,`#bottleneck-small-files`,`#bottleneck-stage-shape`,`#bottleneck-stage-slowness`,`#bottleneck-partition-sizing`,`#bottleneck-speculation-waste`,`#bottleneck-core-locality`,`#bottleneck-caching-opportunity`,`#bottleneck-autoscaling-churn`,`#bottleneck-cache-utilization`,`#config-autoscale-bounds`,`#config-memory-overhead`,`#config-serializer`,`#config-shuffle-service`,...Object.values({"task-duration":`#metric-task-duration`,"shuffle-read-bytes":`#metric-shuffle-read-bytes`,"shuffle-write-bytes":`#metric-shuffle-write-bytes`,"memory-bytes-spilled":`#metric-memory-bytes-spilled`,"disk-bytes-spilled":`#metric-disk-bytes-spilled`,"jvm-gc-time":`#metric-jvm-gc-time`,gcpct:`#metric-gcpct`,"executor-run-time":`#metric-executor-run-time`,"fetch-wait-time-ratio":`#metric-fetch-wait-time-ratio`,"input-bytes":`#metric-input-bytes`,"output-bytes":`#metric-output-bytes`,"io-ratio":`#metric-io-ratio`,"peak-execution-memory":`#metric-peak-execution-memory`,"failed-tasks":`#metric-failed-tasks`,"speculative-tasks":`#metric-speculative-tasks`,"first-stage-submitted-at":`#metric-first-stage-submitted-at`,"executor-count":`#metric-executor-count`,"stage-duration":`#metric-stage-duration`})]);function Xn(e){return Yn.has(String(e))}function Zn(e){let t=new Set(e.map(e=>e.docAnchor));if(t.size!==1)return;let[n]=t;return n}function Qn(e){return`docs/user-guide/understanding-findings.html#${qt(e).toLowerCase()}`}var $n=`docs/user-guide/alternative-log-retrieval.html`,er=f(`group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!`,{variants:{variant:{default:`bg-primary text-primary-foreground [a]:hover:bg-primary/80`,secondary:`bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80`,destructive:`bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20`,outline:`border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground`,ghost:`hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50`,link:`text-primary underline-offset-4 hover:underline`}},defaultVariants:{variant:`default`}});function tr({className:e,variant:t=`default`,render:n,...i}){return o({defaultTagName:`span`,props:r({className:G(er({variant:t}),e)},i),render:n,state:{slot:`badge`,variant:t}})}var nr=`#intro`,rr=(0,l.createContext)(null);function ir({children:e}){let[t,n]=(0,l.useState)(!1),[r,i]=(0,l.useState)({kind:`site`,source:`reference`,path:Jn(nr)}),a=(0,l.useCallback)((e=nr)=>{i({kind:`site`,source:`reference`,path:Jn(e)}),n(!0)},[]),o=(0,l.useCallback)(e=>{i({kind:`site`,source:`guide`,path:e}),n(!0)},[]),s=(0,l.useCallback)(()=>n(!1),[]),c=(0,l.useMemo)(()=>({open:a,openSite:o,close:s,isOpen:t,target:r}),[a,o,s,t,r]);return(0,$.jsx)(rr.Provider,{value:c,children:e})}function ar(){let e=(0,l.useContext)(rr);if(!e)throw Error(`useDocs outside DocsProvider`);return e}function or(){return(0,l.useContext)(rr)}function sr({anchor:e,children:t}){let{open:n}=ar(),r=mt(e=>e.exportMode);return Xn(e)?r?(0,$.jsx)($.Fragment,{children:t}):(0,$.jsx)(`a`,{href:Jn(e),className:`text-primary underline-offset-4 hover:underline`,onClick:t=>{t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.button!==0||(t.preventDefault(),n(e))},children:t}):null}var cr={INCMP:{expansion:`Incomplete run`,description:`This event log never recorded an application-end event, so other findings and metrics reflect only what was captured.`},SKEW:{expansion:`Task skew`,description:`A small number of tasks take much longer than their peers.`},SHFL:{expansion:`Shuffle I/O`,description:`Tasks are moving a large amount of intermediate data between stages.`},SPILL:{expansion:`Memory and disk spill`,description:`Tasks are writing data out of memory, which slows execution.`},GC:{expansion:`Garbage collection pressure`,description:`Tasks are spending an unusually large share of time reclaiming memory.`},COLD:{expansion:`Executor cold start`,description:`New executors are taking time to become available for work.`},UTIL:{expansion:`Low utilization`,description:`Allocated executors are idle for a large share of the application run.`},MEM:{expansion:`Memory utilization`,description:`Executor memory or core capacity may be over- or under-provisioned.`},LOCAL:{expansion:`Core usage locality`,description:`Tasks are running without process- or node-local data placement more than expected.`},HOST:{expansion:`Slow host`,description:`One executor is substantially slower than its peers.`},FAIL:{expansion:`Failed tasks`,description:`Tasks are failing often enough to affect the stage.`},STRAG:{expansion:`Straggler tasks`,description:`A few tasks are much slower than the rest of their stage.`},SPEC:{expansion:`Speculation waste`,description:`Speculative task attempts used a lot of executor time without confirming a genuine straggler.`},RETRY:{expansion:`Retry waste`,description:`Repeated task attempts are consuming avoidable execution time.`},TINY:{expansion:`Tiny tasks`,description:`Many very short tasks are adding scheduling overhead.`},SFAIL:{expansion:`Failed stage`,description:`A stage attempt failed outright.`},PART:{expansion:`Partition sizing`,description:`Shuffle partitions are too large, too uneven, or too few for the work.`},SLOW:{expansion:`Stage slowness`,description:`A stage is slow overall without a more specific diagnosed cause.`},SHAPE:{expansion:`Stage shape`,description:`The stage has an inefficient task count, output shape, or task-to-stage balance.`},CACHE:{expansion:`Caching opportunity`,description:`A reusable dataset may benefit from being persisted between stages.`},CSTOR:{expansion:`Cache storage`,description:`A persisted dataset is not fully cached in memory or is spilling to disk.`},CHRN:{expansion:`Autoscaling churn`,description:`Executors are being stood up and torn down again before they can do useful work.`},JOBS:{expansion:`Job failure rate`,description:`A large share of completed jobs did not succeed.`},CFG:{expansion:`Configuration audit`,description:`Configuration settings may cause reliability or efficiency problems.`},PLAN:{expansion:`Plan advisor`,description:`The SQL execution plan has a pattern worth reviewing.`}};function lr(){return mt(e=>e.interpretation)}function ur(e,t){return e.findings[t]}var dr=new WeakMap;function fr(e,t){if(!e)return null;let n=dr.get(e);return n||(n=new Map(e.findings.map((t,n)=>[t,e.data.savings[n]])),dr.set(e,n)),n.get(t)??null}function pr(e){return fr(lr(),e)}function mr(e,t){if(!e)return[];let n=new Set(t);return e.data.savingsRank.map(t=>e.findings[t]).filter(e=>e!=null&&n.has(e))}function hr(e){return e?e.data.rollup.eligibleIndexes.map(t=>e.findings[t]).filter(e=>e!=null):[]}function gr({members:e,...t}){return{...t,key:`${t.kind}-${t.type}-${t.unit??``}`,findings:e}}function _r(e,t,n){if(!e)return{eligible:[],groups:[]};let r=new Set(t),i=hr(e).filter(e=>r.has(e));return{eligible:i,groups:e.findings.every(e=>r.has(e))?e.data.rollup.groups.map(({memberIndexes:t,...n})=>gr({...n,members:t.map(t=>e.findings[t]).filter(e=>e!=null)})):Wn(i,n).map(gr)}}function vr({children:e}){return ht()===`advanced`?(0,$.jsx)($.Fragment,{children:e}):null}var yr={critical:`bg-critical`,warning:`bg-warning`,info:`bg-info`},br={critical:`text-critical`,warning:`text-warning`,info:`text-info`},xr={critical:`border-critical`,warning:`border-warning`,info:`border-info`},Sr=f(`inline-block size-2 shrink-0 rounded-full`,{variants:{impactBand:{...yr,muted:`bg-muted-foreground`}},defaultVariants:{impactBand:`info`}}),Cr=f(`gap-1.5 border-transparent`,{variants:{impactBand:{critical:`bg-critical/10 text-critical`,warning:`bg-warning/10 text-warning`,info:`bg-info/10 text-info`}},defaultVariants:{impactBand:`info`}});function wr({impactBand:e,className:t}){return(0,$.jsx)(`span`,{"aria-hidden":`true`,className:G(Sr({impactBand:e}),t)})}function Tr({type:e,impactBand:t,className:n,plainBadge:r,docAnchor:i}){let a=or(),o=ht(),s=mt(e=>e.exportMode),c=lr()?.data.detectors[e]?.docAnchor??void 0,l=qt(e),u=cr[l],d=r?void 0:u?`${u.expansion}: ${u.description}`:void 0,f=r?void 0:i&&Xn(i)?i:c,p=u?.expansion??l,m=Qn(e),h=s?void 0:f?Jn(f):r?void 0:m,g=!r&&!s&&o===`advanced`&&!!f,_=(0,$.jsxs)(tr,{title:d,className:G(Cr({impactBand:t}),`h-6`,h&&`underline decoration-dotted underline-offset-2`,g?G(`rounded-r-none`,n):n),render:h?(0,$.jsx)(`a`,{href:h,onClick:e=>{!a||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.button!==0||(e.preventDefault(),f?a.open(f):a.openSite(m))}}):void 0,children:[(0,$.jsx)(wr,{impactBand:t}),l]});return r?_:(0,$.jsxs)(`span`,{className:`inline-flex items-center`,children:[_,g?(0,$.jsx)(vr,{children:(0,$.jsx)(`a`,{href:m,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`SparkForensics guide: ${p}`,title:`SparkForensics guide: ${p}`,onClick:e=>{!a||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.button!==0||(e.preventDefault(),a.openSite(m))},className:G(`tap-target-comfortable tap-target-comfortable--sm inline-flex h-6 shrink-0 items-center rounded-r-4xl border border-transparent py-0.5 pr-2 pl-1 text-xs font-medium whitespace-nowrap transition-colors`,Cr({impactBand:t}),n,`text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`),children:(0,$.jsx)(Pt,{"aria-hidden":`true`,className:`size-3`})})}):null]})}function Er({label:e,impactBand:t,title:n,className:r}){return(0,$.jsx)(tr,{title:n,className:G(Cr({impactBand:t}),`font-mono`,r),children:e})}function Dr({...e}){return(0,$.jsx)(a,{"data-slot":`collapsible`,...e})}function Or({...e}){return(0,$.jsx)(s,{"data-slot":`collapsible-trigger`,...e})}function kr({className:e,...t}){return(0,$.jsx)(i,{"data-slot":`collapsible-content`,className:G(`h-(--collapsible-panel-height) overflow-hidden transition-[height] duration-150 ease-out data-ending-style:h-0 data-starting-style:h-0 motion-reduce:transition-none`,e),...t})}var Ar=(0,l.createContext)(!0),jr=()=>(0,l.useContext)(Ar);export{Q as $,Xn as A,Cn as B,ir as C,ot as Ct,er as D,tr as E,f as Et,Un as F,Yt as G,Sn as H,Wn as I,fn as J,Jt as K,Fn as L,Pn as M,Rn as N,$n as O,Ln as P,cn as Q,Tn as R,sr as S,st as St,or as T,G as Tt,Z as U,wn as V,xn as W,bn as X,tn as Y,ln as Z,mr as _,Ot as _t,Or as a,$t as at,lr as b,ht as bt,xr as c,en as ct,Tr as d,Vt as dt,vn as et,Cr as f,Ht as ft,ur as g,At as gt,hr as h,Mt as ht,kr as i,rn as it,Zn as j,Gn as k,br as l,qt as lt,_r as m,Pt as mt,jr as n,pn as nt,Er as o,yn as ot,vr as p,Ft as pt,dn as q,Dr as r,nn as rt,yr as s,un as st,Ar as t,Zt as tt,wr as u,Qt as ut,fr as v,pt as vt,ar as w,it as wt,cr as x,ct as xt,pr as y,mt as yt,En as z};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{R as n,U as r,V as i,d as a,p as o,ut as s}from"./DisclosureContext-Ds0hcZFn.js";import{p as c}from"./plan-graph-vendor-B0sEms9Z.js";import{h as l,m as u}from"./useRecentFiles-Bb4-ukVz.js";import{C as d,O as f,S as p}from"./index-DaC8A2FS.js";import{a as m,o as h,r as g,s as _,t as v}from"./Dashboard-CC_BXrNy.js";import{i as y,r as b}from"./impact-sort-Eihua9dY.js";import{n as x,t as S}from"./finding-anchor-Dl8mIHiU.js";import{t as C}from"./usePagedRows-Bo-aSztx.js";import{n as w,t as T}from"./useSortMode-lDedD5a3.js";var E=e(t(),1),D=c();function O({finding:e}){let t=x([e]);return(0,D.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-2 ${S} transition-colors ${t.flashClassName}`,children:[e.stageIds.length>0?(0,D.jsx)(m,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,D.jsxs)(`p`,{children:[`${i(e)}.${e.occurrencesIdentical?``:` ${n}`}`,` `,(0,D.jsx)(v,{finding:e})]})]})}var k=(0,E.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:n,setSortMode:i,orderBy:c}=T(),[m,v]=(0,E.useState)(!t),[x,S]=(0,E.useState)(0),{findings:k,pills:A,groupConfidence:j}=(0,E.useMemo)(()=>{let t=u(e,`duplicatePlanSubtree`).sort((e,t)=>r[e.impactBand]-r[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds))].map(e=>({id:e})),groupConfidence:t.every(e=>e.confidence===t[0]?.confidence)?t[0]:void 0}},[e]),M=c(k,e=>[e],y),N=f(),P=N?M.findIndex(e=>e===N.finding):null,{totalPages:F,effectivePage:I,visible:L}=C(M,x,S,P);return k.length===0?null:(0,D.jsxs)(d,{title:`Redundant Plan Subtree`,fixFor:k,impactBand:s(k),open:m,onOpenChange:v,badges:(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(a,{type:`duplicatePlanSubtree`,impactBand:s(k)??`info`,className:p}),b(k,k.length,m)?(0,D.jsx)(w,{mode:n,onChange:i}):null]}),statusBadge:(0,D.jsx)(o,{children:(0,D.jsx)(l,{confidence:j?.confidence,validationRequired:j?.validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,D.jsx)(h,{value:`${A.length} stage${A.length===1?``:`s`}`,context:_(k.length)}),children:[(0,D.jsx)(`ul`,{className:`space-y-3 text-sm`,children:L.map(e=>(0,D.jsx)(O,{finding:e},e.id))}),(0,D.jsx)(g,{page:I,totalPages:F,onPrev:()=>S(e=>e-1),onNext:()=>S(e=>e+1)})]})});export{k as DuplicatePlanSubtree};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{R as n,U as r,V as i,d as a,p as o,ut as s}from"./DisclosureContext-ZpE6CkHx.js";import{p as c}from"./plan-graph-vendor-BYl-AzN5.js";import{c as l,l as u}from"./useRecentFiles-XZEnLlal.js";import{P as d,S as f,k as p}from"./index-B-03mG7K.js";import{a as m,o as h,r as g,s as _,t as v}from"./Dashboard-C1hNeX49.js";import{i as y,r as b}from"./impact-sort-CssZ6MT2.js";import{n as x,t as S}from"./finding-anchor-Cl6_5hfV.js";import{t as C}from"./usePagedRows-Dyl6T8Ok.js";import{n as w,t as T}from"./useSortMode-Dhvit8dt.js";var E=e(t(),1),D=c();function O({finding:e}){let t=x([e]);return(0,D.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-2 ${S} transition-colors ${t.flashClassName}`,children:[e.stageIds.length>0?(0,D.jsx)(m,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,D.jsxs)(`p`,{children:[`${i(e)}.${e.occurrencesIdentical?``:` ${n}`}`,` `,(0,D.jsx)(v,{finding:e})]})]})}var k=(0,E.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:n,setSortMode:i,orderBy:c}=T(),[m,v]=(0,E.useState)(!t),[x,S]=(0,E.useState)(0),{findings:k,pills:A,groupConfidence:j}=(0,E.useMemo)(()=>{let t=l(e,`duplicatePlanSubtree`).sort((e,t)=>r[e.impactBand]-r[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds))].map(e=>({id:e})),groupConfidence:t.every(e=>e.confidence===t[0]?.confidence)?t[0]:void 0}},[e]),M=c(k,e=>[e],y),N=d(),P=N?M.findIndex(e=>e===N.finding):null,{totalPages:F,effectivePage:I,visible:L}=C(M,x,S,P);return k.length===0?null:(0,D.jsxs)(p,{title:`Redundant Plan Subtree`,fixFor:k,impactBand:s(k),open:m,onOpenChange:v,badges:(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(a,{type:`duplicatePlanSubtree`,impactBand:s(k)??`info`,className:f}),b(k,k.length,m)?(0,D.jsx)(w,{mode:n,onChange:i}):null]}),statusBadge:(0,D.jsx)(o,{children:(0,D.jsx)(u,{confidence:j?.confidence,validationRequired:j?.validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,D.jsx)(h,{value:`${A.length} stage${A.length===1?``:`s`}`,context:_(k.length)}),children:[(0,D.jsx)(`ul`,{className:`space-y-3 text-sm`,children:L.map(e=>(0,D.jsx)(O,{finding:e},e.id))}),(0,D.jsx)(g,{page:I,totalPages:F,onPrev:()=>S(e=>e-1),onNext:()=>S(e=>e+1)})]})});export{k as DuplicatePlanSubtree};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{$ as n,U as r,d as i,it as a,u as o,ut as s}from"./DisclosureContext-Ds0hcZFn.js";import{p as c}from"./plan-graph-vendor-B0sEms9Z.js";import{C as l,O as u}from"./index-DaC8A2FS.js";import{o as d,r as f,s as p,t as m}from"./Dashboard-CC_BXrNy.js";import{n as h}from"./finding-anchor-Dl8mIHiU.js";import{t as g}from"./usePagedRows-Bo-aSztx.js";var _=e(t(),1),v=c();function y({finding:e}){let t=h([e]);return(0,v.jsxs)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`transition-colors ${t.flashClassName}`,children:[(0,v.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2`,children:[(0,v.jsx)(o,{impactBand:e.impactBand,className:`mt-1.5`}),(0,v.jsx)(`strong`,{children:n(`pct`,a(e))}),` average executor utilization`]}),(0,v.jsx)(m,{finding:e})]})}var b=(0,_.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[o,c]=(0,_.useState)(0),m=(0,_.useMemo)(()=>e.filter(e=>e.type===`utilization`).slice().sort((e,t)=>r[e.impactBand]-r[t.impactBand]),[e]),h=u(),b=h?m.findIndex(e=>e===h.finding):null,{totalPages:x,effectivePage:S,visible:C}=g(m,o,c,b);return m.length===0?null:(0,v.jsxs)(l,{title:`Executor Utilization`,fixFor:m,impactBand:s(m),badges:(0,v.jsx)(i,{type:`utilization`,impactBand:s(m)??`info`}),defaultCollapsed:t,summary:(0,v.jsx)(d,{value:`${n(`pct`,a(m[0]))} average`,context:p(m.length)}),children:[(0,v.jsx)(`div`,{className:`space-y-2 text-sm`,children:C.map(e=>(0,v.jsx)(y,{finding:e},e.id))}),(0,v.jsx)(f,{page:S,totalPages:x,onPrev:()=>c(e=>e-1),onNext:()=>c(e=>e+1)})]})});export{b as ExecutorUtilization};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{$ as n,U as r,d as i,it as a,u as o,ut as s}from"./DisclosureContext-ZpE6CkHx.js";import{p as c}from"./plan-graph-vendor-BYl-AzN5.js";import{P as l,k as u}from"./index-B-03mG7K.js";import{o as d,r as f,s as p,t as m}from"./Dashboard-C1hNeX49.js";import{n as h}from"./finding-anchor-Cl6_5hfV.js";import{t as g}from"./usePagedRows-Dyl6T8Ok.js";var _=e(t(),1),v=c();function y({finding:e}){let t=h([e]);return(0,v.jsxs)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`transition-colors ${t.flashClassName}`,children:[(0,v.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2`,children:[(0,v.jsx)(o,{impactBand:e.impactBand,className:`mt-1.5`}),(0,v.jsx)(`strong`,{children:n(`pct`,a(e))}),` average executor utilization`]}),(0,v.jsx)(m,{finding:e})]})}var b=(0,_.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[o,c]=(0,_.useState)(0),m=(0,_.useMemo)(()=>e.filter(e=>e.type===`utilization`).slice().sort((e,t)=>r[e.impactBand]-r[t.impactBand]),[e]),h=l(),b=h?m.findIndex(e=>e===h.finding):null,{totalPages:x,effectivePage:S,visible:C}=g(m,o,c,b);return m.length===0?null:(0,v.jsxs)(u,{title:`Executor Utilization`,fixFor:m,impactBand:s(m),badges:(0,v.jsx)(i,{type:`utilization`,impactBand:s(m)??`info`}),defaultCollapsed:t,summary:(0,v.jsx)(d,{value:`${n(`pct`,a(m[0]))} average`,context:p(m.length)}),children:[(0,v.jsx)(`div`,{className:`space-y-2 text-sm`,children:C.map(e=>(0,v.jsx)(y,{finding:e},e.id))}),(0,v.jsx)(f,{page:S,totalPages:x,onPrev:()=>c(e=>e-1),onNext:()=>c(e=>e+1)})]})});export{b as ExecutorUtilization};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{Z as n,d as r,p as i,ut as a}from"./DisclosureContext-Ds0hcZFn.js";import{p as o}from"./plan-graph-vendor-B0sEms9Z.js";import{h as s}from"./useRecentFiles-Bb4-ukVz.js";import{C as c,O as l}from"./index-DaC8A2FS.js";import{o as u,r as d,s as f,t as p}from"./Dashboard-CC_BXrNy.js";import{r as m}from"./impact-sort-Eihua9dY.js";import{n as h,t as g}from"./finding-anchor-Dl8mIHiU.js";import{t as _}from"./usePagedRows-Bo-aSztx.js";import{n as v,t as y}from"./useSortMode-lDedD5a3.js";import{t as b}from"./StageHeader-BMNmUy-s.js";var x=e(t(),1),S=o(),C=`GC % = total JVM GC time ÷ total executor run time; it can exceed 100% when GC pauses overlap many concurrent task threads.`;function w(e){return[...e].sort((e,t)=>(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0))}function T({finding:e,appModel:t}){let r=h([e]),a=(e.stageId==null?void 0:t.stages.get(e.stageId))?.executorRunTime;return(0,S.jsxs)(`li`,{ref:r.ref,tabIndex:r.tabIndex,"data-flashed":r.dataFlashed,className:`space-y-2 ${g} transition-colors ${r.flashClassName}`,children:[(0,S.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,S.jsx)(b,{stageId:e.stageId,appModel:t}),(0,S.jsx)(i,{children:(0,S.jsx)(s,{confidence:e.confidence,validationRequired:e.validationRequired})})]}),(0,S.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`GC: `,(0,S.jsxs)(`strong`,{children:[e.value,`%`]}),` · Executor run time:`,` `,(0,S.jsx)(`strong`,{children:n(a??0)})]}),(0,S.jsx)(p,{finding:e})]})}function E({title:e,findings:t,appModel:n,page:r,setPage:i,routeTarget:a,orderBy:o}){let s=o(w(t),e=>[e],e=>e.stageId),c=a?s.findIndex(e=>e===a.finding):null,{totalPages:l,effectivePage:u,visible:f}=_(s,r,i,c);return(0,S.jsxs)(`section`,{className:`space-y-2`,children:[(0,S.jsxs)(`h4`,{className:`font-heading text-sm font-medium`,children:[e,` · `,t.length,` stage`,t.length===1?``:`s`]}),(0,S.jsx)(`ul`,{className:`space-y-3`,children:f.map(e=>(0,S.jsx)(T,{finding:e,appModel:n},e.stageId))}),(0,S.jsx)(d,{page:u,totalPages:l,onPrev:()=>i(e=>e-1),onNext:()=>i(e=>e+1)})]})}function D({catalog:e,appModel:t,defaultCollapsed:n=!0}){let[o,s]=(0,x.useState)(0),[d,p]=(0,x.useState)(0),{sortMode:h,setSortMode:g,orderBy:_}=y(),[b,w]=(0,x.useState)(!n),T=l(),D=(0,x.useRef)(!1);(0,x.useEffect)(()=>{if(!D.current){D.current=!0;return}s(0),p(0)},[t]);let O=e.filter(e=>e.type===`gc`);if(O.length===0)return null;let k=O.filter(e=>e.direction!==`low`),A=O.filter(e=>e.direction===`low`),j=a(O),M=[...O].sort((e,t)=>(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0))[0];return(0,S.jsx)(c,{title:`GC Pressure`,impactBand:j,fixFor:O,badges:(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(r,{type:`gc`,impactBand:j??`info`}),m(O,O.length,b)?(0,S.jsx)(v,{mode:h,onChange:e=>{g(e),s(0),p(0)}}):null]}),defaultCollapsed:n,open:b,onOpenChange:w,summary:(0,S.jsx)(u,{value:`${M.value}%`,context:f(O.length)}),children:(0,S.jsxs)(`div`,{className:`space-y-4`,children:[(0,S.jsx)(i,{children:(0,S.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:C})}),k.length>0&&(0,S.jsx)(E,{title:`GC overhead`,findings:k,appModel:t,page:o,setPage:s,routeTarget:T,orderBy:_}),A.length>0&&(0,S.jsx)(E,{title:`Low GC (cost)`,findings:A,appModel:t,page:d,setPage:p,routeTarget:T,orderBy:_})]})})}export{D as GcPressure};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{Z as n,d as r,p as i,ut as a}from"./DisclosureContext-ZpE6CkHx.js";import{p as o}from"./plan-graph-vendor-BYl-AzN5.js";import{l as s}from"./useRecentFiles-XZEnLlal.js";import{P as c,k as l}from"./index-B-03mG7K.js";import{o as u,r as d,s as f,t as p}from"./Dashboard-C1hNeX49.js";import{r as m}from"./impact-sort-CssZ6MT2.js";import{n as h,t as g}from"./finding-anchor-Cl6_5hfV.js";import{t as _}from"./usePagedRows-Dyl6T8Ok.js";import{n as v,t as y}from"./useSortMode-Dhvit8dt.js";import{t as b}from"./StageHeader-DJkYkrsU.js";var x=e(t(),1),S=o(),C=`GC % = total JVM GC time ÷ total executor run time; it can exceed 100% when GC pauses overlap many concurrent task threads.`;function w(e){return[...e].sort((e,t)=>(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0))}function T({finding:e,appModel:t}){let r=h([e]),a=(e.stageId==null?void 0:t.stages.get(e.stageId))?.executorRunTime;return(0,S.jsxs)(`li`,{ref:r.ref,tabIndex:r.tabIndex,"data-flashed":r.dataFlashed,className:`space-y-2 ${g} transition-colors ${r.flashClassName}`,children:[(0,S.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,S.jsx)(b,{stageId:e.stageId,appModel:t}),(0,S.jsx)(i,{children:(0,S.jsx)(s,{confidence:e.confidence,validationRequired:e.validationRequired})})]}),(0,S.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`GC: `,(0,S.jsxs)(`strong`,{children:[e.value,`%`]}),` · Executor run time:`,` `,(0,S.jsx)(`strong`,{children:n(a??0)})]}),(0,S.jsx)(p,{finding:e})]})}function E({title:e,findings:t,appModel:n,page:r,setPage:i,routeTarget:a,orderBy:o}){let s=o(w(t),e=>[e],e=>e.stageId),c=a?s.findIndex(e=>e===a.finding):null,{totalPages:l,effectivePage:u,visible:f}=_(s,r,i,c);return(0,S.jsxs)(`section`,{className:`space-y-2`,children:[(0,S.jsxs)(`h4`,{className:`font-heading text-sm font-medium`,children:[e,` · `,t.length,` stage`,t.length===1?``:`s`]}),(0,S.jsx)(`ul`,{className:`space-y-3`,children:f.map(e=>(0,S.jsx)(T,{finding:e,appModel:n},e.stageId))}),(0,S.jsx)(d,{page:u,totalPages:l,onPrev:()=>i(e=>e-1),onNext:()=>i(e=>e+1)})]})}function D({catalog:e,appModel:t,defaultCollapsed:n=!0}){let[o,s]=(0,x.useState)(0),[d,p]=(0,x.useState)(0),{sortMode:h,setSortMode:g,orderBy:_}=y(),[b,w]=(0,x.useState)(!n),T=c(),D=(0,x.useRef)(!1);(0,x.useEffect)(()=>{if(!D.current){D.current=!0;return}s(0),p(0)},[t]);let O=e.filter(e=>e.type===`gc`);if(O.length===0)return null;let k=O.filter(e=>e.direction!==`low`),A=O.filter(e=>e.direction===`low`),j=a(O),M=[...O].sort((e,t)=>(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0))[0];return(0,S.jsx)(l,{title:`GC Pressure`,impactBand:j,fixFor:O,badges:(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(r,{type:`gc`,impactBand:j??`info`}),m(O,O.length,b)?(0,S.jsx)(v,{mode:h,onChange:e=>{g(e),s(0),p(0)}}):null]}),defaultCollapsed:n,open:b,onOpenChange:w,summary:(0,S.jsx)(u,{value:`${M.value}%`,context:f(O.length)}),children:(0,S.jsxs)(`div`,{className:`space-y-4`,children:[(0,S.jsx)(i,{children:(0,S.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:C})}),k.length>0&&(0,S.jsx)(E,{title:`GC overhead`,findings:k,appModel:t,page:o,setPage:s,routeTarget:T,orderBy:_}),A.length>0&&(0,S.jsx)(E,{title:`Low GC (cost)`,findings:A,appModel:t,page:d,setPage:p,routeTarget:T,orderBy:_})]})})}export{D as GcPressure};
@@ -1 +1 @@
1
- import{d as e}from"./DisclosureContext-Ds0hcZFn.js";import{p as t}from"./plan-graph-vendor-B0sEms9Z.js";import{C as n}from"./index-DaC8A2FS.js";import{t as r}from"./Dashboard-CC_BXrNy.js";var i=t();function a({finding:e}){let{recommendation:t}=e;return(0,i.jsxs)(`div`,{className:`flex flex-col gap-1 transition-colors`,children:[(0,i.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`ApplicationEnd event: `,(0,i.jsx)(`strong`,{children:`missing`})]}),(0,i.jsx)(r,{finding:e}),t?(0,i.jsx)(`p`,{className:`pt-1`,children:t}):null]})}function o({catalog:t,defaultCollapsed:r=!0}){let o=t.find(e=>e.type===`incompleteRun`);if(!o)return null;let{impactBand:s}=o;return(0,i.jsx)(n,{title:`Incomplete Run`,impactBand:s,badges:(0,i.jsx)(e,{type:`incompleteRun`,impactBand:s}),defaultCollapsed:r,children:(0,i.jsx)(a,{finding:o})})}export{o as IncompleteRun};
1
+ import{d as e}from"./DisclosureContext-ZpE6CkHx.js";import{p as t}from"./plan-graph-vendor-BYl-AzN5.js";import{k as n}from"./index-B-03mG7K.js";import{t as r}from"./Dashboard-C1hNeX49.js";var i=t();function a({finding:e}){let{recommendation:t}=e;return(0,i.jsxs)(`div`,{className:`flex flex-col gap-1 transition-colors`,children:[(0,i.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`ApplicationEnd event: `,(0,i.jsx)(`strong`,{children:`missing`})]}),(0,i.jsx)(r,{finding:e}),t?(0,i.jsx)(`p`,{className:`pt-1`,children:t}):null]})}function o({catalog:t,defaultCollapsed:r=!0}){let o=t.find(e=>e.type===`incompleteRun`);if(!o)return null;let{impactBand:s}=o;return(0,i.jsx)(n,{title:`Incomplete Run`,impactBand:s,badges:(0,i.jsx)(e,{type:`incompleteRun`,impactBand:s}),defaultCollapsed:r,children:(0,i.jsx)(a,{finding:o})})}export{o as IncompleteRun};
@@ -1 +1 @@
1
- import{d as e,p as t}from"./DisclosureContext-Ds0hcZFn.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{m as r}from"./useRecentFiles-Bb4-ukVz.js";import{C as i}from"./index-DaC8A2FS.js";import{o as a,t as o}from"./Dashboard-CC_BXrNy.js";var s=n();function c({finding:e}){let{failedJobs:n,totalJobs:r,failedTasks:i,totalTasks:a,taskFailureRate:c,value:l}=e;return(0,s.jsxs)(`div`,{className:`flex flex-col gap-1 transition-colors`,children:[(0,s.jsxs)(`p`,{children:[`Failure rate: `,(0,s.jsxs)(`strong`,{children:[l,`%`]}),` (`,n,` of `,r,` completed jobs)`]}),(0,s.jsx)(t,{children:(0,s.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Task-failure context: `,i,` of `,a,` tasks failed (`,c,`%).`]})}),(0,s.jsx)(o,{finding:e})]})}function l({catalog:t,defaultCollapsed:n=!0}){let[o]=r(t,`jobFailureRate`);if(!o)return null;let{impactBand:l,value:u,failedJobs:d,totalJobs:f}=o;return(0,s.jsx)(i,{title:`Job Failures`,fixFor:[o],impactBand:l,badges:(0,s.jsx)(e,{type:`jobFailureRate`,impactBand:l}),defaultCollapsed:n,summary:(0,s.jsx)(a,{value:`${u}%`,context:`${d} of ${f} completed jobs failed`}),children:(0,s.jsx)(c,{finding:o})})}export{l as JobFailures};
1
+ import{d as e,p as t}from"./DisclosureContext-ZpE6CkHx.js";import{p as n}from"./plan-graph-vendor-BYl-AzN5.js";import{c as r}from"./useRecentFiles-XZEnLlal.js";import{k as i}from"./index-B-03mG7K.js";import{o as a,t as o}from"./Dashboard-C1hNeX49.js";var s=n();function c({finding:e}){let{failedJobs:n,totalJobs:r,failedTasks:i,totalTasks:a,taskFailureRate:c,value:l}=e;return(0,s.jsxs)(`div`,{className:`flex flex-col gap-1 transition-colors`,children:[(0,s.jsxs)(`p`,{children:[`Failure rate: `,(0,s.jsxs)(`strong`,{children:[l,`%`]}),` (`,n,` of `,r,` completed jobs)`]}),(0,s.jsx)(t,{children:(0,s.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Task-failure context: `,i,` of `,a,` tasks failed (`,c,`%).`]})}),(0,s.jsx)(o,{finding:e})]})}function l({catalog:t,defaultCollapsed:n=!0}){let[o]=r(t,`jobFailureRate`);if(!o)return null;let{impactBand:l,value:u,failedJobs:d,totalJobs:f}=o;return(0,s.jsx)(i,{title:`Job Failures`,fixFor:[o],impactBand:l,badges:(0,s.jsx)(e,{type:`jobFailureRate`,impactBand:l}),defaultCollapsed:n,summary:(0,s.jsx)(a,{value:`${u}%`,context:`${d} of ${f} completed jobs failed`}),children:(0,s.jsx)(c,{finding:o})})}export{l as JobFailures};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{$ as n,P as r,U as i,d as a,et as o,it as s,p as c,u as l,ut as u}from"./DisclosureContext-Ds0hcZFn.js";import{p as d}from"./plan-graph-vendor-B0sEms9Z.js";import{h as f,m as p}from"./useRecentFiles-Bb4-ukVz.js";import{C as m,O as h}from"./index-DaC8A2FS.js";import{o as g,r as _,s as v,t as y}from"./Dashboard-CC_BXrNy.js";import{n as b}from"./finding-anchor-Dl8mIHiU.js";import{t as x}from"./usePagedRows-Bo-aSztx.js";var S=e(t(),1),C=d();function w(e){let t=s(e),r=n(`pct`,t);return e.variant===`idleCores`?`${r} of available core-time idle`:e.variant===`memoryBand`?e.rule===`heapNearCapacity`?`${r} of allocated heap used: near capacity`:`${r} of allocated heap used: over-provisioned`:`~${o({value:t,unit:`mbSeconds`})} wasted`}function T(e){if(e.rule==null)return null;let t=e.recommendation??``,n=t.indexOf(`: `);return n===-1?null:` ${t.slice(0,n)}.`}function E(e){return`executorId`in e&&e.executorId!=null?`Executor ${e.executorId}`:e.variant===`idleCores`?`Idle cores`:`Memory waste`}function D({finding:e}){let t=b([e]);return e.dataUnavailable?(0,C.jsx)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-1 transition-colors ${t.flashClassName}`,children:(0,C.jsx)(c,{children:(0,C.jsx)(`p`,{className:`text-muted-foreground`,children:e.recommendation})})}):(0,C.jsxs)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`transition-colors ${t.flashClassName}`,children:[(0,C.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2`,children:[(0,C.jsx)(l,{impactBand:e.impactBand,className:`mt-1.5`}),(0,C.jsx)(`strong`,{children:E(e)})]}),(0,C.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[w(e),T(e)==null?null:(0,C.jsx)(c,{children:T(e)})]}),(0,C.jsx)(y,{finding:e})]})}var O=(0,S.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[n,o]=(0,S.useState)(0),{findings:s,groupConfidence:l}=(0,S.useMemo)(()=>{let t=p(e,`memoryUtilization`).sort((e,t)=>i[e.impactBand]-i[t.impactBand]),n=t.filter(r);return{findings:t,groupConfidence:n.every(e=>e.confidence===n[0]?.confidence)?n[0]:void 0}},[e]),d=h(),y=d?s.findIndex(e=>e===d.finding):null,{totalPages:b,effectivePage:w,visible:T}=x(s,n,o,y);if(!s.some(r))return null;let O=s.find(e=>!e.dataUnavailable)??s[0];return(0,C.jsxs)(m,{title:`Memory Utilization`,fixFor:s,impactBand:u(s),badges:(0,C.jsx)(a,{type:`memoryUtilization`,impactBand:u(s)??`info`}),statusBadge:(0,C.jsx)(c,{children:(0,C.jsx)(f,{confidence:l?.confidence,validationRequired:l?.validationRequired,evidenceKey:`executorMetrics`})}),defaultCollapsed:t,summary:(0,C.jsx)(g,{value:E(O),context:v(s.length)}),children:[(0,C.jsx)(`div`,{className:`space-y-2 text-sm`,children:T.map(e=>(0,C.jsx)(D,{finding:e},e.id))}),(0,C.jsx)(_,{page:w,totalPages:b,onPrev:()=>o(e=>e-1),onNext:()=>o(e=>e+1)})]})});export{O as MemoryUtilization};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{$ as n,P as r,U as i,d as a,et as o,it as s,p as c,u as l,ut as u}from"./DisclosureContext-ZpE6CkHx.js";import{p as d}from"./plan-graph-vendor-BYl-AzN5.js";import{c as f,l as p}from"./useRecentFiles-XZEnLlal.js";import{P as m,k as h}from"./index-B-03mG7K.js";import{o as g,r as _,s as v,t as y}from"./Dashboard-C1hNeX49.js";import{n as b}from"./finding-anchor-Cl6_5hfV.js";import{t as x}from"./usePagedRows-Dyl6T8Ok.js";var S=e(t(),1),C=d();function w(e){let t=s(e),r=n(`pct`,t);return e.variant===`idleCores`?`${r} of available core-time idle`:e.variant===`memoryBand`?e.rule===`heapNearCapacity`?`${r} of allocated heap used: near capacity`:`${r} of allocated heap used: over-provisioned`:`~${o({value:t,unit:`mbSeconds`})} wasted`}function T(e){if(e.rule==null)return null;let t=e.recommendation??``,n=t.indexOf(`: `);return n===-1?null:` ${t.slice(0,n)}.`}function E(e){return`executorId`in e&&e.executorId!=null?`Executor ${e.executorId}`:e.variant===`idleCores`?`Idle cores`:`Memory waste`}function D({finding:e}){let t=b([e]);return e.dataUnavailable?(0,C.jsx)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-1 transition-colors ${t.flashClassName}`,children:(0,C.jsx)(c,{children:(0,C.jsx)(`p`,{className:`text-muted-foreground`,children:e.recommendation})})}):(0,C.jsxs)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`transition-colors ${t.flashClassName}`,children:[(0,C.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2`,children:[(0,C.jsx)(l,{impactBand:e.impactBand,className:`mt-1.5`}),(0,C.jsx)(`strong`,{children:E(e)})]}),(0,C.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[w(e),T(e)==null?null:(0,C.jsx)(c,{children:T(e)})]}),(0,C.jsx)(y,{finding:e})]})}var O=(0,S.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[n,o]=(0,S.useState)(0),{findings:s,groupConfidence:l}=(0,S.useMemo)(()=>{let t=f(e,`memoryUtilization`).sort((e,t)=>i[e.impactBand]-i[t.impactBand]),n=t.filter(r);return{findings:t,groupConfidence:n.every(e=>e.confidence===n[0]?.confidence)?n[0]:void 0}},[e]),d=m(),y=d?s.findIndex(e=>e===d.finding):null,{totalPages:b,effectivePage:w,visible:T}=x(s,n,o,y);if(!s.some(r))return null;let O=s.find(e=>!e.dataUnavailable)??s[0];return(0,C.jsxs)(h,{title:`Memory Utilization`,fixFor:s,impactBand:u(s),badges:(0,C.jsx)(a,{type:`memoryUtilization`,impactBand:u(s)??`info`}),statusBadge:(0,C.jsx)(c,{children:(0,C.jsx)(p,{confidence:l?.confidence,validationRequired:l?.validationRequired,evidenceKey:`executorMetrics`})}),defaultCollapsed:t,summary:(0,C.jsx)(g,{value:E(O),context:v(s.length)}),children:[(0,C.jsx)(`div`,{className:`space-y-2 text-sm`,children:T.map(e=>(0,C.jsx)(D,{finding:e},e.id))}),(0,C.jsx)(_,{page:w,totalPages:b,onPrev:()=>o(e=>e-1),onNext:()=>o(e=>e+1)})]})});export{O as MemoryUtilization};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,d as r,p as i,ut as a}from"./DisclosureContext-Ds0hcZFn.js";import{p as o}from"./plan-graph-vendor-B0sEms9Z.js";import{h as s,m as c}from"./useRecentFiles-Bb4-ukVz.js";import{C as l,O as u,S as d,l as f}from"./index-DaC8A2FS.js";import{a as p,o as m,r as h,s as g,t as _}from"./Dashboard-CC_BXrNy.js";import{i as v,r as y}from"./impact-sort-Eihua9dY.js";import{n as b,t as x}from"./finding-anchor-Dl8mIHiU.js";import{t as S}from"./usePagedRows-Bo-aSztx.js";import{n as C,t as w}from"./useSortMode-lDedD5a3.js";var T=e(t(),1),E=o();function D({finding:e}){let t=b([e]);return(0,E.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-2 ${x} transition-colors ${t.flashClassName}`,children:[e.stageIds.length>0?(0,E.jsx)(p,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,E.jsxs)(`p`,{children:[f(e.recommendation??``).measured??e.recommendation,` `,(0,E.jsx)(_,{finding:e})]})]})}var O=(0,T.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:o,setSortMode:f,orderBy:p}=w(),[_,b]=(0,T.useState)(!t),[x,O]=(0,T.useState)(0),{findings:k,pills:A}=(0,T.useMemo)(()=>{let t=c(e,`overBroadcast`).sort((e,t)=>n[e.impactBand]-n[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds))].map(e=>({id:e}))}},[e]),j=p(k,e=>[e],v),M=u(),N=M?j.findIndex(e=>e===M.finding):null,{totalPages:P,effectivePage:F,visible:I}=S(j,x,O,N);return k.length===0?null:(0,E.jsxs)(l,{title:`Oversized Broadcast Join`,fixFor:k,impactBand:a(k),open:_,onOpenChange:b,badges:(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(r,{type:`overBroadcast`,impactBand:a(k)??`info`,className:d}),y(k,k.length,_)?(0,E.jsx)(C,{mode:o,onChange:f}):null]}),statusBadge:(0,E.jsx)(i,{children:(0,E.jsx)(s,{confidence:k[0].confidence,validationRequired:k[0].validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,E.jsx)(m,{value:`${A.length} stage${A.length===1?``:`s`}`,context:g(k.length)}),children:[(0,E.jsx)(`ul`,{className:`space-y-3 text-sm`,children:I.map(e=>(0,E.jsx)(D,{finding:e},e.id))}),(0,E.jsx)(h,{page:F,totalPages:P,onPrev:()=>O(e=>e-1),onNext:()=>O(e=>e+1)})]})});export{O as OverBroadcast};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,d as r,p as i,ut as a}from"./DisclosureContext-ZpE6CkHx.js";import{p as o}from"./plan-graph-vendor-BYl-AzN5.js";import{c as s,l as c}from"./useRecentFiles-XZEnLlal.js";import{P as l,S as u,k as d,l as f}from"./index-B-03mG7K.js";import{a as p,o as m,r as h,s as g,t as _}from"./Dashboard-C1hNeX49.js";import{i as v,r as y}from"./impact-sort-CssZ6MT2.js";import{n as b,t as x}from"./finding-anchor-Cl6_5hfV.js";import{t as S}from"./usePagedRows-Dyl6T8Ok.js";import{n as C,t as w}from"./useSortMode-Dhvit8dt.js";var T=e(t(),1),E=o();function D({finding:e}){let t=b([e]);return(0,E.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-2 ${x} transition-colors ${t.flashClassName}`,children:[e.stageIds.length>0?(0,E.jsx)(p,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,E.jsxs)(`p`,{children:[f(e.recommendation??``).measured??e.recommendation,` `,(0,E.jsx)(_,{finding:e})]})]})}var O=(0,T.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:o,setSortMode:f,orderBy:p}=w(),[_,b]=(0,T.useState)(!t),[x,O]=(0,T.useState)(0),{findings:k,pills:A}=(0,T.useMemo)(()=>{let t=s(e,`overBroadcast`).sort((e,t)=>n[e.impactBand]-n[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds))].map(e=>({id:e}))}},[e]),j=p(k,e=>[e],v),M=l(),N=M?j.findIndex(e=>e===M.finding):null,{totalPages:P,effectivePage:F,visible:I}=S(j,x,O,N);return k.length===0?null:(0,E.jsxs)(d,{title:`Oversized Broadcast Join`,fixFor:k,impactBand:a(k),open:_,onOpenChange:b,badges:(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(r,{type:`overBroadcast`,impactBand:a(k)??`info`,className:u}),y(k,k.length,_)?(0,E.jsx)(C,{mode:o,onChange:f}):null]}),statusBadge:(0,E.jsx)(i,{children:(0,E.jsx)(c,{confidence:k[0].confidence,validationRequired:k[0].validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,E.jsx)(m,{value:`${A.length} stage${A.length===1?``:`s`}`,context:g(k.length)}),children:[(0,E.jsx)(`ul`,{className:`space-y-3 text-sm`,children:I.map(e=>(0,E.jsx)(D,{finding:e},e.id))}),(0,E.jsx)(h,{page:F,totalPages:P,onPrev:()=>O(e=>e-1),onNext:()=>O(e=>e+1)})]})});export{O as OverBroadcast};
@@ -1 +1 @@
1
- import{p as e}from"./plan-graph-vendor-B0sEms9Z.js";var t=e();function n({hint:e}){return(0,t.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Try `,(0,t.jsxs)(`code`,{children:[`spark.sql.shuffle.partitions = `,e.recommended]}),` (now `,e.current,` tasks; target 128 MB per partition)`]})}export{n as t};
1
+ import{p as e}from"./plan-graph-vendor-BYl-AzN5.js";var t=e();function n({hint:e}){return(0,t.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Try `,(0,t.jsxs)(`code`,{children:[`spark.sql.shuffle.partitions = `,e.recommended]}),` (now `,e.current,` tasks; target 128 MB per partition)`]})}export{n as t};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,Y as r,bt as i,d as a,it as o,ut as s}from"./DisclosureContext-Ds0hcZFn.js";import{p as c}from"./plan-graph-vendor-B0sEms9Z.js";import{i as l,m as u}from"./useRecentFiles-Bb4-ukVz.js";import{C as d,O as f}from"./index-DaC8A2FS.js";import{o as p,r as m,s as h,t as g}from"./Dashboard-CC_BXrNy.js";import{r as _}from"./impact-sort-Eihua9dY.js";import{n as v,t as y}from"./finding-anchor-Dl8mIHiU.js";import{t as b}from"./usePagedRows-Bo-aSztx.js";import{n as x,t as S}from"./useSortMode-lDedD5a3.js";import{t as C}from"./StageHeader-BMNmUy-s.js";import{a as w,i as T,n as E,r as D,t as O}from"./select-DkjFHlXR.js";import{t as k}from"./PlanExplorer-Dd9WPK4S.js";var A=e(t(),1),j=c();function M(e){if(e.rule===`lowShuffleParallelism`)return`${o(e)} tasks carrying the shuffle`;let t=o(e);return e.rule===`maxPartitionTooBig`?`Largest partition ${r(t)} (too large)`:`Largest partition ${r(t)}`}function N({entry:e,appModel:t}){let n=i(),r=v(e.partitions),a=n===`advanced`&&l(e.stageId,t);return(0,j.jsxs)(`div`,{ref:r.ref,tabIndex:r.tabIndex,"data-flashed":r.dataFlashed,className:`space-y-2 ${y} transition-colors ${r.flashClassName}`,children:[(0,j.jsx)(C,{stageId:e.stageId,appModel:t}),(0,j.jsxs)(`div`,{className:`space-y-2 pt-1`,children:[(0,j.jsx)(`ul`,{className:`list-disc space-y-1 pl-5 text-xs text-muted-foreground`,children:e.partitions.map(e=>(0,j.jsxs)(`li`,{children:[M(e),` `,(0,j.jsx)(g,{finding:e})]},e.id))}),a?(0,j.jsx)(k,{stageId:e.stageId,appModel:t}):null]})]})}var P=(0,A.memo)(function({appModel:e,catalog:t,defaultCollapsed:r=!0}){let[i,o]=(0,A.useState)(0),[c,l]=(0,A.useState)(!r),{sortMode:g,setSortMode:v,orderBy:y}=S(),C=f(),{partitionFindings:k,sorted:M,orderedEntries:P}=(0,A.useMemo)(()=>{let e=u(t,`partitionSizing`),r=new Map;for(let t of e){if(t.stageId==null)continue;let e=r.get(t.stageId);e?(e.partitions.push(t),n[t.impactBand]<n[e.impactBand]&&(e.impactBand=t.impactBand)):r.set(t.stageId,{stageId:t.stageId,partitions:[t],impactBand:t.impactBand})}let i=[...r.values()].sort((e,t)=>n[e.impactBand]-n[t.impactBand]||e.stageId-t.stageId);return{partitionFindings:e,sorted:i,orderedEntries:y(i,e=>e.partitions,e=>e.stageId)}},[t,g]),F=C?P.findIndex(e=>e.partitions.some(e=>e===C.finding)):null,{totalPages:I,effectivePage:L,visible:R}=b(P,i,o,F);if(k.length===0){let t=e.stages.size;return(0,j.jsx)(d,{title:`Partition Sizing`,open:c,onOpenChange:l,summary:(0,j.jsx)(p,{value:`No issues`,context:`no issue detected: partition sizing checked across ${t} stage${t===1?``:`s`}`}),children:(0,j.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No partition-sizing issues detected.`})})}let z=s(k),B=_(k,M.length,c);return(0,j.jsx)(d,{title:`Partition Sizing`,fixFor:k,impactBand:z,open:c,onOpenChange:l,summary:(0,j.jsx)(p,{value:`Stage ${M[0].stageId}`,context:h(k.length)}),badges:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(a,{type:`partitionSizing`,impactBand:z??`info`}),B?(0,j.jsx)(x,{mode:g,onChange:e=>{v(e),o(0)}}):null]}),children:(0,j.jsxs)(`div`,{className:`space-y-4`,children:[R.map(t=>(0,j.jsx)(N,{entry:t,appModel:e},t.stageId)),(0,j.jsx)(m,{page:L,totalPages:I,onPrev:()=>o(e=>e-1),onNext:()=>o(e=>e+1),renderJumpControl:()=>(0,j.jsxs)(O,{value:String(L*6),onValueChange:e=>o(Math.floor(Number(e)/6)),children:[(0,j.jsx)(T,{size:`sm`,"aria-label":`Jump to stage`,children:(0,j.jsx)(w,{placeholder:`Jump to stage`})}),(0,j.jsx)(E,{children:P.map((e,t)=>(0,j.jsxs)(D,{value:String(t),children:[`Stage `,e.stageId]},e.stageId))})]})})]})})});export{P as PartitionSizing};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,Y as r,bt as i,d as a,it as o,ut as s}from"./DisclosureContext-ZpE6CkHx.js";import{p as c}from"./plan-graph-vendor-BYl-AzN5.js";import{c as l,i as u}from"./useRecentFiles-XZEnLlal.js";import{P as d,k as f}from"./index-B-03mG7K.js";import{o as p,r as m,s as h,t as g}from"./Dashboard-C1hNeX49.js";import{r as _}from"./impact-sort-CssZ6MT2.js";import{n as v,t as y}from"./finding-anchor-Cl6_5hfV.js";import{t as b}from"./usePagedRows-Dyl6T8Ok.js";import{n as x,t as S}from"./useSortMode-Dhvit8dt.js";import{t as C}from"./StageHeader-DJkYkrsU.js";import{a as w,i as T,n as E,r as D,t as O}from"./select-CQjNhprm.js";import{t as k}from"./PlanExplorer-DgHCDBD_.js";var A=e(t(),1),j=c();function M(e){if(e.rule===`lowShuffleParallelism`)return`${o(e)} tasks carrying the shuffle`;let t=o(e);return e.rule===`maxPartitionTooBig`?`Largest partition ${r(t)} (too large)`:`Largest partition ${r(t)}`}function N({entry:e,appModel:t}){let n=i(),r=v(e.partitions),a=n===`advanced`&&u(e.stageId,t);return(0,j.jsxs)(`div`,{ref:r.ref,tabIndex:r.tabIndex,"data-flashed":r.dataFlashed,className:`space-y-2 ${y} transition-colors ${r.flashClassName}`,children:[(0,j.jsx)(C,{stageId:e.stageId,appModel:t}),(0,j.jsxs)(`div`,{className:`space-y-2 pt-1`,children:[(0,j.jsx)(`ul`,{className:`list-disc space-y-1 pl-5 text-xs text-muted-foreground`,children:e.partitions.map(e=>(0,j.jsxs)(`li`,{children:[M(e),` `,(0,j.jsx)(g,{finding:e})]},e.id))}),a?(0,j.jsx)(k,{stageId:e.stageId,appModel:t}):null]})]})}var P=(0,A.memo)(function({appModel:e,catalog:t,defaultCollapsed:r=!0}){let[i,o]=(0,A.useState)(0),[c,u]=(0,A.useState)(!r),{sortMode:g,setSortMode:v,orderBy:y}=S(),C=d(),{partitionFindings:k,sorted:M,orderedEntries:P}=(0,A.useMemo)(()=>{let e=l(t,`partitionSizing`),r=new Map;for(let t of e){if(t.stageId==null)continue;let e=r.get(t.stageId);e?(e.partitions.push(t),n[t.impactBand]<n[e.impactBand]&&(e.impactBand=t.impactBand)):r.set(t.stageId,{stageId:t.stageId,partitions:[t],impactBand:t.impactBand})}let i=[...r.values()].sort((e,t)=>n[e.impactBand]-n[t.impactBand]||e.stageId-t.stageId);return{partitionFindings:e,sorted:i,orderedEntries:y(i,e=>e.partitions,e=>e.stageId)}},[t,g]),F=C?P.findIndex(e=>e.partitions.some(e=>e===C.finding)):null,{totalPages:I,effectivePage:L,visible:R}=b(P,i,o,F);if(k.length===0){let t=e.stages.size;return(0,j.jsx)(f,{title:`Partition Sizing`,open:c,onOpenChange:u,summary:(0,j.jsx)(p,{value:`No issues`,context:`no issue detected: partition sizing checked across ${t} stage${t===1?``:`s`}`}),children:(0,j.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No partition-sizing issues detected.`})})}let z=s(k),B=_(k,M.length,c);return(0,j.jsx)(f,{title:`Partition Sizing`,fixFor:k,impactBand:z,open:c,onOpenChange:u,summary:(0,j.jsx)(p,{value:`Stage ${M[0].stageId}`,context:h(k.length)}),badges:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(a,{type:`partitionSizing`,impactBand:z??`info`}),B?(0,j.jsx)(x,{mode:g,onChange:e=>{v(e),o(0)}}):null]}),children:(0,j.jsxs)(`div`,{className:`space-y-4`,children:[R.map(t=>(0,j.jsx)(N,{entry:t,appModel:e},t.stageId)),(0,j.jsx)(m,{page:L,totalPages:I,onPrev:()=>o(e=>e-1),onNext:()=>o(e=>e+1),renderJumpControl:()=>(0,j.jsxs)(O,{value:String(L*6),onValueChange:e=>o(Math.floor(Number(e)/6)),children:[(0,j.jsx)(T,{size:`sm`,"aria-label":`Jump to stage`,children:(0,j.jsx)(w,{placeholder:`Jump to stage`})}),(0,j.jsx)(E,{children:P.map((e,t)=>(0,j.jsxs)(D,{value:String(t),children:[`Stage `,e.stageId]},e.stageId))})]})})]})})});export{P as PartitionSizing};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{a as n,gt as r,ht as i,i as a,r as o}from"./DisclosureContext-Ds0hcZFn.js";import{p as s}from"./plan-graph-vendor-B0sEms9Z.js";import{i as c,r as l}from"./useRecentFiles-Bb4-ukVz.js";var u=e(t(),1),d=s();function f({stageId:e,appModel:t}){let[s,f]=(0,u.useState)(!1);return c(e,t)?(0,d.jsx)(`div`,{className:`space-y-3`,children:(0,d.jsxs)(o,{open:s,onOpenChange:f,children:[(0,d.jsxs)(n,{"aria-expanded":String(s),className:`flex cursor-pointer items-center gap-2 bg-transparent text-left`,children:[(0,d.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:`Plan context`}),s?(0,d.jsx)(i,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):(0,d.jsx)(r,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`})]}),(0,d.jsx)(a,{keepMounted:!0,children:(0,d.jsx)(`div`,{className:`pt-3`,children:(0,d.jsx)(l,{stageId:e,appModel:t})})})]})}):null}export{f as t};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{a as n,gt as r,ht as i,i as a,r as o}from"./DisclosureContext-ZpE6CkHx.js";import{p as s}from"./plan-graph-vendor-BYl-AzN5.js";import{i as c,r as l}from"./useRecentFiles-XZEnLlal.js";var u=e(t(),1),d=s();function f({stageId:e,appModel:t}){let[s,f]=(0,u.useState)(!1);return c(e,t)?(0,d.jsx)(`div`,{className:`space-y-3`,children:(0,d.jsxs)(o,{open:s,onOpenChange:f,children:[(0,d.jsxs)(n,{"aria-expanded":String(s),className:`flex cursor-pointer items-center gap-2 bg-transparent text-left`,children:[(0,d.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:`Plan context`}),s?(0,d.jsx)(i,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):(0,d.jsx)(r,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`})]}),(0,d.jsx)(a,{keepMounted:!0,children:(0,d.jsx)(`div`,{className:`pt-3`,children:(0,d.jsx)(l,{stageId:e,appModel:t})})})]})}):null}export{f as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{C as n,S as r,T as i,_ as a,b as o,g as s,h as c,m as l,v as u,w as d,x as f,y as p}from"./react-vendor-DEdfrRTJ.js";import{Q as m,S as h,Tt as g,Y as _,Z as v,_t as y,d as b,l as x,lt as S,o as C,s as w,u as T,ut as E,vt as D}from"./DisclosureContext-ZpE6CkHx.js";import{a as O,c as ee,d as k,f as A,i as j,l as M,n as N,o as P,p as F,r as I,s as L,t as R,u as z}from"./plan-graph-vendor-BYl-AzN5.js";import{d as B,i as te,n as ne,s as V,t as re}from"./useRecentFiles-XZEnLlal.js";import{C as ie,D as ae,E as oe,Mt as se,O as ce,Tt as le,Y as ue,_t as de,bt as fe,ft as pe,gt as H,ht as me,jt as U,mt as W,pt as G,s as he,vt as ge,w as _e,xt as ve,yt as ye}from"./index-B-03mG7K.js";import{t as be}from"./impact-sort-CssZ6MT2.js";var xe={name:`arrow-left-right`,size:24,node:[[`path`,{d:`M8 3 4 7l4 4`,key:`9rb6wj`}],[`path`,{d:`M4 7h16`,key:`6tx8e3`}],[`path`,{d:`m16 21 4-4-4-4`,key:`siv7j2`}],[`path`,{d:`M20 17H4`,key:`h6l3hr`}]]};xe.node;var Se=y(xe),Ce={name:`flag`,size:24,node:[[`path`,{d:`M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528`,key:`1jaruq`}]]};Ce.node;var we=y(Ce),Te={name:`map`,size:24,node:[[`path`,{d:`M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z`,key:`169xi5`}],[`path`,{d:`M15 5.764v15`,key:`1pn4in`}],[`path`,{d:`M9 3.236v15`,key:`1uimfh`}]]};Te.node;var Ee=y(Te),De={name:`maximize-2`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]};De.node;var Oe=y(De),ke={name:`settings`,size:24,node:[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]};ke.node;var Ae=y(ke),je={name:`timer`,size:24,node:[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`,key:`14vaq8`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`,key:`17fdiu`}],[`circle`,{cx:`12`,cy:`14`,r:`8`,key:`1e1u0o`}]]};je.node;var Me=y(je),Ne={name:`zoom-in`,size:24,node:[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`11`,x2:`11`,y1:`8`,y2:`14`,key:`1vmskp`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]};Ne.node;var Pe=y(Ne),Fe={name:`zoom-out`,size:24,node:[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]};Fe.node;var Ie=y(Fe),K=e(t(),1);function Le({id:e,sourceNodeId:t,planNode:n,category:r,segmentIndex:i,splitRole:a,durationShare:o,exclusiveDurationShare:s,findings:c}){return{id:e,sourceNodeId:t,label:n.name,category:r,operatorDetail:H(n.name,n.detail??``),primaryMetric:me(n.metrics),segmentIndex:i,splitRole:a,durationShare:o??null,exclusiveDurationShare:s??null,findings:c,metrics:(n.metrics??[]).map(e=>({name:e.name,value:W(e)})),detailText:n.detail&&n.detail!==n.name?n.detail:``}}function Re(e,t){let{scope:n,stageId:r,appModel:i,findings:a=[],durationMode:o=`exclusive`}=t;if(!e)return{nodes:[],edges:[],segmentIndex:null,segmentCount:0,scope:`full`,segmentStageIds:new Map};let s=i.stages.get(r)?.sqlExecutionId??null,c=s==null?null:i.sql.get(s),{segments:l,segOf:u,segmentTopology:d}=ge(e),f=l.filter(Boolean).length,p=c&&s!=null?pe(e,i,c,s,o):null,m=o===`exclusive`?p:c&&s!=null?pe(e,i,c,s,`exclusive`):null,h=new Map,g=c&&s!=null?de(s,i.stages):[];if(g.length){let e=new Map;for(let t of g){let n=i.stages.get(t);n&&e.set(t,{submittedAt:n.submittedAt,completedAt:n.completedAt})}for(let[t,n]of ye(l,e,g,d))h.set(t,n)}let _=new Map;if(s!=null){for(let e of a)if(`executionId`in e&&e.executionId===s)for(let t of e.planNodeIds??[]){let n=_.get(t);n?n.push(e):_.set(t,[e])}}let v=[],y=[],b=new Map;fe(e,(e,t)=>{let n=e.id,r=G(e.name),a=u.get(e),o=t?t.id:null,s=e.exchangeRole===`write`&&t?t.id:n,c=Le({id:n,sourceNodeId:s,planNode:e,category:r,segmentIndex:a,splitRole:e.exchangeRole??null,durationShare:p?.get(e),exclusiveDurationShare:m?.get(e),findings:_.get(n)??[]});if(v.push(c),e.exchangeRole){let t=b.get(s)??{};t[e.exchangeRole]=c,b.set(s,t)}if(o){let t={id:`${o}->${n}`,source:o,target:n};if(e.exchangeRole===`write`){let e=h.get(a),n=e==null?void 0:i.stages.get(e),r=n?.shuffleWriteBytes||n?.shuffleReadBytes;if(r){t.shuffleBytes=r;let e=b.get(s)??{};e.shuffleBytes=r,b.set(s,e)}}y.push(t)}},{dedupe:!0});for(let{read:e,write:t,shuffleBytes:n}of b.values())e&&t&&(e.pairedNodeId=t.id,t.pairedNodeId=e.id),n!=null&&(e&&(e.exchangeShuffleBytes=n),t&&(t.exchangeShuffleBytes=n));if(n===`full`)return{nodes:v,edges:y,segmentIndex:null,segmentCount:f,scope:`full`,segmentStageIds:h};let x=null;for(let[e,t]of h)if(t===r){x=e;break}if(x===null)return{nodes:v,edges:y,segmentIndex:null,segmentCount:f,scope:`full`,segmentStageIds:h};let S=new Set;return{nodes:v.filter(e=>e.segmentIndex===x&&(S.add(e.id),!0)),edges:y.filter(e=>S.has(e.source)&&S.has(e.target)),segmentIndex:x,segmentCount:f,scope:`segment`,segmentStageIds:h}}var ze=24,Be=32;function Ve(e,t,n={}){let r=new R.graphlib.Graph({compound:!!n.groupOf});r.setGraph({rankdir:`RL`,nodesep:128,ranksep:60,ranker:`tight-tree`}),r.setDefaultEdgeLabel(()=>({}));let i=new Set;if(n.groupOf){for(let t of e){let e=n.groupOf(t);e&&i.add(e)}for(let e of i)r.setNode(e,{})}for(let t of e){r.setNode(t.id,{width:220,height:90});let e=n.groupOf?.(t);e&&r.setParent(t.id,e)}for(let e of t)r.setEdge(e.source,e.target);return R.layout(r),e.map(e=>{let t=r.node(e.id);return{...e,position:{x:t.x-110,y:t.y-45}}})}function He(e,t,n={}){let r=n.paddingX??ze,i=n.paddingY??ze,a=n.headerHeight??Be,o=new Map;for(let n of e){let e=t(n);if(!e)continue;let r=n.position.x,i=n.position.y,a=r+220,s=i+90,c=o.get(e);c?(c.minX=Math.min(c.minX,r),c.minY=Math.min(c.minY,i),c.maxX=Math.max(c.maxX,a),c.maxY=Math.max(c.maxY,s)):o.set(e,{minX:r,minY:i,maxX:a,maxY:s})}return[...o.entries()].map(([e,t])=>({id:e,position:{x:t.minX-r,y:t.minY-i-a},width:t.maxX-t.minX+r*2,height:t.maxY-t.minY+i*2+a}))}function Ue(e,t,n={}){let r=new Set,i=[];for(let a of t){let t=t=>{let n=e(t);return n&&!r.has(n)?n:null};for(let e of He(a,t,n))r.add(e.id),i.push(e)}return i}var q=F();function We({delay:e=0,...t}){return(0,q.jsx)(p,{"data-slot":`tooltip-provider`,delay:e,...t})}function Ge({...e}){return(0,q.jsx)(i,{"data-slot":`tooltip`,...e})}function Ke({...e}){return(0,q.jsx)(d,{"data-slot":`tooltip-trigger`,...e})}function qe({className:e,side:t=`top`,sideOffset:i=4,align:a=`center`,alignOffset:s=0,children:c,...l}){return(0,q.jsx)(n,{children:(0,q.jsx)(r,{align:a,alignOffset:s,side:t,sideOffset:i,className:`isolate z-50`,children:(0,q.jsxs)(f,{"data-slot":`tooltip-content`,className:g(`z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 motion-reduce:animate-none`,e),...l,children:[c,(0,q.jsx)(o,{className:`z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5`})]})})})}function Je(e){return e==null?null:e>=40?`critical`:e>=15?`warning`:`info`}var J={scan:`⇩`,exchange:`⇄`,join:`⋈`,aggregate:`Σ`,sort:`↕`,filter:`∇`,aqe:`⚙`,boilerplate:`·`,transform:`→`};function Ye(e){return e.find(e=>e.impactBand===`critical`)??e.find(e=>e.impactBand===`warning`)??e[0]}function Xe({data:e}){let{label:t,operatorDetail:n,primaryMetric:r,category:i,splitRole:a,durationSharePct:o,findings:s}=e,c=J[i]??J.transform,l=Je(o);return(0,q.jsxs)(`div`,{className:`relative flex flex-col overflow-visible rounded-md border border-border bg-card px-3 py-2 text-xs shadow-sm`,style:{width:220,height:90},"data-category":i,children:[(0,q.jsx)(O,{type:`target`,position:k.Right,className:`opacity-0!`}),(0,q.jsx)(O,{type:`source`,position:k.Left,className:`opacity-0!`}),s&&s.length>0?(()=>{let e=Ye(s);return(0,q.jsxs)(Ge,{children:[(0,q.jsxs)(Ke,{"data-testid":`node-finding-badge`,className:g(`absolute -right-1 -top-1 flex items-center gap-1 rounded-full bg-card px-1.5 py-0.5 text-[10px] font-medium leading-none shadow-sm ring-1 ring-border`,x[e.impactBand]),children:[(0,q.jsx)(T,{impactBand:e.impactBand}),S(e.type),s.length>1?(0,q.jsx)(`span`,{children:s.length}):null]}),(0,q.jsx)(qe,{className:`max-w-xs`,children:(0,q.jsx)(`ul`,{className:`flex flex-col gap-1 text-left`,children:s.map((e,t)=>(0,q.jsxs)(`li`,{className:`flex items-center gap-1.5`,children:[(0,q.jsx)(T,{impactBand:e.impactBand}),(0,q.jsx)(`span`,{children:he(e)})]},e.id??`${e.type}-${t}`))})})]})})():null,a===`read`?(0,q.jsx)(`p`,{className:`truncate text-xs text-muted-foreground`,children:`paired: see write half`}):null,o!=null&&l?(0,q.jsxs)(`div`,{className:`mb-1 flex shrink-0 items-center gap-1.5`,title:`Share of the plan's total stage wall time`,children:[(0,q.jsxs)(`span`,{className:g(`shrink-0 text-[10px] font-medium tabular-nums`,x[l]),children:[o,`%`]}),(0,q.jsx)(`div`,{className:`h-1.5 flex-1 overflow-hidden rounded-full bg-muted`,children:(0,q.jsx)(`div`,{"data-testid":`duration-heat-bar-fill`,className:g(`h-full rounded-full`,w[l]),style:{width:`${o>0?Math.max(o,4):0}%`}})}),(0,q.jsxs)(`span`,{className:`sr-only`,children:[`Duration share `,o,`%, `,l===`critical`?`high`:l===`warning`?`medium`:`low`]})]}):null,(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,q.jsx)(`span`,{"aria-hidden":`true`,className:`shrink-0`,children:c}),(0,q.jsx)(`span`,{className:`min-w-0 truncate font-medium`,title:t,children:t})]}),n?(0,q.jsx)(`p`,{className:`truncate text-muted-foreground`,title:n,children:n}):null,r?(0,q.jsx)(`p`,{className:`truncate text-muted-foreground`,title:r,children:r}):null]})}var Ze={read:`Read half. Consumes the shuffle written by its paired write half.`,write:`Write half. Produces the shuffle its paired read half consumes.`};function Qe({node:e,onClose:t,onJumpToPaired:n}){let r=J[e.category]??J.transform,i=e.findings??[],a=e.metrics??[],o=e.category.charAt(0).toUpperCase()+e.category.slice(1);return(0,q.jsxs)(`div`,{"data-testid":`plan-node-detail`,role:`dialog`,"aria-label":`Plan node detail: ${e.label}`,className:`flex h-full w-80 shrink-0 flex-col gap-3 overflow-y-auto border-l border-border bg-card p-3 text-xs`,children:[(0,q.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,q.jsx)(`span`,{"aria-hidden":`true`,className:`shrink-0`,children:r}),(0,q.jsx)(`span`,{className:`break-words font-medium`,children:e.label})]}),(0,q.jsx)(U,{type:`button`,variant:`ghost`,size:`icon`,className:`size-6 shrink-0`,"aria-label":`Close node detail`,onClick:t,children:(0,q.jsx)(ve,{className:`size-4`})})]}),(0,q.jsxs)(`p`,{className:`text-muted-foreground`,children:[o,` · Segment `,e.segmentIndex+1,e.durationSharePct==null?null:(0,q.jsxs)(q.Fragment,{children:[` · `,(0,q.jsxs)(`span`,{className:`text-foreground`,children:[e.durationSharePct,`%`]}),` of plan stage time`]})]}),e.splitRole?(0,q.jsxs)(Y,{title:`Exchange`,children:[(0,q.jsx)(`p`,{className:`text-muted-foreground`,children:Ze[e.splitRole]}),e.exchangeShuffleBytes==null?e.label.startsWith(`Broadcast`)?(0,q.jsx)(`p`,{className:`mt-1 text-muted-foreground`,children:`Broadcast, no shuffle`}):null:(0,q.jsxs)(`p`,{className:`mt-1 text-muted-foreground`,children:[`Shuffle written`,` `,(0,q.jsx)(`span`,{className:`font-medium tabular-nums text-foreground`,children:_(e.exchangeShuffleBytes)})]}),e.pairedNodeId&&n?(0,q.jsxs)(U,{type:`button`,variant:`outline`,size:`sm`,className:`mt-2 h-7 w-full justify-start gap-1.5`,onClick:()=>n(e.pairedNodeId),children:[(0,q.jsx)(Se,{className:`size-3.5`,"aria-hidden":`true`}),`Jump to `,e.splitRole===`read`?`write`:`read`,` half`]}):null]}):null,i.length>0?(0,q.jsx)(Y,{title:`Findings`,children:(0,q.jsx)(`ul`,{className:`flex flex-col gap-1.5`,children:i.map((e,t)=>(0,q.jsxs)(`li`,{className:`flex items-start gap-1.5`,children:[(0,q.jsx)(b,{type:e.type,impactBand:e.impactBand,docAnchor:e.docAnchor,className:`shrink-0`}),(0,q.jsx)(`span`,{className:`break-words`,children:he(e)})]},e.id??`${e.type}-${t}`))})}):null,a.length>0?(0,q.jsx)(Y,{title:`Metrics`,children:(0,q.jsx)(`dl`,{className:`grid grid-cols-[1fr_auto] gap-x-3 gap-y-1`,children:a.map((e,t)=>(0,q.jsxs)(`div`,{className:`contents`,children:[(0,q.jsx)(`dt`,{className:`min-w-0 break-words text-muted-foreground`,children:e.name}),(0,q.jsx)(`dd`,{className:`text-right font-medium tabular-nums`,children:e.value})]},`${e.name}-${t}`))})}):null,e.detailText?(0,q.jsx)(Y,{title:`Plan detail`,children:(0,q.jsx)(`pre`,{"data-testid":`plan-node-detail-text`,className:`max-h-48 overflow-auto whitespace-pre-wrap break-words rounded bg-muted p-2 font-mono text-[11px] leading-snug`,children:e.detailText})}):null]})}function Y({title:e,children:t}){return(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`p`,{className:`mb-1 font-medium text-muted-foreground`,children:e}),t]})}var $e=[{category:`scan`,label:`Scan`},{category:`filter`,label:`Filter`},{category:`join`,label:`Join`},{category:`aggregate`,label:`Aggregate`},{category:`sort`,label:`Sort`},{category:`exchange`,label:`Exchange`},{category:`transform`,label:`Transform`}];function et(){return(0,q.jsxs)(`div`,{"data-testid":`plan-graph-legend`,role:`region`,"aria-label":`Plan graph legend`,className:`flex max-w-md flex-col gap-2 rounded-md border border-border bg-card p-3 text-xs shadow-md`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`p`,{className:`mb-1 font-medium text-muted-foreground`,children:`Operators`}),(0,q.jsx)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1`,children:$e.map(({category:e,label:t})=>(0,q.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(`span`,{"aria-hidden":`true`,children:J[e]}),t]},e))})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`p`,{className:`mb-1 font-medium text-muted-foreground`,children:`Duration share`}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(`span`,{className:g(`h-1.5 w-6 rounded-full`,w.info)}),` low`]}),(0,q.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(`span`,{className:g(`h-1.5 w-6 rounded-full`,w.warning)}),` medium`]}),(0,q.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(`span`,{className:g(`h-1.5 w-6 rounded-full`,w.critical)}),` high`]})]})]}),(0,q.jsxs)(`p`,{className:`text-muted-foreground`,children:[(0,q.jsx)(`span`,{className:`text-foreground`,children:`Edge thickness`}),` = shuffle bytes moved across an exchange.`]}),(0,q.jsxs)(`p`,{className:`text-muted-foreground`,children:[`A `,(0,q.jsx)(`span`,{className:`text-foreground`,children:`segment`}),` box groups one Exchange-bounded stage of the plan; a`,` `,(0,q.jsx)(`span`,{className:`text-foreground`,children:`stage`}),` box (full-plan view) wraps every segment of one Spark stage.`]})]})}function tt({...e}){return(0,q.jsx)(u,{"data-slot":`popover`,...e})}function nt({...e}){return(0,q.jsx)(a,{"data-slot":`popover-trigger`,...e})}function rt({align:e=`center`,alignOffset:t=0,side:n=`bottom`,sideOffset:r=8,className:i,...a}){return(0,q.jsx)(s,{children:(0,q.jsx)(c,{className:`isolate z-50 outline-none`,align:e,alignOffset:t,side:n,sideOffset:r,children:(0,q.jsx)(l,{"data-slot":`popover-content`,className:g(`z-50 w-72 origin-(--transform-origin) rounded-lg bg-popover p-3 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95 motion-reduce:animate-none`,i),...a})})})}function it({ariaLabel:e,name:t,options:n,value:r,onChange:i,trailingContent:a}){return(0,q.jsx)(We,{children:(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1.5`,role:`radiogroup`,"aria-label":e,children:[n.map(e=>(0,q.jsxs)(Ge,{children:[(0,q.jsxs)(Ke,{render:(0,q.jsx)(`label`,{className:`tap-target-comfortable flex min-h-8 items-center gap-1.5 px-1 text-sm`}),children:[(0,q.jsx)(`input`,{type:`radio`,name:t,value:e.value,checked:r===e.value,onChange:()=>i(e.value)}),e.label]}),(0,q.jsx)(qe,{children:e.description})]},e.value)),a]})})}var at=[{value:`io`,label:`I/O only`,description:`Show only scan and exchange nodes, where the plan reads or shuffles/broadcasts data.`},{value:`basic`,label:`Basic`,description:`Add join, aggregate, sort, and filter nodes to I/O; hide pass-through and boilerplate operators like Project or WholeStageCodegen.`},{value:`advanced`,label:`Advanced`,description:`Show every operator, including the pass-through and boilerplate nodes the other two modes hide.`}];function ot({mode:e,onChange:t,hiddenCount:n}){return(0,q.jsx)(it,{ariaLabel:`Node filter`,name:`plan-graph-filter`,options:at,value:e,onChange:t,trailingContent:n>0?(0,q.jsx)(C,{label:`${n} nodes hidden`,impactBand:`info`}):null})}var st=[{value:`exclusive`,label:`Node only`,description:`Each node's share reflects time spent in that operator alone, excluding its descendants.`},{value:`inclusive`,label:`Node + descendants`,description:`Each node's share adds in every descendant operator's time, so an ancestor's bar reflects its whole subtree.`}];function ct({mode:e,onChange:t}){return(0,q.jsx)(it,{ariaLabel:`Duration heat bar scope`,name:`plan-graph-duration-mode`,options:st,value:e,onChange:t})}function lt({filterMode:e,onFilterModeChange:t,hiddenCount:n,durationMode:r,onDurationModeChange:i,iconOnly:a=!1}){return(0,q.jsxs)(tt,{children:[(0,q.jsxs)(nt,{"aria-label":a?`Settings`:void 0,title:a?`Settings`:void 0,className:g(se({variant:`ghost`,size:a?`icon`:`sm`}),`tap-target-comfortable`,a?void 0:`gap-1.5`),children:[(0,q.jsx)(Ae,{"aria-hidden":`true`}),a?null:`Settings`]}),(0,q.jsxs)(rt,{align:a?`start`:`end`,side:a?`right`:`bottom`,"aria-label":`Plan graph settings`,className:`space-y-3`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h2`,{className:`mb-1.5 text-xs font-medium text-muted-foreground`,children:`Node filter`}),(0,q.jsx)(ot,{mode:e,onChange:t,hiddenCount:n})]}),(0,q.jsx)(`div`,{"aria-hidden":`true`,className:`h-px bg-border`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h2`,{className:`mb-1.5 text-xs font-medium text-muted-foreground`,children:`Duration attribution`}),(0,q.jsx)(ct,{mode:r,onChange:i})]})]})]})}var X=e=>e.data;function ut({planNodes:e,problemNodes:t,filterMode:n,onFilterModeChange:r,hiddenCount:i,durationMode:a,onDurationModeChange:o,legendOpen:s,onToggleLegend:c,miniMapOpen:l,onToggleMiniMap:u}){let{zoomIn:d,zoomOut:f,fitView:p,setCenter:m}=z(),[h,g]=(0,K.useState)(null),[_,v]=(0,K.useState)(null),y=[...e].filter(e=>X(e).durationSharePct!=null).sort((e,t)=>(X(t).durationSharePct??0)-(X(e).durationSharePct??0)),b=e=>{e&&m(e.position.x,e.position.y,{zoom:1,duration:300})},x=(e,t,n)=>{if(e.length===0)return;let r=e[((t?e.findIndex(e=>e.id===t):-1)+1)%e.length];b(r),n(r.id)};return(0,q.jsxs)(`div`,{className:`flex w-12 shrink-0 flex-col items-center gap-1 border-r border-border bg-card/60 py-2`,children:[(0,q.jsxs)(dt,{children:[(0,q.jsx)(Z,{label:`Zoom in`,onClick:()=>d({duration:200}),children:(0,q.jsx)(Pe,{"aria-hidden":`true`})}),(0,q.jsx)(Z,{label:`Zoom out`,onClick:()=>f({duration:200}),children:(0,q.jsx)(Ie,{"aria-hidden":`true`})}),(0,q.jsx)(Z,{label:`Fit to view`,onClick:()=>p({duration:200}),children:(0,q.jsx)(Oe,{"aria-hidden":`true`})})]}),(0,q.jsx)(ft,{}),(0,q.jsxs)(dt,{children:[(0,q.jsx)(Z,{label:`Next worst duration`,disabled:y.length===0,onClick:()=>x(y,h,g),children:(0,q.jsx)(Me,{"aria-hidden":`true`})}),t.length>0?(0,q.jsx)(Z,{label:`Next problem`,onClick:()=>x(t,_,v),children:(0,q.jsx)(we,{"aria-hidden":`true`})}):null]}),(0,q.jsx)(ft,{}),(0,q.jsxs)(dt,{children:[(0,q.jsx)(lt,{iconOnly:!0,filterMode:n,onFilterModeChange:r,hiddenCount:i,durationMode:a,onDurationModeChange:o}),(0,q.jsx)(Z,{label:s?`Hide legend`:`Legend`,pressed:s,onClick:c,children:(0,q.jsx)(le,{"aria-hidden":`true`})}),(0,q.jsx)(Z,{label:l?`Hide minimap`:`Show minimap`,pressed:l,onClick:u,children:(0,q.jsx)(Ee,{"aria-hidden":`true`})})]})]})}function dt({children:e}){return(0,q.jsx)(`div`,{className:`flex flex-col items-center gap-1`,children:e})}function ft(){return(0,q.jsx)(`div`,{"aria-hidden":`true`,className:`my-0.5 h-px w-6 bg-border`})}function Z({label:e,onClick:t,disabled:n,pressed:r,children:i}){return(0,q.jsx)(U,{type:`button`,variant:`ghost`,size:`icon`,className:g(`tap-target-comfortable`,r&&`bg-primary/15 text-primary hover:bg-primary/20 hover:text-primary`),"aria-label":e,title:e,"aria-pressed":r,disabled:n,onClick:t,children:i})}function pt(e){if(e.type!==`planNode`)return`var(--muted)`;let t=e.data.findings??[],n=E(t);return n?B[n]:`var(--plan-aggregate)`}function mt({finding:e,className:t}){let n=m(e);return(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,q.jsx)(b,{type:e.type,impactBand:e.impactBand,docAnchor:e.docAnchor,className:t}),n?(0,q.jsx)(`span`,{className:`font-mono text-[10px] leading-none whitespace-nowrap text-muted-foreground`,children:n}):null]})}function ht({data:e}){let{width:t,height:n,stageId:r,durationLabel:i,findings:a}=e;return(0,q.jsx)(`div`,{className:`overflow-hidden rounded-lg border border-dashed border-border/70 bg-muted/10 nopan nodrag`,style:{width:t,height:n,pointerEvents:`all`},children:(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1 px-2 py-1 text-xs text-muted-foreground`,children:[(0,q.jsx)(`span`,{title:r==null?`This plan segment couldn't be matched to a specific Spark stage`:void 0,children:r==null?`Stage —`:`Stage ${r}`}),(0,q.jsx)(C,{label:i??`—`,impactBand:`info`,title:`Approximate share of this stage's wall time`}),a.length>0?(0,q.jsx)(`div`,{className:`ml-auto flex min-w-0 flex-wrap items-center justify-end gap-1`,children:a.map((e,t)=>(0,q.jsx)(mt,{finding:e,className:`h-4 gap-1 px-1.5 text-xs`},e.id??`${e.type}-${t}`))}):null]})})}function gt({data:e}){let{width:t,height:n,stageId:r,findings:i,showOwnFindings:a=!0,onSelect:o}=e;return(0,q.jsxs)(`div`,{className:`relative rounded-xl border border-primary/25 bg-primary/5 nopan nodrag`,style:{width:t,height:n,pointerEvents:`all`},children:[(0,q.jsx)(`button`,{type:`button`,"aria-label":`Focus stage ${r}`,onClick:o,style:{pointerEvents:`auto`},className:`absolute inset-0 size-full cursor-pointer rounded-xl transition-colors hover:border-primary/50 hover:bg-primary/10`}),a&&i.length>0?(0,q.jsx)(`div`,{className:`absolute left-2 right-2 top-1 flex flex-wrap gap-1`,children:i.map((e,t)=>(0,q.jsx)(mt,{finding:e,className:`h-4 gap-1 px-1.5 text-xs`},e.id??`${e.type}-${t}`))}):null,(0,q.jsxs)(`span`,{className:`absolute right-2 bottom-1 text-xs font-medium text-primary`,children:[`Stage `,r]})]})}var _t=1.5,vt=.55;function yt(e,t){return!(e>0)||!(t>0)?0:Math.min(1,Math.log(e+1)/Math.log(t+1))}function bt(e,t){return _t+7.5*yt(e,t)}function xt(e,t){return vt+.44999999999999996*yt(e,t)}function St({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:a,markerEnd:o,data:s}){let[c,l,u]=A({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:a}),{shuffleBytes:d=0,maxShuffleBytes:f=0}=s??{},p=bt(d,f),m=xt(d,f),h=d>0&&d<1e3?`<1 KB`:_(d);return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(I,{path:c,markerEnd:o,style:{stroke:`var(--text-muted)`,strokeWidth:p,strokeOpacity:m}}),(0,q.jsx)(j,{children:(0,q.jsxs)(Ge,{children:[(0,q.jsx)(Ke,{"data-testid":`exchange-edge-label`,className:`nodrag nopan pointer-events-auto absolute cursor-help rounded bg-card/90 px-1 py-0.5 font-mono text-[10px] leading-none text-muted-foreground ring-1 ring-border`,style:{transform:`translate(-50%, -50%) translate(${l}px, ${u}px)`},children:h}),(0,q.jsx)(qe,{className:`max-w-xs`,children:(0,q.jsxs)(`p`,{children:[h,` of shuffle written across this exchange. Edge thickness scales with the volume moved.`]})})]})})]})}var Ct={planNode:Xe,segmentGroup:ht,stageGroup:gt},wt={exchange:St},Tt=1,Et=2,Dt=3,Ot=e=>e.data,Q={padding:.06,maxZoom:1.75};function kt({resizeTick:e,fitSignal:t,centerRequest:n}){let{fitView:r,setCenter:i,getNode:a}=z();return(0,K.useEffect)(()=>{if(!n||n.token===0||!n.nodeId)return;let e=a(n.nodeId);e?i(e.position.x,e.position.y,{zoom:1,duration:300}):r({nodes:[{id:n.nodeId}],duration:300,maxZoom:1})},[n,i,a,r]),(0,K.useEffect)(()=>{let e=()=>r({duration:200,...Q});return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[r]),(0,K.useEffect)(()=>{e!==0&&r({duration:200,...Q})},[e,r]),(0,K.useEffect)(()=>{t!==0&&r({duration:300,...Q})},[t,r]),null}function At(){let e=(0,K.useRef)(null),[t,n]=(0,K.useState)(0);return(0,K.useEffect)(()=>{let t=e.current;if(!t)return;let r=!0,i=new ResizeObserver(()=>{if(r){r=!1;return}n(e=>e+1)});return i.observe(t),()=>i.disconnect()},[]),{ref:e,tick:t}}function jt(e,t){return e.filter(e=>e.stageId===t||V(e)?.includes(t))}function Mt({model:e,showMiniMap:t,findings:n=[],stageId:r,segmentStageIds:i,visibleNodeIds:a,visibleEdges:o,onSelectStage:s,selectedNodeId:c=null,onSelectNode:l,onJumpToPaired:u,centerRequest:d,fitSignal:f=0,filterMode:p=`basic`,onFilterModeChange:m=()=>{},hiddenCount:h=0,durationMode:g=`exclusive`,onDurationModeChange:_=()=>{}}){let{flowNodes:y,flowEdges:b}=(0,K.useMemo)(()=>{let t=e.nodes.reduce((e,t)=>e+(t.exclusiveDurationShare??t.durationShare??0),0),c=e=>`segment-${e.segmentIndex}`,l=e.scope===`full`,u=e=>{let t=i?.get(e.segmentIndex);return t==null?null:`stage-${t}`},d=a?Ve(e.nodes.filter(e=>a.has(e.id)),o??e.edges,{groupOf:c}):Ve(e.nodes,e.edges,{groupOf:c}),f=new Set(d.map(c)),p=l?new Set(d.map(u).filter(e=>e!=null)):null,m=e.nodes.some(e=>!f.has(c(e)))||p!=null&&e.nodes.some(e=>{let t=u(e);return t!=null&&!p.has(t)})?Ve(e.nodes,e.edges,{groupOf:c}):d,h=d.map(e=>{let n=e.durationShare!=null&&t>0?Math.round(e.durationShare/t*100):null,r=e.splitRole===`read`?`${e.label}, paired: see write half`:[e.label,e.operatorDetail,e.primaryMetric,n==null?null:`${n}% of the plan's total stage duration`].filter(Boolean).join(`, `);return{id:e.id,type:`planNode`,position:e.position,draggable:!1,zIndex:Dt,measured:{width:220,height:90},ariaLabel:r,ariaRole:`button`,data:{...e,durationSharePct:n}}}),g=Ue(c,[d,m]).map(t=>{let r=Number(t.id.replace(`segment-`,``)),a=e.nodes.filter(e=>c(e)===t.id),o=a.reduce((e,t)=>e+(t.exclusiveDurationShare??t.durationShare??0),0),s=a.some(e=>e.durationShare!=null),l=i?.get(r)??null,u=l==null?[]:jt(n,l);return{id:t.id,type:`segmentGroup`,position:t.position,draggable:!1,selectable:!1,focusable:!1,zIndex:Et,style:{width:t.width,height:t.height},measured:{width:t.width,height:t.height},data:{width:t.width,height:t.height,stageId:l,durationLabel:s?v(o):null,findings:u}}}),_=new Set(g.map(e=>e.data.stageId).filter(e=>e!=null)),y=l?(()=>{let e={paddingX:32,paddingY:64,headerHeight:0},t=Ue(u,[d,m],e),i=`stage-${r}`;if(jt(n,r).length>0&&!t.some(e=>e.id===i)){let[n]=Ue(()=>i,[d,m],e);n&&t.push(n)}return t.map(e=>{let t=Number(e.id.replace(`stage-`,``));return{id:e.id,type:`stageGroup`,position:e.position,draggable:!1,selectable:!1,focusable:!1,zIndex:Tt,style:{width:e.width,height:e.height},measured:{width:e.width,height:e.height},data:{width:e.width,height:e.height,stageId:t,findings:jt(n,t),showOwnFindings:!_.has(t),onSelect:()=>s?.(t)}}})})():[],b=o??e.edges,x=b.reduce((e,t)=>Math.max(e,t.shuffleBytes??0),0),S=b.map(e=>e.shuffleBytes?{id:e.id,source:e.source,target:e.target,type:`exchange`,data:{shuffleBytes:e.shuffleBytes,maxShuffleBytes:x}}:{id:e.id,source:e.source,target:e.target});return{flowNodes:[...y,...g,...h],flowEdges:S}},[e,n,r,i,a,o,s]),{ref:x,tick:S}=At(),[C,w]=(0,K.useState)(!0),[T,E]=(0,K.useState)(!0),D=c?y.find(e=>e.id===c&&e.type===`planNode`):void 0,O=y.filter(e=>e.type===`planNode`),k=y.filter(e=>e.type===`stageGroup`&&(e.data.findings?.length??0)>0).sort(be(e=>e.data.findings??[])),A=a!=null&&a.size===0&&e.nodes.length>0;return(0,q.jsx)(ee,{children:(0,q.jsx)(We,{children:(0,q.jsxs)(`div`,{ref:x,className:`flex min-h-0 flex-1`,children:[(0,q.jsx)(ut,{planNodes:O,problemNodes:k,filterMode:p,onFilterModeChange:m,hiddenCount:h,durationMode:g,onDurationModeChange:_,legendOpen:C,onToggleLegend:()=>w(e=>!e),miniMapOpen:t&&T,onToggleMiniMap:()=>E(e=>!e)}),(0,q.jsx)(`div`,{className:`relative min-w-0 flex-1`,onKeyDown:e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target.closest(`.react-flow__node-planNode`)?.getAttribute(`data-id`);t&&(e.preventDefault(),l?.(t))},children:(0,q.jsxs)(M,{nodes:y,edges:b,nodeTypes:Ct,edgeTypes:wt,"aria-label":`Plan graph. Operators and the data flowing between them. Tab to move between operators, Enter to open an operator's details.`,fitView:!0,fitViewOptions:Q,minZoom:.05,edgesFocusable:!1,onNodeClick:(e,t)=>{t.type===`planNode`&&l?.(t.id)},onPaneClick:()=>l?.(null),children:[(0,q.jsx)(N,{}),(0,q.jsx)(kt,{resizeTick:S,fitSignal:f,centerRequest:d}),A?(0,q.jsx)(L,{position:`top-center`,children:(0,q.jsxs)(`p`,{role:`status`,className:`rounded-md border border-border bg-card px-3 py-2 text-xs text-muted-foreground shadow-sm`,children:[`All `,e.nodes.length,` operators are hidden by the node filter. Change it in Settings to show them.`]})}):null,C?(0,q.jsx)(L,{position:`bottom-left`,children:(0,q.jsx)(et,{})}):null,t&&T?(0,q.jsx)(P,{nodeColor:pt,pannable:!0,zoomable:!0,ariaLabel:`Plan overview. Drag to pan and scroll to zoom the graph.`}):null]})}),D?(0,q.jsx)(Qe,{node:Ot(D),onClose:()=>l?.(null),onJumpToPaired:u}):null]})})})}function Nt({open:e,nodeCount:t,onConfirm:n,onCancel:r}){return(0,q.jsx)(ie,{open:e,onOpenChange:e=>{e||r()},children:(0,q.jsxs)(_e,{children:[(0,q.jsx)(ae,{children:(0,q.jsx)(ce,{children:`Expand to full plan?`})}),(0,q.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`This plan has `,t,` nodes. Rendering the full graph may take several seconds.`]}),(0,q.jsxs)(oe,{children:[(0,q.jsx)(U,{type:`button`,variant:`outline`,size:`sm`,onClick:r,children:`Cancel`}),(0,q.jsx)(U,{type:`button`,size:`sm`,onClick:n,children:`Expand anyway`})]})]})})}var Pt={io:[`scan`,`exchange`],basic:[`scan`,`exchange`,`join`,`aggregate`,`sort`,`filter`],advanced:null},Ft=300;function It(e,t){let n=new Map;for(let t of e){let e=n.get(t.source);e?e.push(t.target):n.set(t.source,[t.target])}let r=new Map;function i(e){let a=r.get(e);if(a)return a;let o=new Set;r.set(e,o);for(let r of n.get(e)??[])if(t.has(r))o.add(r);else for(let e of i(r))o.add(e);return o}let a=new Map;for(let t of e)t.shuffleBytes&&a.set(`${t.source}->${t.target}`,t.shuffleBytes);let o=[];for(let e of t)for(let t of i(e)){let n={id:`${e}=>${t}`,source:e,target:t},r=a.get(`${e}->${t}`);r&&(n.shuffleBytes=r),o.push(n)}return o}function Lt(e,t){try{return Re(e,t)}catch{return null}}var Rt=new Map;function zt(e,t,n,r){return`${e??`none`}::${t}::${n}::${r}`}function Bt(){Rt.clear()}var Vt=D.getState().modelResetCount;D.subscribe(e=>{e.modelResetCount!==Vt&&(Vt=e.modelResetCount,Bt())});function $(e,t,n){let r=zt(n,t.stageId,t.scope,t.durationMode),i=Rt.get(r);if(i)return i;let a=Lt(e,t);return a&&Rt.set(r,a),a}function Ht({stageId:e,appModel:t,findings:n,activeFileId:r,onClose:i,initialScope:a}){let{resetToDropZone:o}=ue(),{recentEntries:s,onPickRecent:c,onRemoveRecent:l}=re(r),[u,d]=(0,K.useState)(`basic`),[f,p]=(0,K.useState)(`exclusive`),[m,g]=(0,K.useState)(a??`segment`),[_,v]=(0,K.useState)(!1),[y,b]=(0,K.useState)(a!==`full`),[x,S]=(0,K.useState)(!1),[C,w]=(0,K.useState)(e),[T,E]=(0,K.useState)(null),[D,O]=(0,K.useState)(0),[ee,k]=(0,K.useState)({nodeId:null,token:0}),[A,j]=(0,K.useState)(null),M=e=>k(t=>({nodeId:e,token:t.token+1}));(0,K.useEffect)(()=>{E(null)},[C,m,u]);let N=te(C,t),P=N?$(N,{scope:`segment`,stageId:C,appModel:t,findings:n,durationMode:f},r):null,F=P!=null&&P.scope===`full`&&m===`segment`&&P.nodes.length>Ft,I=F&&!x;(0,K.useEffect)(()=>{I&&v(!0)},[I]);let L=N&&(m===`full`||_)?$(N,{scope:`full`,stageId:C,appModel:t,findings:n,durationMode:f},r):null,R=!y&&m===`full`&&L!=null&&L.nodes.length>Ft,z=_||R;(0,K.useEffect)(()=>{let e=e=>{e.key!==`Escape`||z||(T?E(null):i())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i,z,T]);let B=F||R?null:m===`full`?L:P;(0,K.useEffect)(()=>{A&&m===`full`&&B?.nodes.some(e=>e.id===A)&&(E(A),M(A),j(null))},[A,m,B]);function V(){let e=N?$(N,{scope:`full`,stageId:C,appModel:t,findings:n,durationMode:f},r):null;e&&e.nodes.length>Ft?v(!0):(g(`full`),O(e=>e+1))}function ie(){g(`segment`),O(e=>e+1)}function ae(e){if(B?.nodes.some(t=>t.id===e)){E(e),M(e);return}j(e),V()}let oe=(0,K.useCallback)(e=>{w(e),g(`segment`),b(!0),S(!1),j(null),O(e=>e+1)},[]);function se(){b(!0),g(`full`),v(!1),O(e=>e+1)}function ce(){v(!1),j(null),R&&(b(!0),g(`segment`),P?.scope===`full`&&S(!0)),I&&S(!0)}function le(e){return i(),c(e)}let{visibleNodeIds:de,filteredEdges:fe,hiddenNodes:pe}=(0,K.useMemo)(()=>{let e=Pt[u],t=new Set;if(B)for(let n of B.nodes)(!e||e.includes(n.category))&&t.add(n.id);return{visibleNodeIds:t,filteredEdges:B?It(B.edges,t):[],hiddenNodes:B?B.nodes.filter(e=>!t.has(e.id)):[]}},[B,u]),H=B?.scope===`full`,me=m===`full`,W=(0,K.useId)(),G=H&&!me;return(0,q.jsxs)(`div`,{"data-testid":`dashboard`,className:`flex h-screen flex-col`,style:{paddingRight:`var(--docs-inset, 0px)`},children:[(0,q.jsx)(ne,{onLoadNew:o,recentEntries:s,activeFileId:r,onPickRecent:le,onRemoveRecent:l,leadingContent:(0,q.jsxs)(`div`,{className:`min-w-0`,children:[(0,q.jsxs)(`h1`,{className:`truncate font-heading text-sm font-semibold`,children:[`Plan graph: Stage `,C]}),B&&B.scope===`segment`?(0,q.jsxs)(`p`,{className:`truncate text-xs text-muted-foreground`,children:[`Segment `,B.segmentIndex+1,` of `,B.segmentCount]}):null,(0,q.jsx)(`p`,{className:`truncate text-xs text-muted-foreground`,children:(0,q.jsx)(h,{anchor:`#bottleneck-duplicate-plan-subtree`,children:`Plan Advisor docs`})})]}),sectionControls:(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`flex flex-col items-end gap-0.5`,children:[(0,q.jsx)(U,{type:`button`,variant:`outline`,size:`sm`,disabled:G,"aria-describedby":G?W:void 0,onClick:H?ie:V,children:H?`Back to segment view`:`Expand to full plan`}),G?(0,q.jsx)(`p`,{id:W,className:`text-xs text-muted-foreground`,children:`This stage's plan couldn't be scoped to a single segment`}):null]}),(0,q.jsx)(U,{variant:`ghost`,size:`sm`,onClick:i,children:`Close`})]})}),(0,q.jsx)(`div`,{className:`flex flex-1 flex-col overflow-hidden`,children:R?null:!N||!B?(0,q.jsx)(`p`,{role:`alert`,className:`p-6 text-sm text-destructive`,children:F?`This plan has more nodes than the graph view can safely render without expanding. Click "Expand to full plan" to confirm.`:`Couldn't build the plan graph for this stage.`}):(0,q.jsx)(Mt,{model:B,visibleNodeIds:de,visibleEdges:fe,showMiniMap:!0,findings:n,stageId:C,segmentStageIds:B.segmentStageIds,onSelectStage:oe,selectedNodeId:T,onSelectNode:E,onJumpToPaired:ae,centerRequest:ee,fitSignal:D,filterMode:u,onFilterModeChange:d,hiddenCount:pe.length,durationMode:f,onDurationModeChange:p})}),(0,q.jsx)(Nt,{open:z,nodeCount:L?.nodes.length??0,onConfirm:se,onCancel:ce})]})}export{Ht as PlanGraphRoute};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,Z as r,d as i,it as a,p as o,u as s,ut as c}from"./DisclosureContext-Ds0hcZFn.js";import{p as l}from"./plan-graph-vendor-B0sEms9Z.js";import{m as u}from"./useRecentFiles-Bb4-ukVz.js";import{C as d,O as f}from"./index-DaC8A2FS.js";import{i as p,o as m,r as h,s as g,t as _}from"./Dashboard-CC_BXrNy.js";import{r as v}from"./impact-sort-Eihua9dY.js";import{n as y}from"./finding-anchor-Dl8mIHiU.js";import{t as b}from"./usePagedRows-Bo-aSztx.js";import{n as x,t as S}from"./useSortMode-lDedD5a3.js";var C=e(t(),1),w=l();function T(e){return e.stageId!=null}function E(e){return(e.extended??``).replace(/, wasting \d+s of executor time\./,`.`)}function D({finding:e}){let t=y([e]);return(0,w.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`flex flex-col gap-1 transition-colors ${t.flashClassName}`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,w.jsx)(p,{stageId:e.stageId}),(0,w.jsx)(s,{impactBand:e.impactBand})]}),(0,w.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Wasted `,(0,w.jsx)(`strong`,{children:r(a(e))}),` of executor time.`,e.extended?(0,w.jsxs)(o,{children:[` `,E(e)]}):null]}),(0,w.jsx)(_,{finding:e})]})}function O({appModel:e,catalog:t,defaultCollapsed:o=!0}){let[s,l]=(0,C.useState)(0),{sortMode:p,setSortMode:_,orderBy:y}=S(),[E,O]=(0,C.useState)(!o),k=f(),A=(0,C.useRef)(!1);(0,C.useEffect)(()=>{if(!A.current){A.current=!0;return}l(0)},[e]);let j=u(t,`retryWaste`).filter(T),M=[...j].sort((e,t)=>n[e.impactBand]-n[t.impactBand]||(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0)),N=y(M,e=>[e],e=>e.stageId),P=k?N.findIndex(e=>e===k.finding):null,{totalPages:F,effectivePage:I,visible:L}=b(N,s,l,P);return j.length===0?null:(0,w.jsxs)(d,{title:`Retry Waste`,fixFor:j,impactBand:c(j),badges:(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(i,{type:`retryWaste`,impactBand:c(j)}),v(j,j.length,E)?(0,w.jsx)(x,{mode:p,onChange:e=>{_(e),l(0)}}):null]}),open:E,onOpenChange:O,summary:(0,w.jsx)(m,{value:r(a(M[0])),context:g(j.length)}),children:[(0,w.jsx)(`ul`,{className:`space-y-3`,children:L.map(e=>(0,w.jsx)(D,{finding:e},e.id))}),(0,w.jsx)(h,{page:I,totalPages:F,onPrev:()=>l(e=>e-1),onNext:()=>l(e=>e+1)})]})}export{O as RetryWaste};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,Z as r,d as i,it as a,p as o,u as s,ut as c}from"./DisclosureContext-ZpE6CkHx.js";import{p as l}from"./plan-graph-vendor-BYl-AzN5.js";import{c as u}from"./useRecentFiles-XZEnLlal.js";import{P as d,k as f}from"./index-B-03mG7K.js";import{i as p,o as m,r as h,s as g,t as _}from"./Dashboard-C1hNeX49.js";import{r as v}from"./impact-sort-CssZ6MT2.js";import{n as y}from"./finding-anchor-Cl6_5hfV.js";import{t as b}from"./usePagedRows-Dyl6T8Ok.js";import{n as x,t as S}from"./useSortMode-Dhvit8dt.js";var C=e(t(),1),w=l();function T(e){return e.stageId!=null}function E(e){return(e.extended??``).replace(/, wasting \d+s of executor time\./,`.`)}function D({finding:e}){let t=y([e]);return(0,w.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`flex flex-col gap-1 transition-colors ${t.flashClassName}`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,w.jsx)(p,{stageId:e.stageId}),(0,w.jsx)(s,{impactBand:e.impactBand})]}),(0,w.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Wasted `,(0,w.jsx)(`strong`,{children:r(a(e))}),` of executor time.`,e.extended?(0,w.jsxs)(o,{children:[` `,E(e)]}):null]}),(0,w.jsx)(_,{finding:e})]})}function O({appModel:e,catalog:t,defaultCollapsed:o=!0}){let[s,l]=(0,C.useState)(0),{sortMode:p,setSortMode:_,orderBy:y}=S(),[E,O]=(0,C.useState)(!o),k=d(),A=(0,C.useRef)(!1);(0,C.useEffect)(()=>{if(!A.current){A.current=!0;return}l(0)},[e]);let j=u(t,`retryWaste`).filter(T),M=[...j].sort((e,t)=>n[e.impactBand]-n[t.impactBand]||(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0)),N=y(M,e=>[e],e=>e.stageId),P=k?N.findIndex(e=>e===k.finding):null,{totalPages:F,effectivePage:I,visible:L}=b(N,s,l,P);return j.length===0?null:(0,w.jsxs)(f,{title:`Retry Waste`,fixFor:j,impactBand:c(j),badges:(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(i,{type:`retryWaste`,impactBand:c(j)}),v(j,j.length,E)?(0,w.jsx)(x,{mode:p,onChange:e=>{_(e),l(0)}}):null]}),open:E,onOpenChange:O,summary:(0,w.jsx)(m,{value:r(a(M[0])),context:g(j.length)}),children:[(0,w.jsx)(`ul`,{className:`space-y-3`,children:L.map(e=>(0,w.jsx)(D,{finding:e},e.id))}),(0,w.jsx)(h,{page:I,totalPages:F,onPrev:()=>l(e=>e-1),onNext:()=>l(e=>e+1)})]})}export{O as RetryWaste};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,Y as r,bt as i,d as a,it as o,st as s,ut as c}from"./DisclosureContext-Ds0hcZFn.js";import{p as l}from"./plan-graph-vendor-B0sEms9Z.js";import{i as u}from"./useRecentFiles-Bb4-ukVz.js";import{C as d,O as f}from"./index-DaC8A2FS.js";import{a as p,o as m,r as h,s as g,t as _}from"./Dashboard-CC_BXrNy.js";import{r as v}from"./impact-sort-Eihua9dY.js";import{n as y,t as b}from"./finding-anchor-Dl8mIHiU.js";import{t as x}from"./usePagedRows-Bo-aSztx.js";import{n as S,t as C}from"./useSortMode-lDedD5a3.js";import{t as w}from"./StageHeader-BMNmUy-s.js";import{a as T,i as E,n as D,r as O,t as k}from"./select-DkjFHlXR.js";import{t as A}from"./PlanExplorer-Dd9WPK4S.js";import{t as j}from"./PartitionHint-DThaMMRT.js";var M=e(t(),1),N=l();function P({entry:e,appModel:t}){let n=i(),a=y([e.shuffle]),c=t.stages.get(e.stageId),l=c?s(c):null,d=n===`advanced`&&u(e.stageId,t);return(0,N.jsxs)(`div`,{ref:a.ref,tabIndex:a.tabIndex,"data-flashed":a.dataFlashed,className:`space-y-2 ${b} transition-colors ${a.flashClassName}`,children:[(0,N.jsx)(w,{stageId:e.stageId,appModel:t}),(0,N.jsxs)(`p`,{className:`text-sm`,children:[`Shuffle read: `,(0,N.jsx)(`strong`,{children:r(o(e.shuffle))}),` · `,`Write: `,r(c?.shuffleWriteBytes??0)]}),(0,N.jsx)(_,{finding:e.shuffle}),l||d?(0,N.jsxs)(`div`,{className:`space-y-2 pt-1`,children:[l?(0,N.jsx)(j,{hint:l}):null,d?(0,N.jsx)(A,{stageId:e.stageId,appModel:t}):null]}):null]})}var F=(0,M.memo)(function({appModel:e,catalog:t,defaultCollapsed:i=!0}){let[s,l]=(0,M.useState)(0),[u,_]=(0,M.useState)(!i),{sortMode:y,setSortMode:b,orderBy:w}=C(),A=f(),{shuffleFindings:j,sorted:F,orderedEntries:I}=(0,M.useMemo)(()=>{let e=t.filter(e=>e.type===`shuffle`),r=[...e.filter(e=>e.stageId!=null).map(e=>({stageId:e.stageId,shuffle:e,impactBand:e.impactBand,peak:o(e)}))].sort((e,t)=>n[e.impactBand]-n[t.impactBand]||t.peak-e.peak);return{shuffleFindings:e,sorted:r,orderedEntries:w(r,e=>[e.shuffle],e=>e.stageId)}},[t,y]),L=A?I.findIndex(e=>e.shuffle===A.finding):null,{totalPages:R,effectivePage:z,visible:B}=x(I,s,l,L);if(j.length===0){let t=0;for(let n of e.stages.values())t=Math.max(t,n.shuffleReadBytes??0);return(0,N.jsx)(d,{title:`Shuffle I/O`,open:u,onOpenChange:_,summary:(0,N.jsx)(m,{value:r(t),context:`no issue detected: peak shuffle read`}),children:(0,N.jsx)(`div`,{className:`flex flex-col gap-1`,children:(0,N.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No shuffle read/write issues detected.`})})})}let V=c(j),H=I.map(e=>({id:e.stageId})),U=v(j,F.length,u);return(0,N.jsx)(d,{title:`Shuffle I/O`,impactBand:V,fixFor:j,open:u,onOpenChange:_,summary:(0,N.jsx)(m,{value:r(F[0].peak),context:`Peak shuffle read · ${g(F.length)}`}),badges:(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(a,{type:`shuffle`,impactBand:V??`info`}),U?(0,N.jsx)(S,{mode:y,onChange:e=>{b(e),l(0)}}):null]}),children:(0,N.jsxs)(`div`,{className:`space-y-4`,children:[(0,N.jsx)(p,{pills:H}),B.map(t=>(0,N.jsx)(P,{entry:t,appModel:e},t.stageId)),(0,N.jsx)(h,{page:z,totalPages:R,onPrev:()=>l(e=>e-1),onNext:()=>l(e=>e+1),renderJumpControl:()=>(0,N.jsxs)(k,{value:String(z*6),onValueChange:e=>l(Math.floor(Number(e)/6)),children:[(0,N.jsx)(E,{size:`sm`,"aria-label":`Jump to stage`,children:(0,N.jsx)(T,{placeholder:`Jump to stage`})}),(0,N.jsx)(D,{children:I.map((e,t)=>(0,N.jsxs)(O,{value:String(t),children:[`Stage `,e.stageId,` (`,r(e.peak),`)`]},e.stageId))})]})})]})})});export{F as ShuffleIO};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,Y as r,bt as i,d as a,it as o,st as s,ut as c}from"./DisclosureContext-ZpE6CkHx.js";import{p as l}from"./plan-graph-vendor-BYl-AzN5.js";import{i as u}from"./useRecentFiles-XZEnLlal.js";import{P as d,k as f}from"./index-B-03mG7K.js";import{a as p,o as m,r as h,s as g,t as _}from"./Dashboard-C1hNeX49.js";import{r as v}from"./impact-sort-CssZ6MT2.js";import{n as y,t as b}from"./finding-anchor-Cl6_5hfV.js";import{t as x}from"./usePagedRows-Dyl6T8Ok.js";import{n as S,t as C}from"./useSortMode-Dhvit8dt.js";import{t as w}from"./StageHeader-DJkYkrsU.js";import{a as T,i as E,n as D,r as O,t as k}from"./select-CQjNhprm.js";import{t as A}from"./PlanExplorer-DgHCDBD_.js";import{t as j}from"./PartitionHint-CUvbnnxy.js";var M=e(t(),1),N=l();function P({entry:e,appModel:t}){let n=i(),a=y([e.shuffle]),c=t.stages.get(e.stageId),l=c?s(c):null,d=n===`advanced`&&u(e.stageId,t);return(0,N.jsxs)(`div`,{ref:a.ref,tabIndex:a.tabIndex,"data-flashed":a.dataFlashed,className:`space-y-2 ${b} transition-colors ${a.flashClassName}`,children:[(0,N.jsx)(w,{stageId:e.stageId,appModel:t}),(0,N.jsxs)(`p`,{className:`text-sm`,children:[`Shuffle read: `,(0,N.jsx)(`strong`,{children:r(o(e.shuffle))}),` · `,`Write: `,r(c?.shuffleWriteBytes??0)]}),(0,N.jsx)(_,{finding:e.shuffle}),l||d?(0,N.jsxs)(`div`,{className:`space-y-2 pt-1`,children:[l?(0,N.jsx)(j,{hint:l}):null,d?(0,N.jsx)(A,{stageId:e.stageId,appModel:t}):null]}):null]})}var F=(0,M.memo)(function({appModel:e,catalog:t,defaultCollapsed:i=!0}){let[s,l]=(0,M.useState)(0),[u,_]=(0,M.useState)(!i),{sortMode:y,setSortMode:b,orderBy:w}=C(),A=d(),{shuffleFindings:j,sorted:F,orderedEntries:I}=(0,M.useMemo)(()=>{let e=t.filter(e=>e.type===`shuffle`),r=[...e.filter(e=>e.stageId!=null).map(e=>({stageId:e.stageId,shuffle:e,impactBand:e.impactBand,peak:o(e)}))].sort((e,t)=>n[e.impactBand]-n[t.impactBand]||t.peak-e.peak);return{shuffleFindings:e,sorted:r,orderedEntries:w(r,e=>[e.shuffle],e=>e.stageId)}},[t,y]),L=A?I.findIndex(e=>e.shuffle===A.finding):null,{totalPages:R,effectivePage:z,visible:B}=x(I,s,l,L);if(j.length===0){let t=0;for(let n of e.stages.values())t=Math.max(t,n.shuffleReadBytes??0);return(0,N.jsx)(f,{title:`Shuffle I/O`,open:u,onOpenChange:_,summary:(0,N.jsx)(m,{value:r(t),context:`no issue detected: peak shuffle read`}),children:(0,N.jsx)(`div`,{className:`flex flex-col gap-1`,children:(0,N.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No shuffle read/write issues detected.`})})})}let V=c(j),H=I.map(e=>({id:e.stageId})),U=v(j,F.length,u);return(0,N.jsx)(f,{title:`Shuffle I/O`,impactBand:V,fixFor:j,open:u,onOpenChange:_,summary:(0,N.jsx)(m,{value:r(F[0].peak),context:`Peak shuffle read · ${g(F.length)}`}),badges:(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(a,{type:`shuffle`,impactBand:V??`info`}),U?(0,N.jsx)(S,{mode:y,onChange:e=>{b(e),l(0)}}):null]}),children:(0,N.jsxs)(`div`,{className:`space-y-4`,children:[(0,N.jsx)(p,{pills:H}),B.map(t=>(0,N.jsx)(P,{entry:t,appModel:e},t.stageId)),(0,N.jsx)(h,{page:z,totalPages:R,onPrev:()=>l(e=>e-1),onNext:()=>l(e=>e+1),renderJumpControl:()=>(0,N.jsxs)(k,{value:String(z*6),onValueChange:e=>l(Math.floor(Number(e)/6)),children:[(0,N.jsx)(E,{size:`sm`,"aria-label":`Jump to stage`,children:(0,N.jsx)(T,{placeholder:`Jump to stage`})}),(0,N.jsx)(D,{children:I.map((e,t)=>(0,N.jsxs)(O,{value:String(t),children:[`Stage `,e.stageId,` (`,r(e.peak),`)`]},e.stageId))})]})})]})})});export{F as ShuffleIO};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{$ as n,it as r}from"./DisclosureContext-Ds0hcZFn.js";import{p as i}from"./plan-graph-vendor-B0sEms9Z.js";import{t as a}from"./StageFindingGroup-B1A0nf-e.js";var o=e(t(),1),s=i();function c(e){return`${e.metric}: ${n(`ratio`,r(e))}`}var l=(0,o.memo)(function(e){return(0,s.jsx)(a,{...e,type:`skew`,title:`Task Skew`,idPrefix:`skew`,findingLabel:c})});export{l as Skew};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{$ as n,it as r}from"./DisclosureContext-ZpE6CkHx.js";import{p as i}from"./plan-graph-vendor-BYl-AzN5.js";import{t as a}from"./StageFindingGroup-BEtPWcT0.js";var o=e(t(),1),s=i();function c(e){return`${e.metric}: ${n(`ratio`,r(e))}`}var l=(0,o.memo)(function(e){return(0,s.jsx)(a,{...e,type:`skew`,title:`Task Skew`,idPrefix:`skew`,findingLabel:c})});export{l as Skew};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{$ as n,U as r,d as i,it as a,u as o,z as s}from"./DisclosureContext-Ds0hcZFn.js";import{p as c}from"./plan-graph-vendor-B0sEms9Z.js";import{m as l}from"./useRecentFiles-Bb4-ukVz.js";import{C as u,O as d}from"./index-DaC8A2FS.js";import{o as f,r as p,s as m,t as h}from"./Dashboard-CC_BXrNy.js";import{r as g}from"./impact-sort-Eihua9dY.js";import{n as _}from"./finding-anchor-Dl8mIHiU.js";import{t as v}from"./usePagedRows-Bo-aSztx.js";import{n as y,t as b}from"./useSortMode-lDedD5a3.js";import{t as x}from"./StageHeader-BMNmUy-s.js";var S=e(t(),1),C=c();function w(e){let t=a(e);if(e.metric===`execMaxMedianRatio`)return`Executor ${e.executorId}: ${n(`ratio`,t)} the median ${e.dimension?s[e.dimension]:`value`}`;let r=Math.round((e.hostTaskShare??0)*100);return e.metric===`hostDurationShare`?`${e.host}: ${n(`pctFraction`,t)} of this stage's task time (${n(`pct`,r)} of tasks)`:`${e.host}: ${n(`ratio`,t)} median task time (${n(`pct`,r)} of tasks)`}function T({finding:e,appModel:t}){let n=_([e]);return(0,C.jsxs)(`li`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-1 text-sm transition-colors ${n.flashClassName}`,children:[(0,C.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,C.jsx)(o,{impactBand:e.impactBand}),e.stageId==null?null:(0,C.jsx)(x,{stageId:e.stageId,appModel:t})]}),(0,C.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:w(e)}),(0,C.jsx)(h,{finding:e})]})}var E=(0,S.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let{sortMode:a,setSortMode:o,orderBy:s}=b(),[c,h]=(0,S.useState)(!n),[_,x]=(0,S.useState)(0),E=l(t,`slowHost`).slice().sort((e,t)=>r[e.impactBand]-r[t.impactBand]),D=s(E,e=>[e],e=>e.stageId??null),O=d(),k=O?D.findIndex(e=>e===O.finding):null,{totalPages:A,effectivePage:j,visible:M}=v(D,_,x,k);return E.length===0?null:(0,C.jsxs)(u,{title:`Slow Executor Host`,impactBand:E[0].impactBand,fixFor:E,badges:(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(i,{type:`slowHost`,impactBand:E[0].impactBand}),g(E,E.length,c)?(0,C.jsx)(y,{mode:a,onChange:o}):null]}),open:c,onOpenChange:h,summary:(0,C.jsx)(f,{value:w(E[0]),context:m(E.length)}),children:[(0,C.jsx)(`ul`,{className:`space-y-2`,children:M.map(t=>(0,C.jsx)(T,{finding:t,appModel:e},t.id))}),(0,C.jsx)(p,{page:j,totalPages:A,onPrev:()=>x(e=>e-1),onNext:()=>x(e=>e+1)})]})});export{E as SlowHost};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{$ as n,U as r,d as i,it as a,u as o,z as s}from"./DisclosureContext-ZpE6CkHx.js";import{p as c}from"./plan-graph-vendor-BYl-AzN5.js";import{c as l}from"./useRecentFiles-XZEnLlal.js";import{P as u,k as d}from"./index-B-03mG7K.js";import{o as f,r as p,s as m,t as h}from"./Dashboard-C1hNeX49.js";import{r as g}from"./impact-sort-CssZ6MT2.js";import{n as _}from"./finding-anchor-Cl6_5hfV.js";import{t as v}from"./usePagedRows-Dyl6T8Ok.js";import{n as y,t as b}from"./useSortMode-Dhvit8dt.js";import{t as x}from"./StageHeader-DJkYkrsU.js";var S=e(t(),1),C=c();function w(e){let t=a(e);if(e.metric===`execMaxMedianRatio`)return`Executor ${e.executorId}: ${n(`ratio`,t)} the median ${e.dimension?s[e.dimension]:`value`}`;let r=Math.round((e.hostTaskShare??0)*100);return e.metric===`hostDurationShare`?`${e.host}: ${n(`pctFraction`,t)} of this stage's task time (${n(`pct`,r)} of tasks)`:`${e.host}: ${n(`ratio`,t)} median task time (${n(`pct`,r)} of tasks)`}function T({finding:e,appModel:t}){let n=_([e]);return(0,C.jsxs)(`li`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-1 text-sm transition-colors ${n.flashClassName}`,children:[(0,C.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,C.jsx)(o,{impactBand:e.impactBand}),e.stageId==null?null:(0,C.jsx)(x,{stageId:e.stageId,appModel:t})]}),(0,C.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:w(e)}),(0,C.jsx)(h,{finding:e})]})}var E=(0,S.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let{sortMode:a,setSortMode:o,orderBy:s}=b(),[c,h]=(0,S.useState)(!n),[_,x]=(0,S.useState)(0),E=l(t,`slowHost`).slice().sort((e,t)=>r[e.impactBand]-r[t.impactBand]),D=s(E,e=>[e],e=>e.stageId??null),O=u(),k=O?D.findIndex(e=>e===O.finding):null,{totalPages:A,effectivePage:j,visible:M}=v(D,_,x,k);return E.length===0?null:(0,C.jsxs)(d,{title:`Slow Executor Host`,impactBand:E[0].impactBand,fixFor:E,badges:(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(i,{type:`slowHost`,impactBand:E[0].impactBand}),g(E,E.length,c)?(0,C.jsx)(y,{mode:a,onChange:o}):null]}),open:c,onOpenChange:h,summary:(0,C.jsx)(f,{value:w(E[0]),context:m(E.length)}),children:[(0,C.jsx)(`ul`,{className:`space-y-2`,children:M.map(t=>(0,C.jsx)(T,{finding:t,appModel:e},t.id))}),(0,C.jsx)(p,{page:j,totalPages:A,onPrev:()=>x(e=>e-1),onNext:()=>x(e=>e+1)})]})});export{E as SlowHost};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,d as r,p as i,ut as a}from"./DisclosureContext-Ds0hcZFn.js";import{p as o}from"./plan-graph-vendor-B0sEms9Z.js";import{h as s,m as c}from"./useRecentFiles-Bb4-ukVz.js";import{C as l,O as u,S as d,l as f}from"./index-DaC8A2FS.js";import{a as p,o as m,r as h,s as g,t as _}from"./Dashboard-CC_BXrNy.js";import{i as v,r as y}from"./impact-sort-Eihua9dY.js";import{n as b,t as x}from"./finding-anchor-Dl8mIHiU.js";import{t as S}from"./usePagedRows-Bo-aSztx.js";import{n as C,t as w}from"./useSortMode-lDedD5a3.js";var T=e(t(),1),E=o();function D({finding:e}){let t=b([e]);return(0,E.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-2 ${x} transition-colors ${t.flashClassName}`,children:[e.stageIds.length>0?(0,E.jsx)(p,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,E.jsxs)(`p`,{children:[f(e.recommendation??``).measured??e.recommendation,` `,(0,E.jsx)(_,{finding:e})]})]})}var O=(0,T.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:o,setSortMode:f,orderBy:p}=w(),[_,b]=(0,T.useState)(!t),[x,O]=(0,T.useState)(0),{findings:k,pills:A}=(0,T.useMemo)(()=>{let t=c(e,`smallFiles`).sort((e,t)=>n[e.impactBand]-n[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds))].map(e=>({id:e}))}},[e,o]),j=p(k,e=>[e],v),M=u(),N=M?j.findIndex(e=>e===M.finding):null,{totalPages:P,effectivePage:F,visible:I}=S(j,x,O,N);return k.length===0?null:(0,E.jsxs)(l,{title:`Excessive Small Files`,fixFor:k,impactBand:a(k),open:_,onOpenChange:b,badges:(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(r,{type:`smallFiles`,impactBand:a(k)??`info`,className:d}),y(k,k.length,_)?(0,E.jsx)(C,{mode:o,onChange:f}):null]}),statusBadge:(0,E.jsx)(i,{children:(0,E.jsx)(s,{confidence:k[0].confidence,validationRequired:k[0].validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,E.jsx)(m,{value:`${A.length} stage${A.length===1?``:`s`}`,context:g(k.length)}),children:[(0,E.jsx)(`ul`,{className:`space-y-3 text-sm`,children:I.map(e=>(0,E.jsx)(D,{finding:e},e.id))}),(0,E.jsx)(h,{page:F,totalPages:P,onPrev:()=>O(e=>e-1),onNext:()=>O(e=>e+1)})]})});export{O as SmallFiles};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,d as r,p as i,ut as a}from"./DisclosureContext-ZpE6CkHx.js";import{p as o}from"./plan-graph-vendor-BYl-AzN5.js";import{c as s,l as c}from"./useRecentFiles-XZEnLlal.js";import{P as l,S as u,k as d,l as f}from"./index-B-03mG7K.js";import{a as p,o as m,r as h,s as g,t as _}from"./Dashboard-C1hNeX49.js";import{i as v,r as y}from"./impact-sort-CssZ6MT2.js";import{n as b,t as x}from"./finding-anchor-Cl6_5hfV.js";import{t as S}from"./usePagedRows-Dyl6T8Ok.js";import{n as C,t as w}from"./useSortMode-Dhvit8dt.js";var T=e(t(),1),E=o();function D({finding:e}){let t=b([e]);return(0,E.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-2 ${x} transition-colors ${t.flashClassName}`,children:[e.stageIds.length>0?(0,E.jsx)(p,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,E.jsxs)(`p`,{children:[f(e.recommendation??``).measured??e.recommendation,` `,(0,E.jsx)(_,{finding:e})]})]})}var O=(0,T.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:o,setSortMode:f,orderBy:p}=w(),[_,b]=(0,T.useState)(!t),[x,O]=(0,T.useState)(0),{findings:k,pills:A}=(0,T.useMemo)(()=>{let t=s(e,`smallFiles`).sort((e,t)=>n[e.impactBand]-n[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds))].map(e=>({id:e}))}},[e,o]),j=p(k,e=>[e],v),M=l(),N=M?j.findIndex(e=>e===M.finding):null,{totalPages:P,effectivePage:F,visible:I}=S(j,x,O,N);return k.length===0?null:(0,E.jsxs)(d,{title:`Excessive Small Files`,fixFor:k,impactBand:a(k),open:_,onOpenChange:b,badges:(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(r,{type:`smallFiles`,impactBand:a(k)??`info`,className:u}),y(k,k.length,_)?(0,E.jsx)(C,{mode:o,onChange:f}):null]}),statusBadge:(0,E.jsx)(i,{children:(0,E.jsx)(c,{confidence:k[0].confidence,validationRequired:k[0].validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,E.jsx)(m,{value:`${A.length} stage${A.length===1?``:`s`}`,context:g(k.length)}),children:[(0,E.jsx)(`ul`,{className:`space-y-3 text-sm`,children:I.map(e=>(0,E.jsx)(D,{finding:e},e.id))}),(0,E.jsx)(h,{page:F,totalPages:P,onPrev:()=>O(e=>e-1),onNext:()=>O(e=>e+1)})]})});export{O as SmallFiles};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,Z as r,d as i,it as a,u as o}from"./DisclosureContext-Ds0hcZFn.js";import{p as s}from"./plan-graph-vendor-B0sEms9Z.js";import{C as c,O as l}from"./index-DaC8A2FS.js";import{o as u,r as d,s as f,t as p}from"./Dashboard-CC_BXrNy.js";import{r as m}from"./impact-sort-Eihua9dY.js";import{n as h}from"./finding-anchor-Dl8mIHiU.js";import{t as g}from"./usePagedRows-Bo-aSztx.js";import{n as _,t as v}from"./useSortMode-lDedD5a3.js";import{t as y}from"./StageHeader-BMNmUy-s.js";var b=e(t(),1),x=s();function S(e){return r(a(e))}function C({finding:e,appModel:t}){let n=h([e]);return(0,x.jsxs)(`li`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-1 text-sm transition-colors ${n.flashClassName}`,children:[(0,x.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,x.jsx)(o,{impactBand:e.impactBand}),e.stageId==null?null:(0,x.jsx)(y,{stageId:e.stageId,appModel:t}),(0,x.jsx)(`strong`,{children:S(e)})]}),(0,x.jsx)(p,{finding:e})]})}var w=(0,b.memo)(function({appModel:e,catalog:t,defaultCollapsed:r=!0}){let{sortMode:a,setSortMode:o,orderBy:s}=v(),[p,h]=(0,b.useState)(!r),[y,w]=(0,b.useState)(0),T=t.filter(e=>e.type===`speculationWaste`).slice().sort((e,t)=>n[e.impactBand]-n[t.impactBand]),E=s(T,e=>[e],e=>e.stageId??null),D=l(),O=D?E.findIndex(e=>e===D.finding):null,{totalPages:k,effectivePage:A,visible:j}=g(E,y,w,O);return T.length===0?null:(0,x.jsxs)(c,{title:`Speculation Waste`,fixFor:T,impactBand:T[0].impactBand,badges:(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(i,{type:`speculationWaste`,impactBand:T[0].impactBand}),m(T,T.length,p)?(0,x.jsx)(_,{mode:a,onChange:o}):null]}),open:p,onOpenChange:h,summary:(0,x.jsx)(u,{value:S(T[0]),context:f(T.length)}),children:[(0,x.jsx)(`ul`,{className:`space-y-2`,children:j.map(t=>(0,x.jsx)(C,{finding:t,appModel:e},t.id))}),(0,x.jsx)(d,{page:A,totalPages:k,onPrev:()=>w(e=>e-1),onNext:()=>w(e=>e+1)})]})});export{w as SpeculationWaste};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,Z as r,d as i,it as a,u as o}from"./DisclosureContext-ZpE6CkHx.js";import{p as s}from"./plan-graph-vendor-BYl-AzN5.js";import{P as c,k as l}from"./index-B-03mG7K.js";import{o as u,r as d,s as f,t as p}from"./Dashboard-C1hNeX49.js";import{r as m}from"./impact-sort-CssZ6MT2.js";import{n as h}from"./finding-anchor-Cl6_5hfV.js";import{t as g}from"./usePagedRows-Dyl6T8Ok.js";import{n as _,t as v}from"./useSortMode-Dhvit8dt.js";import{t as y}from"./StageHeader-DJkYkrsU.js";var b=e(t(),1),x=s();function S(e){return r(a(e))}function C({finding:e,appModel:t}){let n=h([e]);return(0,x.jsxs)(`li`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-1 text-sm transition-colors ${n.flashClassName}`,children:[(0,x.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,x.jsx)(o,{impactBand:e.impactBand}),e.stageId==null?null:(0,x.jsx)(y,{stageId:e.stageId,appModel:t}),(0,x.jsx)(`strong`,{children:S(e)})]}),(0,x.jsx)(p,{finding:e})]})}var w=(0,b.memo)(function({appModel:e,catalog:t,defaultCollapsed:r=!0}){let{sortMode:a,setSortMode:o,orderBy:s}=v(),[p,h]=(0,b.useState)(!r),[y,w]=(0,b.useState)(0),T=t.filter(e=>e.type===`speculationWaste`).slice().sort((e,t)=>n[e.impactBand]-n[t.impactBand]),E=s(T,e=>[e],e=>e.stageId??null),D=c(),O=D?E.findIndex(e=>e===D.finding):null,{totalPages:k,effectivePage:A,visible:j}=g(E,y,w,O);return T.length===0?null:(0,x.jsxs)(l,{title:`Speculation Waste`,fixFor:T,impactBand:T[0].impactBand,badges:(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(i,{type:`speculationWaste`,impactBand:T[0].impactBand}),m(T,T.length,p)?(0,x.jsx)(_,{mode:a,onChange:o}):null]}),open:p,onOpenChange:h,summary:(0,x.jsx)(u,{value:S(T[0]),context:f(T.length)}),children:[(0,x.jsx)(`ul`,{className:`space-y-2`,children:j.map(t=>(0,x.jsx)(C,{finding:t,appModel:e},t.id))}),(0,x.jsx)(d,{page:A,totalPages:k,onPrev:()=>w(e=>e-1),onNext:()=>w(e=>e+1)})]})});export{w as SpeculationWaste};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t,_ as n,c as r,d as i,f as a,l as o,o as s,r as c,s as l,t as u,v as d}from"./charts-vendor-0VMaLVLN.js";import{G as f,K as p,S as m,U as h,Y as g,bt as _,d as v,it as y,o as b,p as x,st as S,u as C}from"./DisclosureContext-ZpE6CkHx.js";import{p as w}from"./plan-graph-vendor-BYl-AzN5.js";import{D as T,E as ee,O as E,d as D,i as O,k,l as A,m as j}from"./useRecentFiles-XZEnLlal.js";import{Dt as M,P as N,k as P}from"./index-B-03mG7K.js";import{c as F,f as I,i as L,o as R,r as z,t as B}from"./Dashboard-C1hNeX49.js";import{r as V}from"./impact-sort-CssZ6MT2.js";import{n as H,t as U}from"./finding-anchor-Cl6_5hfV.js";import{t as W}from"./usePagedRows-Dyl6T8Ok.js";import{n as G,t as K}from"./useSortMode-Dhvit8dt.js";import{t as q}from"./PlanExplorer-DgHCDBD_.js";import{t as J}from"./PartitionHint-CUvbnnxy.js";var Y=e(t(),1),X=w(),Z=240,Q=524288e3,te=10;function $(e){let t=e.spillBytes>Q,n=e.gcPct>te;return t&&n?`critical`:t||n?`warning`:`info`}function ne(e){return D[$(e)]}function re({active:e,payload:t}){if(!e||!t?.length)return null;let n=t[0]?.payload;if(!n)return null;let r=$(n);return(0,X.jsxs)(`div`,{className:`rounded-md border border-border bg-popover px-2 py-1.5 text-xs text-popover-foreground shadow-md`,children:[(0,X.jsxs)(`p`,{children:[g(n.spillBytes),` spilled`]}),(0,X.jsxs)(`p`,{children:[n.gcPct.toFixed(1),`% GC`]}),(0,X.jsxs)(`p`,{className:`mt-1 flex items-center gap-1.5 font-medium`,children:[(0,X.jsx)(C,{impactBand:r}),r.toUpperCase()]})]})}function ie({appModel:e}){let t=[];for(let n of e.stages.values()){let e=n.memoryBytesSpilled??0;e<=0||t.push({stageId:n.id,spillBytes:e,gcPct:n.gcPct??0,submittedAt:n.submittedAt??0})}if(t.length===0)return(0,X.jsx)(I,{tone:`clean`,icon:M,title:`No stages spilled memory in this run.`});let f=F(t),p=[...f].sort((e,t)=>e.submittedAt-t.submittedAt).map(e=>({stage:`S${e.stageId}`,spillMB:e.spillBytes/1048576,gcPct:e.gcPct}));return(0,X.jsxs)(ee,{defaultValue:`scatter`,children:[(0,X.jsxs)(E,{"aria-label":`Memory pressure view`,children:[(0,X.jsx)(k,{value:`scatter`,children:`Scatter`}),(0,X.jsx)(k,{value:`twin`,children:`Twin bars`})]}),(0,X.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Spill and GC pressure both stem from tight executor memory, see`,` `,(0,X.jsx)(m,{anchor:`#memory-model`,children:`how Spark’s memory model works`}),`.`]}),(0,X.jsxs)(T,{value:`scatter`,children:[(0,X.jsxs)(`div`,{className:`mb-1 flex items-center gap-3 text-xs text-muted-foreground`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,X.jsx)(C,{impactBand:`critical`}),`CRITICAL`]}),(0,X.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,X.jsx)(C,{impactBand:`warning`}),`WARNING`]}),(0,X.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,X.jsx)(C,{impactBand:`info`}),`INFO`]})]}),(0,X.jsx)(j,{ariaLabel:`Memory pressure scatter: spilled memory versus GC percent, one point per stage that spilled.`,height:Z,table:{caption:`Memory spilled and GC percent by stage`,columns:[`Stage`,`Memory spilled`,`GC %`],rows:f.map(e=>[`S${e.stageId}`,g(e.spillBytes),`${e.gcPct.toFixed(1)}%`]),align:[`left`,`right`,`right`]},children:(0,X.jsxs)(c,{children:[(0,X.jsx)(a,{stroke:D.muted,strokeOpacity:.2}),(0,X.jsx)(l,{type:`number`,dataKey:`spillBytes`,name:`Memory spilled`,tickFormatter:e=>g(e),tick:{fontSize:10}}),(0,X.jsx)(s,{type:`number`,dataKey:`gcPct`,name:`GC %`,tick:{fontSize:10},width:32}),(0,X.jsx)(d,{cursor:{strokeDasharray:`3 3`},content:re}),(0,X.jsx)(r,{data:f,name:`Spill vs. GC`,children:f.map(e=>(0,X.jsx)(n,{fill:ne(e)},e.stageId))})]})})]}),(0,X.jsx)(T,{value:`twin`,children:(0,X.jsx)(j,{ariaLabel:`Memory pressure by stage: spilled memory and GC percent across stages in submission order.`,height:Z,table:{caption:`Spilled memory and GC percent by stage, submission order`,columns:[`Stage`,`Spill (MB)`,`GC %`],rows:p.map(e=>[e.stage,e.spillMB.toFixed(1),`${e.gcPct.toFixed(1)}%`]),align:[`left`,`right`,`right`]},children:(0,X.jsxs)(u,{data:p,children:[(0,X.jsx)(a,{stroke:D.muted,strokeOpacity:.2}),(0,X.jsx)(l,{dataKey:`stage`,tick:{fontSize:10}}),(0,X.jsx)(s,{yAxisId:`left`,tick:{fontSize:10},width:36}),(0,X.jsx)(s,{yAxisId:`right`,orientation:`right`,tick:{fontSize:10},width:36}),(0,X.jsx)(d,{}),(0,X.jsx)(o,{yAxisId:`left`,dataKey:`spillMB`,name:`Spill (MB)`,fill:D.critical}),(0,X.jsx)(i,{yAxisId:`right`,dataKey:`gcPct`,name:`GC %`,stroke:D.info,dot:!1})]})})})]})}function ae(e,t){return e.stages.get(t)?.spillClassification??`unclassified`}function oe({finding:e,appModel:t}){let n=H([e]),r=_(),i=t.stages.get(e.stageId),a=ae(t,e.stageId),o=a===`volume`&&i?S(i):null,s=r===`advanced`&&O(e.stageId,t);return(0,X.jsxs)(`div`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-2 ${U} transition-colors ${n.flashClassName}`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(C,{impactBand:e.impactBand}),(0,X.jsx)(b,{label:f[a],impactBand:e.impactBand,title:p[a]}),(0,X.jsx)(L,{stageId:e.stageId})]}),(0,X.jsx)(x,{children:(0,X.jsx)(A,{confidence:e.confidence,validationRequired:e.validationRequired})})]}),(0,X.jsxs)(`p`,{className:`text-sm`,children:[`Memory spilled: `,(0,X.jsx)(`strong`,{children:g(y(e))}),` · `,`Disk: `,g(i?.diskBytesSpilled??0)]}),(0,X.jsx)(B,{finding:e}),o?(0,X.jsx)(J,{hint:o}):null,s?(0,X.jsx)(`div`,{className:`pt-1`,children:(0,X.jsx)(q,{stageId:e.stageId,appModel:t})}):null]})}var se=(0,Y.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let{sortMode:r,setSortMode:i,orderBy:a}=K(),[o,s]=(0,Y.useState)(!n),[c,l]=(0,Y.useState)(0),{findings:u,sorted:d,orderedFindings:f}=(0,Y.useMemo)(()=>{let e=t.filter(e=>e.type===`spill`&&e.stageId!=null),n=[...e].sort((e,t)=>(h[e.impactBand]??9)-(h[t.impactBand]??9)||(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0));return{findings:e,sorted:n,orderedFindings:a(n,e=>[e],e=>e.stageId)}},[t,r]),p=N(),m=p?f.findIndex(e=>e===p.finding):null,{totalPages:_,effectivePage:y,visible:b}=W(f,c,l,m);if(u.length===0){let t=0;for(let n of e.stages.values())t=Math.max(t,n.memoryBytesSpilled??0);return(0,X.jsx)(P,{title:`Spill: no issue detected (max ${g(t)} spilled)`,children:(0,X.jsx)(I,{tone:`clean`,icon:M,title:`No stages spilled memory in this run.`})})}let x=d[0].impactBand;return(0,X.jsx)(P,{title:`Spill`,fixFor:d,impactBand:x,badges:(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(v,{type:`spill`,impactBand:x}),V(u,d.length,o)?(0,X.jsx)(G,{mode:r,onChange:i}):null]}),open:o,onOpenChange:s,summary:(0,X.jsx)(R,{value:g(typeof d[0].value==`number`?d[0].value:0),context:`peak · ${d.length} stage${d.length===1?``:`s`}`}),children:(0,X.jsxs)(`div`,{className:`space-y-4`,children:[(0,X.jsx)(ie,{appModel:e}),b.map(t=>(0,X.jsx)(oe,{finding:t,appModel:e},t.stageId)),(0,X.jsx)(z,{page:y,totalPages:_,onPrev:()=>l(e=>e-1),onNext:()=>l(e=>e+1)})]})})});export{se as Spill};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,d as r,u as i,ut as a}from"./DisclosureContext-Ds0hcZFn.js";import{p as o}from"./plan-graph-vendor-B0sEms9Z.js";import{m as s}from"./useRecentFiles-Bb4-ukVz.js";import{C as c,O as l}from"./index-DaC8A2FS.js";import{i as u,o as d,r as f,t as p}from"./Dashboard-CC_BXrNy.js";import{r as m}from"./impact-sort-Eihua9dY.js";import{n as h}from"./finding-anchor-Dl8mIHiU.js";import{t as g}from"./usePagedRows-Bo-aSztx.js";import{n as _,t as v}from"./useSortMode-lDedD5a3.js";var y=e(t(),1),b=o();function x(e){return e.stageId!=null}function S({finding:e}){let t=h([e]);return(0,b.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`flex flex-col gap-1 transition-colors ${t.flashClassName}`,children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(u,{stageId:e.stageId}),(0,b.jsx)(i,{impactBand:e.impactBand})]}),(0,b.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Stage attempt failed outright. Reason: `,(0,b.jsx)(`strong`,{children:e.valueText})]}),(0,b.jsx)(p,{finding:e})]})}function C({appModel:e,catalog:t,defaultCollapsed:i=!0}){let[o,u]=(0,y.useState)(0),{sortMode:p,setSortMode:h,orderBy:C}=v(),[w,T]=(0,y.useState)(!i),E=l(),D=(0,y.useRef)(!1);(0,y.useEffect)(()=>{if(!D.current){D.current=!0;return}u(0)},[e]);let O=s(t,`stageFailed`).filter(x),k=C([...O].sort((e,t)=>n[e.impactBand]-n[t.impactBand]||e.stageId-t.stageId),e=>[e],e=>e.stageId),A=E?k.findIndex(e=>e===E.finding):null,{totalPages:j,effectivePage:M,visible:N}=g(k,o,u,A);return O.length===0?null:(0,b.jsxs)(c,{title:`Failed Stages`,fixFor:O,impactBand:a(O),badges:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(r,{type:`stageFailed`,impactBand:a(O)}),m(O,O.length,w)?(0,b.jsx)(_,{mode:p,onChange:e=>{h(e),u(0)}}):null]}),open:w,onOpenChange:T,summary:(0,b.jsx)(d,{value:O.length,context:`stage${O.length===1?``:`s`} failed outright`}),children:[(0,b.jsx)(`ul`,{className:`space-y-3`,children:N.map(e=>(0,b.jsx)(S,{finding:e},e.id))}),(0,b.jsx)(f,{page:M,totalPages:j,onPrev:()=>u(e=>e-1),onNext:()=>u(e=>e+1)})]})}export{C as StageFailed};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,d as r,u as i,ut as a}from"./DisclosureContext-ZpE6CkHx.js";import{p as o}from"./plan-graph-vendor-BYl-AzN5.js";import{c as s}from"./useRecentFiles-XZEnLlal.js";import{P as c,k as l}from"./index-B-03mG7K.js";import{i as u,o as d,r as f,t as p}from"./Dashboard-C1hNeX49.js";import{r as m}from"./impact-sort-CssZ6MT2.js";import{n as h}from"./finding-anchor-Cl6_5hfV.js";import{t as g}from"./usePagedRows-Dyl6T8Ok.js";import{n as _,t as v}from"./useSortMode-Dhvit8dt.js";var y=e(t(),1),b=o();function x(e){return e.stageId!=null}function S({finding:e}){let t=h([e]);return(0,b.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`flex flex-col gap-1 transition-colors ${t.flashClassName}`,children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(u,{stageId:e.stageId}),(0,b.jsx)(i,{impactBand:e.impactBand})]}),(0,b.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Stage attempt failed outright. Reason: `,(0,b.jsx)(`strong`,{children:e.valueText})]}),(0,b.jsx)(p,{finding:e})]})}function C({appModel:e,catalog:t,defaultCollapsed:i=!0}){let[o,u]=(0,y.useState)(0),{sortMode:p,setSortMode:h,orderBy:C}=v(),[w,T]=(0,y.useState)(!i),E=c(),D=(0,y.useRef)(!1);(0,y.useEffect)(()=>{if(!D.current){D.current=!0;return}u(0)},[e]);let O=s(t,`stageFailed`).filter(x),k=C([...O].sort((e,t)=>n[e.impactBand]-n[t.impactBand]||e.stageId-t.stageId),e=>[e],e=>e.stageId),A=E?k.findIndex(e=>e===E.finding):null,{totalPages:j,effectivePage:M,visible:N}=g(k,o,u,A);return O.length===0?null:(0,b.jsxs)(l,{title:`Failed Stages`,fixFor:O,impactBand:a(O),badges:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(r,{type:`stageFailed`,impactBand:a(O)}),m(O,O.length,w)?(0,b.jsx)(_,{mode:p,onChange:e=>{h(e),u(0)}}):null]}),open:w,onOpenChange:T,summary:(0,b.jsx)(d,{value:O.length,context:`stage${O.length===1?``:`s`} failed outright`}),children:[(0,b.jsx)(`ul`,{className:`space-y-3`,children:N.map(e=>(0,b.jsx)(S,{finding:e},e.id))}),(0,b.jsx)(f,{page:M,totalPages:j,onPrev:()=>u(e=>e-1),onNext:()=>u(e=>e+1)})]})}export{C as StageFailed};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{U as n,Z as r,bt as i,d as a,gt as o,ht as s,p as c,u as l,ut as u}from"./DisclosureContext-ZpE6CkHx.js";import{p as d}from"./plan-graph-vendor-BYl-AzN5.js";import{c as f,i as p,l as m}from"./useRecentFiles-XZEnLlal.js";import{P as h,k as g}from"./index-B-03mG7K.js";import{l as _,n as v,o as y,r as b,s as x,t as S}from"./Dashboard-C1hNeX49.js";import{r as C}from"./impact-sort-CssZ6MT2.js";import{n as w,t as T}from"./finding-anchor-Cl6_5hfV.js";import{t as E}from"./usePagedRows-Dyl6T8Ok.js";import{n as D,t as O}from"./useSortMode-Dhvit8dt.js";import{t as k}from"./StageHeader-DJkYkrsU.js";import{t as A}from"./PlanExplorer-DgHCDBD_.js";var j=e(t(),1),M=d();function N({expanded:e,onClick:t,label:n,location:r,controlsId:i}){let a=r?` for ${r}`:``;return(0,M.jsxs)(`button`,{type:`button`,"aria-expanded":e,"aria-controls":i,"aria-label":`${e?`Hide`:`Show`} ${n.toLowerCase()}${a}`,onClick:t,className:`tap-target-comfortable tap-target-comfortable--sm flex w-fit cursor-pointer items-center gap-1 text-xs font-medium text-primary underline underline-offset-2`,children:[n,e?(0,M.jsx)(s,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}):(0,M.jsx)(o,{"aria-hidden":`true`,className:`size-3.5 shrink-0`})]})}function P(e){let[t,n]=(0,j.useState)(!1),[r,i]=(0,j.useState)(null),[a,o]=(0,j.useState)(!1),[s,c]=(0,j.useState)(!1),[l,u]=(0,j.useState)(!1);return{expanded:t,data:r,loading:a,error:s,toggle:()=>{let r=!t;n(r),r&&e&&!l&&!a&&(o(!0),e().then(e=>i(e)).catch(()=>c(!0)).finally(()=>{u(!0),o(!1)}))}}}function F({group:e,appModel:t,getTaskData:n,idPrefix:a,findingLabel:o}){let{exportMode:s,getTaskData:u}=_(n),{expanded:d,data:f,error:h,toggle:g}=P(u?()=>u(e.stageId):void 0),y=w(e.findings),b=t.stages.get(e.stageId),x=i()===`advanced`&&p(e.stageId,t),C=`${a}-stage-${e.stageId}-detail`;return(0,M.jsxs)(`div`,{ref:y.ref,tabIndex:y.tabIndex,"data-flashed":y.dataFlashed,className:`space-y-2 ${T} transition-colors ${y.flashClassName}`,children:[(0,M.jsx)(k,{stageId:e.stageId,appModel:t}),(0,M.jsx)(`ul`,{className:`flex flex-col gap-1.5`,children:e.findings.map((e,t)=>(0,M.jsxs)(`li`,{className:`flex flex-wrap items-center gap-2 text-xs text-muted-foreground`,children:[(0,M.jsx)(l,{impactBand:e.impactBand}),(0,M.jsx)(`span`,{children:o(e)}),(0,M.jsx)(S,{finding:e}),(0,M.jsx)(c,{children:(0,M.jsx)(m,{confidence:e.confidence,validationRequired:e.validationRequired})})]},t))}),b?.taskDurationP50==null?null:(0,M.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`P50 `,r(b.taskDurationP50),` · P95 `,r(b.taskDurationP95),` · Max`,` `,r(b.taskDurationMax)]}),e.slowHost?(0,M.jsxs)(`p`,{className:`flex items-start gap-2 text-xs`,children:[(0,M.jsx)(l,{impactBand:e.slowHost.impactBand,className:`mt-1`}),(0,M.jsxs)(`span`,{children:[(0,M.jsx)(`strong`,{children:`Slow host:`}),` `,e.slowHost.host,` (`,e.slowHost.value,`× median,`,` `,Math.round((e.slowHost.hostTaskShare??0)*100),`% of tasks)`]})]}):null,e.straggler?(0,M.jsxs)(`p`,{className:`flex items-start gap-2 text-xs`,children:[(0,M.jsx)(l,{impactBand:e.straggler.impactBand,className:`mt-1`}),(0,M.jsxs)(`span`,{children:[(0,M.jsx)(`strong`,{children:`Stragglers:`}),` `,(e.straggler.speculativeTasks??0)>0?`${e.straggler.speculativeTasks} speculative task${e.straggler.speculativeTasks===1?``:`s`}`:`${e.straggler.value}% of tasks > 4× P50`]})]}):null,(0,M.jsx)(N,{expanded:d,onClick:g,label:`Task detail`,location:`Stage ${e.stageId}`,controlsId:C}),d?(0,M.jsxs)(`div`,{id:C,className:`space-y-3 pt-1`,children:[f?(0,M.jsx)(v,{metrics:f.metrics,fieldNames:f.fieldNames,markers:{p50:b?.taskDurationP50,p95:b?.taskDurationP95}}):s?(0,M.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Task data isn’t included in exported reports.`}):h?(0,M.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Task data unavailable for this stage.`}):(0,M.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading task data…`}),x?(0,M.jsx)(A,{stageId:e.stageId,appModel:t}):null]}):null]})}var I=(0,j.memo)(function({appModel:e,catalog:t,getTaskData:r,defaultCollapsed:i=!0,type:o,title:s,idPrefix:c,findingLabel:l}){let[d,p]=(0,j.useState)(0),{sortMode:m,setSortMode:_,orderBy:v}=O(),[S,w]=(0,j.useState)(!i),{relevant:T,stageGroups:k,orderedGroups:A}=(0,j.useMemo)(()=>{let e=t.filter(e=>e.type===o),r=new Map;for(let t of e)t.stageId!=null&&(r.has(t.stageId)||r.set(t.stageId,[]),r.get(t.stageId).push(t));let i=[...r.entries()].map(([e,n])=>({stageId:e,findings:n,impactBand:u(n)??`info`,slowHost:f(t,`slowHost`).find(t=>t.stageId===e),straggler:f(t,`straggler`).find(t=>t.stageId===e)})).sort((e,t)=>n[e.impactBand]-n[t.impactBand]||e.stageId-t.stageId);return{relevant:e,stageGroups:i,orderedGroups:v(i,e=>e.findings,e=>e.stageId)}},[t,m,o]),N=h(),P=N?A.findIndex(e=>e.findings.some(e=>e===N.finding)):null,{totalPages:I,effectivePage:L,visible:R}=E(A,d,p,P);if(T.length===0)return null;let z=u(T);return(0,M.jsxs)(g,{title:s,impactBand:z,fixFor:T,badges:(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(a,{type:o,impactBand:z??`info`}),C(T,k.length,S)?(0,M.jsx)(D,{mode:m,onChange:_}):null]}),open:S,onOpenChange:w,summary:(0,M.jsx)(y,{value:`${k.length} stage${k.length===1?``:`s`}`,context:x(T.length)}),children:[(0,M.jsx)(`div`,{className:`space-y-3`,children:R.map(t=>(0,M.jsx)(F,{group:t,appModel:e,getTaskData:r,idPrefix:c,findingLabel:l},t.stageId))}),(0,M.jsx)(b,{page:L,totalPages:I,onPrev:()=>p(e=>e-1),onNext:()=>p(e=>e+1)})]})});export{I as t};
@@ -1 +1 @@
1
- import{p as e}from"./plan-graph-vendor-B0sEms9Z.js";import{i as t}from"./Dashboard-CC_BXrNy.js";var n=e();function r({stageId:e,appModel:r}){let i=r.stages.get(e);return(0,n.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,n.jsx)(t,{stageId:e}),(0,n.jsx)(`span`,{className:`text-sm font-medium`,children:i?.name??`Stage ${e}`})]})}export{r as t};
1
+ import{p as e}from"./plan-graph-vendor-BYl-AzN5.js";import{i as t}from"./Dashboard-C1hNeX49.js";var n=e();function r({stageId:e,appModel:r}){let i=r.stages.get(e);return(0,n.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,n.jsx)(t,{stageId:e}),(0,n.jsx)(`span`,{className:`text-sm font-medium`,children:i?.name??`Stage ${e}`})]})}export{r as t};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{$ as n,it as r}from"./DisclosureContext-Ds0hcZFn.js";import{p as i}from"./plan-graph-vendor-B0sEms9Z.js";import{t as a}from"./StageFindingGroup-B1A0nf-e.js";var o=e(t(),1),s=i(),c={lowParallelism:`Low parallelism`,dataExplosion:`Data explosion`,taskStageSkew:`Task/stage skew`};function l(e){let t=e.type===`stageShape`?c[e.rule]:`stage shape`;return e.type===`stageShape`?e.rule===`lowParallelism`?`${t}: ${e.value} tasks per core`:e.rule===`taskStageSkew`?`${t}: ${n(`pctFraction`,r(e))}`:`${t}: ${e.value}`:`${t}: ${e.value}`}var u=(0,o.memo)(function(e){return(0,s.jsx)(a,{...e,type:`stageShape`,title:`Stage Shape`,idPrefix:`stage-shape`,findingLabel:l})});export{u as StageShape};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{$ as n,it as r}from"./DisclosureContext-ZpE6CkHx.js";import{p as i}from"./plan-graph-vendor-BYl-AzN5.js";import{t as a}from"./StageFindingGroup-BEtPWcT0.js";var o=e(t(),1),s=i(),c={lowParallelism:`Low parallelism`,dataExplosion:`Data explosion`,taskStageSkew:`Task/stage skew`};function l(e){let t=e.type===`stageShape`?c[e.rule]:`stage shape`;return e.type===`stageShape`?e.rule===`lowParallelism`?`${t}: ${e.value} tasks per core`:e.rule===`taskStageSkew`?`${t}: ${n(`pctFraction`,r(e))}`:`${t}: ${e.value}`:`${t}: ${e.value}`}var u=(0,o.memo)(function(e){return(0,s.jsx)(a,{...e,type:`stageShape`,title:`Stage Shape`,idPrefix:`stage-shape`,findingLabel:l})});export{u as StageShape};