sparkforensics-server 0.6.0 → 0.8.1

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 (410) hide show
  1. package/index.js +16 -7
  2. package/package.json +1 -1
  3. package/public/assets/AutoscalingChurn-DenWKTv-.js +1 -0
  4. package/public/assets/CacheUtilization-DLz7NdjV.js +1 -0
  5. package/public/assets/CachingOpportunity-zpQIqhzm.js +1 -0
  6. package/public/assets/ChartTheme-DAiARbLP.js +8 -0
  7. package/public/assets/ColdStart-C-9HjxWl.js +1 -0
  8. package/public/assets/ConfigAudit-D0V9tcrJ.js +1 -0
  9. package/public/assets/CoreUsageArea-yeerrljd.js +1 -0
  10. package/public/assets/Dashboard-DkUPrHKV.js +1 -0
  11. package/public/assets/DisclosureContext-DK1_iz6J.js +1 -0
  12. package/public/assets/DuplicatePlanSubtree-xDNDbCd3.js +1 -0
  13. package/public/assets/DurationHistogram-B6jsE0Ov.js +1 -0
  14. package/public/assets/EmptyState-C1uL40VU.js +1 -0
  15. package/public/assets/ExecutorUtilization-DXDZKmSc.js +1 -0
  16. package/public/assets/GcPressure-MRf7I4IG.js +1 -0
  17. package/public/assets/ImpactEstimate-Dm3xWbzV.js +1 -0
  18. package/public/assets/IncompleteRun-CaLOhMtf.js +1 -0
  19. package/public/assets/JobFailures-CzmzlvhO.js +1 -0
  20. package/public/assets/MemoryUtilization-AWUMUjCH.js +1 -0
  21. package/public/assets/NestedLoopJoin-C9sNr6Ss.js +1 -0
  22. package/public/assets/OverBroadcast-BOmRE6ca.js +1 -0
  23. package/public/assets/PartitionHint-BL2EmJfE.js +1 -0
  24. package/public/assets/PartitionSizing-BzBySvUq.js +1 -0
  25. package/public/assets/PlanExplorer-DdiQRcJU.js +1 -0
  26. package/public/assets/PlanGraphRoute-CIH9gBuR.js +1 -0
  27. package/public/assets/PlanView-B1hxzFRs.js +2 -0
  28. package/public/assets/PythonUdf-DvgCCueD.js +1 -0
  29. package/public/assets/RetryWaste-uXXu_CyM.js +1 -0
  30. package/public/assets/RowPagination-C-LzWkI5.js +1 -0
  31. package/public/assets/RowStatusCluster-Dbtmte7l.js +1 -0
  32. package/public/assets/ShuffleIO-nALwzC1_.js +1 -0
  33. package/public/assets/Skew-CHMEKgvk.js +1 -0
  34. package/public/assets/SlowHost-yyvjpHk6.js +1 -0
  35. package/public/assets/SmallFiles-y6odJ97n.js +1 -0
  36. package/public/assets/SpeculationWaste-C-SD2LOt.js +1 -0
  37. package/public/assets/Spill-DHTMmOup.js +1 -0
  38. package/public/assets/StageFailed-CQ3DxC9R.js +1 -0
  39. package/public/assets/StageFindingGroup-BgYLyj5q.js +1 -0
  40. package/public/assets/StageHeader-CIETkjVZ.js +1 -0
  41. package/public/assets/StagePill--P7PDd3s.js +1 -0
  42. package/public/assets/StageShape-BIv8vx_o.js +1 -0
  43. package/public/assets/StageSlowness-MMqzERxN.js +1 -0
  44. package/public/assets/Straggler-BgrY7AyW.js +1 -0
  45. package/public/assets/TaskFailures-BHHyKYTs.js +1 -0
  46. package/public/assets/TinyTask-DDScNhCl.js +1 -0
  47. package/public/assets/UnderBroadcast-CGIC04TI.js +1 -0
  48. package/public/assets/WidgetLeadSummary-CXFZP00C.js +1 -0
  49. package/public/assets/button-DbpTz2yk.js +1 -0
  50. package/public/assets/charts-vendor-CtTxwTeu.js +59 -0
  51. package/public/assets/composite-C9Nu2EI9.js +1 -0
  52. package/public/assets/d3-vendor-DNlD2-cz.js +1 -0
  53. package/public/assets/detector-registry-Bp8hrLua.js +2 -0
  54. package/public/assets/downsample-WmNM1qc9.js +1 -0
  55. package/public/assets/finding-anchor-Dr40LkS9.js +1 -0
  56. package/public/assets/findings-of-type-BL2u3RGZ.js +1 -0
  57. package/public/assets/impact-sort-mC5ISgX8.js +1 -0
  58. package/public/assets/inbox-KPU1Gppm.js +1 -0
  59. package/public/assets/index-CaRVPvAT.css +2 -0
  60. package/public/assets/index-fDiwfuoO.js +14 -0
  61. package/public/assets/inertValue-L9VxV0VE.js +1 -0
  62. package/public/assets/layout.worker-CLcBHxVp.js +3 -0
  63. package/public/assets/{parser-worker-CA5RxqKc.js → parser-worker-CRIOPMOW.js} +8 -8
  64. package/public/assets/plan-graph-vendor-Ce6d4HU6.js +7 -0
  65. package/public/assets/react-vendor-C6KcUD36.js +9 -0
  66. package/public/assets/select-BHqOqun5.js +1 -0
  67. package/public/assets/toggle-DPeN6aNa.js +1 -0
  68. package/public/assets/toggle-group-Kl3uyHSr.js +1 -0
  69. package/public/assets/usePagedRows-BafD6bEN.js +1 -0
  70. package/public/assets/useRecentFiles-DzJZAoOT.js +3 -0
  71. package/public/assets/useRegisterFieldControl-pQv-ZDoU.js +1 -0
  72. package/public/assets/useScrollLock-BCxn_dMp.js +1 -0
  73. package/public/assets/useSortMode-DjrAN-z4.js +1 -0
  74. package/public/docs/404.html +3 -3
  75. package/public/docs/assets/{app.CnWL6bKV.js → app.1gvzd5Zb.js} +1 -1
  76. package/public/docs/assets/chunks/@localSearchIndexroot.DS2TQP5_.js +1 -0
  77. package/public/docs/assets/chunks/{VPLocalSearchBox.C0IBKeRQ.js → VPLocalSearchBox.CNxT3s0I.js} +1 -1
  78. package/public/docs/assets/chunks/{theme.BH-2HuRf.js → theme.C5lLqUv7.js} +2 -2
  79. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CqKM_jEG.js +1 -0
  80. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CqKM_jEG.lean.js +1 -0
  81. package/public/docs/assets/{contributor-guide_architecture_board-widgets_caching-and-memory.md.CQgn1t_M.js → contributor-guide_architecture_board-widgets_caching-and-memory.md.BYDo3ClR.js} +1 -1
  82. package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.ajUAVdbc.js +1 -0
  83. package/public/docs/assets/{contributor-guide_architecture_board-widgets_visual-system-and-templating.md.wulOueeB.js → contributor-guide_architecture_board-widgets_visual-system-and-templating.md.WqY74T0T.js} +1 -1
  84. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.WqY74T0T.lean.js +1 -0
  85. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CHHgywoP.js +1 -0
  86. package/public/docs/assets/{contributor-guide_architecture_detector-contract.md.N4hhenrA.lean.js → contributor-guide_architecture_detector-contract.md.CHHgywoP.lean.js} +1 -1
  87. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.DIz3_oz9.js +1 -0
  88. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.DIz3_oz9.lean.js +1 -0
  89. package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.WH4tRHPL.js +1 -0
  90. package/public/docs/assets/{contributor-guide_architecture_detector-contract_threshold-tables.md.Dp3c40rx.lean.js → contributor-guide_architecture_detector-contract_threshold-tables.md.WH4tRHPL.lean.js} +1 -1
  91. package/public/docs/assets/{contributor-guide_architecture_drill-down.md.CqZPrdo9.js → contributor-guide_architecture_drill-down.md.yB-Hz2XT.js} +1 -1
  92. package/public/docs/assets/{contributor-guide_architecture_drill-down.md.CqZPrdo9.lean.js → contributor-guide_architecture_drill-down.md.yB-Hz2XT.lean.js} +1 -1
  93. package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.BQZE04sw.js +1 -0
  94. package/public/docs/assets/{contributor-guide_architecture_drill-down_plan-graph.md.DwOozIEs.lean.js → contributor-guide_architecture_drill-down_plan-graph.md.BQZE04sw.lean.js} +1 -1
  95. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.K71YB-Rr.js +1 -0
  96. package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.DfvbqEUu.lean.js → contributor-guide_architecture_impact-estimation.md.K71YB-Rr.lean.js} +1 -1
  97. package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.DLCAffwn.js +1 -0
  98. package/public/docs/assets/{contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.Cwm1jHmn.lean.js → contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.DLCAffwn.lean.js} +1 -1
  99. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.JFrzDMwo.js +1 -0
  100. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.JFrzDMwo.lean.js +1 -0
  101. package/public/docs/assets/contributor-guide_architecture_overview.md.nxkpOhgf.js +1 -0
  102. package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.U-9KMDFK.js +1 -0
  103. package/public/docs/assets/{contributor-guide_architecture_state-and-history_run-comparison-internals.md.CZA0JLtV.lean.js → contributor-guide_architecture_state-and-history_run-comparison-internals.md.U-9KMDFK.lean.js} +1 -1
  104. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BrSz8Ezh.js +1 -0
  105. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.B7rjSF_h.js +1 -0
  106. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.B7rjSF_h.lean.js +1 -0
  107. package/public/docs/assets/{contributor-guide_architecture_widget-rendering_list-sort-mode.md.BuHKgH0C.js → contributor-guide_architecture_widget-rendering_list-sort-mode.md.37hcZJ7q.js} +1 -1
  108. package/public/docs/assets/{contributor-guide_architecture_widget-rendering_row-expand-contract.md.ZT89u9f1.js → contributor-guide_architecture_widget-rendering_row-expand-contract.md.mK_VmAWk.js} +1 -1
  109. package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.BAnhi2-d.js → contributor-guide_architecture_worker-protocol.md.Br6OE7RW.js} +1 -1
  110. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.Br6OE7RW.lean.js +1 -0
  111. package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.IVyaXrGe.js +1 -0
  112. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_cli-and-mcp.md.BX1XnFbq.lean.js → contributor-guide_architecture_worker-protocol_cli-and-mcp.md.IVyaXrGe.lean.js} +1 -1
  113. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DSVFPpWb.js → contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DVSXn-bb.js} +1 -1
  114. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_evidence-availability.md.CjimIDBY.js → contributor-guide_architecture_worker-protocol_evidence-availability.md.D3S5cyOW.js} +2 -2
  115. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_evidence-availability.md.CjimIDBY.lean.js → contributor-guide_architecture_worker-protocol_evidence-availability.md.D3S5cyOW.lean.js} +1 -1
  116. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.CtmCU57I.js +1 -0
  117. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_evidence-report.md.CiQl1MLb.lean.js → contributor-guide_architecture_worker-protocol_evidence-report.md.CtmCU57I.lean.js} +1 -1
  118. package/public/docs/assets/contributor-guide_contributing.md.DBW4drtZ.js +1 -0
  119. package/public/docs/assets/contributor-guide_development-setup.md.B21ZTDhn.js +15 -0
  120. package/public/docs/assets/contributor-guide_development-setup.md.B21ZTDhn.lean.js +1 -0
  121. package/public/docs/assets/contributor-guide_testing.md.DpkozNoG.js +4 -0
  122. package/public/docs/assets/{contributor-guide_testing.md.By6XGR9a.lean.js → contributor-guide_testing.md.DpkozNoG.lean.js} +1 -1
  123. package/public/docs/assets/{index.md.CHJVslga.js → index.md.lMm7SUMz.js} +1 -1
  124. package/public/docs/assets/{index.md.CHJVslga.lean.js → index.md.lMm7SUMz.lean.js} +1 -1
  125. package/public/docs/assets/{style.CyK9Ss73.css → style.Cfxqlj0y.css} +1 -1
  126. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.C0pcQoNc.js +29 -0
  127. package/public/docs/assets/{user-guide_getting-started_ci-and-automation.md.BEepbDDL.lean.js → user-guide_getting-started_ci-and-automation.md.C0pcQoNc.lean.js} +1 -1
  128. package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.CGaxPX_1.js +1 -0
  129. package/public/docs/assets/{user-guide_getting-started_tuning-thresholds.md.B_MyjyZm.js → user-guide_getting-started_tuning-thresholds.md.BGVE-wrc.js} +2 -2
  130. package/public/docs/assets/{user-guide_getting-started_tuning-thresholds.md.B_MyjyZm.lean.js → user-guide_getting-started_tuning-thresholds.md.BGVE-wrc.lean.js} +1 -1
  131. package/public/docs/assets/{user-guide_mcp-tools.md.C65SjWUL.js → user-guide_mcp-tools.md.49r3L2YE.js} +1 -1
  132. package/public/docs/assets/{user-guide_mcp-tools_compare-runs.md.Cc_gLoix.js → user-guide_mcp-tools_compare-runs.md.BQ_kIptC.js} +11 -6
  133. package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.BQ_kIptC.lean.js +1 -0
  134. package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.azCZXkH8.js +44 -0
  135. package/public/docs/assets/{user-guide_mcp-tools_diagnose-run.md.BP1vnHA5.lean.js → user-guide_mcp-tools_diagnose-run.md.azCZXkH8.lean.js} +1 -1
  136. package/public/docs/assets/{user-guide_mcp-tools_evaluate-budgets.md.BB0nDY3Z.js → user-guide_mcp-tools_evaluate-budgets.md.dpQpRQ7z.js} +2 -2
  137. package/public/docs/assets/{user-guide_mcp-tools_evaluate-budgets.md.BB0nDY3Z.lean.js → user-guide_mcp-tools_evaluate-budgets.md.dpQpRQ7z.lean.js} +1 -1
  138. package/public/docs/assets/{user-guide_mcp-tools_get-finding-evidence.md.rKyu4wts.js → user-guide_mcp-tools_get-finding-evidence.md.CH6FkNLX.js} +2 -1
  139. package/public/docs/assets/{user-guide_mcp-tools_get-finding-evidence.md.rKyu4wts.lean.js → user-guide_mcp-tools_get-finding-evidence.md.CH6FkNLX.lean.js} +1 -1
  140. package/public/docs/assets/user-guide_run-comparison.md.B_LOkdBf.js +1 -0
  141. package/public/docs/assets/user-guide_run-comparison.md.B_LOkdBf.lean.js +1 -0
  142. package/public/docs/assets/user-guide_understanding-findings.md.C4riKCKl.js +1 -0
  143. package/public/docs/assets/user-guide_understanding-findings.md.C4riKCKl.lean.js +1 -0
  144. package/public/docs/contributor-guide/architecture/board-widgets/caching-and-memory.html +6 -6
  145. package/public/docs/contributor-guide/architecture/board-widgets/plan-advisor.html +6 -6
  146. package/public/docs/contributor-guide/architecture/board-widgets/visual-system-and-templating.html +6 -6
  147. package/public/docs/contributor-guide/architecture/board-widgets.html +6 -6
  148. package/public/docs/contributor-guide/architecture/detector-contract/plan-attribution.html +6 -6
  149. package/public/docs/contributor-guide/architecture/detector-contract/threshold-tables.html +6 -6
  150. package/public/docs/contributor-guide/architecture/detector-contract.html +6 -6
  151. package/public/docs/contributor-guide/architecture/drill-down/plan-graph.html +6 -6
  152. package/public/docs/contributor-guide/architecture/drill-down.html +6 -6
  153. package/public/docs/contributor-guide/architecture/impact-estimation/caveats-tuning-and-coverage.html +6 -6
  154. package/public/docs/contributor-guide/architecture/impact-estimation/stage-union-rollup.html +6 -6
  155. package/public/docs/contributor-guide/architecture/impact-estimation.html +6 -6
  156. package/public/docs/contributor-guide/architecture/index.html +5 -5
  157. package/public/docs/contributor-guide/architecture/overview.html +6 -6
  158. package/public/docs/contributor-guide/architecture/state-and-history/history-server-intake.html +5 -5
  159. package/public/docs/contributor-guide/architecture/state-and-history/run-comparison-internals.html +6 -6
  160. package/public/docs/contributor-guide/architecture/state-and-history.html +5 -5
  161. package/public/docs/contributor-guide/architecture/widget-rendering/findings-tab.html +6 -6
  162. package/public/docs/contributor-guide/architecture/widget-rendering/investigation-routing.html +5 -5
  163. package/public/docs/contributor-guide/architecture/widget-rendering/list-sort-mode.html +6 -6
  164. package/public/docs/contributor-guide/architecture/widget-rendering/reference-section.html +5 -5
  165. package/public/docs/contributor-guide/architecture/widget-rendering/row-expand-contract.html +6 -6
  166. package/public/docs/contributor-guide/architecture/widget-rendering.html +6 -6
  167. package/public/docs/contributor-guide/architecture/worker-protocol/cli-and-mcp.html +6 -6
  168. package/public/docs/contributor-guide/architecture/worker-protocol/core-and-event-validation.html +6 -6
  169. package/public/docs/contributor-guide/architecture/worker-protocol/evidence-availability.html +7 -7
  170. package/public/docs/contributor-guide/architecture/worker-protocol/evidence-report.html +6 -6
  171. package/public/docs/contributor-guide/architecture/worker-protocol.html +6 -6
  172. package/public/docs/contributor-guide/contributing.html +6 -6
  173. package/public/docs/contributor-guide/development-setup.html +8 -8
  174. package/public/docs/contributor-guide/testing.html +9 -6
  175. package/public/docs/hashmap.json +1 -1
  176. package/public/docs/index.html +6 -6
  177. package/public/docs/logo-dark.svg +1 -0
  178. package/public/docs/logo-light.svg +1 -0
  179. package/public/docs/tuning-reference/anti-patterns.html +5 -5
  180. package/public/docs/tuning-reference/aqe.html +5 -5
  181. package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +5 -5
  182. package/public/docs/tuning-reference/bottleneck-cold-start.html +5 -5
  183. package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +5 -5
  184. package/public/docs/tuning-reference/bottleneck-failures.html +5 -5
  185. package/public/docs/tuning-reference/bottleneck-gc.html +5 -5
  186. package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +5 -5
  187. package/public/docs/tuning-reference/bottleneck-memory-utilization.html +5 -5
  188. package/public/docs/tuning-reference/bottleneck-retry-waste.html +5 -5
  189. package/public/docs/tuning-reference/bottleneck-shuffle.html +5 -5
  190. package/public/docs/tuning-reference/bottleneck-skew.html +5 -5
  191. package/public/docs/tuning-reference/bottleneck-slow-host.html +5 -5
  192. package/public/docs/tuning-reference/bottleneck-small-files.html +5 -5
  193. package/public/docs/tuning-reference/bottleneck-spill.html +5 -5
  194. package/public/docs/tuning-reference/bottleneck-straggler.html +5 -5
  195. package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +5 -5
  196. package/public/docs/tuning-reference/bottleneck-utilization.html +5 -5
  197. package/public/docs/tuning-reference/caching.html +5 -5
  198. package/public/docs/tuning-reference/cluster-config.html +5 -5
  199. package/public/docs/tuning-reference/config.html +5 -5
  200. package/public/docs/tuning-reference/data-formats.html +5 -5
  201. package/public/docs/tuning-reference/index.html +5 -5
  202. package/public/docs/tuning-reference/intro.html +5 -5
  203. package/public/docs/tuning-reference/joins.html +5 -5
  204. package/public/docs/tuning-reference/memory-model.html +5 -5
  205. package/public/docs/tuning-reference/metrics.html +5 -5
  206. package/public/docs/tuning-reference/partitioning.html +5 -5
  207. package/public/docs/tuning-reference/pyspark.html +5 -5
  208. package/public/docs/tuning-reference/shuffle.html +5 -5
  209. package/public/docs/tuning-reference/spark-architecture.html +5 -5
  210. package/public/docs/tuning-reference/table-formats.html +5 -5
  211. package/public/docs/user-guide/alternative-log-retrieval/managed-platforms.html +5 -5
  212. package/public/docs/user-guide/alternative-log-retrieval/ssh-bastion.html +5 -5
  213. package/public/docs/user-guide/alternative-log-retrieval.html +5 -5
  214. package/public/docs/user-guide/getting-started/ci-and-automation.html +16 -11
  215. package/public/docs/user-guide/getting-started/reading-the-dashboard.html +6 -6
  216. package/public/docs/user-guide/getting-started/regression-metric-keys.html +5 -5
  217. package/public/docs/user-guide/getting-started/tuning-thresholds.html +7 -7
  218. package/public/docs/user-guide/getting-started.html +5 -5
  219. package/public/docs/user-guide/mcp-tools/compare-runs.html +16 -11
  220. package/public/docs/user-guide/mcp-tools/diagnose-run.html +28 -7
  221. package/public/docs/user-guide/mcp-tools/evaluate-budgets.html +6 -6
  222. package/public/docs/user-guide/mcp-tools/get-finding-documentation.html +5 -5
  223. package/public/docs/user-guide/mcp-tools/get-finding-evidence.html +7 -6
  224. package/public/docs/user-guide/mcp-tools/get-reference-doc.html +5 -5
  225. package/public/docs/user-guide/mcp-tools/get-run-summary.html +5 -5
  226. package/public/docs/user-guide/mcp-tools/list-runs.html +5 -5
  227. package/public/docs/user-guide/mcp-tools.html +6 -6
  228. package/public/docs/user-guide/run-comparison/how-stages-are-matched.html +5 -5
  229. package/public/docs/user-guide/run-comparison.html +6 -6
  230. package/public/docs/user-guide/understanding-findings.html +6 -6
  231. package/public/export-template.html +45 -45
  232. package/public/index.html +8 -7
  233. package/public/sample-runs/sample-run.ndjson.gz +0 -0
  234. package/vendor-core/allocation.js +25 -23
  235. package/vendor-core/analyzer.js +85 -58
  236. package/vendor-core/api-merge-writes.js +2 -0
  237. package/vendor-core/aqe-skew.js +347 -0
  238. package/vendor-core/cli/budgets.js +6 -4
  239. package/vendor-core/cli/collect-run-pair.js +89 -0
  240. package/vendor-core/cli/collect-run-worker.js +16 -0
  241. package/vendor-core/cli/collect-run.js +1 -2
  242. package/vendor-core/cli/native-zstd.js +12 -16
  243. package/vendor-core/comparability.js +234 -0
  244. package/vendor-core/comparison-output.js +15 -7
  245. package/vendor-core/comparison-verdict.js +105 -25
  246. package/vendor-core/core-source-hash.txt +1 -1
  247. package/vendor-core/core-time-series.js +0 -1
  248. package/vendor-core/core-usage-locality.js +1 -1
  249. package/vendor-core/detectors.js +1007 -380
  250. package/vendor-core/docs-config.js +0 -4
  251. package/vendor-core/docs-content/detection/cache.md +2 -1
  252. package/vendor-core/docs-content/detection/cfg.md +19 -11
  253. package/vendor-core/docs-content/detection/cold.md +2 -1
  254. package/vendor-core/docs-content/detection/gc.md +7 -3
  255. package/vendor-core/docs-content/detection/host.md +11 -1
  256. package/vendor-core/docs-content/detection/mem.md +17 -6
  257. package/vendor-core/docs-content/detection/part.md +3 -1
  258. package/vendor-core/docs-content/detection/plan.md +55 -13
  259. package/vendor-core/docs-content/detection/shfl.md +11 -5
  260. package/vendor-core/docs-content/detection/skew.md +47 -1
  261. package/vendor-core/docs-content/detection/slow.md +4 -2
  262. package/vendor-core/docs-content/detection/spec.md +6 -1
  263. package/vendor-core/docs-content/detection/spill.md +6 -3
  264. package/vendor-core/docs-content/detection/strag.md +19 -6
  265. package/vendor-core/docs-content/detection/tiny.md +9 -3
  266. package/vendor-core/effective-conf.js +7 -10
  267. package/vendor-core/efficiency-model.js +2 -2
  268. package/vendor-core/etl-phases.js +1 -2
  269. package/vendor-core/event-handlers.js +175 -57
  270. package/vendor-core/event-schemas.js +21 -16
  271. package/vendor-core/evidence-availability.js +9 -2
  272. package/vendor-core/evidence-report.js +118 -35
  273. package/vendor-core/executor-peaks.js +41 -0
  274. package/vendor-core/export-data.js +5 -5
  275. package/vendor-core/finding-identity.js +78 -0
  276. package/vendor-core/finding-presentation.js +116 -33
  277. package/vendor-core/finding-types.js +88 -21
  278. package/vendor-core/format-utils.js +14 -15
  279. package/vendor-core/html-export.js +1 -1
  280. package/vendor-core/impact-band.js +2 -2
  281. package/vendor-core/impact-format.js +47 -19
  282. package/vendor-core/impact-model.js +26 -15
  283. package/vendor-core/job-groups.js +4 -4
  284. package/vendor-core/mcp-server-factory.js +48 -12
  285. package/vendor-core/mcp-tools.js +179 -24
  286. package/vendor-core/median.js +2 -2
  287. package/vendor-core/nested-loop-join.js +73 -0
  288. package/vendor-core/occupancy.js +1 -2
  289. package/vendor-core/parser-worker.js +1 -1
  290. package/vendor-core/plan-graph-model.js +14 -22
  291. package/vendor-core/plan-node-detail.js +2 -3
  292. package/vendor-core/plan-summary.js +24 -19
  293. package/vendor-core/plan-tree-walk.js +6 -8
  294. package/vendor-core/python-stage.js +12 -1
  295. package/vendor-core/recommendation-rollup.js +13 -12
  296. package/vendor-core/redact.js +52 -46
  297. package/vendor-core/run-aggregates.js +6 -8
  298. package/vendor-core/run-comparison.js +226 -66
  299. package/vendor-core/run-identity.js +12 -0
  300. package/vendor-core/run-interpretation.js +21 -0
  301. package/vendor-core/run-metrics.js +2 -2
  302. package/vendor-core/run-output.js +32 -10
  303. package/vendor-core/run-totals.js +12 -0
  304. package/vendor-core/run-verdict.js +76 -3
  305. package/vendor-core/scaling-sim.js +3 -4
  306. package/vendor-core/snappy-block.js +2 -2
  307. package/vendor-core/spark-conf.js +168 -0
  308. package/vendor-core/sql-stages.js +2 -2
  309. package/vendor-core/stage-alignment.js +2 -12
  310. package/vendor-core/stage-identity.js +58 -3
  311. package/vendor-core/stage-label.js +14 -0
  312. package/vendor-core/stage-plan-nodes.js +17 -3
  313. package/vendor-core/stage-quantiles.js +141 -9
  314. package/vendor-core/stage-structure.js +17 -3
  315. package/vendor-core/threshold-overrides.js +9 -3
  316. package/vendor-core/types.js +58 -21
  317. package/vendor-core/wasted-core-hours.js +0 -1
  318. package/vendor-core/write-targets.js +114 -14
  319. package/vendor-core/zstd-worker-client.js +1 -1
  320. package/vendor-core/zstd-worker.js +1 -1
  321. package/public/assets/AutoscalingChurn-CRA2Mb7F.js +0 -1
  322. package/public/assets/CacheUtilization-Bh9OY_V9.js +0 -1
  323. package/public/assets/CachingOpportunity-oCiQwmTJ.js +0 -1
  324. package/public/assets/ColdStart-BJrtjfmn.js +0 -1
  325. package/public/assets/ConfigAudit-DMvKxySP.js +0 -1
  326. package/public/assets/CoreUsageArea-REC2zsKw.js +0 -1
  327. package/public/assets/Dashboard-BHZ76JCu.js +0 -2
  328. package/public/assets/DisclosureContext-OO7X1HAx.js +0 -1
  329. package/public/assets/DuplicatePlanSubtree-BgG-L-cK.js +0 -1
  330. package/public/assets/ExecutorUtilization-D2KhSVbY.js +0 -1
  331. package/public/assets/GcPressure-D1BTE8qh.js +0 -1
  332. package/public/assets/IncompleteRun-DD40xUpy.js +0 -1
  333. package/public/assets/JobFailures-YwNzCF19.js +0 -1
  334. package/public/assets/MemoryUtilization-9b8ee_3_.js +0 -1
  335. package/public/assets/OverBroadcast-CfctS8a8.js +0 -1
  336. package/public/assets/PartitionHint-CUvbnnxy.js +0 -1
  337. package/public/assets/PartitionSizing-VG8kBgG5.js +0 -1
  338. package/public/assets/PlanExplorer-DmubTAOP.js +0 -1
  339. package/public/assets/PlanGraphRoute-DctPZjS0.js +0 -1
  340. package/public/assets/RetryWaste-CnpM8bB7.js +0 -1
  341. package/public/assets/ShuffleIO-D13vGmas.js +0 -1
  342. package/public/assets/Skew-DlagstYP.js +0 -1
  343. package/public/assets/SlowHost-cSkLRZ_e.js +0 -1
  344. package/public/assets/SmallFiles-B-kERMcq.js +0 -1
  345. package/public/assets/SpeculationWaste-DaysAzXO.js +0 -1
  346. package/public/assets/Spill-H44Gz4US.js +0 -1
  347. package/public/assets/StageFailed-DCfii9h_.js +0 -1
  348. package/public/assets/StageFindingGroup-BXJ0Mj5n.js +0 -1
  349. package/public/assets/StageHeader--oN2J-oD.js +0 -1
  350. package/public/assets/StageShape-IZ80CZiJ.js +0 -1
  351. package/public/assets/StageSlowness--BRIaBc1.js +0 -1
  352. package/public/assets/Straggler-Ctq0Df_o.js +0 -1
  353. package/public/assets/TaskFailures-Bks_gqhL.js +0 -1
  354. package/public/assets/TinyTask-BssfzGFB.js +0 -1
  355. package/public/assets/UnderBroadcast-DsScrxc-.js +0 -1
  356. package/public/assets/charts-vendor-0VMaLVLN.js +0 -59
  357. package/public/assets/finding-anchor-BYW1oz5R.js +0 -1
  358. package/public/assets/impact-sort-xzy0g-Vh.js +0 -1
  359. package/public/assets/index-DhpRGMZc.css +0 -2
  360. package/public/assets/index-DwqkFUFk.js +0 -14
  361. package/public/assets/plan-graph-vendor-BYl-AzN5.js +0 -7
  362. package/public/assets/react-vendor-DfpuPQZf.js +0 -9
  363. package/public/assets/select-C8edjYTq.js +0 -1
  364. package/public/assets/usePagedRows-CsuUFeYx.js +0 -1
  365. package/public/assets/useRecentFiles-BvkKo3JN.js +0 -11
  366. package/public/assets/useSortMode-joX71BZN.js +0 -1
  367. package/public/docs/assets/chunks/@localSearchIndexroot.tE5pz54z.js +0 -1
  368. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.YQcj5EI4.js +0 -1
  369. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.YQcj5EI4.lean.js +0 -1
  370. package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.RlzvUmNm.js +0 -1
  371. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.wulOueeB.lean.js +0 -1
  372. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.N4hhenrA.js +0 -1
  373. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.js +0 -1
  374. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.lean.js +0 -1
  375. package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.Dp3c40rx.js +0 -1
  376. package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.DwOozIEs.js +0 -1
  377. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.DfvbqEUu.js +0 -1
  378. package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.Cwm1jHmn.js +0 -1
  379. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.js +0 -1
  380. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.lean.js +0 -1
  381. package/public/docs/assets/contributor-guide_architecture_overview.md.C1sSvm9i.js +0 -1
  382. package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.CZA0JLtV.js +0 -1
  383. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BOZ1azXG.js +0 -1
  384. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.js +0 -1
  385. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.lean.js +0 -1
  386. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.BAnhi2-d.lean.js +0 -1
  387. package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.BX1XnFbq.js +0 -1
  388. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.CiQl1MLb.js +0 -1
  389. package/public/docs/assets/contributor-guide_contributing.md.CQMvGwFt.js +0 -1
  390. package/public/docs/assets/contributor-guide_development-setup.md.DQdzera7.js +0 -15
  391. package/public/docs/assets/contributor-guide_development-setup.md.DQdzera7.lean.js +0 -1
  392. package/public/docs/assets/contributor-guide_testing.md.By6XGR9a.js +0 -1
  393. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.BEepbDDL.js +0 -24
  394. package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.Obf3W3__.js +0 -1
  395. package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.Cc_gLoix.lean.js +0 -1
  396. package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.BP1vnHA5.js +0 -23
  397. package/public/docs/assets/user-guide_run-comparison.md.BUALkohi.js +0 -1
  398. package/public/docs/assets/user-guide_run-comparison.md.BUALkohi.lean.js +0 -1
  399. package/public/docs/assets/user-guide_understanding-findings.md.3C7KCEZO.js +0 -1
  400. package/public/docs/assets/user-guide_understanding-findings.md.3C7KCEZO.lean.js +0 -1
  401. /package/public/docs/assets/{contributor-guide_architecture_board-widgets_caching-and-memory.md.CQgn1t_M.lean.js → contributor-guide_architecture_board-widgets_caching-and-memory.md.BYDo3ClR.lean.js} +0 -0
  402. /package/public/docs/assets/{contributor-guide_architecture_board-widgets_plan-advisor.md.RlzvUmNm.lean.js → contributor-guide_architecture_board-widgets_plan-advisor.md.ajUAVdbc.lean.js} +0 -0
  403. /package/public/docs/assets/{contributor-guide_architecture_overview.md.C1sSvm9i.lean.js → contributor-guide_architecture_overview.md.nxkpOhgf.lean.js} +0 -0
  404. /package/public/docs/assets/{contributor-guide_architecture_widget-rendering.md.BOZ1azXG.lean.js → contributor-guide_architecture_widget-rendering.md.BrSz8Ezh.lean.js} +0 -0
  405. /package/public/docs/assets/{contributor-guide_architecture_widget-rendering_list-sort-mode.md.BuHKgH0C.lean.js → contributor-guide_architecture_widget-rendering_list-sort-mode.md.37hcZJ7q.lean.js} +0 -0
  406. /package/public/docs/assets/{contributor-guide_architecture_widget-rendering_row-expand-contract.md.ZT89u9f1.lean.js → contributor-guide_architecture_widget-rendering_row-expand-contract.md.mK_VmAWk.lean.js} +0 -0
  407. /package/public/docs/assets/{contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DSVFPpWb.lean.js → contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DVSXn-bb.lean.js} +0 -0
  408. /package/public/docs/assets/{contributor-guide_contributing.md.CQMvGwFt.lean.js → contributor-guide_contributing.md.DBW4drtZ.lean.js} +0 -0
  409. /package/public/docs/assets/{user-guide_getting-started_reading-the-dashboard.md.Obf3W3__.lean.js → user-guide_getting-started_reading-the-dashboard.md.CGaxPX_1.lean.js} +0 -0
  410. /package/public/docs/assets/{user-guide_mcp-tools.md.C65SjWUL.lean.js → user-guide_mcp-tools.md.49r3L2YE.lean.js} +0 -0
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{a as t,c as n,i as r,s as i}from"./react-vendor-C6KcUD36.js";var a=e(n(),1);function o(){return typeof window<`u`}function s(e){return u(e)?(e.nodeName||``).toLowerCase():`#document`}function c(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function l(e){return((u(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function u(e){return o()?e instanceof Node||e instanceof c(e).Node:!1}function d(e){return o()?e instanceof Element||e instanceof c(e).Element:!1}function f(e){return o()?e instanceof HTMLElement||e instanceof c(e).HTMLElement:!1}function p(e){return!o()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof c(e).ShadowRoot}function m(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=T(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function h(e){return/^(table|td|th)$/.test(s(e))}function g(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var _=/transform|translate|scale|rotate|perspective|filter/,v=/paint|layout|strict|content/,y=e=>!!e&&e!==`none`,b;function x(e){let t=d(e)?T(e):e;return y(t.transform)||y(t.translate)||y(t.scale)||y(t.rotate)||y(t.perspective)||!C()&&(y(t.backdropFilter)||y(t.filter))||_.test(t.willChange||``)||v.test(t.contain||``)}function S(e){let t=D(e);for(;f(t)&&!w(t);){if(x(t))return t;if(g(t))return null;t=D(t)}return null}function C(){return b??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),b}function w(e){return/^(html|body|#document)$/.test(s(e))}function T(e){return c(e).getComputedStyle(e)}function E(e){return d(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function D(e){if(s(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||p(e)&&e.host||l(e);return p(t)?t.host:t}function O(e){let t=D(e);return w(t)?(e.ownerDocument||e).body:f(t)&&m(t)?t:O(t)}function k(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=O(e),i=r===e.ownerDocument?.body,a=c(r);if(i){let e=A(a);return t.concat(a,a.visualViewport||[],m(r)?r:[],e&&n?k(e):[])}return t.concat(r,k(r,[],n))}function A(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}var j={...a},M={};function N(e,t){let n=a.useRef(M);return n.current===M&&(n.current=e(t)),n}var P=j.useInsertionEffect,ee=P&&P!==j.useLayoutEffect?P:e=>e();function F(e){let t=N(te).current;return t.next=e,ee(t.effect),t.trampoline}function te(){let e={next:void 0,callback:ne,trampoline:(...t)=>e.callback?.(...t),effect:()=>{e.callback=e.next}};return e}function ne(){}var I=typeof document<`u`?a.useLayoutEffect:()=>{};function re(e,t){if(e&&!t)return e;if(!e&&t)return t;if(e||t)return{...e,...t}}var L={};function R(e,t,n,r,i){if(!n&&!r&&!i&&!e)return ae(t);let a=ae(e);return t&&(a=z(a,t)),n&&(a=z(a,n)),r&&(a=z(a,r)),i&&(a=z(a,i)),a}function ie(e){if(e.length===0)return L;if(e.length===1)return ae(e[0]);let t=ae(e[0]);for(let n=1;n<e.length;n+=1)t=z(t,e[n]);return t}function ae(e){return le(e)?{...ue(e,L)}:oe(e)}function z(e,t){return le(t)?ue(t,e):se(e,t)}function oe(e){let t={...e};for(let e in t){let n=t[e];ce(e,n)&&(t[e]=fe(n))}return t}function se(e,t){if(!t)return e;for(let n in t){let r=t[n];switch(n){case`style`:e[n]=re(e.style,r);break;case`className`:e[n]=me(e.className,r);break;default:e[n]=ce(n,r)?de(e[n],r):r}}return e}function ce(e,t){let n=e.charCodeAt(0),r=e.charCodeAt(1),i=e.charCodeAt(2);return n===111&&r===110&&i>=65&&i<=90&&(typeof t==`function`||t===void 0)}function le(e){return typeof e==`function`}function ue(e,t){return le(e)?e(t):e??L}function de(e,t){return t?e?(...n)=>{let r=n[0];if(he(r)){let i=r;pe(i);let a=t(...n);return i.baseUIHandlerPrevented||e?.(...n),a}let i=t(...n);return e?.(...n),i}:fe(t):e}function fe(e){return e&&((...t)=>{let n=t[0];return he(n)&&pe(n),e(...t)})}function pe(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function me(e,t){return t?e?t+` `+e:t:e}function he(e){return typeof e==`object`&&!!e&&`nativeEvent`in e}function ge(e,t){return function(n,...r){let i=new URL(e);return i.searchParams.set(`code`,n.toString()),r.forEach(e=>i.searchParams.append(`args[]`,e)),`${t} error #${n}; visit ${i} for the full message.`}}var _e=ge(`https://base-ui.com/production-error`,`Base UI`),ve=a.createContext(void 0);function ye(e=!1){let t=a.useContext(ve);if(t===void 0&&!e)throw Error(_e(16));return t}function be(e){let{focusableWhenDisabled:t,disabled:n,composite:r=!1,tabIndex:i=0,isNativeButton:o}=e,s=r&&t!==!1,c=r&&t===!1;return{props:a.useMemo(()=>{let e={onKeyDown(e){n&&t&&e.key!==`Tab`&&e.preventDefault()}};return r||(e.tabIndex=i,!o&&n&&(e.tabIndex=t?i:-1)),(o&&(t||s)||!o&&n)&&(e[`aria-disabled`]=n),o&&(!t||c)&&(e.disabled=n),e},[r,n,t,s,c,o,i])}}function xe(e,t,{detail:n=0}={}){e.dispatchEvent(new(c(e)).PointerEvent(`click`,{bubbles:!0,cancelable:!0,composed:!0,detail:n,shiftKey:t.shiftKey,ctrlKey:t.ctrlKey,altKey:t.altKey,metaKey:t.metaKey}))}function Se(e={}){let{disabled:t=!1,focusableWhenDisabled:n,tabIndex:r=0,native:i=!0,composite:o}=e,s=a.useRef(null),c=ye(!0),l=o??c!==void 0,{props:u}=be({focusableWhenDisabled:n,disabled:t,composite:l,tabIndex:r,isNativeButton:i}),d=a.useCallback(()=>{let e=s.current;Ce(e)&&l&&t&&u.disabled===void 0&&e.disabled&&(e.disabled=!1)},[t,u.disabled,l]);return I(d,[d]),{getButtonProps:a.useCallback((e={})=>{let{onClick:n,onMouseDown:r,onKeyUp:a,onKeyDown:o,onPointerDown:s,...c}=e;return R({onClick(e){if(t){e.preventDefault();return}n?.(e)},onMouseDown(e){t||r?.(e)},onKeyDown(e){if(t||(pe(e),o?.(e),e.baseUIHandlerPrevented))return;let n=e.target===e.currentTarget,r=e.currentTarget,a=Ce(r),s=!i&&we(r),c=n&&(i?a:!s),u=e.key===`Enter`,d=e.key===` `,f=r.getAttribute(`role`),p=f?.startsWith(`menuitem`)||f===`option`||f===`gridcell`;if(n&&l&&d){if(e.defaultPrevented&&p)return;e.preventDefault(),(!i||a)&&(e.preventBaseUIHandler(),xe(r,e));return}if(!c||i||!d&&!u){n&&s&&d&&e.preventDefault();return}e.defaultPrevented||(e.preventDefault(),u&&(e.preventBaseUIHandler(),xe(r,e)))},onKeyUp(e){if(!t){if(pe(e),a?.(e),e.target===e.currentTarget&&i&&l&&Ce(e.currentTarget)&&e.key===` `){e.preventDefault();return}e.baseUIHandlerPrevented||e.target===e.currentTarget&&!i&&!l&&!e.defaultPrevented&&e.key===` `&&(e.preventBaseUIHandler(),xe(e.currentTarget,e))}},onPointerDown(e){if(t){e.preventDefault();return}s?.(e)}},i?{type:`button`}:{role:`button`},u,c)},[t,u,l,i]),buttonRef:F(e=>{s.current=e,d()})}}function Ce(e){return f(e)&&e.tagName===`BUTTON`}function we(e){return f(e)&&e.tagName===`A`&&!!e.href}function Te(e,t,n,r){let i=N(De).current;return Oe(i,e,t,n,r)&&Ae(i,[e,t,n,r]),i.callback}function Ee(e){let t=N(De).current;return ke(t,e)&&Ae(t,e),t.callback}function De(){return{callback:null,cleanup:null,refs:[]}}function Oe(e,t,n,r,i){return e.refs[0]!==t||e.refs[1]!==n||e.refs[2]!==r||e.refs[3]!==i}function ke(e,t){return e.refs.length!==t.length||e.refs.some((e,n)=>e!==t[n])}function Ae(e,t){if(e.refs=t,t.every(e=>e==null)){e.callback=null;return}e.callback=n=>{if(e.cleanup&&=(e.cleanup(),null),n!=null){let r=Array(t.length).fill(null);for(let e=0;e<t.length;e+=1){let i=t[e];if(i!=null)switch(typeof i){case`function`:{let t=i(n);typeof t==`function`&&(r[e]=t);break}case`object`:i.current=n}}e.cleanup=()=>{for(let e=0;e<t.length;e+=1){let n=t[e];if(n!=null)switch(typeof n){case`function`:{let t=r[e];typeof t==`function`?t():n(null);break}case`object`:n.current=null}}}}}}var je=19;function Me(e){return je>=e}function Ne(e){if(!a.isValidElement(e))return null;let t=e,n=t.props;return(Me(19)?n?.ref:t.ref)??null}function Pe(){}var Fe=Object.freeze([]),B=Object.freeze({});function Ie(e,t){let n={};for(let r in e){let i=e[r];if(t?.hasOwnProperty(r)){let e=t[r](i);e!=null&&Object.assign(n,e);continue}i===!0?n[`data-${r.toLowerCase()}`]=``:i&&(n[`data-${r.toLowerCase()}`]=i.toString())}return n}function Le(e,t){return typeof e==`function`?e(t):e}function Re(e,t){return typeof e==`function`?e(t):e}function ze(e,t,n={}){let r=t.render;n.enabled!==!1&&(r=Ue(r));let i=Be(t,n,r);if(n.enabled===!1)return null;let a=n.state??B;return We(e,r,i,a)}function Be(e,t,n){let{className:r,style:i}=e,{state:a=B,ref:o,props:s,stateAttributesMapping:c,enabled:l=!0}=t,u=l?Le(r,a):void 0,d=l?Re(i,a):void 0,f=l?Ie(a,c):B,p=l&&s?Ve(s):void 0,m=l?re(f,p)??{}:B;return typeof document<`u`&&(l?m.ref=Array.isArray(o)?Ee([m.ref,Ne(n),...o]):Te(m.ref,Ne(n),o):Te(null,null)),l?(u!==void 0&&(m.className=me(m.className,u)),d!==void 0&&(m.style=re(m.style,d)),m):B}function Ve(e){return Array.isArray(e)?ie(e):R(void 0,e)}var He=Symbol.for(`react.lazy`);function Ue(e){if(e?.$$typeof!==He)return e;let t=a.Children.toArray(e)[0];return a.isValidElement(t)?t:e}function We(e,t,n,r){if(t){if(typeof t==`function`)return t(n,r);let e=R(n,t.props);return e.ref=n.ref,a.cloneElement(t,e)}if(e&&typeof e==`string`)return Ge(e,n);throw Error(_e(8))}function Ge(e,t){return e===`button`?(0,a.createElement)(`button`,{type:`button`,...t,key:t.key}):e===`img`?(0,a.createElement)(`img`,{alt:``,...t,key:t.key}):a.createElement(e,t)}var Ke=e(i(),1),qe=e=>typeof e==`boolean`?`${e}`:e===0?`0`:e,Je=t,Ye=(e,t)=>n=>{if(t?.variants==null)return Je(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=qe(t)||qe(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 Je(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)},Xe=(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},Ze=(e,t)=>({classGroupId:e,validator:t}),Qe=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),$e=`-`,et=[],tt=`arbitrary..`,nt=e=>{let t=at(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return it(e);let n=e.split($e);return rt(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?Xe(i,t):t:i||et}return n[e]||et}}},rt=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=rt(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join($e):e.slice(t).join($e),s=a.length;for(let e=0;e<s;e++){let t=a[e];if(t.validator(o))return t.classGroupId}},it=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?tt+r:void 0})(),at=e=>{let{theme:t,classGroups:n}=e;return ot(n,t)},ot=(e,t)=>{let n=Qe();for(let r in e){let i=e[r];st(i,n,r,t)}return n},st=(e,t,n,r)=>{let i=e.length;for(let a=0;a<i;a++){let i=e[a];ct(i,t,n,r)}},ct=(e,t,n,r)=>{if(typeof e==`string`){lt(e,t,n);return}if(typeof e==`function`){ut(e,t,n,r);return}dt(e,t,n,r)},lt=(e,t,n)=>{let r=e===``?t:ft(t,e);r.classGroupId=n},ut=(e,t,n,r)=>{if(pt(e)){st(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(Ze(n,e))},dt=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e<a;e++){let[a,o]=i[e];st(o,ft(t,a),n,r)}},ft=(e,t)=>{let n=e,r=t.split($e),i=r.length;for(let e=0;e<i;e++){let t=r[e],i=n.nextPart.get(t);i||(i=Qe(),n.nextPart.set(t,i)),n=i}return n},pt=e=>`isThemeGetter`in e&&e.isThemeGetter===!0,mt=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)}}},ht=`!`,gt=`:`,_t=[],vt=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),yt=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===gt){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(ht)?(c=s.slice(0,-1),l=!0):s.startsWith(ht)&&(c=s.slice(1),l=!0);let u=a&&a>i?a-i:void 0;return vt(t,l,c,u)};if(t){let e=t+gt,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):vt(_t,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},bt=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}},xt=e=>({cache:mt(e.cacheSize),parseClassName:yt(e),sortModifiers:bt(e),postfixLookupClassGroupIds:St(e),...nt(e)}),St=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},Ct=/\s+/,wt=(e,t)=>{let{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:a,postfixLookupClassGroupIds:o}=t,s=[],c=e.trim().split(Ct),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(`:`),v=f?_+ht:_,y=v+g;if(s.indexOf(y)>-1)continue;s.push(y);let b=i(g,h);for(let e=0;e<b.length;++e){let t=b[e];s.push(v+t)}l=t+(l.length>0?` `+l:l)}return l},Tt=(...e)=>{let t=0,n,r,i=``;for(;t<e.length;)(n=e[t++])&&(r=Et(n))&&(i&&(i+=` `),i+=r);return i},Et=e=>{if(typeof e==`string`)return e;let t,n=``;for(let r=0;r<e.length;r++)e[r]&&(t=Et(e[r]))&&(n&&(n+=` `),n+=t);return n},Dt=(e,...t)=>{let n,r,i,a,o=o=>(n=xt(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=wt(e,n);return i(e,a),a};return a=o,(...e)=>a(Tt(...e))},Ot=[],V=e=>{let t=t=>t[e]||Ot;return t.isThemeGetter=!0,t.themeKey=e,t},kt=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,At=/^\((?:(\w[\w-]*):)?(.+)\)$/i,jt=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,Mt=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Nt=/\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$/,Pt=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix|color|light-dark)\(.+\)$/,Ft=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,It=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,H=e=>jt.test(e),U=e=>!!e&&!Number.isNaN(Number(e)),W=e=>!!e&&Number.isInteger(Number(e)),Lt=e=>e.endsWith(`%`)&&U(e.slice(0,-1)),G=e=>Mt.test(e),Rt=()=>!0,zt=e=>Nt.test(e)&&!Pt.test(e),Bt=()=>!1,Vt=e=>Ft.test(e),Ht=e=>It.test(e),Ut=e=>!K(e)&&!J(e),Wt=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)),Gt=e=>Y(e,ln,Bt),K=e=>kt.test(e),q=e=>Y(e,un,zt),Kt=e=>Y(e,dn,U),qt=e=>Y(e,pn,Rt),Jt=e=>Y(e,fn,Bt),Yt=e=>Y(e,sn,Bt),Xt=e=>Y(e,cn,Ht),Zt=e=>Y(e,mn,Vt),J=e=>At.test(e),Qt=e=>on(e,un),$t=e=>on(e,fn),en=e=>on(e,sn),tn=e=>on(e,ln),nn=e=>on(e,cn),rn=e=>on(e,mn,!0),an=e=>on(e,pn,!0),Y=(e,t,n)=>{let r=kt.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},on=(e,t,n=!1)=>{let r=At.exec(e);return r?r[1]?t(r[1]):n:!1},sn=e=>e===`position`||e===`percentage`,cn=e=>e===`image`||e===`url`,ln=e=>e===`length`||e===`size`||e===`bg-size`,un=e=>e===`length`,dn=e=>e===`number`,fn=e=>e===`family-name`,pn=e=>e===`number`||e===`weight`,mn=e=>e===`shadow`,hn=Dt(()=>{let e=V(`color`),t=V(`font`),n=V(`text`),r=V(`font-weight`),i=V(`tracking`),a=V(`leading`),o=V(`breakpoint`),s=V(`container`),c=V(`spacing`),l=V(`radius`),u=V(`shadow`),d=V(`inset-shadow`),f=V(`text-shadow`),p=V(`drop-shadow`),m=V(`blur`),h=V(`perspective`),g=V(`aspect`),_=V(`ease`),v=V(`animate`),y=()=>[`auto`,`avoid`,`all`,`avoid-page`,`page`,`left`,`right`,`column`],b=()=>[`center`,`top`,`bottom`,`left`,`right`,`top-left`,`left-top`,`top-right`,`right-top`,`bottom-right`,`right-bottom`,`bottom-left`,`left-bottom`],x=()=>[...b(),J,K],S=()=>[`auto`,`hidden`,`clip`,`visible`,`scroll`],C=()=>[`auto`,`contain`,`none`],w=()=>[J,K,c],T=()=>[H,`full`,`auto`,...w()],E=()=>[W,`none`,`subgrid`,J,K],D=()=>[`auto`,{span:[`full`,W,J,K]},W,J,K],O=()=>[W,`auto`,J,K],k=()=>[`auto`,`min`,`max`,`fr`,J,K],A=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],j=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],M=()=>[`auto`,...w()],N=()=>[H,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...w()],P=()=>[s,H,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,...w()],ee=()=>[H,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,...w()],F=()=>[e,J,K],te=()=>[...b(),en,Yt,{position:[J,K]}],ne=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],I=()=>[`auto`,`cover`,`contain`,tn,Gt,{size:[J,K]}],re=()=>[Lt,Qt,q],L=()=>[``,`none`,`full`,l,J,K],R=()=>[``,U,Qt,q],ie=()=>[`solid`,`dashed`,`dotted`,`double`],ae=()=>[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],z=()=>[U,Lt,en,Yt],oe=()=>[``,`none`,m,J,K],se=()=>[`none`,U,J,K],ce=()=>[`none`,U,J,K],le=()=>[U,J,K],ue=()=>[H,`full`,...w()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[G],breakpoint:[G],color:[Rt],container:[G],"drop-shadow":[G],ease:[`in`,`out`,`in-out`],font:[Ut],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[G],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[G],shadow:[G],spacing:[`px`,U],text:[G],"text-shadow":[G],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,H,K,J,g]}],container:[`container`],"container-type":[{"@container":[``,`normal`,`size`,J,K]}],"container-named":[Wt],columns:[{columns:[U,`auto`,K,J,s]}],"break-after":[{"break-after":y()}],"break-before":[{"break-before":y()}],"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:x()}],overflow:[{overflow:S()}],"overflow-x":[{"overflow-x":S()}],"overflow-y":[{"overflow-y":S()}],overscroll:[{overscroll:C()}],"overscroll-x":[{"overscroll-x":C()}],"overscroll-y":[{"overscroll-y":C()}],position:[`static`,`fixed`,`absolute`,`relative`,`sticky`],inset:[{inset:T()}],"inset-x":[{"inset-x":T()}],"inset-y":[{"inset-y":T()}],start:[{"inset-s":T(),start:T()}],end:[{"inset-e":T(),end:T()}],"inset-bs":[{"inset-bs":T()}],"inset-be":[{"inset-be":T()}],top:[{top:T()}],right:[{right:T()}],bottom:[{bottom:T()}],left:[{left:T()}],visibility:[`visible`,`invisible`,`collapse`],z:[{z:[W,`auto`,J,K]}],basis:[{basis:[H,`full`,`auto`,s,...w()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[U,H,`auto`,`initial`,`none`,K]}],grow:[{grow:[``,U,J,K]}],shrink:[{shrink:[``,U,J,K]}],order:[{order:[W,`first`,`last`,`none`,J,K]}],"grid-cols":[{"grid-cols":E()}],"col-start-end":[{col:D()}],"col-start":[{"col-start":O()}],"col-end":[{"col-end":O()}],"grid-rows":[{"grid-rows":E()}],"row-start-end":[{row:D()}],"row-start":[{"row-start":O()}],"row-end":[{"row-end":O()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":k()}],"auto-rows":[{"auto-rows":k()}],gap:[{gap:w()}],"gap-x":[{"gap-x":w()}],"gap-y":[{"gap-y":w()}],"justify-content":[{justify:[...A(),`normal`]}],"justify-items":[{"justify-items":[...j(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...j()]}],"align-content":[{content:[`normal`,...A()]}],"align-items":[{items:[...j(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...j(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":A()}],"place-items":[{"place-items":[...j(),`baseline`]}],"place-self":[{"place-self":[`auto`,...j()]}],p:[{p:w()}],px:[{px:w()}],py:[{py:w()}],ps:[{ps:w()}],pe:[{pe:w()}],pbs:[{pbs:w()}],pbe:[{pbe:w()}],pt:[{pt:w()}],pr:[{pr:w()}],pb:[{pb:w()}],pl:[{pl:w()}],m:[{m:M()}],mx:[{mx:M()}],my:[{my:M()}],ms:[{ms:M()}],me:[{me:M()}],mbs:[{mbs:M()}],mbe:[{mbe:M()}],mt:[{mt:M()}],mr:[{mr:M()}],mb:[{mb:M()}],ml:[{ml:M()}],"space-x":[{"space-x":w()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":w()}],"space-y-reverse":[`space-y-reverse`],size:[{size:N()}],"inline-size":[{inline:[`auto`,...P()]}],"min-inline-size":[{"min-inline":[`auto`,...P()]}],"max-inline-size":[{"max-inline":[`none`,...P()]}],"block-size":[{block:[`auto`,...ee()]}],"min-block-size":[{"min-block":[`auto`,...ee()]}],"max-block-size":[{"max-block":[`none`,...ee()]}],w:[{w:[s,`screen`,...N()]}],"min-w":[{"min-w":[s,`screen`,`none`,...N()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...N()]}],h:[{h:[`screen`,`lh`,...N()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...N()]}],"max-h":[{"max-h":[`screen`,`lh`,`none`,...N()]}],"font-size":[{text:[`base`,n,Qt,q]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,an,qt]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,Lt,K]}],"font-family":[{font:[$t,Jt,t]}],"font-features":[{"font-features":[K]}],"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,J,K]}],"line-clamp":[{"line-clamp":[U,`none`,J,Kt]}],leading:[{leading:[`none`,a,...w()]}],"list-image":[{"list-image":[`none`,J,K]}],"list-style-position":[{list:[`inside`,`outside`]}],"list-style-type":[{list:[`disc`,`decimal`,`none`,J,K]}],"text-alignment":[{text:[`left`,`center`,`right`,`justify`,`start`,`end`]}],"placeholder-color":[{placeholder:F()}],"text-color":[{text:F()}],"text-decoration":[`underline`,`overline`,`line-through`,`no-underline`],"text-decoration-style":[{decoration:[...ie(),`wavy`]}],"text-decoration-thickness":[{decoration:[U,`from-font`,`auto`,J,q]}],"text-decoration-color":[{decoration:F()}],"underline-offset":[{"underline-offset":[U,`auto`,J,K]}],"text-transform":[`uppercase`,`lowercase`,`capitalize`,`normal-case`],"text-overflow":[`truncate`,`text-ellipsis`,`text-clip`],"text-wrap":[{text:[`wrap`,`nowrap`,`balance`,`pretty`]}],indent:[{indent:w()}],"tab-size":[{tab:[W,J,K]}],"vertical-align":[{align:[`baseline`,`top`,`middle`,`bottom`,`text-top`,`text-bottom`,`sub`,`super`,J,K]}],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`,J,K]}],"bg-attachment":[{bg:[`fixed`,`local`,`scroll`]}],"bg-clip":[{"bg-clip":[`border`,`padding`,`content`,`text`]}],"bg-origin":[{"bg-origin":[`border`,`padding`,`content`]}],"bg-position":[{bg:te()}],"bg-repeat":[{bg:ne()}],"bg-size":[{bg:I()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},W,J,K],radial:[``,J,K],conic:[``,W,J,K]},nn,Xt]}],"bg-color":[{bg:F()}],"gradient-from-pos":[{from:re()}],"gradient-via-pos":[{via:re()}],"gradient-to-pos":[{to:re()}],"gradient-from":[{from:F()}],"gradient-via":[{via:F()}],"gradient-to":[{to:F()}],rounded:[{rounded:L()}],"rounded-s":[{"rounded-s":L()}],"rounded-e":[{"rounded-e":L()}],"rounded-t":[{"rounded-t":L()}],"rounded-r":[{"rounded-r":L()}],"rounded-b":[{"rounded-b":L()}],"rounded-l":[{"rounded-l":L()}],"rounded-ss":[{"rounded-ss":L()}],"rounded-se":[{"rounded-se":L()}],"rounded-ee":[{"rounded-ee":L()}],"rounded-es":[{"rounded-es":L()}],"rounded-tl":[{"rounded-tl":L()}],"rounded-tr":[{"rounded-tr":L()}],"rounded-br":[{"rounded-br":L()}],"rounded-bl":[{"rounded-bl":L()}],"border-w":[{border:R()}],"border-w-x":[{"border-x":R()}],"border-w-y":[{"border-y":R()}],"border-w-s":[{"border-s":R()}],"border-w-e":[{"border-e":R()}],"border-w-bs":[{"border-bs":R()}],"border-w-be":[{"border-be":R()}],"border-w-t":[{"border-t":R()}],"border-w-r":[{"border-r":R()}],"border-w-b":[{"border-b":R()}],"border-w-l":[{"border-l":R()}],"divide-x":[{"divide-x":R()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":R()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...ie(),`hidden`,`none`]}],"divide-style":[{divide:[...ie(),`hidden`,`none`]}],"border-color":[{border:F()}],"border-color-x":[{"border-x":F()}],"border-color-y":[{"border-y":F()}],"border-color-s":[{"border-s":F()}],"border-color-e":[{"border-e":F()}],"border-color-bs":[{"border-bs":F()}],"border-color-be":[{"border-be":F()}],"border-color-t":[{"border-t":F()}],"border-color-r":[{"border-r":F()}],"border-color-b":[{"border-b":F()}],"border-color-l":[{"border-l":F()}],"divide-color":[{divide:F()}],"outline-style":[{outline:[...ie(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[U,J,K]}],"outline-w":[{outline:[``,U,Qt,q]}],"outline-color":[{outline:F()}],shadow:[{shadow:[``,`inner`,`none`,u,rn,Zt]}],"shadow-color":[{shadow:F()}],"inset-shadow":[{"inset-shadow":[`none`,d,rn,Zt]}],"inset-shadow-color":[{"inset-shadow":F()}],"ring-w":[{ring:R()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:F()}],"ring-offset-w":[{"ring-offset":[U,q]}],"ring-offset-color":[{"ring-offset":F()}],"inset-ring-w":[{"inset-ring":R()}],"inset-ring-color":[{"inset-ring":F()}],"text-shadow":[{"text-shadow":[`none`,f,rn,Zt]}],"text-shadow-color":[{"text-shadow":F()}],opacity:[{opacity:[U,J,K]}],"mix-blend":[{"mix-blend":[...ae(),`plus-darker`,`plus-lighter`]}],"bg-blend":[{"bg-blend":ae()}],"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":[U]}],"mask-image-linear-from-pos":[{"mask-linear-from":z()}],"mask-image-linear-to-pos":[{"mask-linear-to":z()}],"mask-image-linear-from-color":[{"mask-linear-from":F()}],"mask-image-linear-to-color":[{"mask-linear-to":F()}],"mask-image-t-from-pos":[{"mask-t-from":z()}],"mask-image-t-to-pos":[{"mask-t-to":z()}],"mask-image-t-from-color":[{"mask-t-from":F()}],"mask-image-t-to-color":[{"mask-t-to":F()}],"mask-image-r-from-pos":[{"mask-r-from":z()}],"mask-image-r-to-pos":[{"mask-r-to":z()}],"mask-image-r-from-color":[{"mask-r-from":F()}],"mask-image-r-to-color":[{"mask-r-to":F()}],"mask-image-b-from-pos":[{"mask-b-from":z()}],"mask-image-b-to-pos":[{"mask-b-to":z()}],"mask-image-b-from-color":[{"mask-b-from":F()}],"mask-image-b-to-color":[{"mask-b-to":F()}],"mask-image-l-from-pos":[{"mask-l-from":z()}],"mask-image-l-to-pos":[{"mask-l-to":z()}],"mask-image-l-from-color":[{"mask-l-from":F()}],"mask-image-l-to-color":[{"mask-l-to":F()}],"mask-image-x-from-pos":[{"mask-x-from":z()}],"mask-image-x-to-pos":[{"mask-x-to":z()}],"mask-image-x-from-color":[{"mask-x-from":F()}],"mask-image-x-to-color":[{"mask-x-to":F()}],"mask-image-y-from-pos":[{"mask-y-from":z()}],"mask-image-y-to-pos":[{"mask-y-to":z()}],"mask-image-y-from-color":[{"mask-y-from":F()}],"mask-image-y-to-color":[{"mask-y-to":F()}],"mask-image-radial":[{"mask-radial":[J,K]}],"mask-image-radial-from-pos":[{"mask-radial-from":z()}],"mask-image-radial-to-pos":[{"mask-radial-to":z()}],"mask-image-radial-from-color":[{"mask-radial-from":F()}],"mask-image-radial-to-color":[{"mask-radial-to":F()}],"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":b()}],"mask-image-conic-pos":[{"mask-conic":[U]}],"mask-image-conic-from-pos":[{"mask-conic-from":z()}],"mask-image-conic-to-pos":[{"mask-conic-to":z()}],"mask-image-conic-from-color":[{"mask-conic-from":F()}],"mask-image-conic-to-color":[{"mask-conic-to":F()}],"mask-mode":[{mask:[`alpha`,`luminance`,`match`]}],"mask-origin":[{"mask-origin":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]}],"mask-position":[{mask:te()}],"mask-repeat":[{mask:ne()}],"mask-size":[{mask:I()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,J,K]}],filter:[{filter:[``,`none`,J,K]}],blur:[{blur:oe()}],brightness:[{brightness:[U,J,K]}],contrast:[{contrast:[U,J,K]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,rn,Zt]}],"drop-shadow-color":[{"drop-shadow":F()}],grayscale:[{grayscale:[``,U,J,K]}],"hue-rotate":[{"hue-rotate":[U,J,K]}],invert:[{invert:[``,U,J,K]}],saturate:[{saturate:[U,J,K]}],sepia:[{sepia:[``,U,J,K]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,J,K]}],"backdrop-blur":[{"backdrop-blur":oe()}],"backdrop-brightness":[{"backdrop-brightness":[U,J,K]}],"backdrop-contrast":[{"backdrop-contrast":[U,J,K]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,U,J,K]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[U,J,K]}],"backdrop-invert":[{"backdrop-invert":[``,U,J,K]}],"backdrop-opacity":[{"backdrop-opacity":[U,J,K]}],"backdrop-saturate":[{"backdrop-saturate":[U,J,K]}],"backdrop-sepia":[{"backdrop-sepia":[``,U,J,K]}],"border-collapse":[{border:[`collapse`,`separate`]}],"border-spacing":[{"border-spacing":w()}],"border-spacing-x":[{"border-spacing-x":w()}],"border-spacing-y":[{"border-spacing-y":w()}],"table-layout":[{table:[`auto`,`fixed`]}],caption:[{caption:[`top`,`bottom`]}],transition:[{transition:[``,`all`,`colors`,`opacity`,`shadow`,`transform`,`none`,J,K]}],"transition-behavior":[{transition:[`normal`,`discrete`]}],duration:[{duration:[U,`initial`,J,K]}],ease:[{ease:[`linear`,`initial`,_,J,K]}],delay:[{delay:[U,J,K]}],animate:[{animate:[`none`,v,J,K]}],backface:[{backface:[`hidden`,`visible`]}],perspective:[{perspective:[h,J,K]}],"perspective-origin":[{"perspective-origin":x()}],rotate:[{rotate:se()}],"rotate-x":[{"rotate-x":se()}],"rotate-y":[{"rotate-y":se()}],"rotate-z":[{"rotate-z":se()}],scale:[{scale:ce()}],"scale-x":[{"scale-x":ce()}],"scale-y":[{"scale-y":ce()}],"scale-z":[{"scale-z":ce()}],"scale-3d":[`scale-3d`],skew:[{skew:le()}],"skew-x":[{"skew-x":le()}],"skew-y":[{"skew-y":le()}],transform:[{transform:[J,K,``,`none`,`gpu`,`cpu`]}],"transform-origin":[{origin:x()}],"transform-style":[{transform:[`3d`,`flat`]}],translate:[{translate:ue()}],"translate-x":[{"translate-x":ue()}],"translate-y":[{"translate-y":ue()}],"translate-z":[{"translate-z":ue()}],"translate-none":[`translate-none`],zoom:[{zoom:[W,J,K]}],accent:[{accent:F()}],appearance:[{appearance:[`none`,`auto`]}],"caret-color":[{caret:F()}],"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`,J,K]}],"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":F()}],"scrollbar-track-color":[{"scrollbar-track":F()}],"scrollbar-gutter":[{"scrollbar-gutter":[`auto`,`stable`,`both`]}],"scrollbar-w":[{scrollbar:[`auto`,`thin`,`none`]}],"scroll-m":[{"scroll-m":w()}],"scroll-mx":[{"scroll-mx":w()}],"scroll-my":[{"scroll-my":w()}],"scroll-ms":[{"scroll-ms":w()}],"scroll-me":[{"scroll-me":w()}],"scroll-mbs":[{"scroll-mbs":w()}],"scroll-mbe":[{"scroll-mbe":w()}],"scroll-mt":[{"scroll-mt":w()}],"scroll-mr":[{"scroll-mr":w()}],"scroll-mb":[{"scroll-mb":w()}],"scroll-ml":[{"scroll-ml":w()}],"scroll-p":[{"scroll-p":w()}],"scroll-px":[{"scroll-px":w()}],"scroll-py":[{"scroll-py":w()}],"scroll-ps":[{"scroll-ps":w()}],"scroll-pe":[{"scroll-pe":w()}],"scroll-pbs":[{"scroll-pbs":w()}],"scroll-pbe":[{"scroll-pbe":w()}],"scroll-pt":[{"scroll-pt":w()}],"scroll-pr":[{"scroll-pr":w()}],"scroll-pb":[{"scroll-pb":w()}],"scroll-pl":[{"scroll-pl":w()}],"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`,J,K]}],fill:[{fill:[`none`,...F()]}],"stroke-w":[{stroke:[U,Qt,q,Kt]}],stroke:[{stroke:[`none`,...F()]}],"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 X(...e){return hn(t(e))}var gn=0;function _n(e,t=`mui`){let[n,r]=a.useState(e),i=e||n;return a.useEffect(()=>{n??(gn+=1,r(`${t}-${gn}`))},[n,t]),i}var vn=j.useId;function yn(e,t){if(vn!==void 0){let n=vn();return e??(t?`${t}-${n}`:n)}return _n(e,t)}function bn(e){return yn(e,`base-ui`)}var xn=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},Sn=(e=>e?xn(e):xn),Cn=e=>e;function wn(e,t=Cn){let n=a.useSyncExternalStore(e.subscribe,a.useCallback(()=>t(e.getState()),[e,t]),a.useCallback(()=>t(e.getInitialState()),[e,t]));return a.useDebugValue(n),n}var Z=r(),Tn={observed:`Observed in this event log.`,explicitlyDisabled:`Disabled in this event log, by its configuration or by Spark's default.`,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 En(e,t,n){return{key:e,state:`present`,reasonCode:`observed`,summary:Tn.observed,evidence:{eventType:t,count:n}}}function Dn(e,t,n){return{key:e,state:t,reasonCode:n,summary:Tn[n]}}function Q(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)&&n>0?n:0}function On(e){return e!=null&&e.schemaVersion===1}function kn(e){return typeof e==`number`&&Number.isFinite(e)&&e>0}function An(e){let t=e?.perStage;return typeof t==`object`&&!!t&&!Array.isArray(t)&&Object.values(t).some(e=>kn(e?.taskCount)&&kn(e?.totalTaskDurationSum))}function jn(e,t){return e!=null&&String(e).toLowerCase()===t}function Mn(e,t,n){return n?Dn(e,t===`noSqlExecution`?`notApplicable`:`notEmitted`,t):Dn(e,`unknown`,`parseIncomplete`)}function Nn(e){return e?.resources?.stageExecutorMetricsLogging??e?.config?.[`spark.eventLog.logStageExecutorMetrics`]}function Pn(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?En(`executorMetrics`,`executorMetricRows`,a):jn(Nn(n),`false`)?Dn(`executorMetrics`,`disabled`,`explicitlyDisabled`):Mn(`executorMetrics`,`noObservedExecutorMetrics`,i),s>0?En(`rddStorageSnapshots`,`rddStorageSnapshots`,s):Mn(`rddStorageSnapshots`,o===0?`noObservedStageSubmission`:`noRddStorageSnapshot`,i),c>0?En(`sqlPlan`,`resolvedSqlPlans`,c):l>0&&i?Dn(`sqlPlan`,`notEmitted`,`noResolvedSqlPlan`):Mn(`sqlPlan`,`noSqlExecution`,i),u>0?En(`sparkConfiguration`,`environmentUpdates`,u):Mn(`sparkConfiguration`,`noEnvironmentUpdate`,i),d===0?Mn(`taskCoreTime`,`noTaskRecords`,i):An(e?.runAggregates)?En(`taskCoreTime`,`taskRecords`,d):Mn(`taskCoreTime`,`noUsableCoreTimeAggregate`,i),Dn(`infrastructureContext`,`outsideEventLog`,`outsideEventLogScope`),Dn(`sourceContext`,`outsideEventLog`,`outsideEventLogScope`),Dn(`costContext`,`outsideEventLog`,`outsideEventLogScope`)]}}function Fn(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 In(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=On(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 Ln(){return{app:null,stages:new Map,executors:{added:[],removed:[]},sql:new Map,jobs:new Map,runAggregates:null,evidenceAvailability:null}}function Rn(){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 zn=`shuffle-works-widget-density`;function Bn(){if(typeof window>`u`)return`basic`;try{let e=window.localStorage.getItem(zn);if(e===`basic`||e===`advanced`)return e}catch{}return`basic`}var Vn=Sn(e=>({appModel:Ln(),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:Rn(),widgetDensity:Bn(),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,Fn(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:Ln(),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(zn,t)}catch{}e({widgetDensity:t})},setSkippedLines:t=>e({skippedLines:t}),setEvidenceAvailability:t=>e(e=>({appModel:{...e.appModel,evidenceAvailability:t}}))}));function Hn(e){return wn(Vn,e)}function Un(){return Hn(e=>e.widgetDensity)}var Wn=e=>e?.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase();function Gn(e,t,n=[]){if(t==null)throw Error(`[lucide]: iconNode is required when icon name is used`);return{name:Wn(e),size:24,node:t,...n.length>0?{aliases:n}:{}}}var Kn=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},qn=e=>{let t=Kn(e);return t.charAt(0).toUpperCase()+t.slice(1)},Jn=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),Yn={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 Xn(e){return e!=null}function Zn(e,t={}){let n=t.attributeNames??{},r=e=>n[e]??e,i=e.size??e.width??Yn.width,a=e.size??e.height??Yn.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?Jn(...c):Jn(`lucide`,...s,...c),u=t.absoluteStrokeWidth?Number(t.strokeWidth??Yn[`stroke-width`])*Number(e.size??e.width??Yn.width)/Number(t.size??t.width??Yn.width):t.strokeWidth??Yn[`stroke-width`];return[`svg`,{...Object.entries(Yn).reduce((e,[t,n])=>(e[r(t)]=n,e),{}),...`color`in t&&t.color&&{[r(`stroke`)]:t.color},...`size`in t&&Xn(t.size)&&{[r(`width`)]:t.size,[r(`height`)]:t.size},...`width`in t&&Xn(t.width)&&{[r(`width`)]:t.width},...`height`in t&&Xn(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 Qn(e,t={}){return Zn(e,{...t,attributeNames:{...t.attributeNames,class:`className`,"stroke-width":`strokeWidth`,"stroke-linecap":`strokeLinecap`,"stroke-linejoin":`strokeLinejoin`,"vector-effect":`vectorEffect`}})}var $n=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},er=(0,a.createContext)({}),tr=()=>(0,a.useContext)(er),nr=(0,a.forwardRef)(({color:e,size:t,width:n,height:r,strokeWidth:i,absoluteStrokeWidth:o,nonScalingStroke:s,className:c=``,children:l,iconNode:u=[],icon:d={node:u,aliases:[],size:24},...f},p)=>{let{size:m=24,strokeWidth:h=2,absoluteStrokeWidth:g=!1,nonScalingStroke:_=!1,color:v=`currentColor`,className:y=``}=tr()??{},b=!!l||$n(f),[x,S,C=[]]=Qn(d,{color:e??v,width:n??t??m,height:r??t??m,strokeWidth:i??h,absoluteStrokeWidth:o??g,nonScalingStroke:s??_,className:Jn(y,c),hasA11yProp:b,attributes:f});return(0,a.createElement)(x,{ref:p,...S},[...C.map(([e,t])=>(0,a.createElement)(e,t)),...Array.isArray(l)?l:[l]])});function rr(e,t=[],n=[]){let r=typeof e==`string`?Gn(e,t,n):e,i=(0,a.forwardRef)(({className:e,...t},n)=>(0,a.createElement)(nr,{ref:n,icon:r,className:e,...t}));return r.name&&(i.displayName=qn(r.name)),i}var ir={name:`chevron-down`,size:24,node:[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]};ir.node;var ar=rr(ir),or={name:`chevron-up`,size:24,node:[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]};or.node;var sr=rr(or),cr={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`}]]};cr.node;var lr=rr(cr),ur=e=>`${Math.round(e*1e6)/1e4}%`;function dr(e){return Number.isSafeInteger(e)?String(e).replace(/\B(?=(\d{3})+$)/g,`,`):e.toLocaleString(`en-US`)}function fr(e,t){return e.remediation!=null&&!e.remediation.some(e=>e.kind===`conf`&&e.key===t)}function pr(e){let t=(e.remediation??[]).filter(e=>e.kind===`conf`).map(e=>e.key);return t.length?t.join(` or `):`spark.sql.autoBroadcastJoinThreshold`}function mr(e){return` by lowering spark.dynamicAllocation.maxExecutors${e.remediation?.some(e=>e.kind===`conf`&&e.key===`spark.dynamicAllocation.minExecutors`)?` and spark.dynamicAllocation.minExecutors`:``}`}function hr(e){return e.remediation==null||e.remediation.some(e=>e.kind===`conf`&&e.key===`spark.sql.shuffle.partitions`)?`property`:e.remediation.some(e=>e.kind===`conf`&&e.key.startsWith(`spark.sql.adaptive.`))?`aqe`:e.remediation.some(e=>e.kind===`code`)?`code`:`property`}var gr={split:`AQE skew-join handling already split the skewed partitions, so the imbalance that remains is not join skew: look for a GC pause, a slow host or an expensive key.`,evenReads:`The shuffle reads are even, so the slow tail is not partition-size skew and AQE has nothing to split: look for a GC pause, a slow host or an expensive key.`,belowThreshold:`The largest partition is under what AQE treats as skewed: lower the skew threshold or factor for this query.`,planShape:`An operator sits between the join and its shuffle, so AQE skew-join handling cannot apply: salt the key or repartition on a better key.`,userRepartition:`An explicit repartition feeds the join, so AQE leaves its shuffle alone: drop the repartition, or salt the key.`,joinType:`The join type does not let AQE split the skewed side: put the skewed table on a splittable side, or salt the key.`,extraShuffle:`AQE skipped the split because it would add a shuffle: set spark.sql.adaptive.forceOptimizeSkewedJoin to true if that shuffle is cheaper than the tail, or salt the key.`,notSplit:`AQE did not split the skewed partition and the log does not say why: salt the key or repartition on a better key.`},_r=`AQE skipped the split because it would add a shuffle: salt the key or repartition on a better key.`,vr=`spark.sql.adaptive.skewJoin.enabled`,yr=`AQE skew-join handling is already on, so salt the key or repartition on a better key.`,br=`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 xr(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.aqeSkew===`extraShuffle`&&!e.remediation?.some(e=>e.kind===`conf`)?_r:e.aqeSkew==null?e.remediation?.some(e=>e.kind===`conf`&&e.key===`spark.sql.adaptive.enabled`)?br:fr(e,vr)?yr:t:gr[e.aqeSkew]}function Sr(e){let t=e.causeSharePct==null?``:` (${e.causeSharePct}% of their extra time)`;switch(e.cause){case`data`:return`The slow tasks read more data${t}`;case`gc`:return`GC${t}`;case`fetchWait`:return`Waiting on shuffle fetches${t}`;case`host`:return`Tasks piled on ${e.host??`one host`}${t}`;case`unexplained`:return`Not data volume, GC, fetch wait or one host`;default:return null}}var Cr=`spark.dynamicAllocation.enabled`,wr={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), and the slow tasks read correspondingly more data`,actionLabel:()=>`Fix task skew`,genericRecommendation:e=>xr(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){if(e.reads!=null&&e.reads!==`shuffle`)return`Scheduler overhead may dominate: coalesce down to fewer, larger tasks.`;switch(hr(e)){case`aqe`:return`Scheduler overhead may dominate: AQE already coalesced the shuffle, so set spark.sql.adaptive.coalescePartitions.parallelismFirst to false or raise spark.sql.adaptive.advisoryPartitionSizeInBytes, or coalesce down to fewer, larger tasks.`;case`code`:return`Scheduler overhead may dominate: this stage's own repartition(n) or RDD parallelism sized it, so lower that count or coalesce down to fewer, larger tasks.`;default:return`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 xr(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.`:fr(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){let t=`If the spill is skew-driven, fix task skew first: adding memory will not help. Otherwise`;if(e.reads!=null&&e.reads!==`shuffle`)return`${t} increase executor memory or process less data per task.`;switch(hr(e)){case`aqe`:return`${t} lower spark.sql.adaptive.advisoryPartitionSizeInBytes so AQE's merged partitions are smaller, or increase executor memory.`;case`code`:return`${t} raise this stage's own partition count (its repartition(n) or RDD parallelism), or increase executor memory.`;default:return`${t} 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 ${ur(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]}×, and only when the stage's own task-time spread cannot explain the gap)`,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 fr(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){if(e.reads===`input`)return`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.`;if(e.reads===`other`)return`Check what the stage computes and for a large per-task data volume driving heavy spill.`;let t=`or check for a large per-task data volume driving heavy shuffle and spill.`;switch(hr(e)){case`aqe`:return`Often a partition-count problem: AQE coalesced the shuffle, so lower spark.sql.adaptive.advisoryPartitionSizeInBytes to get more tasks, ${t}`;case`code`:return`Often a partition-count problem: raise this stage's own partition count (its repartition(n) or RDD parallelism), ${t}`;default:return`Often a partition-count problem: raise spark.sql.shuffle.partitions, ${t}`}}},straggler:{name:`straggling task`,tag:`STRAG`,thresholdSummary:()=>`one or more tasks finishing far after the rest of their stage, for a reason other than reading more data`,actionLabel:()=>`Fix stragglers`,genericRecommendation:e=>e.cause===`data`?`Uneven data volume drives the slow tasks: ${xr(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.`)}`:e.cause===`gc`?`GC accounts for most of the slow tasks' extra time: reduce object creation, use primitive types, avoid UDFs, increase executor memory.`:e.cause===`fetchWait`?`Waiting on shuffle fetches accounts for most of the slow tasks' extra time: look for a slow or overloaded node serving shuffle blocks, executors lost mid-stage, or reducers fetching many small blocks.`:e.cause===`host`?`Most slow tasks ran on one host: check what it was running, and consider enabling spark.speculation to relaunch a lagging task automatically.`:e.cause===`unexplained`?`The slow tasks read no more data than the median task, and GC, shuffle fetch wait and one slow host do not account for their time: look at per-record cost (UDFs, regular expressions, a call out per row).`:`Nothing in the log attributes the slow tasks to data volume, GC, shuffle fetch wait or one host: check their input sizes, GC time and hosts before choosing a fix.`},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?`Executor heap peaks unavailable`:`Reduce executor memory`}},genericRecommendation(e){switch(e.variant){case`idleCores`:return fr(e,Cr)?`Dynamic allocation is already on, so reduce cluster size${mr(e)}.`:`Either reduce cluster size (spark.executor.instances) or enable dynamic allocation.`;case`wasteModel`:return`Review spark.executor.memory and executor count.`;case`memoryBand`:return e.dataUnavailable?void 0:`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 ${ur(e.minUtil)}`,actionLabel:()=>`Reduce cluster size`,genericRecommendation:e=>fr(e,Cr)?`Dynamic allocation is already on, so consider reducing cluster size${mr(e)}.`:`Consider either reducing cluster size (spark.executor.instances) 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 ${ur(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 ${ur(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.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.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 the default Spark would have computed 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.`},pythonUdf:{name:`row-at-a-time Python UDF`,tag:`PLAN`,thresholdSummary:e=>`over ${e.minBytesSent/1048576} MiB sent to Python workers by stages running over ${e.minStageMs/1e3} s`,actionLabel:()=>`Vectorize Python UDF`,genericRecommendation:()=>`Use Arrow-optimized Python UDFs (spark.sql.execution.pythonUDF.arrow.enabled, Spark 3.4 and later) or a pandas UDF instead of a row-at-a-time Python UDF.`},nestedLoopJoin:{name:`nested loop join`,tag:`PLAN`,thresholdSummary:e=>`a nested-loop or cartesian join with over ${dr(e.minOutputRows)} output rows, at least ${e.minExpansion}x its larger input`,actionLabel:e=>e.condition==null?`Confirm cross join`:`Add an equi-join key`,genericRecommendation:e=>e.condition==null?`Confirm the cross join is intended, or add a join key so the rows are matched instead of multiplied.`:`Add an equi-join key so Spark can use a hash or sort-merge join; for a range condition, bucket the range and join on the bucket as well.`},underBroadcast:{name:`missed broadcast join`,tag:`PLAN`,thresholdSummary:e=>`a join side its type can broadcast, between ${e.minSmallerSideBytes/1048576} MiB and ${e.overBroadcastBytes/1073741824} GiB, that skipped broadcast`,actionLabel:()=>`Use broadcast join`,genericRecommendation:e=>e.broadcastThreshold===`notLimiting`?`The threshold already admits the build 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 ${pr(e)}.`},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.`:e.broadcastThreshold===`disabled`?`Automatic broadcast is already disabled, so remove the broadcast() hint that forced it.`:`Check for a misapplied broadcast hint or a misconfigured ${pr(e)}.`}};function Tr(e){return wr[e]}var Er=134217728,Dr=8e3,Or=1.5,kr={critical:0,warning:1,info:2},Ar=Object.fromEntries(Object.keys(wr).map(e=>[e,wr[e].tag]));function jr(e){return Ar[e]??e.toUpperCase()}var Mr={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`},Nr={skew:`skew`,volume:`vol`,unclassified:`?`},Pr=8;function Fr(e,t=Pr){return e.length<=t?e.join(`, `):`${e.slice(0,t).join(`, `)}, +${e.length-t} more`}function Ir(e){let t;for(let n of e)(t===void 0||kr[n.impactBand]<kr[t])&&(t=n.impactBand);return t}function Lr(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 Rr(e){return e.split(`::`)[0]||e}function zr(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 Br(e){return e/1e6}function Vr(e){return e.value??0}function Hr(e,t){switch(e){case`pct`:return`${t}%`;case`pctFraction`:return`${Math.round(t*100)}%`;case`ratio`:return`${t}×`;case`ms`:return qr(t);case`count`:return`${t}`}}var Ur={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 Wr(e){return e>0&&e<1e3?`${Math.round(e)} B`:zr(e)}function Gr(e){let t=e.metric?Ur[e.metric]:void 0;if(!t||e.value==null)return null;switch(t){case`bytes`:return Wr(e.value);case`minutes`:return qr(e.value*6e4);case`ms`:return Hr(`ms`,e.value);case`ratio`:return Hr(`ratio`,e.value);case`pct`:return Hr(`pct`,e.value);case`pctFraction`:return Hr(`pctFraction`,e.value);case`count`:return Hr(`count`,e.value)}}function Kr(e){let t=Gr(e),n=e.impactEstimate?.wallClock,r=[t,n?`~${qr(n.high)}`:null].filter(Boolean);return r.length>0?r.join(` · `):null}function qr(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 Jr(e){let t=e.shuffleReadBytes??0;if(t<=0)return null;let n=Math.min(Dr,Math.ceil(t/Er)),r=e.taskCount??0;return n<=r*Or?null:{recommended:n,current:r}}function Yr(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 Xr(e){return e===0?`0s`:qr(e)}function Zr(e,t){let n=Xr(e),r=Xr(t);return n===r?r:`${n}-${r}`}var Qr=36e5,$r=3686400,ei=.1,ti=e=>(Math.round(e*10)/10).toLocaleString(`en-US`,{minimumFractionDigits:1,maximumFractionDigits:1});function ni(e){let t=Math.round(e.value*10)/10;switch(e.unit){case`bytes`:return zr(e.value);case`ms`:return Xr(e.value);case`mbSeconds`:{let n=e.value/$r;return n>=ei?`${ti(n)} GB-h`:`${t.toLocaleString(`en-US`)} MB-s`}case`coreHours`:return`${t.toFixed(1)} core-h`;case`coreMs`:{let t=e.value/Qr;return t>=ei?`${ti(t)} core-h`:`${ti(e.value/1e3)} core-s`}default:return String(e.value)}}function ri(e){return e.unit===`ms`?{...e,unit:`coreMs`}:e}function ii(e){return/^0(\.0+)?(?:[^0-9.]|$)/.test(e)}function ai(e){return e>=10?String(Math.round(e)):e.toFixed(1).replace(/\.0$/,``)}var oi=36e5;function si(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 ci(e){return Tr(e.type)?.genericRecommendation(e)}function li(e){let t=e.sampleRelation?` (touching ${e.sampleRelation})`:``;return`A ${e.subtreeSize}-node subtree rooted at ${Lr(e.rootName)} repeats ${e.value}x in this plan${t}`}var ui=`Their filters, columns or scanned tables differ, so the repeats may compute different data.`,di={taskTime:`task time`,inputBytes:`input read`,shuffleBytes:`shuffle read and write`,storageMemory:`storage memory`};function fi(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 si(n).reduce((e,[t,n])=>e+(n-t),0)}function pi(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 mi(e){return`stageIds`in e?e.stageIds:e.stageId==null?[]:[e.stageId]}function hi(e,t,n){let r=[...new Set(t.flatMap(mi))],i=t.reduce((e,t)=>e+(t.impactEstimate?.wallClock?.high??0),0),a=r.length>0?Math.min(i,fi(r,n)):i;return{kind:`time`,type:e,findingCount:t.length,stageCount:r.length,recoverableMsHigh:a,findings:t}}function gi(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 _i(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 vi={time:0,resource:1,count:2};function yi(e,t){let n=[];for(let[r,i]of pi(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(hi(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(gi(r,t))}o.length>0&&n.push(_i(r,o))}return n.sort((e,t)=>{let n=vi[e.kind]-vi[t.kind];return n===0?e.kind===`time`&&t.kind===`time`?t.recoverableMsHigh-e.recoverableMsHigh:(kr[Ir(e.findings)??`info`]??9)-(kr[Ir(t.findings)??`info`]??9):n})}function bi(e){let t=ni(ri({value:e.total,unit:e.unit}));return ii(t)?null:t}function xi(e){if(e.kind===`time`){let t=Zr(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=bi(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 Si(e){return!(e.type===`memoryUtilization`&&e.variant===`memoryBand`&&e.dataUnavailable)}function Ci(e){return e.type===`incompleteRun`||`dataUnavailable`in e&&e.dataUnavailable?!1:Si(e)}var wi=0,Ti=1,Ei=2;function Di(e){let t=e.impactEstimate;return t?.wallClock?wi:t?.rawWaste?Ti:Ei}function Oi(e){return[...e].sort((e,t)=>{let n=Di(e)-Di(t);return n===0?Di(e)===wi?t.impactEstimate.wallClock.high-e.impactEstimate.wallClock.high:(kr[e.impactBand]??9)-(kr[t.impactBand]??9):n})}function ki(e,t){return yi(e,t).map(e=>{let t=Oi(e.findings);return{kind:e.kind,type:e.type,unit:e.kind===`resource`?e.unit:null,band:t[0].impactBand,members:t,...xi(e)}})}var Ai=`docs/tuning-reference`,ji={"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 Mi(e){return e.startsWith(`metric-`)?`metrics`:e.startsWith(`config-`)?`config`:ji[e]??e}function Ni(e){let t=String(e).replace(/^#/,``);return`${Ai}/${Mi(t)}.html#${encodeURIComponent(t)}`}var Pi=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 Fi(e){return Pi.has(String(e))}function Ii(e){let t=new Set(e.map(e=>e.docAnchor));if(t.size!==1)return;let[n]=t;return n}function Li(e){return`docs/user-guide/understanding-findings.html#${jr(e).toLowerCase()}`}var Ri=`docs/user-guide/alternative-log-retrieval.html`;function zi({controlled:e,default:t,name:n,state:r=`value`}){let{current:i}=a.useRef(e!==void 0),[o,s]=a.useState(t);return[i&&e!==void 0?e:o,a.useCallback(e=>{i||s(e)},[])]}var Bi=`none`,Vi=`trigger-press`,Hi=`trigger-hover`,Ui=`trigger-focus`,Wi=`outside-press`,Gi=`item-press`,Ki=`close-press`,qi=`focus-out`,Ji=`escape-key`,Yi=`list-navigation`,Xi=`cancel-open`,Zi=`sibling-open`,Qi=`disabled`,$i=`missing`,ea=`initial`,ta=`imperative-action`,na=`window-resize`;function ra(e,t,n,r){let i=!1,a=!1,o=r??B;return{reason:e,event:t??new Event(`base-ui`),cancel(){i=!0},allowPropagation(){a=!0},get isCanceled(){return i},get isPropagationAllowed(){return a},trigger:n,...o}}function ia(e){a.useEffect(e,Fe)}var aa=null;globalThis.requestAnimationFrame;var oa=new class{callbacks=[];callbacksCount=0;nextId=1;startId=1;isScheduled=!1;tick=e=>{this.isScheduled=!1;let t=this.callbacks,n=this.callbacksCount;if(this.callbacks=[],this.callbacksCount=0,this.startId=this.nextId,n>0)for(let n=0;n<t.length;n+=1)t[n]?.(e)};request(e){let t=this.nextId;return this.nextId+=1,this.callbacks.push(e),this.callbacksCount+=1,this.isScheduled||=(requestAnimationFrame(this.tick),!0),t}cancel(e){let t=e-this.startId;t<0||t>=this.callbacks.length||this.callbacks[t]!==null&&(this.callbacks[t]=null,--this.callbacksCount)}},$=class e{static create(){return new e}static request(e){return oa.request(e)}static cancel(e){return oa.cancel(e)}currentId=aa;request(e){this.cancel(),this.currentId=oa.request(()=>{this.currentId=aa,e()})}cancel=()=>{this.currentId!==aa&&(oa.cancel(this.currentId),this.currentId=aa)};disposeEffect=()=>this.cancel};function sa(){let e=N($.create).current;return ia(e.disposeEffect),e}function ca(e,t=!1,n=!1,r=!1){let[i,o]=a.useState(e&&t?`idle`:void 0),[s,c]=a.useState(e&&!r);return e&&!s&&(c(!0),o(`starting`)),!e&&s&&i!==`ending`&&!n&&o(`ending`),!e&&!s&&i===`ending`&&o(void 0),I(()=>{if(!e&&s&&i!==`ending`&&n){let e=$.request(()=>{o(`ending`)});return()=>{$.cancel(e)}}},[e,s,i,n]),I(()=>{if(!e||t)return;let n=$.request(()=>{o(void 0)});return()=>{$.cancel(n)}},[t,e]),I(()=>{if(!e||!t)return;e&&s&&i!==`idle`&&o(`starting`);let n=$.request(()=>{o(`idle`)});return()=>{$.cancel(n)}},[t,e,s,i]),{mounted:s,setMounted:c,transitionStatus:i}}function la(e){let{open:t,defaultOpen:n=!1,onOpenChange:r,disabled:i}=e,[o,s]=zi({controlled:t,default:n,name:`Collapsible`,state:`open`}),{mounted:c,setMounted:l,transitionStatus:u}=ca(o,!0,!0),d=bn(),[f,p]=a.useState(),m=f===null?void 0:f??d,h=F(e=>{let t=!o,n=ra(Vi,e.nativeEvent);r(t,n),!n.isCanceled&&s(t)});return a.useMemo(()=>({defaultPanelId:d,disabled:i,handleTrigger:h,mounted:c,open:o,panelId:m,setMounted:l,setOpen:s,setPanelIdState:p,transitionStatus:u}),[d,i,h,c,o,m,l,s,p,u])}var ua=a.createContext(void 0);function da(){let e=a.useContext(ua);if(e===void 0)throw Error(_e(15));return e}var fa=`data-starting-style`,pa=`data-ending-style`,ma={[fa]:``},ha={[pa]:``},ga={transitionStatus(e){return e===`starting`?ma:e===`ending`?ha:null}},_a=`data-open`,va=`data-closed`,ya=fa,ba=`data-panel-open`,xa={[_a]:``},Sa={[va]:``},Ca={open(e){return e?{[ba]:``}:null}},wa={open(e){return e?xa:Sa}},Ta={...wa,...ga},Ea=a.forwardRef(function(e,t){let{render:n,className:r,defaultOpen:i=!1,disabled:o=!1,onOpenChange:s,open:c,style:l,...u}=e,d=F(s),f=la({open:c,defaultOpen:i,onOpenChange:d,disabled:o}),p=a.useMemo(()=>({open:f.open,disabled:f.disabled,transitionStatus:f.transitionStatus}),[f.open,f.disabled,f.transitionStatus]),m=a.useMemo(()=>({...f,onOpenChange:d,state:p}),[f,d,p]),h=ze(`div`,e,{state:p,ref:t,props:u,stateAttributesMapping:Ta});return(0,Z.jsx)(ua.Provider,{value:m,children:h})}),Da={...Ca,...ga},Oa=a.forwardRef(function(e,t){let{panelId:n,open:r,handleTrigger:i,state:a,disabled:o}=da(),{className:s,disabled:c=o,render:l,nativeButton:u=!0,style:d,...f}=e,{getButtonProps:p,buttonRef:m}=Se({disabled:c,focusableWhenDisabled:!0,native:u});return ze(`button`,e,{state:a,ref:[t,m],props:[{"aria-controls":r?n:void 0,"aria-expanded":r,onClick:i},f,p],stateAttributesMapping:Da})});function ka(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function Aa(e){let t=N(ja,e).current;return t.next=e,I(t.effect),t}function ja(e){let t={current:e,next:e,effect:()=>{t.current=t.next}};return t}function Ma(e){return e==null?e:`current`in e?e.current:e}var Na=null;function Pa(e){if(!Na){let e=[];Na=e,queueMicrotask(()=>{Na=null,Ke.flushSync(()=>{for(let t of e)t()})})}Na.push(e)}function Fa(e,t=!1,n=!1){let r=sa();return F((i,a=null)=>{r.cancel();let o=Ma(e);if(o==null)return;let s=o,c=()=>{if(!n){Ke.flushSync(i);return}Pa(()=>{a?.aborted||i()})};if(typeof s.getAnimations!=`function`||globalThis.BASE_UI_ANIMATIONS_DISABLED){i();return}function l(){Promise.all(s.getAnimations().map(e=>e.finished)).then(()=>{a?.aborted||c()},()=>{if(!a?.aborted){if(s.getAnimations().some(e=>e.pending||e.playState!==`finished`)){l();return}c()}})}if(t){let e=fa;if(!s.hasAttribute(e)){r.request(l);return}let t=new MutationObserver(()=>{s.hasAttribute(e)||(t.disconnect(),l())});t.observe(s,{attributes:!0,attributeFilter:[e]}),a?.addEventListener(`abort`,()=>t.disconnect(),{once:!0});return}r.request(l)})}function Ia(e){let{enabled:t=!0,open:n,ref:r,batch:i=!1,onComplete:o}=e,s=F(o),c=Fa(r,n,i);a.useEffect(()=>{if(!t)return;let e=new AbortController;return c(s,e.signal),()=>{e.abort()}},[t,n,s,c])}var La={height:void 0,width:void 0};function Ra(e){let{externalRef:t,hiddenUntilFound:n,id:r,keepMounted:i,mounted:o,onOpenChange:s,open:c,setMounted:l,setOpen:u,transitionStatus:d}=e,f=a.useRef(null),p=a.useRef(null),[m,h]=a.useState(La),g=a.useRef(La),_=a.useRef(!1),v=a.useRef(c),y=a.useRef(!1),[b,x]=a.useState(!1),S=a.useRef(null),C=Te(t,f),w=Aa(c),T=Fa(f),E=!c&&!o,D=b?`idle`:d,O=c&&(v.current||y.current),k=!c&&o&&p.current===`css-animation`&&m.height===void 0&&m.width===void 0?g.current:m,A=n&&E&&p.current!==`css-animation`,j=F((e,t=!0)=>{t&&(g.current=e),h(e)}),M=F(()=>{S.current?.(),S.current=null}),N=F(e=>{M(),S.current=()=>{S.current=null,e()}}),P=F(()=>{c&&o&&p.current===`css-animation`&&(y.current=!0)});I(()=>{b&&d!==`starting`&&x(!1)},[b,d]),a.useEffect(()=>()=>{P(),M()},[P,M]),I(()=>{let e=f.current;if(!e)return;!c&&S.current&&M();let t=Ba(e,O);if(p.current=t,c&&d===`idle`&&v.current&&t===`css-animation`){g.current=za(e);return}if(c&&d===`starting`){let n=_.current;if(_.current=!1,t===`none`){j(za(e)),x(!0);return}if(t===`css-transition`){let t=Ua(e);if(j(za(e)),!n)return t;let r=Ha(e,`transition-duration`,`0s`);return N(r),x(!0),t}j(za(e));let r=Ha(e,`animation-name`,`none`);if(!n){r();return}let i=Ha(e,`animation-duration`,`0s`);r(),N(i),x(!0);return}if(!c&&o&&(d===`idle`||d===`starting`)){if(v.current=!1,y.current=!1,t===`none`){j(La,!1),l(!1);return}j(za(e));return}if(d!==`ending`)return;if(t===`none`){l(!1);return}let n=za(e);if(!(n.height>0||n.width>0)){l(!1);return}j(n),t===`css-animation`&&Ha(e,`animation-name`,`none`)()},[o,c,M,j,l,N,O,d]),Ia({enabled:c&&o&&D===`idle`,open:!0,ref:f,onComplete(){c&&j(La,!1)}}),a.useEffect(()=>{if(c||!o||D!==`ending`||!f.current)return;let e=new AbortController,t=-1;function n(){w.current||(l(!1),j(La,!1))}return t=$.request(()=>{T(n,e.signal)}),()=>{$.cancel(t),e.abort()}},[w,o,c,D,T,j,l]),I(()=>{let e=f.current;e&&n&&E&&e.setAttribute(`hidden`,`until-found`)},[E,n]),a.useEffect(function(){let e=f.current;if(!e)return;function t(e){let t=ra(Bi,e);s(!0,t),!t.isCanceled&&(_.current=!0,u(!0))}return ka(e,`beforematch`,t)},[s,u]);let ee=i||n||o||c;return{height:k.height,props:{...A?{[ya]:``}:void 0,hidden:E,id:r},ref:C,shouldPreventOpenAnimation:O,shouldRender:ee,transitionStatus:D,width:k.width}}function za(e){return{height:e.scrollHeight,width:e.scrollWidth}}function Ba(e,t){let n=c(e).getComputedStyle(e),r=(n.animationName.split(`,`).map(e=>e.trim()).some(e=>e!==``&&e!==`none`)||t)&&Va(n.animationDuration),i=Va(n.transitionDuration);return r&&i||i?`css-transition`:r?`css-animation`:`none`}function Va(e){return e.split(`,`).map(e=>e.trim()).some(e=>e!==``&&Number.parseFloat(e)>0)}function Ha(e,t,n){let r=e.style.getPropertyValue(t),i=e.style.getPropertyPriority(t);return e.style.setProperty(t,n),()=>{if(r===``){e.style.removeProperty(t);return}e.style.setProperty(t,r,i)}}function Ua(e){let t={"justify-content":e.style.justifyContent,"align-items":e.style.alignItems,"align-content":e.style.alignContent,"justify-items":e.style.justifyItems};Object.keys(t).forEach(t=>{e.style.setProperty(t,`initial`,`important`)});function n(){Object.entries(t).forEach(([t,n])=>{if(n===``){e.style.removeProperty(t);return}e.style.setProperty(t,n)})}let r=$.request(n);return()=>{$.cancel(r),n()}}var Wa=`--collapsible-panel-height`,Ga=`--collapsible-panel-width`,Ka=a.forwardRef(function(e,t){let{className:n,hiddenUntilFound:r,keepMounted:i,render:a,id:o,style:s,...c}=e,{defaultPanelId:l,mounted:u,onOpenChange:d,open:f,setMounted:p,setPanelIdState:m,setOpen:h,state:g,transitionStatus:_}=da(),v=r??!1,y=i??!1,b=o||void 0,x=b??l;I(()=>(m(e=>b??(e===null?void 0:e)),()=>{m(e=>e===b?null:e)}),[b,m]);let{height:S,props:C,ref:w,shouldPreventOpenAnimation:T,shouldRender:E,transitionStatus:D,width:O}=Ra({externalRef:t,hiddenUntilFound:v,id:x,keepMounted:y,mounted:u,onOpenChange:d,open:f,setMounted:p,setOpen:h,transitionStatus:_}),k={...g,transitionStatus:D},A=Re(s,k),j=ze(`div`,{...e,style:void 0},{state:k,ref:w,props:[C,{style:{[Wa]:S===void 0?`auto`:`${S}px`,[Ga]:O===void 0?`auto`:`${O}px`}},c,A?{style:A}:void 0,T?{style:{animationName:`none`}}:void 0],stateAttributesMapping:Ta});return E?j:null});function qa({...e}){return(0,Z.jsx)(Ea,{"data-slot":`collapsible`,...e})}function Ja({...e}){return(0,Z.jsx)(Oa,{"data-slot":`collapsible-trigger`,...e})}function Ya({className:e,...t}){return(0,Z.jsx)(Ka,{"data-slot":`collapsible-content`,className:X(`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 Xa=`#intro`,Za=(0,a.createContext)(null);function Qa({children:e}){let[t,n]=(0,a.useState)(!1),[r,i]=(0,a.useState)({kind:`site`,source:`reference`,path:Ni(Xa)}),o=(0,a.useCallback)((e=Xa)=>{i({kind:`site`,source:`reference`,path:Ni(e)}),n(!0)},[]),s=(0,a.useCallback)(e=>{i({kind:`site`,source:`guide`,path:e}),n(!0)},[]),c=(0,a.useCallback)(()=>n(!1),[]),l=(0,a.useMemo)(()=>({open:o,openSite:s,close:c,isOpen:t,target:r}),[o,s,c,t,r]);return(0,Z.jsx)(Za.Provider,{value:l,children:e})}function $a(){let e=(0,a.useContext)(Za);if(!e)throw Error(`useDocs outside DocsProvider`);return e}function eo(){return(0,a.useContext)(Za)}function to({anchor:e,children:t}){let{open:n}=$a(),r=Hn(e=>e.exportMode);return Fi(e)?r?(0,Z.jsx)(Z.Fragment,{children:t}):(0,Z.jsx)(`a`,{href:Ni(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}function no(e){return ze(e.defaultTagName??`div`,e,e)}var ro=Ye(`group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-sm 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 io({className:e,variant:t=`default`,render:n,...r}){return no({defaultTagName:`span`,props:R({className:X(ro({variant:t}),e)},r),render:n,state:{slot:`badge`,variant:t}})}var ao={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 oo(){return Hn(e=>e.interpretation)}function so(e,t){return e.findings[t]}var co=new WeakMap;function lo(e,t){if(!e)return null;let n=co.get(e);return n||(n=new Map(e.findings.map((t,n)=>[t,e.data.savings[n]])),co.set(e,n)),n.get(t)??null}function uo(e){return lo(oo(),e)}function fo(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 po(e){return e?e.data.rollup.eligibleIndexes.map(t=>e.findings[t]).filter(e=>e!=null):[]}function mo({members:e,...t}){return{...t,key:`${t.kind}-${t.type}-${t.unit??``}`,findings:e}}function ho(e,t,n){if(!e)return{eligible:[],groups:[]};let r=new Set(t),i=po(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})=>mo({...n,members:t.map(t=>e.findings[t]).filter(e=>e!=null)})):ki(i,n).map(mo)}}var go={byFinding:new Map,byStage:new Map},_o=new WeakMap;function vo(e){if(!e)return go;let t=_o.get(e);if(!t){let n=new Map,r=new Map;e.data.verdict.steps.forEach((t,i)=>{let a=`F${i+1}`,o=e.findings[t.leadIndex];o&&n.set(o,a),t.stageId!=null&&!r.has(t.stageId)&&r.set(t.stageId,a)}),t={byFinding:n,byStage:r},_o.set(e,t)}return t}function yo(){return vo(oo())}function bo({children:e}){return Un()===`advanced`?(0,Z.jsx)(Z.Fragment,{children:e}):null}var xo={critical:`bg-critical`,warning:`bg-warning`,info:`bg-info`},So={critical:`text-critical`,warning:`text-warning`,info:`text-info`},Co={critical:`border-critical`,warning:`border-warning`,info:`border-info`},wo=Ye(`inline-block size-2 shrink-0 rounded-full`,{variants:{impactBand:{...xo,muted:`bg-muted-foreground`}},defaultVariants:{impactBand:`info`}}),To=Ye(`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 Eo({impactBand:e,className:t}){return(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:X(wo({impactBand:e}),t)})}function Do({type:e,impactBand:t,className:n,plainBadge:r,docAnchor:i}){let a=eo(),o=Un(),s=Hn(e=>e.exportMode),c=oo()?.data.detectors[e]?.docAnchor??void 0,l=jr(e),u=ao[l],d=r?void 0:u?`${u.expansion}: ${u.description}`:void 0,f=r?void 0:i&&Fi(i)?i:c,p=u?.expansion??l,m=Li(e),h=s?void 0:f?Ni(f):r?void 0:m,g=!r&&!s&&o===`advanced`&&!!f,_=(0,Z.jsxs)(io,{title:d,className:X(To({impactBand:t}),`h-5 px-1.5 font-mono text-xs font-semibold tracking-[.06em]`,h&&`tap-target-comfortable overflow-visible underline decoration-current/40 decoration-dotted underline-offset-2`,g?X(`rounded-r-none`,n):n),render:h?(0,Z.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,Z.jsx)(Eo,{impactBand:t}),l]});return r?_:(0,Z.jsxs)(`span`,{className:`inline-flex items-center`,children:[_,g?(0,Z.jsx)(bo,{children:(0,Z.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:X(`tap-target-comfortable tap-target-comfortable--sm inline-flex h-5 shrink-0 items-center rounded-r-sm border border-transparent py-0.5 pr-2 pl-1 text-xs font-medium whitespace-nowrap transition-colors`,To({impactBand:t}),n,`text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`),children:(0,Z.jsx)(lr,{"aria-hidden":`true`,className:`size-3`})})}):null]})}function Oo({label:e,impactBand:t,title:n,className:r}){return(0,Z.jsx)(io,{title:n,className:X(To({impactBand:t}),`font-mono text-xs font-semibold`,r),children:e})}var ko=(0,a.createContext)(!0),Ao=()=>(0,a.useContext)(ko);export{qi as $,ur as $t,Ra as A,F as An,Nr as At,fa as B,c as Bn,ni as Bt,to as C,Se as Cn,ui as Ct,qa as D,_e as Dn,si as Dt,eo as E,ye as En,li as Et,ka as F,A as Fn,zr as Ft,$ as G,u as Gn,Lr as Gt,da as H,d as Hn,Zr as Ht,wa as I,s as In,ai as It,ra as J,h as Jn,Rr as Jt,sa as K,m as Kn,ii as Kt,Ca as L,E as Ln,qr as Lt,Fa as M,T as Mn,ri as Mt,Ma as N,S as Nn,Yr as Nt,Ya as O,R as On,kr as Ot,Aa as P,l as Pn,Xr as Pt,Ji as Q,Tr as Qt,ga as R,k as Rn,Kr as Rt,ro as S,Te as Sn,bi as St,$a as T,ve as Tn,ci as Tt,la as U,f as Un,Br as Ut,ua as V,x as Vn,Fr as Vt,ca as W,w as Wn,Vr as Wt,Ki as X,C as Xn,Ir as Xt,Xi as Y,g as Yn,jr as Yt,Qi as Z,wr as Zt,uo as _,Re as _n,yi as _t,Co as a,Vn as an,Bi as at,ao as b,Pe as bn,Oi as bt,Do as c,In as cn,Ui as ct,ho as d,An as dn,na as dt,Sr as en,ta as et,po as f,bn as fn,zi as ft,vo as g,ze as gn,Ii as gt,lo as h,Ye as hn,Fi as ht,xo as i,rr as in,$i as it,Ia as j,N as jn,Mr as jt,Ja as k,I as kn,oi as kt,To as l,Fn as ln,Hi as lt,fo as m,X as mn,Ai as mt,Ao as n,sr as nn,Gi as nt,So as o,Hn as on,Wi as ot,so as p,yn as pn,Ri as pt,ia as q,p as qn,Jr as qt,Oo as r,ar as rn,Yi as rt,Eo as s,Un as sn,Zi as st,ko as t,lr as tn,ea as tt,bo as u,Pn as un,Vi as ut,oo as v,Fe as vn,Ci as vt,Qa as w,xe as wn,di as wt,io as x,Me as xn,ki as xt,yo as y,B as yn,Si as yt,pa as z,D as zn,Hr as zt};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{Ct as r,Et as i,Ot as a,Xt as o,c as s,u as c}from"./DisclosureContext-DK1_iz6J.js";import{P as l,S as u,k as d}from"./index-fDiwfuoO.js";import{t as f}from"./RowStatusCluster-Dbtmte7l.js";import{n as p,t as m}from"./WidgetLeadSummary-CXFZP00C.js";import{n as h}from"./findings-of-type-BL2u3RGZ.js";import{n as g}from"./StagePill--P7PDd3s.js";import{t as _}from"./RowPagination-C-LzWkI5.js";import{t as v}from"./ImpactEstimate-Dm3xWbzV.js";import{i as y,r as b}from"./impact-sort-mC5ISgX8.js";import{n as x,t as S}from"./finding-anchor-Dr40LkS9.js";import{t as C}from"./usePagedRows-BafD6bEN.js";import{n as w,t as T}from"./useSortMode-DjrAN-z4.js";var E=e(t(),1),D=n();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)(g,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,D.jsxs)(`p`,{children:[`${i(e)}.${e.occurrencesIdentical?``:` ${r}`}`,` `,(0,D.jsx)(v,{finding:e})]})]})}var k=(0,E.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:n,setSortMode:r,orderBy:i}=T(),[g,v]=(0,E.useState)(!t),[x,S]=(0,E.useState)(0),{findings:k,pills:A,groupConfidence:j}=(0,E.useMemo)(()=>{let t=h(e,`duplicatePlanSubtree`).sort((e,t)=>a[e.impactBand]-a[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=i(k,e=>[e],y),N=l(),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:o(k),open:g,onOpenChange:v,badges:(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(s,{type:`duplicatePlanSubtree`,impactBand:o(k)??`info`,className:u}),b(k,k.length,g)?(0,D.jsx)(w,{mode:n,onChange:r}):null]}),statusBadge:(0,D.jsx)(c,{children:(0,D.jsx)(f,{confidence:j?.confidence,validationRequired:j?.validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,D.jsx)(m,{value:`${A.length} stage${A.length===1?``:`s`}`,context:p(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)(_,{page:I,totalPages:F,onPrev:()=>S(e=>e-1),onNext:()=>S(e=>e+1)})]})});export{k as DuplicatePlanSubtree};
@@ -0,0 +1 @@
1
+ import{i as e}from"./react-vendor-C6KcUD36.js";import{Nt as t,on as n}from"./DisclosureContext-DK1_iz6J.js";import{f as r,i,l as a,o,p as s,s as c,v as l}from"./charts-vendor-CtTxwTeu.js";import{i as u,r as d,t as f}from"./ChartTheme-DAiARbLP.js";function p(e){let t=n(e=>e.exportMode);return{exportMode:t,getTaskData:t?void 0:e}}var m=e(),h=5,g=30,_=220;function v(e,t){if(e.length<2)return e[0]??null;let n=e[1]-e[0],r=Math.round((t-e[0])/n);return e[Math.min(e.length-1,Math.max(0,r))]}function y({metrics:e,fieldNames:n,markers:p={}}){let y=n.indexOf(`duration`);if(y===-1)return null;let b=n.length,x=e.length/b,S=[];for(let t=0;t<x;t++)S.push(e[t*b+y]);if(S.length<h)return(0,m.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Too few tasks (`,S.length,`) for a distribution.`]});let{labels:C,data:w}=t(S,g),T=C[1]-C[0],E=C.map((e,t)=>({bin:`${(e/1e3).toFixed(1)}s`,range:`${(e/1e3).toFixed(1)}s – ${((e+T)/1e3).toFixed(1)}s`,ms:e,count:w[t]})),D=p.p50==null?null:v(C,p.p50),O=p.p95==null?null:v(C,p.p95),k=D==null?void 0:E.find(e=>e.ms===D)?.bin,A=O==null?void 0:E.find(e=>e.ms===O)?.bin;return(0,m.jsx)(u,{title:`Task duration`,ariaLabel:`Task duration histogram`,height:_,table:{caption:`Task duration histogram`,columns:[`Duration bin`,`Task count`],rows:E.map(e=>[e.range,e.count]),align:[`right`,`right`]},children:(0,m.jsxs)(i,{data:E,children:[(0,m.jsx)(r,{vertical:!1,stroke:f.muted,strokeOpacity:.2}),(0,m.jsx)(c,{dataKey:`bin`,tick:{fontSize:12}}),(0,m.jsx)(o,{allowDecimals:!1,tick:{fontSize:10},width:32}),(0,m.jsx)(l,{...d,formatter:e=>[`${Number(e)} task${Number(e)===1?``:`s`}`,`Count`],labelFormatter:(e,t)=>t?.[0]?.payload?.range??e}),(0,m.jsx)(a,{dataKey:`count`,name:`Tasks`,fill:f.stage}),k?(0,m.jsx)(s,{x:k,stroke:f.accent,label:`P50`}):null,A?(0,m.jsx)(s,{x:A,stroke:f.warning,label:`P95`}):null]})})}export{p as n,y as t};
@@ -0,0 +1 @@
1
+ import{i as e}from"./react-vendor-C6KcUD36.js";import{mn as t}from"./DisclosureContext-DK1_iz6J.js";var n=e(),r={clean:{box:`border-clean/40 bg-clean/10`,icon:`text-clean`,title:`text-clean`},neutral:{box:`border-border bg-background`,icon:`text-muted-foreground`,title:`text-foreground`}};function i({icon:e,tone:i=`neutral`,title:a,description:o,action:s,className:c}){let l=r[i];return(0,n.jsxs)(`div`,{className:t(`flex items-start gap-3 rounded-xl border p-4`,l.box,c),children:[(0,n.jsx)(e,{"aria-hidden":`true`,className:t(`mt-0.5 size-4 shrink-0`,l.icon)}),(0,n.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,n.jsx)(`p`,{className:t(`text-sm font-medium`,l.title),children:a}),o?(0,n.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:o}):null]}),s]})}export{i as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{Ot as r,Wt as i,Xt as a,c as o,s,zt as c}from"./DisclosureContext-DK1_iz6J.js";import{P as l,k as u}from"./index-fDiwfuoO.js";import{n as d,t as f}from"./WidgetLeadSummary-CXFZP00C.js";import{t as p}from"./RowPagination-C-LzWkI5.js";import{t as m}from"./ImpactEstimate-Dm3xWbzV.js";import{n as h}from"./finding-anchor-Dr40LkS9.js";import{t as g}from"./usePagedRows-BafD6bEN.js";var _=e(t(),1),v=n();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)(s,{impactBand:e.impactBand,className:`mt-1.5`}),(0,v.jsx)(`strong`,{children:c(`pct`,i(e))}),` average executor utilization`]}),(0,v.jsx)(m,{finding:e})]})}var b=(0,_.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[n,s]=(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,n,s,b);return m.length===0?null:(0,v.jsxs)(u,{title:`Executor Utilization`,fixFor:m,impactBand:a(m),badges:(0,v.jsx)(o,{type:`utilization`,impactBand:a(m)??`info`}),defaultCollapsed:t,summary:(0,v.jsx)(f,{value:`${c(`pct`,i(m[0]))} average`,context:d(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)(p,{page:S,totalPages:x,onPrev:()=>s(e=>e-1),onNext:()=>s(e=>e+1)})]})});export{b as ExecutorUtilization};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{Lt as r,Xt as i,c as a,u as o}from"./DisclosureContext-DK1_iz6J.js";import{P as s,k as c}from"./index-fDiwfuoO.js";import{t as l}from"./RowStatusCluster-Dbtmte7l.js";import{n as u,t as d}from"./WidgetLeadSummary-CXFZP00C.js";import{t as f}from"./RowPagination-C-LzWkI5.js";import{t as p}from"./ImpactEstimate-Dm3xWbzV.js";import{r as m}from"./impact-sort-mC5ISgX8.js";import{n as h,t as g}from"./finding-anchor-Dr40LkS9.js";import{t as _}from"./usePagedRows-BafD6bEN.js";import{n as v,t as y}from"./useSortMode-DjrAN-z4.js";import{t as b}from"./StageHeader-CIETkjVZ.js";var x=e(t(),1),S=n(),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 n=h([e]),i=(e.stageId==null?void 0:t.stages.get(e.stageId))?.executorRunTime;return(0,S.jsxs)(`li`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-2 ${g} transition-colors ${n.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)(o,{children:(0,S.jsx)(l,{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:r(i??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:d}=_(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:d.map(e=>(0,S.jsx)(T,{finding:e,appModel:n},e.stageId))}),(0,S.jsx)(f,{page:u,totalPages:l,onPrev:()=>i(e=>e-1),onNext:()=>i(e=>e+1)})]})}function D({catalog:e,appModel:t,defaultCollapsed:n=!0}){let[r,l]=(0,x.useState)(0),[f,p]=(0,x.useState)(0),{sortMode:h,setSortMode:g,orderBy:_}=y(),[b,w]=(0,x.useState)(!n),T=s(),D=(0,x.useRef)(!1);(0,x.useEffect)(()=>{if(!D.current){D.current=!0;return}l(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=i(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)(a,{type:`gc`,impactBand:j??`info`}),m(O,O.length,b)?(0,S.jsx)(v,{mode:h,onChange:e=>{g(e),l(0),p(0)}}):null]}),defaultCollapsed:n,open:b,onOpenChange:w,summary:(0,S.jsx)(d,{value:`${M.value}%`,context:u(O.length)}),children:(0,S.jsxs)(`div`,{className:`space-y-4`,children:[(0,S.jsx)(o,{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:r,setPage:l,routeTarget:T,orderBy:_}),A.length>0&&(0,S.jsx)(E,{title:`Low GC (cost)`,findings:A,appModel:t,page:f,setPage:p,routeTarget:T,orderBy:_})]})})}export{D as GcPressure};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{_ as r}from"./DisclosureContext-DK1_iz6J.js";var i=e(t(),1),a=n();function o({finding:e}){let t=(0,i.useId)(),n=r(e),o=e.impactEstimate;if(!o)return null;let s=n?.board;if(!s)return null;let c=`Estimate method: ${o.estimateMethod}`;return(0,a.jsxs)(`span`,{className:`impact-estimate text-xs text-muted-foreground`,title:c,tabIndex:0,"aria-describedby":t,children:[`Potential savings: `,(0,a.jsx)(`strong`,{children:s}),(0,a.jsx)(`span`,{id:t,className:`sr-only`,children:c})]})}export{o as t};
@@ -0,0 +1 @@
1
+ import{i as e}from"./react-vendor-C6KcUD36.js";import{c as t}from"./DisclosureContext-DK1_iz6J.js";import{k as n}from"./index-fDiwfuoO.js";import{t as r}from"./ImpactEstimate-Dm3xWbzV.js";var i=e();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:e,defaultCollapsed:r=!0}){let o=e.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)(t,{type:`incompleteRun`,impactBand:s}),defaultCollapsed:r,children:(0,i.jsx)(a,{finding:o})})}export{o as IncompleteRun};
@@ -0,0 +1 @@
1
+ import{i as e}from"./react-vendor-C6KcUD36.js";import{c as t,u as n}from"./DisclosureContext-DK1_iz6J.js";import{k as r}from"./index-fDiwfuoO.js";import{t as i}from"./WidgetLeadSummary-CXFZP00C.js";import{n as a}from"./findings-of-type-BL2u3RGZ.js";import{t as o}from"./ImpactEstimate-Dm3xWbzV.js";var s=e();function c({finding:e}){let{failedJobs:t,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,`%`]}),` (`,t,` of `,r,` completed jobs)`]}),(0,s.jsx)(n,{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:e,defaultCollapsed:n=!0}){let[o]=a(e,`jobFailureRate`);if(!o)return null;let{impactBand:l,value:u,failedJobs:d,totalJobs:f}=o;return(0,s.jsx)(r,{title:`Job Failures`,fixFor:[o],impactBand:l,badges:(0,s.jsx)(t,{type:`jobFailureRate`,impactBand:l}),defaultCollapsed:n,summary:(0,s.jsx)(i,{value:`${u}%`,context:`${d} of ${f} completed jobs failed`}),children:(0,s.jsx)(c,{finding:o})})}export{l as JobFailures};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{Bt as r,Ot as i,Wt as a,Xt as o,c as s,s as c,u as l,yt as u,zt as d}from"./DisclosureContext-DK1_iz6J.js";import{P as f,k as p}from"./index-fDiwfuoO.js";import{t as m}from"./RowStatusCluster-Dbtmte7l.js";import{n as h,t as g}from"./WidgetLeadSummary-CXFZP00C.js";import{n as _}from"./findings-of-type-BL2u3RGZ.js";import{t as v}from"./RowPagination-C-LzWkI5.js";import{t as y}from"./ImpactEstimate-Dm3xWbzV.js";import{n as b}from"./finding-anchor-Dr40LkS9.js";import{t as x}from"./usePagedRows-BafD6bEN.js";var S=e(t(),1),C=n();function w(e){let t=a(e),n=d(`pct`,t);return e.variant===`idleCores`?`${n} of available core-time idle`:e.variant===`memoryBand`?`${n} of allocated heap used: over-provisioned`:`~${r({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)(l,{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)(c,{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)(l,{children:T(e)})]}),(0,C.jsx)(y,{finding:e})]})}var O=(0,S.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[n,r]=(0,S.useState)(0),{findings:a,groupConfidence:c}=(0,S.useMemo)(()=>{let t=_(e,`memoryUtilization`).sort((e,t)=>i[e.impactBand]-i[t.impactBand]),n=t.filter(u);return{findings:t,groupConfidence:n.every(e=>e.confidence===n[0]?.confidence)?n[0]:void 0}},[e]),d=f(),y=d?a.findIndex(e=>e===d.finding):null,{totalPages:b,effectivePage:w,visible:T}=x(a,n,r,y);if(!a.some(u))return null;let O=a.find(e=>!e.dataUnavailable)??a[0];return(0,C.jsxs)(p,{title:`Memory Utilization`,fixFor:a,impactBand:o(a),badges:(0,C.jsx)(s,{type:`memoryUtilization`,impactBand:o(a)??`info`}),statusBadge:(0,C.jsx)(l,{children:(0,C.jsx)(m,{confidence:c?.confidence,validationRequired:c?.validationRequired,evidenceKey:`executorMetrics`})}),defaultCollapsed:t,summary:(0,C.jsx)(g,{value:E(O),context:h(a.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)(v,{page:w,totalPages:b,onPrev:()=>r(e=>e-1),onNext:()=>r(e=>e+1)})]})});export{O as MemoryUtilization};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{Ot as r,Xt as i,c as a,u as o}from"./DisclosureContext-DK1_iz6J.js";import{P as s,S as c,k as l,l as u}from"./index-fDiwfuoO.js";import{t as d}from"./RowStatusCluster-Dbtmte7l.js";import{n as f,t as p}from"./WidgetLeadSummary-CXFZP00C.js";import{n as m}from"./findings-of-type-BL2u3RGZ.js";import{n as h}from"./StagePill--P7PDd3s.js";import{t as g}from"./RowPagination-C-LzWkI5.js";import{t as _}from"./ImpactEstimate-Dm3xWbzV.js";import{i as v,r as y}from"./impact-sort-mC5ISgX8.js";import{n as b,t as x}from"./finding-anchor-Dr40LkS9.js";import{t as S}from"./usePagedRows-BafD6bEN.js";import{n as C,t as w}from"./useSortMode-DjrAN-z4.js";var T=e(t(),1),E=n();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)(h,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,E.jsxs)(`p`,{children:[u(e.recommendation??``).measured??e.recommendation,` `,(0,E.jsx)(_,{finding:e})]})]})}var O=(0,T.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:n,setSortMode:u,orderBy:h}=w(),[_,b]=(0,T.useState)(!t),[x,O]=(0,T.useState)(0),{findings:k,pills:A}=(0,T.useMemo)(()=>{let t=m(e,`nestedLoopJoin`).sort((e,t)=>r[e.impactBand]-r[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds))].map(e=>({id:e}))}},[e,n]),j=h(k,e=>[e],v),M=s(),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:`Nested Loop Joins`,fixFor:k,impactBand:i(k),open:_,onOpenChange:b,badges:(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(a,{type:`nestedLoopJoin`,impactBand:i(k)??`info`,className:c}),y(k,k.length,_)?(0,E.jsx)(C,{mode:n,onChange:u}):null]}),statusBadge:(0,E.jsx)(o,{children:(0,E.jsx)(d,{confidence:k[0].confidence,validationRequired:k[0].validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,E.jsx)(p,{value:`${A.length} stage${A.length===1?``:`s`}`,context:f(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)(g,{page:F,totalPages:P,onPrev:()=>O(e=>e-1),onNext:()=>O(e=>e+1)})]})});export{O as NestedLoopJoin};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{Ot as r,Xt as i,c as a,u as o}from"./DisclosureContext-DK1_iz6J.js";import{P as s,S as c,k as l,l as u}from"./index-fDiwfuoO.js";import{t as d}from"./RowStatusCluster-Dbtmte7l.js";import{n as f,t as p}from"./WidgetLeadSummary-CXFZP00C.js";import{n as m}from"./findings-of-type-BL2u3RGZ.js";import{n as h}from"./StagePill--P7PDd3s.js";import{t as g}from"./RowPagination-C-LzWkI5.js";import{t as _}from"./ImpactEstimate-Dm3xWbzV.js";import{i as v,r as y}from"./impact-sort-mC5ISgX8.js";import{n as b,t as x}from"./finding-anchor-Dr40LkS9.js";import{t as S}from"./usePagedRows-BafD6bEN.js";import{n as C,t as w}from"./useSortMode-DjrAN-z4.js";var T=e(t(),1),E=n();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)(h,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,E.jsxs)(`p`,{children:[u(e.recommendation??``).measured??e.recommendation,` `,(0,E.jsx)(_,{finding:e})]})]})}var O=(0,T.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:n,setSortMode:u,orderBy:h}=w(),[_,b]=(0,T.useState)(!t),[x,O]=(0,T.useState)(0),{findings:k,pills:A}=(0,T.useMemo)(()=>{let t=m(e,`overBroadcast`).sort((e,t)=>r[e.impactBand]-r[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds))].map(e=>({id:e}))}},[e]),j=h(k,e=>[e],v),M=s(),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:i(k),open:_,onOpenChange:b,badges:(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(a,{type:`overBroadcast`,impactBand:i(k)??`info`,className:c}),y(k,k.length,_)?(0,E.jsx)(C,{mode:n,onChange:u}):null]}),statusBadge:(0,E.jsx)(o,{children:(0,E.jsx)(d,{confidence:k[0].confidence,validationRequired:k[0].validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,E.jsx)(p,{value:`${A.length} stage${A.length===1?``:`s`}`,context:f(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)(g,{page:F,totalPages:P,onPrev:()=>O(e=>e-1),onNext:()=>O(e=>e+1)})]})});export{O as OverBroadcast};
@@ -0,0 +1 @@
1
+ import{i as e}from"./react-vendor-C6KcUD36.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};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{Ft as r,Ot as i,Wt as a,Xt as o,c as s,sn as c}from"./DisclosureContext-DK1_iz6J.js";import{n as l}from"./PlanView-B1hxzFRs.js";import{a as u,i as d,n as f,r as p,t as m}from"./select-BHqOqun5.js";import{P as h,k as g}from"./index-fDiwfuoO.js";import{n as _,t as v}from"./WidgetLeadSummary-CXFZP00C.js";import{n as y}from"./findings-of-type-BL2u3RGZ.js";import{t as b}from"./RowPagination-C-LzWkI5.js";import{t as x}from"./ImpactEstimate-Dm3xWbzV.js";import{r as S}from"./impact-sort-mC5ISgX8.js";import{n as C,t as w}from"./finding-anchor-Dr40LkS9.js";import{t as T}from"./usePagedRows-BafD6bEN.js";import{n as E,t as D}from"./useSortMode-DjrAN-z4.js";import{t as O}from"./StageHeader-CIETkjVZ.js";import{t as k}from"./PlanExplorer-DdiQRcJU.js";var A=e(t(),1),j=n();function M(e){if(e.rule===`lowShuffleParallelism`)return`${a(e)} tasks carrying the shuffle`;let t=a(e);return e.rule===`maxPartitionTooBig`?`Largest partition ${r(t)} (too large)`:`Largest partition ${r(t)}`}function N({entry:e,appModel:t}){let n=c(),r=C(e.partitions),i=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 ${w} transition-colors ${r.flashClassName}`,children:[(0,j.jsx)(O,{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)(x,{finding:e})]},e.id))}),i?(0,j.jsx)(k,{stageId:e.stageId,appModel:t}):null]})]})}var P=(0,A.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let[r,a]=(0,A.useState)(0),[c,l]=(0,A.useState)(!n),{sortMode:x,setSortMode:C,orderBy:w}=D(),O=h(),{partitionFindings:k,sorted:M,orderedEntries:P}=(0,A.useMemo)(()=>{let e=y(t,`partitionSizing`),n=new Map;for(let t of e){if(t.stageId==null)continue;let e=n.get(t.stageId);e?(e.partitions.push(t),i[t.impactBand]<i[e.impactBand]&&(e.impactBand=t.impactBand)):n.set(t.stageId,{stageId:t.stageId,partitions:[t],impactBand:t.impactBand})}let r=[...n.values()].sort((e,t)=>i[e.impactBand]-i[t.impactBand]||e.stageId-t.stageId);return{partitionFindings:e,sorted:r,orderedEntries:w(r,e=>e.partitions,e=>e.stageId)}},[t,x]),F=O?P.findIndex(e=>e.partitions.some(e=>e===O.finding)):null,{totalPages:I,effectivePage:L,visible:R}=T(P,r,a,F);if(k.length===0){let t=e.stages.size;return(0,j.jsx)(g,{title:`Partition Sizing`,open:c,onOpenChange:l,summary:(0,j.jsx)(v,{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=o(k),B=S(k,M.length,c);return(0,j.jsx)(g,{title:`Partition Sizing`,fixFor:k,impactBand:z,open:c,onOpenChange:l,summary:(0,j.jsx)(v,{value:`Stage ${M[0].stageId}`,context:_(k.length)}),badges:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(s,{type:`partitionSizing`,impactBand:z??`info`}),B?(0,j.jsx)(E,{mode:x,onChange:e=>{C(e),a(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)(b,{page:L,totalPages:I,onPrev:()=>a(e=>e-1),onNext:()=>a(e=>e+1),renderJumpControl:()=>(0,j.jsxs)(m,{value:String(L*6),onValueChange:e=>a(Math.floor(Number(e)/6)),children:[(0,j.jsx)(d,{size:`sm`,"aria-label":`Jump to stage`,children:(0,j.jsx)(u,{placeholder:`Jump to stage`})}),(0,j.jsx)(f,{children:P.map((e,t)=>(0,j.jsxs)(p,{value:String(t),children:[`Stage `,e.stageId]},e.stageId))})]})})]})})});export{P as PartitionSizing};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{D as r,O as i,k as a,nn as o,rn as s}from"./DisclosureContext-DK1_iz6J.js";import{n as c,t as l}from"./PlanView-B1hxzFRs.js";var u=e(t(),1),d=n();function f({stageId:e,appModel:t}){let[n,f]=(0,u.useState)(!1);return c(e,t)?(0,d.jsx)(`div`,{className:`space-y-3`,children:(0,d.jsxs)(r,{open:n,onOpenChange:f,children:[(0,d.jsxs)(a,{"aria-expanded":String(n),className:`tap-target-comfortable 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`}),n?(0,d.jsx)(o,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):(0,d.jsx)(s,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`})]}),(0,d.jsx)(i,{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{c as t,i as n,s as r}from"./react-vendor-C6KcUD36.js";import{An as i,Bn as a,C as o,Cn as s,Dn as c,F as l,Ft as u,Hn as d,J as f,Lt as p,M as m,On as h,P as g,Rt as _,Un as v,Xt as y,Yt as b,Z as x,an as S,at as C,c as w,et as T,fn as E,gn as D,i as O,in as k,j as A,kn as j,lt as M,mn as N,o as P,r as F,s as I,ut as L,yn as R}from"./DisclosureContext-DK1_iz6J.js";import{_ as z,c as B,g as V,h as H,l as U,m as ee,p as te,s as ne,t as re,u as ie}from"./inertValue-L9VxV0VE.js";import{n as ae,t as W}from"./button-DbpTz2yk.js";import{A as oe,C as se,H as G,P as ce,S as le,T as ue,X as de,a as fe,b as pe,c as me,d as he,dt as ge,f as _e,ft as ve,h as ye,i as be,j as xe,k as Se,l as Ce,lt as we,m as Te,mt as Ee,n as De,o as Oe,p as ke,pt as Ae,r as je,s as Me,tt as Ne,u as Pe,ut as Fe,v as Ie,w as Le,x as Re,y as ze}from"./useScrollLock-BCxn_dMp.js";import{c as Be,d as Ve,l as He,p as Ue,u as We,v as Ge}from"./useRegisterFieldControl-pQv-ZDoU.js";import{n as Ke}from"./PlanView-B1hxzFRs.js";import{d as qe,f as Je,g as Ye,h as Xe,l as Ze,m as Qe,n as $e,p as et,t as tt,u as nt}from"./useRecentFiles-DzJZAoOT.js";import{_ as rt,a as it,v as at}from"./composite-C9Nu2EI9.js";import{C as ot,D as st,E as ct,G as lt,K as ut,O as dt,Q as ft,Tt as pt,ht as mt,s as ht,w as gt,yt as _t}from"./index-fDiwfuoO.js";import{o as vt}from"./toggle-DPeN6aNa.js";import{t as yt}from"./ChartTheme-DAiARbLP.js";import{t as bt}from"./findings-of-type-BL2u3RGZ.js";import{a as xt,c as St,d as Ct,f as wt,h as Tt,i as Et,l as Dt,m as Ot,n as kt,o as At,p as jt,r as Mt,s as Nt,t as Pt,u as Ft}from"./plan-graph-vendor-Ce6d4HU6.js";import{t as It}from"./impact-sort-mC5ISgX8.js";var Lt={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`}]]};Lt.node;var Rt=k(Lt),zt={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`}]]};zt.node;var Bt=k(zt),Vt={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`}]]};Vt.node;var Ht=k(Vt),Ut={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`}]]};Ut.node;var Wt=k(Ut),Gt={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`}]]};Gt.node;var Kt=k(Gt),qt={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`}]]};qt.node;var Jt=k(qt),Yt={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`}]]};Yt.node;var Xt=k(Yt),Zt={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`}]]};Zt.node;var Qt=k(Zt),K=e(t(),1),q=n(),$t=K.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new we,currentIdRef:{current:null},currentContextRef:{current:null}});function en(e,t){e.current=t.current}function tn(e){let{children:t,delay:n,timeoutMs:r=0}=e,i=K.useRef(n),a=K.useRef(n),o=K.useRef(null),s=K.useRef(null),c=Fe();return j(()=>{if(a.current=n,!o.current){i.current=n;return}i.current={open:Ye(i.current,`open`),close:Ye(n,`close`)}},[n,o,i,a]),(0,q.jsx)($t.Provider,{value:K.useMemo(()=>({hasProvider:!0,delayRef:i,initialDelayRef:a,currentIdRef:o,timeoutMs:r,currentContextRef:s,timeout:c}),[r,c]),children:t})}function nn(e,t={open:!1}){let{open:n}=t,r=`rootStore`in e?e.rootStore:e,i=r.useState(`floatingId`),{currentIdRef:a,delayRef:o,timeoutMs:s,initialDelayRef:c,currentContextRef:l,hasProvider:u,timeout:d}=K.useContext($t),[p,m]=K.useState(!1),h=K.useRef(n);return j(()=>{h.current=n},[n]),j(()=>{function e(){l.current?.setIsInstantPhase(!1),a.current=null,l.current=null,o.current=c.current,d.clear()}if(a.current&&!n&&a.current===i){if(m(!1),s){let t=i;return d.start(s,()=>{r.select(`open`)||a.current&&a.current!==t||e()}),()=>{(h.current||a.current!==t)&&d.clear()}}e()}},[n,i,a,o,s,c,l,d,r]),j(()=>{if(!n)return;let e=l.current,t=a.current;d.clear(),l.current={onOpenChange:r.setOpen,setIsInstantPhase:m},a.current=i,o.current={open:0,close:Ye(c.current,`close`)},t!==null&&t!==i?(m(!0),e?.setIsInstantPhase(!0),e?.onOpenChange(!1,f(C))):(m(!1),e?.setIsInstantPhase(!1))},[n,i,r,a,o,c,l,d]),j(()=>()=>{if(a.current===i){if(l.current=null,!h.current)return;a.current=null,en(o,c),d.clear()}},[l,a,o,i,c,d]),K.useMemo(()=>({activeIdRef:a,hasProvider:u,delayRef:o,isInstantPhase:p}),[a,u,o,p])}function rn(e,t){let n=null,r=null,i=!1;return{contextElement:e||void 0,getBoundingClientRect(){let a=e?.getBoundingClientRect()||{width:0,height:0,x:0,y:0},o=t.axis===`x`||t.axis===`both`,s=t.axis===`y`||t.axis===`both`,c=[`mouseenter`,`mousemove`].includes(t.dataRef.current.openEvent?.type||``)&&t.pointerType!==`touch`,l=a.width,u=a.height,d=a.x,f=a.y;return n==null&&t.x&&o&&(n=a.x-t.x),r==null&&t.y&&s&&(r=a.y-t.y),d-=n||0,f-=r||0,l=0,u=0,!i||c?(l=t.axis===`y`?a.width:0,u=t.axis===`x`?a.height:0,d=o&&t.x!=null?t.x:d,f=s&&t.y!=null?t.y:f):i&&!c&&(u=t.axis===`x`?a.height:u,l=t.axis===`y`?a.width:l),i=!0,{width:l,height:u,x:d,y:f,top:f,right:d+l,bottom:f+u,left:d}}}}function an(e){return e!=null&&e.clientX!=null}function on(e,t={}){let{enabled:n=!0,axis:r=`both`}=t,o=`rootStore`in e?e.rootStore:e,s=o.useState(`open`),c=o.useState(`floatingElement`),u=o.useState(`domReferenceElement`),d=o.context.dataRef,f=K.useRef(!1),p=K.useRef(null),[m,h]=K.useState(),[g,_]=K.useState([]),v=i(e=>{o.set(`positionReference`,e)}),y=i((e,t,n)=>{f.current||(!d.current.openEvent||an(d.current.openEvent))&&o.set(`positionReference`,rn(n??u,{x:e,y:t,axis:r,dataRef:d,pointerType:m}))}),b=i(e=>{s?p.current||(y(e.clientX,e.clientY,e.currentTarget),_([])):y(e.clientX,e.clientY,e.currentTarget)}),x=Ne(m)?c:s;K.useEffect(()=>{if(!n){v(u);return}if(!x)return;function e(){p.current?.(),p.current=null}let t=a(c);function r(t){let n=at(t);rt(c,n)?e():y(t.clientX,t.clientY)}return!d.current.openEvent||an(d.current.openEvent)?p.current=l(t,`mousemove`,r):v(u),e},[x,n,c,d,u,o,y,v,g]),K.useEffect(()=>()=>{o.set(`positionReference`,null)},[o]),K.useEffect(()=>{n&&!c&&(f.current=!1)},[n,c]),K.useEffect(()=>{!n&&s&&(f.current=!0)},[n,s]);let S=K.useMemo(()=>{function e(e){h(e.pointerType)}return{onPointerDown:e,onPointerEnter:e,onMouseMove:b,onMouseEnter:b}},[b]);return K.useMemo(()=>n?{reference:S,trigger:S}:{},[n,S])}function sn({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:te(n.name,n.detail??``),primaryMetric:ie(n.metrics),segmentIndex:i,splitRole:a,durationShare:o??null,exclusiveDurationShare:s??null,findings:c,metrics:(n.metrics??[]).map(e=>({name:e.name,value:U(e)})),detailText:n.detail&&n.detail!==n.name?n.detail:``}}function cn(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}=H(e),f=l.filter(Boolean).length,p=c&&s!=null?ne(e,i,c,s,o):null,m=o===`exclusive`?p:c&&s!=null?ne(e,i,c,s,`exclusive`):null,h=new Map,g=c&&s!=null?ee(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 V(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;z(e,(e,t)=>{let n=e.id,r=B(e.name),a=u.get(e),o=t?t.id:null,s=e.exchangeRole===`write`&&t?t.id:n,c=sn({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 ln=24,un=32,dn=6,J=new Map;function fn(e,t,n,r){return`${r}\u0003${e.map((e,n)=>`${e.id}\u0001${t[n]??``}`).join(``)}\u0003${n.map(e=>`${e.source}\u0001${e.target}`).join(``)}`}function pn(e,t,n){let r=n.direction??`RL`,i=e.map(e=>n.groupOf?.(e)??null);return{key:fn(e,i,t,r),nodeIds:e.map(e=>e.id),groupIds:i,edges:t.map(e=>({source:e.source,target:e.target})),direction:r,compound:!!n.groupOf}}function mn(e,t){J.delete(e),J.size>=dn&&J.delete(J.keys().next().value),J.set(e,t)}function hn(e,t,n={}){let r=pn(e,t,n);return J.has(r.key)?null:r}function gn(e,t){mn(e,t)}function _n(e,t,n={}){let r=pn(e,t,n),i=J.get(r.key);i||=Sn(r),mn(r.key,i);let a=i;return e.map(e=>{let t=a.get(e.id);return{...e,position:{x:t.x,y:t.y}}})}function vn(e){let t=new Set;for(let n of e.nodes()){if(e.children(n).length)continue;let{rank:r,order:i}=e.node(n),a=`${r}:${i}`;if(t.has(a))return!0;t.add(a)}return!1}function yn(e,t){let n=[...t.keys()].sort((e,n)=>t.get(e)-t.get(n)).map(t=>({group:t,...e.node(t)}));return n.flatMap((e,t)=>n.slice(t+1).filter(t=>e.minRank<=t.maxRank&&t.minRank<=e.maxRank).map(t=>({left:e.group,right:t.group})))}function bn(e){let t=new Map;for(let n of e.nodes()){if(e.children(n).length)continue;let{rank:r,order:i}=e.node(n);t.set(r,[...t.get(r)??[],{id:n,order:i}])}for(let n of t.values())n.sort((e,t)=>e.order-t.order).forEach(({id:t},n)=>{e.node(t).order=n})}function xn(e){return(t,n)=>{n(t,{}),vn(t)&&(n(t,{constraints:yn(t,e)}),vn(t)&&bn(t))}}function Sn({nodeIds:e,groupIds:t,edges:n,direction:r,compound:i}){let a=new Pt.graphlib.Graph({compound:i});a.setGraph(r===`BT`?{rankdir:`BT`,nodesep:88,ranksep:128,ranker:`tight-tree`}:{rankdir:`RL`,nodesep:128,ranksep:60,ranker:`tight-tree`}),a.setDefaultEdgeLabel(()=>({}));let o=new Set;for(let e of t)e&&o.add(e);for(let e of o)a.setNode(e,{});e.forEach((e,n)=>{a.setNode(e,{width:220,height:90});let r=t[n];r&&a.setParent(e,r)});for(let e of n)a.setEdge(e.source,e.target);Pt.layout(a,i?{customOrder:xn(new Map([...o].map((e,t)=>[e,t])))}:void 0);let s=new Map;for(let t of e){let e=a.node(t);s.set(t,{x:e.x-110,y:e.y-45})}return s}function Cn(e,t,n={}){let r=n.paddingX??ln,i=n.paddingY??ln,a=n.headerHeight??un,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 wn(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 Cn(a,t,n))r.add(e.id),i.push(e)}return i}var Tn=()=>new Worker(new URL(new URL(`layout.worker-CLcBHxVp.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),Y=null,En=!1,Dn=()=>!En&&typeof Worker<`u`,On=1,X=new Map;function kn(e){return Dn()&&e>=200}function An(){En=!0,Y?.terminate(),Y=null;for(let{resolve:e}of X.values())e(null);X.clear()}function jn(){if(Y)return Y;try{Y=Tn()}catch{return An(),null}return Y.onmessage=e=>{let t=e.data,n=X.get(t.id);n&&(X.delete(t.id),n.resolve(`positions`in t?new Map(t.positions.map(([e,t,n])=>[e,{x:t,y:n}])):null))},Y.onerror=An,Y.onmessageerror=An,Y}function Mn(){Dn()&&jn()}function Nn(e){let t=jn();return t?new Promise(n=>{let r=On++;X.set(r,{resolve:n}),t.postMessage({id:r,job:e})}):Promise.resolve(null)}function Pn(e){let t=(0,K.useMemo)(()=>{let t=new Map;for(let{nodes:n,edges:r,groupOf:i,direction:a}of e){if(!kn(n.length))continue;let e=hn(n,r,{groupOf:i,direction:a});e&&t.set(e.key,e)}return[...t.values()]},[e]),[n,r]=(0,K.useState)(null);return(0,K.useEffect)(()=>{if(t.length===0)return;let e=!0;return Promise.all(t.map(async e=>{let t=await Nn(e);t&&gn(e.key,t)})).then(()=>{e&&r(t)}),()=>{e=!1}},[t]),t.length===0||n===t}function Fn({compact:e=!1}){let t=(0,q.jsx)(pt,{value:null,"aria-label":`Layout progress`,className:`w-full`});return e?(0,q.jsxs)(`div`,{role:`status`,"aria-live":`polite`,className:`flex w-56 flex-col gap-2 rounded-md border border-border bg-card px-3 py-2 text-xs text-muted-foreground shadow-sm`,children:[(0,q.jsx)(`p`,{children:`Laying out plan graph…`}),t]}):(0,q.jsxs)(`div`,{role:`status`,"aria-live":`polite`,"aria-label":`Laying out plan graph`,className:`flex h-full min-h-[50vh] w-full flex-col items-center justify-center gap-3 p-6`,children:[(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Laying out plan graph…`}),(0,q.jsx)(`div`,{className:`w-full max-w-xs`,children:t})]})}var In=11/10,Ln=1.75,Rn={duration:200};function zn(e){if(e.length===0)return null;let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of e)t=Math.min(t,a.x),n=Math.min(n,a.y),r=Math.max(r,a.x+a.width),i=Math.max(i,a.y+a.height);return{x:t,y:n,width:r-t,height:i-n}}function Bn(e,t,n=24){let r=Math.max(t.width-n*2,1),i=Math.max(t.height-n*2,1);return Math.min(r/Math.max(e.width,1),i/Math.max(e.height,1))}function Vn(e,t,n={}){let{padding:r=24,minZoom:i=In,maxZoom:a=Ln}=n,o=Math.min(a,Math.max(i,Bn(e,t,r))),s=(e,t,n)=>{let i=t*o;return i+r*2>n?r-e*o:(n-i)/2-e*o};return{zoom:o,x:s(e.x,e.width,t.width),y:s(e.y,e.height,t.height)}}function Hn(e,t,n){let r=e.x*t.zoom+t.x,i=e.y*t.zoom+t.y,a=r+e.width*t.zoom,o=i+e.height*t.zoom;return r>=0&&i>=0&&a<=n.width&&o<=n.height}function Un(){let{getNodes:e,setViewport:t}=Ct(),n=jt();return(0,K.useCallback)((r=0)=>{let{width:i,height:a}=n.getState(),o=zn(e().map(e=>({x:e.position.x,y:e.position.y,width:e.measured?.width??e.width??0,height:e.measured?.height??e.height??0})));return!i||!a||!o?!1:(t(Vn(o,{width:i,height:a}),{duration:r}),!0)},[e,t,n])}var Wn=K.createContext(void 0);function Z(e){let t=K.useContext(Wn);if(t===void 0&&!e)throw Error(c(72));return t}var Gn={...ut,disabled:e=>e.disabled,instantType:e=>e.instantType,isInstantPhase:e=>e.isInstantPhase,trackCursorAxis:e=>e.trackCursorAxis,disableHoverablePopup:e=>e.disableHoverablePopup,lastOpenChangeReason:e=>e.openChangeReason,closeOnClick:e=>e.closeOnClick,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin},Kn=class extends Ie{constructor(e,t,n){let r=new je;super(qn(e,r,t,n),Jn(r),Gn)}setOpen=(e,t)=>{Oe(this,e,t,{extraState:{openChangeReason:t.reason}})};cancelPendingOpen(e){this.state.floatingRootContext.dispatchOpenChange(!1,f(L,e))}};function qn(e,t,n,r=!1){return{...lt(t,n,r),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:`none`,disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,adaptiveOrigin:void 0,...e}}function Jn(e){return{popupRef:K.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:e}}var Yn=ze(function(e){let{disabled:t=!1,defaultOpen:n=!1,open:r,disableHoverablePopup:i=!1,trackCursorAxis:a=`none`,actionsRef:o,onOpenChange:s,onOpenChangeComplete:c,handle:l,triggerId:u,defaultTriggerId:d=null,children:p}=e,m=ke((e,t)=>new Kn({open:n,openProp:r,activeTriggerId:d,triggerIdProp:u},e,t));m.useControlledProp(`openProp`,r),m.useControlledProp(`triggerIdProp`,u),m.useContextCallback(`onOpenChange`,s),m.useContextCallback(`onOpenChangeComplete`,c);let h=m.useState(`open`),g=!t&&h,_=m.useState(`activeTriggerId`),v=m.useState(`mounted`),y=m.useState(`payload`);m.useSyncedValues({trackCursorAxis:a,disableHoverablePopup:i,disabled:t}),Pe(m,{closeOnActiveTriggerUnmount:!0});let{forceUnmount:b,transitionStatus:S}=he(g,m),C=m.useState(`isInstantPhase`),w=m.useState(`instantType`),E=m.useState(`lastOpenChangeReason`),D=K.useRef(null);j(()=>{h&&t&&m.setOpen(!1,f(x))},[h,t,m]),j(()=>{S===`ending`&&E===`none`||S!==`ending`&&C?(w!==`delay`&&(D.current=w),m.set(`instantType`,`delay`)):D.current!==null&&(m.set(`instantType`,D.current),D.current=null)},[S,C,E,w,m]),j(()=>{g&&(_??m.set(`payload`,void 0))},[m,_,g]),K.useImperativeHandle(o,()=>({unmount:b,close:()=>m.setOpen(!1,f(T))}),[b,m]);let O=g||v||!t&&a!==`none`;return(0,q.jsxs)(Wn.Provider,{value:m,children:[l&&(0,q.jsx)(fe,{handle:l,store:m}),O&&(0,q.jsx)(Xn,{store:m,disabled:t,trackCursorAxis:a}),typeof p==`function`?p({payload:y}):p]})});function Xn({store:e,disabled:t,trackCursorAxis:n}){let r=e.useState(`floatingRootContext`),i=Re(r,{enabled:!t,referencePress:()=>e.select(`closeOnClick`)}),a=on(r,{enabled:!t&&n!==`none`,axis:n===`none`?void 0:n}),o=K.useMemo(()=>h(a.reference,i.reference),[a.reference,i.reference]);return _e(e,{activeTriggerProps:o,inactiveTriggerProps:o,popupProps:i.floating??R}),null}var Zn=K.createContext(void 0);function Qn(){return K.useContext(Zn)}var $n=`data-base-ui-tooltip-trigger`;function er(e){if(`composedPath`in e){let t=e.composedPath();for(let e=0;e<t.length;e+=1){let n=t[e];if(d(n))return n}}let t=e.target;return d(t)?t:null}function tr(e){let t=e;for(;t;){let e=t.closest(`[${$n}]`);if(e)return e;let n=t.getRootNode();t=`host`in n&&d(n.host)?n.host:null}return null}var nr=pe(function(e,t){let{render:n,className:r,style:i,handle:a,payload:o,disabled:s,delay:l,closeOnClick:u=!0,closeDelay:d,id:p,...m}=e,h=Z(!0),_=Xe(a)??h;if(!_)throw Error(c(82));let v=E(p),y=_.useState(`isTriggerActive`,v),b=_.useState(`isOpenedByTrigger`,v),x=_.useState(`floatingRootContext`),S=K.useRef(null),C=d??0,{registerTrigger:w,isMountedByThisTrigger:T}=ye(v,S,_,{payload:o,closeOnClick:u,closeDelay:C}),O=Qn(),{activeIdRef:k,delayRef:A,isInstantPhase:j,hasProvider:N}=nn(x,{open:b}),P=et(x);_.useSyncedValue(`isInstantPhase`,j);let F=_.useState(`disabled`),I=s??F,L=g(I),R=_.useState(`trackCursorAxis`),z=_.useState(`disableHoverablePopup`),B=K.useRef(!1),V=Fe(),H=K.useRef(void 0);function U(){return N&&k.current!=null?0:l??O??600}function ee(e){let t=S.current;if(!t||!e)return!1;let n=tr(e);return n!==null&&n!==t&&rt(t,n)}function te(e){let t=ee(e);return B.current=t,t&&(P.openChangeTimeout.clear(),P.restTimeout.clear(),P.restTimeoutPending=!1,V.clear()),t}let ne=qe(x,{enabled:!I,mouseOnly:!0,move:!1,handleClose:!z&&R!==`both`?nt():null,restMs:U,delay(){return d==null&&N?{close:Ye(A.current,`close`)}:{close:C}},triggerElementRef:S,isActiveTrigger:y,isClosing:()=>_.select(`transitionStatus`)===`ending`,shouldOpen(){return!B.current}}),re=Qe(x,{enabled:!I}).reference,ie=e=>{let t=B.current,n=er(e),r=te(n),i=S.current,a=i&&n&&rt(i,n);if(r&&_.select(`open`)&&_.select(`lastOpenChangeReason`)===`trigger-hover`){_.setOpen(!1,f(M,e));return}if(t&&!r&&a&&!L.current&&!_.select(`open`)&&i&&Ne(H.current)){let t=()=>{!B.current&&!L.current&&!_.select(`open`)&&_.setOpen(!0,f(M,e,i))},n=U();n===0?(V.clear(),t()):V.start(n,t)}},ae=_.useState(`triggerProps`,T);return D(`button`,e,{state:{open:b},ref:[t,w,S],props:[ne,re,T||R!==`none`?ae:void 0,{onMouseOver(e){ie(e.nativeEvent)},onFocus(e){ee(er(e.nativeEvent))&&e.preventBaseUIHandler()},onMouseLeave(){B.current=!1,V.clear(),H.current=void 0},onPointerEnter(e){H.current=e.pointerType},onPointerDown(e){H.current=e.pointerType,_.set(`closeOnClick`,u),u&&!_.select(`open`)&&_.cancelPendingOpen(e.nativeEvent)},onClick(e){u&&!_.select(`open`)&&_.cancelPendingOpen(e.nativeEvent)},id:v,[de]:I?``:void 0,[$n]:I?void 0:``},m],stateAttributesMapping:Ee})}),rr=K.createContext(void 0);function ir(){let e=K.useContext(rr);if(e===void 0)throw Error(c(70));return e}var ar=e(r(),1),or=K.forwardRef(function(e,t){let{children:n,container:r,className:i,render:a,style:o,...s}=e,{node:c,subtree:l}=oe({container:r,ref:t,componentProps:e,elementProps:s});return!l&&!c?null:(0,q.jsxs)(K.Fragment,{children:[l,c&&ar.createPortal(n,c)]})}),sr=K.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e;return Z().useState(`mounted`)||n?(0,q.jsx)(rr.Provider,{value:n,children:(0,q.jsx)(or,{ref:t,...r})}):null}),cr=K.createContext(void 0);function lr(){let e=K.useContext(cr);if(e===void 0)throw Error(c(71));return e}var ur=K.forwardRef(function(e,t){let{render:n,className:r,anchor:i,positionMethod:a=`absolute`,side:o=`top`,align:s=`center`,sideOffset:c=0,alignOffset:l=0,collisionBoundary:u=`clipping-ancestors`,collisionPadding:d=5,arrowPadding:f=5,sticky:p=!1,disableAnchorTracking:m=!1,collisionAvoidance:h=ce,style:g,..._}=e,v=Z(),y=ir(),b=v.useState(`open`),x=v.useState(`mounted`),S=v.useState(`trackCursorAxis`),C=v.useState(`disableHoverablePopup`),w=v.useState(`floatingRootContext`),T=v.useState(`instantType`),E=v.useState(`transitionStatus`),D=v.useState(`adaptiveOrigin`),O=We({anchor:i,positionMethod:a,floatingRootContext:w,mounted:x,side:o,sideOffset:c,align:s,alignOffset:l,collisionBoundary:u,collisionPadding:d,sticky:p,arrowPadding:f,disableAnchorTracking:m,keepMounted:y,collisionAvoidance:h,adaptiveOrigin:D}),k=K.useMemo(()=>({open:b,side:O.side,align:O.align,anchorHidden:O.anchorHidden,instant:S===`none`?T:`tracking-cursor`}),[b,O.side,O.align,O.anchorHidden,S,T]),A=He(e,k,{styles:O.positionerStyles,transitionStatus:E,props:_,refs:[t,v.useStateSetter(`positionerElement`)],hidden:!x,inert:!b||S===`both`||C});return(0,q.jsx)(cr.Provider,{value:O,children:A})}),dr=K.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,o=Z(),{side:s,align:c}=lr(),l=o.useState(`open`),u=o.useState(`instantType`),d=o.useState(`transitionStatus`),f=o.useState(`popupProps`),p=o.useState(`floatingRootContext`),m=o.useState(`disabled`),h=o.useState(`closeDelay`);A({open:l,ref:o.context.popupRef,onComplete(){l&&o.context.onOpenChangeComplete?.(!0)}}),Je(p,{enabled:!m,closeDelay:h});let g=o.useStateSetter(`popupElement`);return D(`div`,e,{state:{open:l,side:s,align:c,instant:u,transitionStatus:d},ref:[t,o.context.popupRef,g],props:[be,f,Ve(d),a],stateAttributesMapping:ve})}),fr=K.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,o=Z(),{arrowRef:s,side:c,align:l,arrowUncentered:u,arrowStyles:d}=lr(),f={open:o.useState(`open`),side:c,align:l,uncentered:u,instant:o.useState(`instantType`)};return D(`div`,e,{state:f,ref:[t,s],props:[{style:d,"aria-hidden":!0},a],stateAttributesMapping:ge})}),pr=function(e){let{delay:t,closeDelay:n,timeout:r=400}=e,i=K.useMemo(()=>({open:t,close:n}),[t,n]);return(0,q.jsx)(Zn.Provider,{value:t,children:(0,q.jsx)(tn,{delay:i,timeoutMs:r,children:e.children})})};function mr({delay:e=0,...t}){return(0,q.jsx)(pr,{"data-slot":`tooltip-provider`,delay:e,...t})}function hr({...e}){return(0,q.jsx)(Yn,{"data-slot":`tooltip`,...e})}function gr({...e}){return(0,q.jsx)(nr,{"data-slot":`tooltip-trigger`,...e})}function _r({className:e,side:t=`top`,sideOffset:n=4,align:r=`center`,alignOffset:i=0,children:a,...o}){return(0,q.jsx)(sr,{children:(0,q.jsx)(ur,{align:r,alignOffset:i,side:t,sideOffset:n,className:`isolate z-50`,children:(0,q.jsxs)(dr,{"data-slot":`tooltip-content`,className:N(`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),...o,children:[a,(0,q.jsx)(fr,{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 vr(e){return e==null?null:e>=40?`critical`:e>=15?`warning`:`info`}var Q={scan:`⇩`,exchange:`⇄`,join:`⋈`,aggregate:`Σ`,sort:`↕`,filter:`∇`,aqe:`⚙`,boilerplate:`·`,transform:`→`};function yr(e){return e.find(e=>e.impactBand===`critical`)??e.find(e=>e.impactBand===`warning`)??e[0]}function br({data:e,sourcePosition:t=Ot.Left,targetPosition:n=Ot.Right}){let{label:r,operatorDetail:i,primaryMetric:a,category:o,splitRole:s,durationSharePct:c,findings:l}=e,u=Q[o]??Q.transform,d=vr(c);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":o,children:[(0,q.jsx)(xt,{type:`target`,position:n,className:`opacity-0!`}),(0,q.jsx)(xt,{type:`source`,position:t,className:`opacity-0!`}),l&&l.length>0?(()=>{let e=yr(l);return(0,q.jsxs)(hr,{children:[(0,q.jsxs)(gr,{"data-testid":`node-finding-badge`,className:N(`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`,P[e.impactBand]),children:[(0,q.jsx)(I,{impactBand:e.impactBand}),b(e.type),l.length>1?(0,q.jsx)(`span`,{children:l.length}):null]}),(0,q.jsx)(_r,{className:`max-w-xs`,children:(0,q.jsx)(`ul`,{className:`flex flex-col gap-1 text-left`,children:l.map((e,t)=>(0,q.jsxs)(`li`,{className:`flex items-center gap-1.5`,children:[(0,q.jsx)(I,{impactBand:e.impactBand}),(0,q.jsx)(`span`,{children:ht(e)})]},e.id??`${e.type}-${t}`))})})]})})():null,s===`read`?(0,q.jsx)(`p`,{className:`truncate text-xs text-muted-foreground`,children:`paired: see write half`}):null,c!=null&&d?(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:N(`shrink-0 text-[10px] font-medium tabular-nums`,P[d]),children:[c,`%`]}),(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:N(`h-full rounded-full`,O[d]),style:{width:`${c>0?Math.max(c,4):0}%`}})}),(0,q.jsxs)(`span`,{className:`sr-only`,children:[`Duration share `,c,`%, `,d===`critical`?`high`:d===`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:u}),(0,q.jsx)(`span`,{className:`min-w-0 truncate font-medium`,title:r,children:r})]}),i?(0,q.jsx)(`p`,{className:`truncate text-muted-foreground`,title:i,children:i}):null,a?(0,q.jsx)(`p`,{className:`truncate text-muted-foreground`,title:a,children:a}):null]})}var xr={read:`Read half. Consumes the shuffle written by its paired write half.`,write:`Write half. Produces the shuffle its paired read half consumes.`},Sr=64;function Cr({node:e,sheet:t=!1,onClose:n,onJumpToPaired:r}){let i=Q[e.category]??Q.transform,a=e.findings??[],o=e.metrics??[],s=e.category.charAt(0).toUpperCase()+e.category.slice(1),c=(0,K.useRef)(null),[l,d]=(0,K.useState)(0),f=e=>{c.current=null,d(0),e&&n()};return(0,q.jsxs)(`div`,{"data-testid":`plan-node-detail`,role:`dialog`,"aria-label":`Plan node detail: ${e.label}`,"data-variant":t?`sheet`:`dock`,style:t&&l>0?{transform:`translateY(${l}px)`}:void 0,className:t?`flex h-2/5 shrink-0 flex-col gap-3 overflow-y-auto rounded-t-xl border-t border-border bg-card px-3 pb-3 text-xs shadow-[0_-4px_12px_rgb(0_0_0/0.08)]`:`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:[t?(0,q.jsx)(`div`,{"data-testid":`plan-node-detail-grabber`,"aria-hidden":`true`,className:`sticky top-0 -mx-3 flex shrink-0 cursor-grab touch-none justify-center bg-card py-2.5`,onPointerDown:e=>{e.currentTarget.setPointerCapture?.(e.pointerId),c.current={startY:e.clientY}},onPointerMove:e=>{c.current&&d(Math.max(0,e.clientY-c.current.startY))},onPointerUp:e=>f(c.current!=null&&e.clientY-c.current.startY>=Sr),onPointerCancel:()=>f(!1),children:(0,q.jsx)(`span`,{className:`h-1 w-9 rounded-full bg-muted-foreground/40`})}):null,(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:i}),(0,q.jsx)(`span`,{className:`break-words font-medium`,children:e.label})]}),(0,q.jsx)(W,{type:`button`,variant:`ghost`,size:`icon`,className:t?`size-9 shrink-0`:`size-6 shrink-0`,"aria-label":`Close node detail`,onClick:n,children:(0,q.jsx)(mt,{className:`size-4`})})]}),(0,q.jsxs)(`p`,{className:`text-muted-foreground`,children:[s,` · 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)(wr,{title:`Exchange`,children:[(0,q.jsx)(`p`,{className:`text-muted-foreground`,children:xr[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:u(e.exchangeShuffleBytes)})]}),e.pairedNodeId&&r?(0,q.jsxs)(W,{type:`button`,variant:`outline`,size:`sm`,className:`mt-2 h-7 w-full justify-start gap-1.5`,onClick:()=>r(e.pairedNodeId),children:[(0,q.jsx)(Rt,{className:`size-3.5`,"aria-hidden":`true`}),`Jump to `,e.splitRole===`read`?`write`:`read`,` half`]}):null]}):null,a.length>0?(0,q.jsx)(wr,{title:`Findings`,children:(0,q.jsx)(`ul`,{className:`flex flex-col gap-1.5`,children:a.map((e,t)=>(0,q.jsxs)(`li`,{className:`flex items-start gap-1.5`,children:[(0,q.jsx)(w,{type:e.type,impactBand:e.impactBand,docAnchor:e.docAnchor,className:`shrink-0`}),(0,q.jsx)(`span`,{className:`break-words`,children:ht(e)})]},e.id??`${e.type}-${t}`))})}):null,o.length>0?(0,q.jsx)(wr,{title:`Metrics`,children:(0,q.jsx)(`dl`,{className:`grid grid-cols-[1fr_auto] gap-x-3 gap-y-1`,children:o.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)(wr,{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-xs leading-snug`,children:e.detailText})}):null]})}function wr({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 Tr=`(max-width: 639.98px)`;function Er(e){if(typeof window>`u`||!window.matchMedia)return()=>{};let t=window.matchMedia(Tr);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)}function Dr(){return typeof window>`u`||!window.matchMedia?!1:window.matchMedia(Tr).matches}function Or(){return(0,K.useSyncExternalStore)(Er,Dr,()=>!1)}var kr=[{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 Ar(){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:kr.map(({category:e,label:t})=>(0,q.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(`span`,{"aria-hidden":`true`,children:Q[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:N(`h-1.5 w-6 rounded-full`,O.info)}),` low`]}),(0,q.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(`span`,{className:N(`h-1.5 w-6 rounded-full`,O.warning)}),` medium`]}),(0,q.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(`span`,{className:N(`h-1.5 w-6 rounded-full`,O.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.`]})]})}var jr=K.createContext(void 0);function Mr(e){let t=K.useContext(jr);if(t===void 0&&!e)throw Error(c(47));return t}var Nr={...ut,disabled:e=>e.disabled,instantType:e=>e.instantType,openMethod:e=>e.openMethod,openChangeReason:e=>e.openChangeReason,modal:e=>e.modal,focusManagerModal:e=>e.focusManagerModal,stickIfOpen:e=>e.stickIfOpen,titleElementId:e=>e.titleElementId,descriptionElementId:e=>e.descriptionElementId,openOnHover:e=>e.openOnHover,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin},Pr=class extends Ie{constructor(e,t,n){let r=new je;super(Fr(e,r,t,n),Ir(r),Nr)}setOpen=(e,t)=>{let n=t.reason===M,r=t.reason===`trigger-press`&&t.event.detail===0,i=!e&&(t.reason===`escape-key`||t.reason==null),a=Me(t),o=this.select(`activeTriggerId`);if(!e&&t.reason===`close-press`&&t.trigger==null&&o!=null&&(t.trigger=this.context.triggerElements.getById(o)??this.select(`activeTriggerElement`)??void 0),this.context.onOpenChange?.(e,t),t.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(e,t);let s=()=>{let n=Ce(this.state,e,t.trigger,a());n.openChangeReason=t.reason,this.update(n)};n?(this.set(`stickIfOpen`,!0),this.context.stickIfOpenTimeout.start(500,()=>{this.set(`stickIfOpen`,!1)}),ar.flushSync(s)):s();let c;r?c=`click`:i?c=`dismiss`:t.reason===`focus-out`&&(c=`focus`),this.set(`instantType`,c)}};function Fr(e,t,n,r=!1){let i={...lt(t,n,r),disabled:!1,modal:!1,focusManagerModal:!1,instantType:void 0,openMethod:null,openChangeReason:null,titleElementId:void 0,descriptionElementId:void 0,stickIfOpen:!0,openOnHover:!1,closeDelay:0,adaptiveOrigin:void 0,...e};return i.open&&e?.mounted===void 0&&(i.mounted=!0),i}function Ir(e){return{popupRef:K.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerFocusTargetRef:K.createRef(),beforeContentFocusGuardRef:K.createRef(),stickIfOpenTimeout:new we,triggerElements:e}}var Lr=ze(function({props:e}){let{children:t,open:n,defaultOpen:r=!1,onOpenChange:i,onOpenChangeComplete:a,modal:o=!1,handle:s,triggerId:c,defaultTriggerId:l=null}=e,u=zr(s,{modal:o,open:r,openProp:n,activeTriggerId:l,triggerIdProp:c});u.useControlledProp(`openProp`,n),u.useControlledProp(`triggerIdProp`,c);let d=u.useState(`open`),p=u.useState(`mounted`),m=u.useState(`payload`);u.useContextCallback(`onOpenChange`,i),u.useContextCallback(`onOpenChangeComplete`,a),Te(u,d),Pe(u);let{forceUnmount:h}=he(d,u,()=>{u.update({stickIfOpen:!0,openChangeReason:null})});u.useSyncedValues({modal:o}),K.useEffect(()=>{d||u.context.stickIfOpenTimeout.clear()},[u,d]),K.useImperativeHandle(e.actionsRef,()=>({unmount:h,close:()=>u.setOpen(!1,f(T))}),[h,u]);let g=d||p;return(0,q.jsxs)(jr.Provider,{value:u,children:[s&&(0,q.jsx)(fe,{handle:s,store:u}),g&&(0,q.jsx)(Br,{store:u,modal:o}),typeof t==`function`?t({payload:m}):t]})});function Rr(e){return Mr(!0)?(0,q.jsx)(Lr,{props:e}):(0,q.jsx)(Le,{children:(0,q.jsx)(Lr,{props:e})})}function zr(e,t){let n=ke((e,n)=>new Pr(t,e,n));return K.useEffect(()=>n.context.stickIfOpenTimeout.disposeEffect(),[n]),n}function Br({store:e,modal:t}){let n=e.useState(`floatingRootContext`),r=Re(n,{outsidePressEvent:{mouse:t===`trap-focus`?`sloppy`:`intentional`,touch:`sloppy`}}),i=r.reference,a=r.floating;return _e(e,{activeTriggerProps:i,inactiveTriggerProps:i,popupProps:a}),null}var Vr=pe(function(e,t){let{render:n,className:r,style:i,disabled:a=!1,nativeButton:o=!0,handle:l,payload:u,openOnHover:d=!1,delay:f=300,closeDelay:p=0,id:m,...h}=e,g=Mr(!0),_=Xe(l)??g;if(!_)throw Error(c(74));let v=E(m),y=_.useState(`isTriggerActive`,v),b=_.useState(`floatingRootContext`),x=_.useState(`isOpenedByTrigger`,v),S=_.useState(`triggerPopupId`,v),C=K.useRef(null),{registerTrigger:w,isMountedByThisTrigger:T}=ye(v,C,_,{payload:u,disabled:a,openOnHover:d,closeDelay:p}),O=_.useState(`openChangeReason`),k=_.useState(`stickIfOpen`),A=_.useState(`openMethod`),j=_.useState(`focusManagerModal`),M=qe(b,{enabled:!a&&d&&(A!==`touch`||O!==`trigger-press`),mouseOnly:!0,move:!1,handleClose:nt(),restMs:f,delay:{close:p},triggerElementRef:C,isActiveTrigger:y,isClosing:()=>_.select(`transitionStatus`)===`ending`}),N=Ge(b,{stickIfOpen:k}),P=Ue(()=>_.select(`open`),e=>{_.set(`openMethod`,e)}),F=_.useState(`triggerProps`,T),{getButtonProps:I,buttonRef:L}=s({disabled:a,native:o}),R={open(e){return e&&O===`trigger-press`?Ae.open(e):Ee.open(e)}},{preFocusGuardRef:z,handlePreFocusGuardFocus:B,handleFocusTargetFocus:V}=Ze(_,C),H=D(`button`,e,{state:{disabled:a,open:x},ref:[L,t,w,C],props:[N.reference,M,F,P,{[xe]:``,id:v,"aria-haspopup":`dialog`,"aria-expanded":x,"aria-controls":S},h,I],stateAttributesMapping:R}),U=(0,q.jsx)(K.Fragment,{children:H},v);return T&&!j?(0,q.jsxs)(K.Fragment,{children:[(0,q.jsx)(G,{ref:z,onFocus:B}),U,(0,q.jsx)(G,{ref:_.context.triggerFocusTargetRef,onFocus:V})]}):U}),Hr=K.createContext(void 0);function Ur(){let e=K.useContext(Hr);if(e===void 0)throw Error(c(45));return e}var Wr=K.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e;return Mr().useState(`mounted`)||n?(0,q.jsx)(Hr.Provider,{value:n,children:(0,q.jsx)(Se,{ref:t,...r})}):null}),Gr=K.createContext(void 0);function Kr(){let e=K.useContext(Gr);if(!e)throw Error(c(46));return e}var qr=K.forwardRef(function(e,t){let{render:n,className:r,style:i,anchor:a,positionMethod:o,side:s,align:c,sideOffset:l,alignOffset:u,collisionBoundary:d=`clipping-ancestors`,collisionPadding:f,arrowPadding:p,sticky:h,disableAnchorTracking:g=!1,collisionAvoidance:_=ce,...v}=e,y=Mr(),b=Ur(),x=ue(),S=y.useState(`floatingRootContext`),C=y.useState(`mounted`),w=y.useState(`open`),T=y.useState(`openChangeReason`),E=y.useState(`activeTriggerElement`),D=y.useState(`modal`),O=y.useState(`openMethod`),k=y.useState(`positionerElement`),A=y.useState(`instantType`),M=y.useState(`transitionStatus`),N=y.useState(`adaptiveOrigin`),P=K.useRef(null),F=m(k),I=We({anchor:a,floatingRootContext:S,positionMethod:o,mounted:C,side:s,sideOffset:l,align:c,alignOffset:u,arrowPadding:p,collisionBoundary:d,collisionPadding:f,sticky:h,disableAnchorTracking:g,keepMounted:b,nodeId:x,collisionAvoidance:_,adaptiveOrigin:N}),L=S.useState(`domReferenceElement`);j(()=>{let e=L,t=P.current;if(e&&(P.current=e),t&&e&&e!==t){y.set(`instantType`,void 0);let e=new AbortController;return F(()=>{y.set(`instantType`,`trigger-change`)},e.signal),()=>{e.abort()}}},[L,F,y]);let R=D===!0&&T!==`trigger-hover`;Be(w&&R,O===`touch`,k,E);let z=y.useStateSetter(`positionerElement`),B={open:w,side:I.side,align:I.align,anchorHidden:I.anchorHidden,instant:A},V=He(e,B,{styles:I.positionerStyles,transitionStatus:M,props:v,refs:[t,z],hidden:!C,inert:!w});return(0,q.jsxs)(Gr.Provider,{value:I,children:[C&&R&&(0,q.jsx)(De,{inert:re(!w),cutout:E}),(0,q.jsx)(se,{id:x,children:V})]})}),Jr=K.createContext(void 0);function Yr(){let[e,t]=K.useState(0),n=i(()=>(t(e=>e+1),()=>{t(e=>Math.max(0,e-1))}));return{context:K.useMemo(()=>({register:n}),[n]),hasClosePart:e>0}}var Xr=K.forwardRef(function(e,t){let{render:n,className:r,style:i,initialFocus:a,finalFocus:o,...s}=e,c=Mr(),l=Kr(),u=vt(!0)!=null,{context:d,hasClosePart:f}=Yr(),p=c.useState(`open`),m=c.useState(`openMethod`),h=c.useState(`instantType`),g=c.useState(`transitionStatus`),_=c.useState(`popupProps`),y=c.useState(`titleElementId`),b=c.useState(`descriptionElementId`),x=c.useState(`modal`),S=c.useState(`mounted`),C=c.useState(`openChangeReason`),w=c.useState(`activeTriggerElement`),T=c.useState(`floatingRootContext`),E=T.useState(`floatingId`),O=c.useState(`disabled`),k=c.useState(`openOnHover`),j=c.useState(`closeDelay`);A({open:p,ref:c.context.popupRef,onComplete(){p&&c.context.onOpenChangeComplete?.(!0)}}),Je(T,{enabled:k&&!O,closeDelay:j});let M=a===void 0?me(c.context.popupRef):a,N=x!==!1&&f;c.useSyncedValue(`focusManagerModal`,N);let P=c.useStateSetter(`popupElement`),F={open:p,side:l.side,align:l.align,instant:h,transitionStatus:g},I=D(`div`,e,{state:F,ref:[t,c.context.popupRef,P],props:[_,{id:E,role:`dialog`,...be,"aria-labelledby":y,"aria-describedby":b,onKeyDown(e){u&&it.has(e.key)&&e.stopPropagation()}},Ve(g),s],stateAttributesMapping:ve});return(0,q.jsx)(le,{context:T,openInteractionType:m,modal:N,disabled:!S||C===`trigger-hover`,initialFocus:M,returnFocus:o,restoreFocus:`popup`,previousFocusableElement:v(w)?w:void 0,nextFocusableElement:c.context.triggerFocusTargetRef,beforeContentFocusGuardRef:c.context.beforeContentFocusGuardRef,children:(0,q.jsx)(Jr.Provider,{value:d,children:I})})});function Zr({...e}){return(0,q.jsx)(Rr,{"data-slot":`popover`,...e})}function Qr({...e}){return(0,q.jsx)(Vr,{"data-slot":`popover-trigger`,...e})}function $r({align:e=`center`,alignOffset:t=0,side:n=`bottom`,sideOffset:r=8,className:i,...a}){return(0,q.jsx)(Wr,{children:(0,q.jsx)(qr,{className:`isolate z-50 outline-none`,align:e,alignOffset:t,side:n,sideOffset:r,children:(0,q.jsx)(Xr,{"data-slot":`popover-content`,className:N(`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 ei({ariaLabel:e,name:t,options:n,value:r,onChange:i,trailingContent:a}){return(0,q.jsx)(mr,{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)(hr,{children:[(0,q.jsxs)(gr,{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)(_r,{children:e.description})]},e.value)),a]})})}var ti=[{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 ni({mode:e,onChange:t,hiddenCount:n}){return(0,q.jsx)(ei,{ariaLabel:`Node filter`,name:`plan-graph-filter`,options:ti,value:e,onChange:t,trailingContent:n>0?(0,q.jsx)(F,{label:`${n} nodes hidden`,impactBand:`info`}):null})}var ri=[{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 ii({mode:e,onChange:t}){return(0,q.jsx)(ei,{ariaLabel:`Duration heat bar scope`,name:`plan-graph-duration-mode`,options:ri,value:e,onChange:t})}function ai({filterMode:e,onFilterModeChange:t,hiddenCount:n,durationMode:r,onDurationModeChange:i,iconOnly:a=!1}){return(0,q.jsxs)(Zr,{children:[(0,q.jsxs)(Qr,{"aria-label":a?`Settings`:void 0,title:a?`Settings`:void 0,className:N(ae({variant:`ghost`,size:a?`icon`:`sm`}),`tap-target-comfortable`,a?void 0:`gap-1.5`),children:[(0,q.jsx)(Kt,{"aria-hidden":`true`}),a?null:`Settings`]}),(0,q.jsxs)($r,{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)(ni,{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)(ii,{mode:r,onChange:i})]})]})]})}var oi=e=>e.data;function si({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}=Ct(),[h,g]=(0,K.useState)(null),[_,v]=(0,K.useState)(null),y=[...e].filter(e=>oi(e).durationSharePct!=null).sort((e,t)=>(oi(t).durationSharePct??0)-(oi(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)(ci,{children:[(0,q.jsx)($,{label:`Zoom in`,onClick:()=>d({duration:200}),children:(0,q.jsx)(Xt,{"aria-hidden":`true`})}),(0,q.jsx)($,{label:`Zoom out`,onClick:()=>f({duration:200}),children:(0,q.jsx)(Qt,{"aria-hidden":`true`})}),(0,q.jsx)($,{label:`Fit to view`,onClick:()=>p(Rn),children:(0,q.jsx)(Wt,{"aria-hidden":`true`})})]}),(0,q.jsx)(li,{}),(0,q.jsxs)(ci,{children:[(0,q.jsx)($,{label:`Next worst duration`,disabled:y.length===0,onClick:()=>x(y,h,g),children:(0,q.jsx)(Jt,{"aria-hidden":`true`})}),t.length>0?(0,q.jsx)($,{label:`Next problem`,onClick:()=>x(t,_,v),children:(0,q.jsx)(Bt,{"aria-hidden":`true`})}):null]}),(0,q.jsx)(li,{}),(0,q.jsxs)(ci,{children:[(0,q.jsx)(ai,{iconOnly:!0,filterMode:n,onFilterModeChange:r,hiddenCount:i,durationMode:a,onDurationModeChange:o}),(0,q.jsx)($,{label:s?`Hide legend`:`Legend`,pressed:s,onClick:c,children:(0,q.jsx)(_t,{"aria-hidden":`true`})}),(0,q.jsx)($,{label:l?`Hide minimap`:`Show minimap`,pressed:l,onClick:u,children:(0,q.jsx)(Ht,{"aria-hidden":`true`})})]})]})}function ci({children:e}){return(0,q.jsx)(`div`,{className:`flex flex-col items-center gap-1`,children:e})}function li(){return(0,q.jsx)(`div`,{"aria-hidden":`true`,className:`my-0.5 h-px w-6 bg-border`})}function $({label:e,onClick:t,disabled:n,pressed:r,children:i}){return(0,q.jsx)(W,{type:`button`,variant:`ghost`,size:`icon`,className:N(`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 ui(e){if(e.type!==`planNode`)return`var(--muted)`;let t=e.data.findings??[],n=y(t);return n?yt[n]:`var(--plan-aggregate)`}function di({finding:e,className:t}){let n=_(e);return(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,q.jsx)(w,{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 fi({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)(F,{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)(di,{finding:e,className:`h-4 gap-1 px-1.5 text-xs`},e.id??`${e.type}-${t}`))}):null]})})}function pi({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)(di,{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 mi=1.5,hi=.55;function gi(e,t){return!(e>0)||!(t>0)?0:Math.min(1,Math.log(e+1)/Math.log(t+1))}function _i(e,t){return mi+7.5*gi(e,t)}function vi(e,t){return hi+.44999999999999996*gi(e,t)}function yi({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:a,markerEnd:o,data:s}){let[c,l,d]=Tt({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:a}),{shuffleBytes:f=0,maxShuffleBytes:p=0}=s??{},m=_i(f,p),h=vi(f,p),g=f>0&&f<1e3?`<1 KB`:u(f);return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Mt,{path:c,markerEnd:o,style:{stroke:`var(--text-muted)`,strokeWidth:m,strokeOpacity:h}}),(0,q.jsx)(Et,{children:(0,q.jsxs)(hr,{children:[(0,q.jsx)(gr,{"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, ${d}px)`},children:g}),(0,q.jsx)(_r,{className:`max-w-xs`,children:(0,q.jsxs)(`p`,{children:[g,` of shuffle written across this exchange. Edge thickness scales with the volume moved.`]})})]})})]})}var bi={planNode:br,segmentGroup:fi,stageGroup:pi},xi={exchange:yi},Si=[],Ci=[],wi=1,Ti=2,Ei=3,Di=e=>e.data,Oi=e=>({x:e.position.x+(e.measured?.width??220)/2,y:e.position.y+(e.measured?.height??90)/2});function ki({resizeTick:e,fitSignal:t,centerRequest:n,sheetNodeId:r}){let{fitView:i,setCenter:a,getNode:o,getZoom:s}=Ct(),c=Un(),l=Ft(),u=wt(e=>e.width),d=wt(e=>e.height),f=(0,K.useRef)(!1);return(0,K.useEffect)(()=>{!f.current&&l&&u&&d&&(f.current=!0,i(Rn))},[l,u,d,i]),(0,K.useEffect)(()=>{if(!r)return;let e=o(r);if(!e)return;let{x:t,y:n}=Oi(e);a(t,n,{zoom:s(),duration:200})},[r,d,o,a,s]),(0,K.useEffect)(()=>{if(!n||n.token===0||!n.nodeId)return;let e=o(n.nodeId);if(e){let{x:t,y:n}=Oi(e);a(t,n,{zoom:1,duration:300})}else i({nodes:[{id:n.nodeId}],duration:300,maxZoom:1})},[n,a,o,i]),(0,K.useEffect)(()=>{let e=()=>c(200);return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[c]),(0,K.useEffect)(()=>{e!==0&&c(200)},[e,c]),(0,K.useEffect)(()=>{t!==0&&c(300)},[t,c]),null}function Ai({bounds:e,onChange:t}){let n=wt(t=>{if(!e||!t.width||!t.height)return!0;let[n,r,i]=t.transform;return!Hn(e,{x:n,y:r,zoom:i},{width:t.width,height:t.height})});return(0,K.useEffect)(()=>t(n),[n,t]),null}var ji=150;function Mi(){let[e,t]=(0,K.useState)(null),[n,r]=(0,K.useState)(0);return(0,K.useEffect)(()=>{if(!e)return;let t=!0,n=new ResizeObserver(()=>{if(t){t=!1;return}r(e=>e+1)});return n.observe(e),()=>n.disconnect()},[e]),{ref:t,tick:n}}var Ni=[];function Pi(e,t){return e.filter(e=>e.stageId===t||bt(e)?.includes(t))}function Fi({model:e,showMiniMap:t,findings:n=Ni,stageId:r,segmentStageIds:i,visibleNodeIds:a,visibleEdges:o,onSelectStage:s,selectedNodeId:c=null,onSelectNode:l,onJumpToPaired:u,centerRequest:d,fitSignal:f=0,filterMode:m=`basic`,onFilterModeChange:h=()=>{},hiddenCount:g=0,durationMode:_=`exclusive`,onDurationModeChange:v=()=>{}}){let{ref:y,tick:b}=Mi(),x=Or(),S=(0,K.useMemo)(()=>{let t=e=>`segment-${e.segmentIndex}`,n=e.scope===`full`,r=e=>{let t=i?.get(e.segmentIndex);return t==null?null:`stage-${t}`},s=a?e.nodes.filter(e=>a.has(e.id)):e.nodes,c=a?o??e.edges:e.edges,l=x&&s.length<=ji?`BT`:`RL`,u=new Set(s.map(t)),d=n?new Set(s.map(r).filter(e=>e!=null)):null;return{groupOf:t,showStageGroup:n,stageGroupOf:r,layoutNodes:s,layoutEdges:c,direction:l,needsFullFallback:e.nodes.some(e=>!u.has(t(e)))||d!=null&&e.nodes.some(e=>{let t=r(e);return t!=null&&!d.has(t)})}},[e,i,a,o,x]),C=Pn((0,K.useMemo)(()=>{let{groupOf:t,layoutNodes:n,layoutEdges:r,direction:i,needsFullFallback:a}=S,o=[{nodes:n,edges:r,groupOf:t,direction:i}];return a&&o.push({nodes:e.nodes,edges:e.edges,groupOf:t,direction:i}),o},[S,e])),w=(0,K.useMemo)(()=>{if(!C)return null;let{groupOf:t,showStageGroup:a,stageGroupOf:c,layoutNodes:l,layoutEdges:u,direction:d,needsFullFallback:f}=S,m=e.nodes.reduce((e,t)=>e+(t.exclusiveDurationShare??t.durationShare??0),0),h=_n(l,u,{groupOf:t,direction:d}),g=f?_n(e.nodes,e.edges,{groupOf:t,direction:d}):h,_=h.map(e=>{let t=e.durationShare!=null&&m>0?Math.round(e.durationShare/m*100):null,n=e.splitRole===`read`?`${e.label}, paired: see write half`:[e.label,e.operatorDetail,e.primaryMetric,t==null?null:`${t}% of the plan's total stage duration`].filter(Boolean).join(`, `);return{id:e.id,type:`planNode`,position:e.position,draggable:!1,zIndex:Ei,measured:{width:220,height:90},ariaLabel:n,ariaRole:`button`,data:{...e,durationSharePct:t},...d===`BT`?{sourcePosition:Ot.Top,targetPosition:Ot.Bottom}:{}}}),v=wn(t,[h,g]).map(r=>{let a=Number(r.id.replace(`segment-`,``)),o=e.nodes.filter(e=>t(e)===r.id),s=o.reduce((e,t)=>e+(t.exclusiveDurationShare??t.durationShare??0),0),c=o.some(e=>e.durationShare!=null),l=i?.get(a)??null,u=l==null?[]:Pi(n,l);return{id:r.id,type:`segmentGroup`,position:r.position,draggable:!1,selectable:!1,focusable:!1,zIndex:Ti,style:{width:r.width,height:r.height},measured:{width:r.width,height:r.height},data:{width:r.width,height:r.height,stageId:l,durationLabel:c?p(s):null,findings:u}}}),y=new Set(v.map(e=>e.data.stageId).filter(e=>e!=null)),b=a?(()=>{let e={paddingX:32,paddingY:64,headerHeight:0},t=wn(c,[h,g],e),i=`stage-${r}`;if(Pi(n,r).length>0&&!t.some(e=>e.id===i)){let[n]=wn(()=>i,[h,g],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:wi,style:{width:e.width,height:e.height},measured:{width:e.width,height:e.height},data:{width:e.width,height:e.height,stageId:t,findings:Pi(n,t),showOwnFindings:!y.has(t),onSelect:()=>s?.(t)}}})})():[],x=o??e.edges,w=x.reduce((e,t)=>Math.max(e,t.shuffleBytes??0),0),T=x.map(e=>e.shuffleBytes?{id:e.id,source:e.source,target:e.target,type:`exchange`,data:{shuffleBytes:e.shuffleBytes,maxShuffleBytes:w}}:{id:e.id,source:e.source,target:e.target}),E=[...b,...v,..._];return{flowNodes:E,flowEdges:T,graphBounds:zn(E.map(e=>({x:e.position.x,y:e.position.y,width:e.measured?.width??0,height:e.measured?.height??0})))}},[e,n,r,i,o,s,S,C]),T=(0,K.useRef)(w);(0,K.useEffect)(()=>{w&&(T.current=w)},[w]);let E=w??T.current,D=w==null,O=E?.flowNodes??Si,k=E?.flowEdges??Ci,A=E?.graphBounds??null,[j,M]=(0,K.useState)(!1),[N,P]=(0,K.useState)(!0),[F,I]=(0,K.useState)(null),L=t&&(F??N),R=c?O.find(e=>e.id===c&&e.type===`planNode`):void 0,z=x&&R!=null,B=O.filter(e=>e.type===`planNode`),V=O.filter(e=>e.type===`stageGroup`&&(e.data.findings?.length??0)>0).sort(It(e=>e.data.findings??[])),H=a!=null&&a.size===0&&e.nodes.length>0;return E?(0,q.jsx)(St,{children:(0,q.jsx)(mr,{children:(0,q.jsxs)(`div`,{ref:y,className:`flex min-h-0 flex-1 flex-col sm:flex-row`,children:[(0,q.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1`,children:[(0,q.jsx)(si,{planNodes:B,problemNodes:V,filterMode:m,onFilterModeChange:h,hiddenCount:g,durationMode:_,onDurationModeChange:v,legendOpen:j,onToggleLegend:()=>M(e=>!e),miniMapOpen:L,onToggleMiniMap:()=>I(!L)}),(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)(Dt,{nodes:O,edges:k,nodeTypes:bi,edgeTypes:xi,"aria-label":`Plan graph. Operators and the data flowing between them. Tab to move between operators, Enter to open an operator's details.`,minZoom:.05,edgesFocusable:!1,onNodeClick:(e,t)=>{t.type===`planNode`&&l?.(t.id)},onPaneClick:()=>l?.(null),children:[(0,q.jsx)(kt,{}),(0,q.jsx)(ki,{resizeTick:b,fitSignal:f,centerRequest:d,sheetNodeId:z?R.id:null}),D?(0,q.jsx)(Nt,{position:`top-center`,children:(0,q.jsx)(Fn,{compact:!0})}):null,H?(0,q.jsx)(Nt,{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,j&&!z?(0,q.jsx)(Nt,{position:`bottom-left`,children:(0,q.jsx)(Ar,{})}):null,(0,q.jsx)(Ai,{bounds:A,onChange:P}),L&&!z?(0,q.jsx)(At,{nodeColor:ui,pannable:!0,zoomable:!0,ariaLabel:`Plan overview. Drag to pan and scroll to zoom the graph.`}):null]})})]}),R?(0,q.jsx)(Cr,{node:Di(R),sheet:x,onClose:()=>l?.(null),onJumpToPaired:u}):null]})})}):(0,q.jsx)(Fn,{})}function Ii({open:e,nodeCount:t,onConfirm:n,onCancel:r}){return(0,q.jsx)(ot,{open:e,onOpenChange:e=>{e||r()},children:(0,q.jsxs)(gt,{children:[(0,q.jsx)(st,{children:(0,q.jsx)(dt,{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)(ct,{children:[(0,q.jsx)(W,{type:`button`,variant:`outline`,size:`sm`,onClick:r,children:`Cancel`}),(0,q.jsx)(W,{type:`button`,size:`sm`,onClick:n,children:`Expand anyway`})]})]})})}var Li={io:[`scan`,`exchange`],basic:[`scan`,`exchange`,`join`,`aggregate`,`sort`,`filter`],advanced:null},Ri=300;function zi(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 Bi(e,t){try{return cn(e,t)}catch{return null}}var Vi=new Map;function Hi(e,t,n,r){return`${e??`none`}::${t}::${n}::${r}`}function Ui(){Vi.clear()}var Wi=S.getState().modelResetCount;S.subscribe(e=>{e.modelResetCount!==Wi&&(Wi=e.modelResetCount,Ui())});function Gi(e,t,n){let r=Hi(n,t.stageId,t.scope,t.durationMode),i=Vi.get(r);if(i)return i;let a=Bi(e,t);return a&&Vi.set(r,a),a}function Ki({stageId:e,appModel:t,findings:n,activeFileId:r,onClose:i,initialScope:a}){let{resetToDropZone:s}=ft(),{recentEntries:c,onPickRecent:l,onRemoveRecent:u}=tt(r),[d,f]=(0,K.useState)(`basic`),[p,m]=(0,K.useState)(`exclusive`),[h,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),[k,A]=(0,K.useState)({nodeId:null,token:0}),[j,M]=(0,K.useState)(null),N=e=>A(t=>({nodeId:e,token:t.token+1}));(0,K.useEffect)(()=>{E(null)},[C,h,d]);let P=Ke(C,t),F=P?Gi(P,{scope:`segment`,stageId:C,appModel:t,findings:n,durationMode:p},r):null,I=F!=null&&F.scope===`full`&&h===`segment`&&F.nodes.length>Ri,L=I&&!x;(0,K.useEffect)(()=>{L&&v(!0)},[L]);let R=P&&(h===`full`||_)?Gi(P,{scope:`full`,stageId:C,appModel:t,findings:n,durationMode:p},r):null,z=!y&&h===`full`&&R!=null&&R.nodes.length>Ri,B=_||z;(0,K.useEffect)(()=>{B&&Mn()},[B]),(0,K.useEffect)(()=>{let e=e=>{e.key!==`Escape`||B||(T?E(null):i())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i,B,T]);let V=I||z?null:h===`full`?R:F;(0,K.useEffect)(()=>{j&&h===`full`&&V?.nodes.some(e=>e.id===j)&&(E(j),N(j),M(null))},[j,h,V]);function H(){let e=P?Gi(P,{scope:`full`,stageId:C,appModel:t,findings:n,durationMode:p},r):null;e&&e.nodes.length>Ri?v(!0):(g(`full`),O(e=>e+1))}function U(){g(`segment`),O(e=>e+1)}function ee(e){if(V?.nodes.some(t=>t.id===e)){E(e),N(e);return}M(e),H()}let te=(0,K.useCallback)(e=>{w(e),g(`segment`),b(!0),S(!1),M(null),O(e=>e+1)},[]);function ne(){b(!0),g(`full`),v(!1),O(e=>e+1)}function re(){v(!1),M(null),z&&(b(!0),g(`segment`),F?.scope===`full`&&S(!0)),L&&S(!0)}function ie(e){return i(),l(e)}let{visibleNodeIds:ae,filteredEdges:oe,hiddenNodes:se}=(0,K.useMemo)(()=>{let e=Li[d],t=new Set;if(V)for(let n of V.nodes)(!e||e.includes(n.category))&&t.add(n.id);return{visibleNodeIds:t,filteredEdges:V?zi(V.edges,t):[],hiddenNodes:V?V.nodes.filter(e=>!t.has(e.id)):[]}},[V,d]),G=V?.scope===`full`,ce=h===`full`,le=(0,K.useId)(),ue=G&&!ce;return(0,q.jsxs)(`div`,{"data-testid":`dashboard`,className:`flex h-screen flex-col`,style:{paddingRight:`var(--docs-inset, 0px)`},children:[(0,q.jsx)($e,{onLoadNew:s,recentEntries:c,activeFileId:r,onPickRecent:ie,onRemoveRecent:u,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]}),V&&V.scope===`segment`?(0,q.jsxs)(`p`,{className:`truncate text-xs text-muted-foreground`,children:[`Segment `,V.segmentIndex+1,` of `,V.segmentCount]}):null,(0,q.jsx)(`p`,{className:`truncate text-xs text-muted-foreground`,children:(0,q.jsx)(o,{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)(W,{type:`button`,variant:`outline`,size:`sm`,disabled:ue,"aria-describedby":ue?le:void 0,onClick:G?U:H,children:G?`Back to segment view`:`Expand to full plan`}),ue?(0,q.jsx)(`p`,{id:le,className:`text-xs text-muted-foreground`,children:`This stage's plan couldn't be scoped to a single segment`}):null]}),(0,q.jsx)(W,{variant:`ghost`,size:`sm`,onClick:i,children:`Close`})]})}),(0,q.jsx)(`div`,{className:`flex flex-1 flex-col overflow-hidden`,children:z?null:!P||!V?(0,q.jsx)(`p`,{role:`alert`,className:`p-6 text-sm text-destructive`,children:I?`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)(Fi,{model:V,visibleNodeIds:ae,visibleEdges:oe,showMiniMap:!0,findings:n,stageId:C,segmentStageIds:V.segmentStageIds,onSelectStage:te,selectedNodeId:T,onSelectNode:E,onJumpToPaired:ee,centerRequest:k,fitSignal:D,filterMode:d,onFilterModeChange:f,hiddenCount:se.length,durationMode:p,onDurationModeChange:m})}),(0,q.jsx)(Ii,{open:B,nodeCount:R?.nodes.length??0,onConfirm:ne,onCancel:re})]})}export{Ki as PlanGraphRoute};
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{An as r,Cn as i,D as a,Dn as o,En as s,J as c,Lt as l,O as u,R as d,W as f,Z as p,at as m,c as h,fn as g,ft as _,gn as v,hn as y,in as b,it as x,j as S,k as C,kn as w,mn as T,nn as E,on as D,rn as O,tt as k,u as A,vn as j}from"./DisclosureContext-DK1_iz6J.js";import{_ as M,c as N,l as P,n as F,o as I,p as L,s as R,t as z,u as B,v as V}from"./inertValue-L9VxV0VE.js";import{t as H}from"./button-DbpTz2yk.js";import{_ as U,g as W}from"./composite-C9Nu2EI9.js";import{S as G}from"./index-fDiwfuoO.js";import{d as K,f as q,p as ee,s as J,u as te}from"./toggle-DPeN6aNa.js";import{t as Y}from"./RowStatusCluster-Dbtmte7l.js";var ne={name:`chevron-right`,size:24,node:[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]};ne.node;var re=b(ne),X=e(t(),1),ie=X.createContext(void 0);function Z(){let e=X.useContext(ie);if(e===void 0)throw Error(o(64));return e}var ae=`data-activation-direction`,Q={tabActivationDirection:e=>({[ae]:e})},$=n(),oe=X.forwardRef(function(e,t){let{className:n,defaultValue:i=0,onValueChange:a,orientation:o=`horizontal`,render:s,value:l,style:u,...d}=e,f=e.defaultValue!==void 0,m=X.useRef([]),[h,g]=X.useState(()=>new Map),[y,b]=_({controlled:l,default:i,name:`Tabs`,state:`value`}),S=l!==void 0,[C,T]=X.useState(()=>new Map),E=X.useRef(void 0),D=X.useCallback(e=>se(C,e),[C]),[O,A]=X.useState(()=>({previousValue:y,tabActivationDirection:`none`})),{previousValue:j,tabActivationDirection:M}=O,N=M,P=!1;j!==y&&(N=ce(j,y,o,C),P=j!=null&&y!=null&&D(y)==null);let F=P?j:y,I=j!==F||M!==N;w(()=>{I&&A({previousValue:F,tabActivationDirection:N})},[F,I,N]);let L=r((e,t)=>{t.activationDirection=ce(y,e,o,C),a?.(e,t),!t.isCanceled&&b(e)}),R=r((e,t)=>{a?.(e,c(t,void 0,void 0,{activationDirection:`none`}))}),z=r((e,t)=>(g(n=>{let r=new Map(n);return r.set(e,t),r}),()=>{g(n=>{if(n.get(e)!==t)return n;let r=new Map(n);return r.delete(e),r})})),B=X.useCallback(e=>h.get(e),[h]),V=X.useCallback(e=>{for(let t of C.values())if(e===t.value)return t.id},[C]),H=X.useMemo(()=>({getTabElementBySelectedValue:D,getTabIdByPanelValue:V,getTabPanelIdByValue:B,onValueChange:L,orientation:o,registerMountedTabPanel:z,setTabMap:T,tabActivationDirection:N,value:y}),[D,V,B,L,o,z,T,N,y]),U=X.useMemo(()=>{for(let e of C.values())if(e.value===y)return e},[C,y]),W=X.useMemo(()=>{for(let e of C.values())if(!e.disabled)return e.value},[C]),G=X.useRef(!f),K=X.useRef(i),q=X.useRef(f),J=X.useRef(!1);w(()=>{if(S)return;function e(e,t){b(e),A({previousValue:e,tabActivationDirection:`none`}),R(e,t),G.current=!1}if(C.size===0){J.current&&y!==null&&!E.current?.isConnected&&e(null,x);return}J.current=!0,E.current=C.keys().next().value;let t=U?.disabled,n=U==null&&y!==null;if(!t&&y===K.current&&(q.current=!1),q.current&&t&&y===K.current)return;let r=G.current;if(t||n){let n=W??null;if(y===n){G.current=!1;return}let i=x;r?i=k:t&&(i=p),e(n,i);return}r&&U!=null&&(R(y,k),G.current=!1)},[W,S,R,U,b,C,y]);let te=v(`div`,e,{state:{orientation:o,tabActivationDirection:N},ref:t,props:d,stateAttributesMapping:Q});return(0,$.jsx)(ie.Provider,{value:H,children:(0,$.jsx)(ee,{elementsRef:m,children:te})})});function se(e,t){for(let[n,r]of e.entries())if(t===r.value)return n;return null}function ce(e,t,n,r){if(e==null||t==null)return`none`;let[i,a,o]=n===`horizontal`?[`left`,`left`,`right`]:[`top`,`up`,`down`],s=se(r,e),c=se(r,t);if(s==null||c==null)return s!==c&&(typeof e==`number`||typeof e==`string`)&&typeof e==typeof t?t>e?o:a:`none`;let l=s.getBoundingClientRect()[i],u=c.getBoundingClientRect()[i];return u<l?a:u>l?o:`none`}var le=X.createContext(void 0);function ue(){let e=X.useContext(le);if(e===void 0)throw Error(o(65));return e}var de=X.forwardRef(function(e,t){let{className:n,disabled:a=!1,render:o,value:l,id:u,nativeButton:d=!0,style:f,...p}=e,{value:h,getTabPanelIdByValue:_,onValueChange:y,orientation:b,tabActivationDirection:x}=Z(),{activateOnFocus:S,registerTabResizeObserverElement:C,tabsListElement:T}=ue(),{highlightedIndex:E,onHighlightedIndexChange:D}=s(),O=g(u),k=X.useMemo(()=>({disabled:a,id:O,value:l}),[a,O,l]),{compositeProps:A,compositeRef:j,index:M}=te({metadata:k}),N=l===h,P=X.useRef(!1),F=X.useRef(null),I=r(e=>{F.current?.(),F.current=e?C(e):null});w(()=>{if(P.current){P.current=!1;return}if(!(N&&M>-1&&E!==M))return;let e=T;if(e!=null){let t=W(V(e));if(t&&U(e,t))return}a||D(M)},[N,M,E,D,a,T]);let{getButtonProps:L,buttonRef:R}=i({disabled:a,native:d,focusableWhenDisabled:!0}),z=_(l),B=X.useRef(!1),H=X.useRef(!1);function G(e){y(l,c(m,e.nativeEvent,void 0,{activationDirection:`none`}))}function K(e){N||a||G(e)}function ee(e){N||a||S&&(!B.current||H.current)&&G(e)}function J(e){if(N||a)return;B.current=!0,H.current=e.button===0;let t=V(e.currentTarget);function n(){B.current=!1,H.current=!1,t.removeEventListener(`pointerup`,n),t.removeEventListener(`pointercancel`,n)}t.addEventListener(`pointerup`,n),t.addEventListener(`pointercancel`,n)}return v(`button`,e,{state:{disabled:a,active:N,orientation:b,tabActivationDirection:x},ref:[t,R,j,I],props:[A,{role:`tab`,"aria-controls":z,"aria-selected":N,id:O,onClick:K,onFocus:ee,onPointerDown:J,[q]:N?``:void 0,onKeyDownCapture(){P.current=!0}},p,L],stateAttributesMapping:Q})}),fe=`data-index`,pe={...Q,...d},me=X.forwardRef(function(e,t){let{className:n,value:r,render:i,keepMounted:a=!1,style:o,...s}=e,{value:c,getTabIdByPanelValue:l,orientation:u,tabActivationDirection:d,registerMountedTabPanel:p}=Z(),m=g(),{ref:h,index:_}=K(),y=r===c,{mounted:b,transitionStatus:x,setMounted:C}=f(y),T=!b,E=l(r),D={hidden:T,orientation:u,tabActivationDirection:d,transitionStatus:x},O=X.useRef(null),k=v(`div`,e,{state:D,ref:[t,h,O],props:[{"aria-labelledby":E,hidden:T,id:m,role:`tabpanel`,tabIndex:y?0:-1,inert:z(!y),[fe]:_},s],stateAttributesMapping:pe});return S({open:y,ref:O,onComplete(){y||C(!1)}}),w(()=>{if(!(m==null||T&&!a))return p(r,m)},[T,a,r,m,p]),a||b?k:null}),he=X.forwardRef(function(e,t){let{activateOnFocus:n=!1,className:i,loopFocus:a=!0,render:o,style:s,...c}=e,{orientation:l,setTabMap:u,tabActivationDirection:d}=Z(),[f,p]=X.useState(0),[m,h]=X.useState(null),g=X.useRef(new Set),_=X.useRef(new Set),v=X.useRef(null);w(()=>{if(typeof ResizeObserver>`u`)return;let e=new ResizeObserver(()=>{g.current.forEach(e=>{e()})});return v.current=e,m&&e.observe(m),_.current.forEach(t=>{e.observe(t)}),()=>{e.disconnect(),v.current=null}},[m]);let y=r(e=>(g.current.add(e),()=>{g.current.delete(e)})),b=r(e=>(_.current.add(e),v.current?.observe(e),()=>{_.current.delete(e),v.current?.unobserve(e)})),x={orientation:l,tabActivationDirection:d},S={"aria-orientation":l===`vertical`?`vertical`:void 0,role:`tablist`},C=X.useMemo(()=>({activateOnFocus:n,registerIndicatorUpdateListener:y,registerTabResizeObserverElement:b,tabsListElement:m}),[n,y,b,m]);return(0,$.jsx)(le.Provider,{value:C,children:(0,$.jsx)(J,{render:o,className:i,style:s,state:x,refs:[t,h],props:[S,c],stateAttributesMapping:Q,highlightedIndex:f,enableHomeAndEndKeys:!0,loopFocus:a,orientation:l,onHighlightedIndexChange:p,onMapChange:u,disabledIndices:j})})});function ge({className:e,orientation:t=`horizontal`,...n}){return(0,$.jsx)(oe,{"data-slot":`tabs`,"data-orientation":t,className:T(`group/tabs flex gap-2 data-horizontal:flex-col`,e),...n})}var _e=y(`group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none data-[variant=chrome]:w-full data-[variant=chrome]:items-end data-[variant=chrome]:justify-start data-[variant=chrome]:gap-1 data-[variant=chrome]:rounded-none data-[variant=chrome]:border-b data-[variant=chrome]:border-border data-[variant=chrome]:p-0 group-data-horizontal/tabs:data-[variant=chrome]:h-auto`,{variants:{variant:{default:`bg-muted`,line:`gap-1 bg-transparent`,chrome:`bg-transparent`}},defaultVariants:{variant:`default`}});function ve({className:e,variant:t=`default`,...n}){return(0,$.jsx)(he,{"data-slot":`tabs-list`,"data-variant":t,className:T(_e({variant:t}),e),...n})}function ye({className:e,...t}){return(0,$.jsx)(de,{"data-slot":`tabs-trigger`,className:T(`relative inline-flex h-[calc(100%-1px)] flex-1 cursor-pointer items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:cursor-default disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:cursor-default aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,`group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent`,`data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground`,`after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100`,`group-data-[variant=chrome]/tabs-list:h-auto group-data-[variant=chrome]/tabs-list:flex-none group-data-[variant=chrome]/tabs-list:-mb-px group-data-[variant=chrome]/tabs-list:gap-2 group-data-[variant=chrome]/tabs-list:rounded-none group-data-[variant=chrome]/tabs-list:border-0 group-data-[variant=chrome]/tabs-list:border-b-2 group-data-[variant=chrome]/tabs-list:border-transparent group-data-[variant=chrome]/tabs-list:px-2.5 group-data-[variant=chrome]/tabs-list:py-2.5 group-data-[variant=chrome]/tabs-list:text-[0.8125rem] group-data-[variant=chrome]/tabs-list:font-medium group-data-[variant=chrome]/tabs-list:text-muted-foreground group-data-[variant=chrome]/tabs-list:hover:text-foreground`,`group-data-[variant=chrome]/tabs-list:data-active:border-accent group-data-[variant=chrome]/tabs-list:data-active:bg-transparent group-data-[variant=chrome]/tabs-list:data-active:text-foreground group-data-[variant=chrome]/tabs-list:data-active:shadow-none dark:group-data-[variant=chrome]/tabs-list:data-active:border-accent dark:group-data-[variant=chrome]/tabs-list:data-active:bg-transparent`,`tap-target-comfortable tap-target-comfortable--sm`,e),...t})}function be({className:e,...t}){return(0,$.jsx)(me,{"data-slot":`tabs-content`,className:T(`flex-1 text-sm outline-none`,e),...t})}function xe({title:e,children:t,defaultOpen:n=!1}){let[r,i]=(0,X.useState)(n);return(0,$.jsxs)(a,{open:r,onOpenChange:i,className:`space-y-2`,children:[(0,$.jsxs)(C,{"aria-expanded":String(r),className:`tap-target-comfortable tap-target-comfortable--sm flex cursor-pointer items-center gap-2 bg-transparent text-left`,children:[(0,$.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:e}),r?(0,$.jsx)(E,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):(0,$.jsx)(O,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`})]}),(0,$.jsx)(u,{keepMounted:!0,children:t})]})}function Se({title:e,rows:t,children:n,collapsible:r=!1,defaultOpen:i=!1}){let a=t.filter(e=>!!e);if(a.length===0&&!n)return null;let o=(0,$.jsx)(`div`,{className:`grid min-w-0 grid-cols-[auto_1fr] gap-x-4 gap-y-1 text-sm`,children:a.map(([e,t],n)=>(0,$.jsxs)(X.Fragment,{children:[(0,$.jsx)(`span`,{className:`text-muted-foreground`,children:e}),(0,$.jsx)(`span`,{className:`break-words`,children:t})]},n))});return r&&e?(0,$.jsx)(xe,{title:e,defaultOpen:i,children:(0,$.jsxs)(`div`,{className:`space-y-2`,children:[o,n]})}):(0,$.jsxs)(`section`,{className:`space-y-2`,children:[e?(0,$.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:e}):null,o,n]})}function Ce(e){return String(e).replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}function we(e,{title:t=`plan`}={}){if(!e)return``;let n=[`digraph "${Ce(t)}" {`,` rankdir=BT;`,` node [shape=box];`],r=new WeakMap,i=[],a=0;return M(e,(e,t)=>{let o=`n${a++}`;r.set(e,o);let s=e.detail&&e.detail!==e.name?`${e.name}\\n${e.detail}`:e.name;n.push(` ${o} [label="${Ce(s)}"];`),t&&i.push(` ${r.get(t)} -> ${o};`)},{dedupe:!0}),[...n,...i,`}`].join(`
2
+ `)}var Te=`Derived from best-effort plan-text parsing: cross-check against the Summary tab before acting.`,Ee=`Derived from best-effort plan-text parsing: cross-check against the Tree tab before acting.`,De=`Derived from best-effort plan-text parsing: cross-check against the Tree tab or View plan graph before acting.`;function Oe(e){try{return F(e)}catch{return null}}function ke(e){try{return I(e)}catch{return null}}function Ae(e,t){try{return we(e,{title:`stage-${t}`})||null}catch{return null}}function je(e,t,n,r){if(!n||r==null)return null;try{return R(e,t,n,r)}catch{return null}}function Me(e,t){let n=t.stages.get(e);return(n?.sqlExecutionId==null?null:t.sql.get(n.sqlExecutionId))?.planTree??null}function Ne(e){switch(e.kind){case`scan`:return[e.path?[`Path`,e.path]:null,e.format?[`Format`,e.format]:null,e.projectedColumns?.length?[`Columns`,e.projectedColumns.join(`, `)]:null,e.pushedFilters?.length?[`Filters`,e.pushedFilters.join(`, `)]:null];case`join`:return[[`Left keys`,e.leftKeys?.length?e.leftKeys.join(`, `):`(none)`],[`Right keys`,e.rightKeys?.length?e.rightKeys.join(`, `):`(none)`]];case`agg`:return[[`Group by`,e.groupByKeys?.length?e.groupByKeys.join(`, `):`(none)`],[`Functions`,e.aggregations?.length?e.aggregations.join(`, `):`(none)`]];case`exchange`:return[e.partitioning?[`Partitioning`,e.partitioning]:null,e.keys?.length?[`Keys`,e.keys.join(`, `)]:null,e.numPartitions?[`Partitions`,String(e.numPartitions)]:null];default:return[]}}function Pe({rows:e}){let[t,n]=(0,X.useState)(!1);return(0,$.jsxs)(`details`,{className:`pt-1 pl-4`,onToggle:e=>n(e.currentTarget.open),children:[(0,$.jsx)(`summary`,{className:`tap-target-comfortable cursor-pointer text-xs text-muted-foreground`,children:`full detail`}),t?(0,$.jsx)(`div`,{className:`pt-1`,children:(0,$.jsx)(Se,{rows:e})}):null]})}function Fe({node:e,depth:t,durationMap:n}){let r=(0,X.useRef)(null),[i,a]=(0,X.useState)(t<=1);(0,X.useEffect)(()=>{r.current&&(r.current.open=t<=1)},[]);let o=N(e.name),s=e.detail??``,c=Oe(e),u=c?Ne(c):[],d=u.some(Boolean),f=c?.kind===`scan`?``:L(e.name,s),p=e.exchangeRole===`read`?e.children[0]:void 0,m=n?.get(p??e),g=(p??e).metrics??[],_=g.length>0?B(g):``,v=(p??e).children??[],y=v.length>0||g.length>0||d;return(0,$.jsxs)(`details`,{ref:r,"data-op":o,className:`rounded-md`,onToggle:e=>a(e.currentTarget.open),children:[(0,$.jsxs)(`summary`,{className:`flex list-none flex-wrap items-center gap-2 rounded-md px-1.5 py-1 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden ${y?`cursor-pointer hover:bg-muted`:`cursor-default`}`,children:[y?(0,$.jsx)(re,{"aria-hidden":`true`,className:`size-3.5 shrink-0 text-muted-foreground transition-transform ${i?`rotate-90`:``}`}):(0,$.jsx)(`span`,{className:`size-3.5 shrink-0`}),(0,$.jsx)(`span`,{className:`font-medium`,children:e.name}),f?(0,$.jsx)(`span`,{title:s,className:`text-xs text-muted-foreground`,children:f}):null,c?.warning?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(h,{type:`duplicatePlanSubtree`,impactBand:`warning`,className:G}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:c.warning.detail}),(0,$.jsx)(A,{children:(0,$.jsx)(Y,{confidence:`low`})})]}):null,m!=null&&m>0?(0,$.jsxs)(`span`,{title:`Approximate wall-time attributed to this operator`,className:`text-xs text-muted-foreground`,children:[`~`,l(m)]}):null,_?(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:_}):null]}),g.length>0?(0,$.jsx)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1 pt-1 pl-6 text-xs text-muted-foreground`,children:g.map((e,t)=>(0,$.jsxs)(`span`,{children:[e.name,`: `,P(e)]},t))}):null,d?(0,$.jsx)(Pe,{rows:u}):null,v.length>0?(0,$.jsx)(`div`,{className:`ml-[7px] space-y-1 border-l border-border/60 pt-1 pl-3.5`,children:v.map((e,r)=>(0,$.jsx)(Fe,{node:e,depth:t+1,durationMap:n},r))}):null]})}function Ie(e){return`${e.path||`(unknown path)`} (${e.format})`}function Le(e){let t=e.leftKeys.length||e.rightKeys.length?` on ${e.leftKeys.join(`, `)||`(none)`} / ${e.rightKeys.join(`, `)||`(none)`}`:``;return`${e.joinType}${t}`}function Re(e){let t=e.aggregations.join(`, `)||`(none)`;return e.groupByKeys.length?`${t} by ${e.groupByKeys.join(`, `)}`:t}function ze(e){let t=new Map;for(let n of e)t.set(n.partitioning,(t.get(n.partitioning)??0)+1);return[...t.entries()].map(([e,t])=>`${e}×${t}`).join(`, `)}function Be({summary:e,hasPlanGraph:t}){let{scans:n,joins:r,aggs:i,exchanges:a,warnings:o}=e,s=a.length>=4,c=s||o.length>0,l=t?De:Ee;return(0,$.jsx)(Se,{rows:[n.length>0&&[`Sources (${n.length})`,n.map(Ie).join(`, `)],r.length>0&&[`Joins (${r.length})`,r.map(Le).join(`; `)],i.length>0&&[`Aggregations (${i.length})`,i.map(Re).join(`; `)],a.length>0&&[`Exchanges (${a.length})`,(0,$.jsxs)($.Fragment,{children:[ze(a),s?(0,$.jsxs)($.Fragment,{children:[` `,(0,$.jsx)(`span`,{className:`text-muted-foreground`,children:`— consider whether some joins/aggregations could share a partitioning scheme to avoid redundant shuffles.`}),` `,(0,$.jsx)(A,{children:(0,$.jsx)(Y,{confidence:`low`})})]}):null]})],o.length>0&&[`Warnings (${o.length})`,(0,$.jsxs)(`span`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,$.jsx)(h,{type:`duplicatePlanSubtree`,impactBand:`warning`,className:`bg-plan-aggregate/8 text-plan-aggregate`}),o.map(e=>e.detail).join(`; `),(0,$.jsx)(A,{children:(0,$.jsx)(Y,{confidence:`low`})})]})]],children:c?(0,$.jsx)(A,{children:(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:l})}):null})}function Ve({stageId:e,appModel:t}){let n=D(e=>e.openPlanGraph),r=Me(e,t);if(!r)return null;let i=t.stages.get(e),a=je(r,t,i?.sqlExecutionId==null?null:t.sql.get(i.sqlExecutionId),i?.sqlExecutionId),o=ke(r),s=Ae(r,e);return(0,$.jsxs)(ge,{defaultValue:`tree`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,$.jsxs)(ve,{"aria-label":`Plan view`,children:[(0,$.jsx)(ye,{value:`tree`,children:`Tree`}),(0,$.jsx)(ye,{value:`summary`,children:`Summary`})]}),(0,$.jsx)(`div`,{className:`flex gap-2`,children:s?(0,$.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>n(e),children:`View plan graph`}):null})]}),(0,$.jsx)(be,{value:`tree`,children:(0,$.jsxs)(`div`,{className:`space-y-2 pt-3`,children:[(0,$.jsx)(Fe,{node:r,depth:0,durationMap:a}),(0,$.jsx)(A,{children:(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Showing initial (pre-AQE) plan. Metrics reflect operators as planned; adaptive optimizations may have rewritten the actual execution.`})}),o&&o.warnings.length>0?(0,$.jsx)(A,{children:(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:Te})}):null]})}),(0,$.jsx)(be,{value:`summary`,children:(0,$.jsx)(`div`,{className:`pt-3`,children:o?(0,$.jsx)(Be,{summary:o,hasPlanGraph:s!=null}):(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Plan summary couldn’t be parsed.`})})})]})}export{ge as a,ye as c,xe as i,Me as n,be as o,Se as r,ve as s,Ve as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{Ot as r,Xt as i,c as a,u as o}from"./DisclosureContext-DK1_iz6J.js";import{P as s,S as c,k as l,l as u}from"./index-fDiwfuoO.js";import{t as d}from"./RowStatusCluster-Dbtmte7l.js";import{n as f,t as p}from"./WidgetLeadSummary-CXFZP00C.js";import{n as m}from"./findings-of-type-BL2u3RGZ.js";import{n as h}from"./StagePill--P7PDd3s.js";import{t as g}from"./RowPagination-C-LzWkI5.js";import{t as _}from"./ImpactEstimate-Dm3xWbzV.js";import{i as v,r as y}from"./impact-sort-mC5ISgX8.js";import{n as b,t as x}from"./finding-anchor-Dr40LkS9.js";import{t as S}from"./usePagedRows-BafD6bEN.js";import{n as C,t as w}from"./useSortMode-DjrAN-z4.js";var T=e(t(),1),E=n();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)(h,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,E.jsxs)(`p`,{children:[u(e.recommendation??``).measured??e.recommendation,` `,(0,E.jsx)(_,{finding:e})]})]})}var O=(0,T.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:n,setSortMode:u,orderBy:h}=w(),[_,b]=(0,T.useState)(!t),[x,O]=(0,T.useState)(0),{findings:k,pills:A}=(0,T.useMemo)(()=>{let t=m(e,`pythonUdf`).sort((e,t)=>r[e.impactBand]-r[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds))].map(e=>({id:e}))}},[e,n]),j=h(k,e=>[e],v),M=s(),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:`Row-at-a-time Python UDFs`,fixFor:k,impactBand:i(k),open:_,onOpenChange:b,badges:(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(a,{type:`pythonUdf`,impactBand:i(k)??`info`,className:c}),y(k,k.length,_)?(0,E.jsx)(C,{mode:n,onChange:u}):null]}),statusBadge:(0,E.jsx)(o,{children:(0,E.jsx)(d,{confidence:k[0].confidence,validationRequired:k[0].validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,E.jsx)(p,{value:`${A.length} stage${A.length===1?``:`s`}`,context:f(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)(g,{page:F,totalPages:P,onPrev:()=>O(e=>e-1),onNext:()=>O(e=>e+1)})]})});export{O as PythonUdf};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{Lt as r,Ot as i,Wt as a,Xt as o,c as s,s as c,u as l}from"./DisclosureContext-DK1_iz6J.js";import{P as u,k as d}from"./index-fDiwfuoO.js";import{n as f,t as p}from"./WidgetLeadSummary-CXFZP00C.js";import{n as m}from"./findings-of-type-BL2u3RGZ.js";import{t as h}from"./StagePill--P7PDd3s.js";import{t as g}from"./RowPagination-C-LzWkI5.js";import{t as _}from"./ImpactEstimate-Dm3xWbzV.js";import{r as v}from"./impact-sort-mC5ISgX8.js";import{n as y}from"./finding-anchor-Dr40LkS9.js";import{t as b}from"./usePagedRows-BafD6bEN.js";import{n as x,t as S}from"./useSortMode-DjrAN-z4.js";var C=e(t(),1),w=n();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)(h,{stageId:e.stageId}),(0,w.jsx)(c,{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)(l,{children:[` `,E(e)]}):null]}),(0,w.jsx)(_,{finding:e})]})}function O({appModel:e,catalog:t,defaultCollapsed:n=!0}){let[c,l]=(0,C.useState)(0),{sortMode:h,setSortMode:_,orderBy:y}=S(),[E,O]=(0,C.useState)(!n),k=u(),A=(0,C.useRef)(!1);(0,C.useEffect)(()=>{if(!A.current){A.current=!0;return}l(0)},[e]);let j=m(t,`retryWaste`).filter(T),M=[...j].sort((e,t)=>i[e.impactBand]-i[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,c,l,P);return j.length===0?null:(0,w.jsxs)(d,{title:`Retry Waste`,fixFor:j,impactBand:o(j),badges:(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(s,{type:`retryWaste`,impactBand:o(j)}),v(j,j.length,E)?(0,w.jsx)(x,{mode:h,onChange:e=>{_(e),l(0)}}):null]}),open:E,onOpenChange:O,summary:(0,w.jsx)(p,{value:r(a(M[0])),context:f(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)(g,{page:I,totalPages:F,onPrev:()=>l(e=>e-1),onNext:()=>l(e=>e+1)})]})}export{O as RetryWaste};