sparkforensics-server 0.1.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/README.md +6 -0
  2. package/index.js +41 -50
  3. package/lib/static-files.js +15 -10
  4. package/package.json +23 -3
  5. package/public/assets/AutoscalingChurn-B96FKx97.js +1 -0
  6. package/public/assets/CacheUtilization-lKua3J1x.js +1 -0
  7. package/public/assets/CachingOpportunity-U0g-8HPV.js +1 -0
  8. package/public/assets/ColdStart-w8QYTNKo.js +1 -0
  9. package/public/assets/ConfigAudit-ClZp5BpV.js +1 -0
  10. package/public/assets/CoreUsageArea-o3kqQwyi.js +1 -0
  11. package/public/assets/Dashboard-Bjl-MYMm.js +1 -0
  12. package/public/assets/DuplicatePlanSubtree-Cm_UU3lY.js +1 -0
  13. package/public/assets/DurationHistogram-ltF-7M0A.js +1 -0
  14. package/public/assets/EmptyState-BCA3xioa.js +1 -0
  15. package/public/assets/ExecutorUtilization-Cn69i0uq.js +1 -0
  16. package/public/assets/GcPressure-CYsmU1d7.js +1 -0
  17. package/public/assets/ImpactEstimate-BGt-4WX5.js +1 -0
  18. package/public/assets/IncompleteRun-s6uQ8OLf.js +1 -0
  19. package/public/assets/JobFailures-DJ2dDvPA.js +1 -0
  20. package/public/assets/MemoryUtilization-C9G7P94X.js +1 -0
  21. package/public/assets/OverBroadcast-DYauoYWQ.js +1 -0
  22. package/public/assets/PartitionSizing-Cz_B0-uG.js +1 -0
  23. package/public/assets/PlanExplorer-_2oB5ouy.js +1 -0
  24. package/public/assets/PlanGraphRoute-Cj-GWM8W.js +1 -0
  25. package/public/assets/RetryWaste-D_m8ASwP.js +1 -0
  26. package/public/assets/RowPagination-BLsm8I6i.js +1 -0
  27. package/public/assets/ShuffleIO-pyDhxdaz.js +1 -0
  28. package/public/assets/Skew-BGLJuZZR.js +1 -0
  29. package/public/assets/SlowHost-ChdWVvGO.js +1 -0
  30. package/public/assets/SmallFiles-gTilBtjW.js +1 -0
  31. package/public/assets/SpeculationWaste-CVzgJnSj.js +1 -0
  32. package/public/assets/Spill-NGJGQaTB.js +1 -0
  33. package/public/assets/StageFailed-sGhki53z.js +1 -0
  34. package/public/assets/StageFindingGroup-AyI7BMd3.js +1 -0
  35. package/public/assets/StageHeader-BTzGkK8k.js +1 -0
  36. package/public/assets/StagePill-BlMOW_pU.js +1 -0
  37. package/public/assets/StageShape-DfOW93Z1.js +1 -0
  38. package/public/assets/StageSlowness-BMZ-K_5e.js +1 -0
  39. package/public/assets/Straggler-dffcAN7t.js +1 -0
  40. package/public/assets/TaskFailures-DGDwUK2A.js +1 -0
  41. package/public/assets/TinyTask-CfT8zZDr.js +1 -0
  42. package/public/assets/UnderBroadcast-CiOiJ0k1.js +1 -0
  43. package/public/assets/WidgetLeadSummary-BdUUi7L5.js +1 -0
  44. package/public/assets/charts-vendor-0VMaLVLN.js +59 -0
  45. package/public/assets/downsample-WmNM1qc9.js +1 -0
  46. package/public/assets/finding-anchor-DEV8JvgH.js +1 -0
  47. package/public/assets/impact-sort-DxaUheWV.js +1 -0
  48. package/public/assets/inbox-_QCYkBsP.js +1 -0
  49. package/public/assets/index-3vlFVNCg.js +9 -0
  50. package/public/assets/index-CjVklAdW.css +2 -0
  51. package/public/assets/parser-worker-B2bc0lWe.js +112 -0
  52. package/public/assets/plan-graph-vendor-B0sEms9Z.js +7 -0
  53. package/public/assets/plan-graph-vendor-DLioOiRN.css +1 -0
  54. package/public/assets/react-vendor-D2TLlSzI.js +9 -0
  55. package/public/assets/rolldown-runtime-hePW80VL.js +1 -0
  56. package/public/assets/select-kuy1MiAo.js +1 -0
  57. package/public/assets/toggle-group-CUd-KWkp.js +1 -0
  58. package/public/assets/usePagedRows-jNUWgVTD.js +1 -0
  59. package/public/assets/useRecentFiles-D0OA_EOK.js +11 -0
  60. package/public/assets/useSortMode-BaeAA5cw.js +1 -0
  61. package/public/docs/404.html +3 -3
  62. package/public/docs/assets/{app.Bxy4_HVA.js → app.APoq_UBs.js} +1 -1
  63. package/public/docs/assets/aqe-loop.IwQSATHw.svg +1 -0
  64. package/public/docs/assets/aqe-loop.dark.DGbaxqJE.svg +1 -0
  65. package/public/docs/assets/broadcast-vs-shuffle.Db4WY1XK.svg +1 -0
  66. package/public/docs/assets/broadcast-vs-shuffle.dark.C7Bxs0mG.svg +1 -0
  67. package/public/docs/assets/cache-lifecycle.dark.B-hS7AgU.svg +1 -0
  68. package/public/docs/assets/cache-lifecycle.rEOVYQNU.svg +1 -0
  69. package/public/docs/assets/chunks/@localSearchIndexroot.CvM5fuxe.js +1 -0
  70. package/public/docs/assets/chunks/{VPLocalSearchBox.L5jNOIR3.js → VPLocalSearchBox.B3TPzlHq.js} +1 -1
  71. package/public/docs/assets/chunks/duplicate-plan-subtree.dark.Cdp70QhV.js +1 -0
  72. package/public/docs/assets/chunks/{framework.CNDaxUod.js → framework.DSg0KOwT.js} +1 -1
  73. package/public/docs/assets/chunks/retry-escalation-ladder.dark.DHipdJgZ.js +1 -0
  74. package/public/docs/assets/chunks/theme.PavXO_vz.js +2 -0
  75. package/public/docs/assets/cold-start-timeline.DxC_Sc7w.svg +1 -0
  76. package/public/docs/assets/cold-start-timeline.dark.CZ17YcAG.svg +1 -0
  77. package/public/docs/assets/columnar-layout.PghGeOEA.svg +1 -0
  78. package/public/docs/assets/columnar-layout.dark.BVNlz0ff.svg +1 -0
  79. package/public/docs/assets/container-memory.DIO0AnIm.svg +1 -0
  80. package/public/docs/assets/container-memory.dark.CP-5zuCl.svg +1 -0
  81. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CWpj01WU.js +1 -0
  82. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CWpj01WU.lean.js +1 -0
  83. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CgzUsQ6W.js +1 -0
  84. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CgzUsQ6W.lean.js +1 -0
  85. package/public/docs/assets/contributor-guide_architecture_drill-down.md.BtPdlM7r.js +1 -0
  86. package/public/docs/assets/contributor-guide_architecture_drill-down.md.BtPdlM7r.lean.js +1 -0
  87. package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.CzlXOnCq.js → contributor-guide_architecture_impact-estimation.md.CooslVJt.js} +1 -1
  88. package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.CzlXOnCq.lean.js → contributor-guide_architecture_impact-estimation.md.CooslVJt.lean.js} +1 -1
  89. package/public/docs/assets/{contributor-guide_architecture_index.md.94lNbF-4.js → contributor-guide_architecture_index.md.3TO9ic6w.js} +1 -1
  90. package/public/docs/assets/{contributor-guide_architecture_index.md.94lNbF-4.lean.js → contributor-guide_architecture_index.md.3TO9ic6w.lean.js} +1 -1
  91. package/public/docs/assets/{contributor-guide_architecture_overview.md.mQFlN66o.js → contributor-guide_architecture_overview.md.CehiRmGn.js} +1 -1
  92. package/public/docs/assets/{contributor-guide_architecture_overview.md.mQFlN66o.lean.js → contributor-guide_architecture_overview.md.CehiRmGn.lean.js} +1 -1
  93. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.C-xxn0q7.js +1 -0
  94. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.C-xxn0q7.lean.js +1 -0
  95. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.R27gQrgY.js +1 -0
  96. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.R27gQrgY.lean.js +1 -0
  97. package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.BaS_L10g.js → contributor-guide_architecture_worker-protocol.md.IbnfNrV3.js} +2 -2
  98. package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.BaS_L10g.lean.js → contributor-guide_architecture_worker-protocol.md.IbnfNrV3.lean.js} +1 -1
  99. package/public/docs/assets/contributor-guide_contributing.md.CvRsdr6J.js +1 -0
  100. package/public/docs/assets/contributor-guide_contributing.md.CvRsdr6J.lean.js +1 -0
  101. package/public/docs/assets/{contributor-guide_development-setup.md.CpUMVtIK.js → contributor-guide_development-setup.md.DvAN_9mK.js} +1 -1
  102. package/public/docs/assets/{contributor-guide_development-setup.md.CpUMVtIK.lean.js → contributor-guide_development-setup.md.DvAN_9mK.lean.js} +1 -1
  103. package/public/docs/assets/{contributor-guide_testing.md.C0q-BJfl.js → contributor-guide_testing.md.6rIKqSyY.js} +1 -1
  104. package/public/docs/assets/{contributor-guide_testing.md.C0q-BJfl.lean.js → contributor-guide_testing.md.6rIKqSyY.lean.js} +1 -1
  105. package/public/docs/assets/dag-stages.DSz_S937.svg +1 -0
  106. package/public/docs/assets/dag-stages.dark.F72UzxH4.svg +1 -0
  107. package/public/docs/assets/driver-executor.D5pQ7YN1.svg +1 -0
  108. package/public/docs/assets/driver-executor.dark.BmX9cPvh.svg +1 -0
  109. package/public/docs/assets/duplicate-plan-subtree.B4cvN6fj.svg +1 -0
  110. package/public/docs/assets/duplicate-plan-subtree.dark.Dw8wS0Ag.svg +1 -0
  111. package/public/docs/assets/{index.md.CETnDZzR.js → index.md.CHJVslga.js} +1 -1
  112. package/public/docs/assets/{index.md.CETnDZzR.lean.js → index.md.CHJVslga.lean.js} +1 -1
  113. package/public/docs/assets/join-strategy.C_FvrCEo.svg +1 -0
  114. package/public/docs/assets/join-strategy.dark.ChMLnNII.svg +1 -0
  115. package/public/docs/assets/memory-borrowing.BqQRJg0u.svg +1 -0
  116. package/public/docs/assets/memory-borrowing.dark.Yhh20O9C.svg +1 -0
  117. package/public/docs/assets/memory-regions.XHvO7jHG.svg +1 -0
  118. package/public/docs/assets/memory-regions.dark.D4TP9_08.svg +1 -0
  119. package/public/docs/assets/repartition-vs-coalesce.BovLRrpj.svg +1 -0
  120. package/public/docs/assets/repartition-vs-coalesce.dark.BhAczKZQ.svg +1 -0
  121. package/public/docs/assets/retry-escalation-ladder.DyTKJJmZ.svg +1 -0
  122. package/public/docs/assets/retry-escalation-ladder.dark.BdsabtU3.svg +1 -0
  123. package/public/docs/assets/shuffle-map-reduce.KuOEZVmg.svg +1 -0
  124. package/public/docs/assets/shuffle-map-reduce.dark.BgQZnFSb.svg +1 -0
  125. package/public/docs/assets/spill-classification.BU2euYDO.svg +1 -0
  126. package/public/docs/assets/spill-classification.dark.D7i1M40d.svg +1 -0
  127. package/public/docs/assets/{style.D2mY0HUs.css → style.DSixAiZE.css} +1 -1
  128. package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.js +1 -0
  129. package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.lean.js +1 -0
  130. package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.js +1 -0
  131. package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.lean.js +1 -0
  132. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.js +1 -0
  133. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.lean.js +1 -0
  134. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.js +7 -0
  135. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.lean.js +1 -0
  136. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.js +1 -0
  137. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.lean.js +1 -0
  138. package/public/docs/assets/tuning-reference_bottleneck-failures.md.4z5BXGJ2.js +6 -0
  139. package/public/docs/assets/tuning-reference_bottleneck-failures.md.4z5BXGJ2.lean.js +1 -0
  140. package/public/docs/assets/tuning-reference_bottleneck-gc.md.DSxzZRK7.js +6 -0
  141. package/public/docs/assets/tuning-reference_bottleneck-gc.md.DSxzZRK7.lean.js +1 -0
  142. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.js +8 -0
  143. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.lean.js +1 -0
  144. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.js +7 -0
  145. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.lean.js +1 -0
  146. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.js +1 -0
  147. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.lean.js +1 -0
  148. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.CM-nTmIH.js +12 -0
  149. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.CM-nTmIH.lean.js +1 -0
  150. package/public/docs/assets/tuning-reference_bottleneck-skew.md.BdUwiDhn.js +14 -0
  151. package/public/docs/assets/tuning-reference_bottleneck-skew.md.BdUwiDhn.lean.js +1 -0
  152. package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.BlIo6UDW.js +7 -0
  153. package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.BlIo6UDW.lean.js +1 -0
  154. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.B8kloyx8.js +5 -0
  155. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.B8kloyx8.lean.js +1 -0
  156. package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.js +6 -0
  157. package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.lean.js +1 -0
  158. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DY36fHN5.js +7 -0
  159. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DY36fHN5.lean.js +1 -0
  160. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.QTV7O8kU.js +8 -0
  161. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.QTV7O8kU.lean.js +1 -0
  162. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DTiueZC3.js +5 -0
  163. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DTiueZC3.lean.js +1 -0
  164. package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.js +1 -0
  165. package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.lean.js +1 -0
  166. package/public/docs/assets/tuning-reference_cluster-config.md.ZVmDGsQ3.js +1 -0
  167. package/public/docs/assets/tuning-reference_cluster-config.md.ZVmDGsQ3.lean.js +1 -0
  168. package/public/docs/assets/tuning-reference_config.md.UvveiWG3.js +1 -0
  169. package/public/docs/assets/tuning-reference_config.md.UvveiWG3.lean.js +1 -0
  170. package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.js +1 -0
  171. package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.lean.js +1 -0
  172. package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.js +1 -0
  173. package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.lean.js +1 -0
  174. package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.js +1 -0
  175. package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.lean.js +1 -0
  176. package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.js +1 -0
  177. package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.lean.js +1 -0
  178. package/public/docs/assets/tuning-reference_memory-model.md.DhT-n4y3.js +1 -0
  179. package/public/docs/assets/tuning-reference_memory-model.md.DhT-n4y3.lean.js +1 -0
  180. package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.js +1 -0
  181. package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.lean.js +1 -0
  182. package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.js +1 -0
  183. package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.lean.js +1 -0
  184. package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.js +6 -0
  185. package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.lean.js +1 -0
  186. package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.js +1 -0
  187. package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.lean.js +1 -0
  188. package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.js +1 -0
  189. package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.lean.js +1 -0
  190. package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.js +1 -0
  191. package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.lean.js +1 -0
  192. package/public/docs/assets/udf-execution-models.BUFDICuG.svg +1 -0
  193. package/public/docs/assets/udf-execution-models.dark.YTNS6GDq.svg +1 -0
  194. package/public/docs/assets/user-guide_alternative-log-retrieval.md.B4tPGIal.js +1 -0
  195. package/public/docs/assets/user-guide_alternative-log-retrieval.md.B4tPGIal.lean.js +1 -0
  196. package/public/docs/assets/user-guide_getting-started.md.BJvwLEIM.js +3 -0
  197. package/public/docs/assets/user-guide_getting-started.md.BJvwLEIM.lean.js +1 -0
  198. package/public/docs/assets/{user-guide_mcp-tools.md.DwYI1d6C.js → user-guide_mcp-tools.md.Vi3RoflJ.js} +35 -5
  199. package/public/docs/assets/{user-guide_mcp-tools.md.DwYI1d6C.lean.js → user-guide_mcp-tools.md.Vi3RoflJ.lean.js} +1 -1
  200. package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.js +1 -0
  201. package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.lean.js +1 -0
  202. package/public/docs/assets/user-guide_understanding-findings.md.DL1UDhvR.js +1 -0
  203. package/public/docs/assets/user-guide_understanding-findings.md.DL1UDhvR.lean.js +1 -0
  204. package/public/docs/contributor-guide/architecture/board-widgets.html +7 -7
  205. package/public/docs/contributor-guide/architecture/detector-contract.html +7 -7
  206. package/public/docs/contributor-guide/architecture/drill-down.html +7 -7
  207. package/public/docs/contributor-guide/architecture/impact-estimation.html +7 -7
  208. package/public/docs/contributor-guide/architecture/index.html +7 -7
  209. package/public/docs/contributor-guide/architecture/overview.html +7 -7
  210. package/public/docs/contributor-guide/architecture/state-and-history.html +7 -7
  211. package/public/docs/contributor-guide/architecture/widget-rendering.html +7 -7
  212. package/public/docs/contributor-guide/architecture/worker-protocol.html +8 -8
  213. package/public/docs/contributor-guide/contributing.html +7 -7
  214. package/public/docs/contributor-guide/development-setup.html +7 -7
  215. package/public/docs/contributor-guide/testing.html +7 -7
  216. package/public/docs/hashmap.json +1 -1
  217. package/public/docs/index.html +7 -7
  218. package/public/docs/tuning-reference/anti-patterns.html +29 -0
  219. package/public/docs/tuning-reference/aqe.html +29 -0
  220. package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +29 -0
  221. package/public/docs/tuning-reference/bottleneck-cold-start.html +35 -0
  222. package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +30 -0
  223. package/public/docs/tuning-reference/bottleneck-failures.html +35 -0
  224. package/public/docs/tuning-reference/bottleneck-gc.html +34 -0
  225. package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +37 -0
  226. package/public/docs/tuning-reference/bottleneck-memory-utilization.html +35 -0
  227. package/public/docs/tuning-reference/bottleneck-retry-waste.html +30 -0
  228. package/public/docs/tuning-reference/bottleneck-shuffle.html +40 -0
  229. package/public/docs/tuning-reference/bottleneck-skew.html +42 -0
  230. package/public/docs/tuning-reference/bottleneck-slow-host.html +35 -0
  231. package/public/docs/tuning-reference/bottleneck-small-files.html +33 -0
  232. package/public/docs/tuning-reference/bottleneck-spill.html +34 -0
  233. package/public/docs/tuning-reference/bottleneck-straggler.html +35 -0
  234. package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +36 -0
  235. package/public/docs/tuning-reference/bottleneck-utilization.html +34 -0
  236. package/public/docs/tuning-reference/caching.html +29 -0
  237. package/public/docs/tuning-reference/cluster-config.html +29 -0
  238. package/public/docs/tuning-reference/config.html +29 -0
  239. package/public/docs/tuning-reference/data-formats.html +29 -0
  240. package/public/docs/tuning-reference/index.html +29 -0
  241. package/public/docs/tuning-reference/intro.html +29 -0
  242. package/public/docs/tuning-reference/joins.html +29 -0
  243. package/public/docs/tuning-reference/memory-model.html +29 -0
  244. package/public/docs/tuning-reference/metrics.html +29 -0
  245. package/public/docs/tuning-reference/partitioning.html +29 -0
  246. package/public/docs/tuning-reference/pyspark.html +34 -0
  247. package/public/docs/tuning-reference/shuffle.html +29 -0
  248. package/public/docs/tuning-reference/spark-architecture.html +29 -0
  249. package/public/docs/tuning-reference/table-formats.html +29 -0
  250. package/public/docs/user-guide/alternative-log-retrieval.html +29 -0
  251. package/public/docs/user-guide/getting-started.html +8 -8
  252. package/public/docs/user-guide/mcp-tools.html +41 -11
  253. package/public/docs/user-guide/run-comparison.html +7 -7
  254. package/public/docs/user-guide/understanding-findings.html +7 -7
  255. package/public/index.html +8 -7
  256. package/public/sample-runs/sample-run.ndjson.gz +0 -0
  257. package/vendor-core/analyzer.js +74 -74
  258. package/vendor-core/cli/budgets.js +13 -27
  259. package/vendor-core/cli/collect-run.js +43 -19
  260. package/vendor-core/core-count.js +25 -27
  261. package/vendor-core/core-locality-ratio.js +4 -11
  262. package/vendor-core/core-time-series.js +6 -12
  263. package/vendor-core/core-usage-locality.js +3 -4
  264. package/vendor-core/detectors.js +395 -389
  265. package/vendor-core/docs-config.js +69 -21
  266. package/vendor-core/docs-content/chapters/01-intro.md +32 -0
  267. package/vendor-core/docs-content/chapters/02-spark-architecture.md +76 -0
  268. package/vendor-core/docs-content/chapters/03-memory-model.md +73 -0
  269. package/vendor-core/docs-content/chapters/04-partitioning.md +65 -0
  270. package/vendor-core/docs-content/chapters/05-joins.md +62 -0
  271. package/vendor-core/docs-content/chapters/06-shuffle.md +59 -0
  272. package/vendor-core/docs-content/chapters/07-data-formats.md +81 -0
  273. package/vendor-core/docs-content/chapters/07b-table-formats.md +56 -0
  274. package/vendor-core/docs-content/chapters/08-caching.md +58 -0
  275. package/vendor-core/docs-content/chapters/09-pyspark.md +78 -0
  276. package/vendor-core/docs-content/chapters/10-aqe.md +167 -0
  277. package/vendor-core/docs-content/chapters/11-cluster-config.md +170 -0
  278. package/vendor-core/docs-content/chapters/12-anti-patterns.md +171 -0
  279. package/vendor-core/docs-content/chapters/14-metrics.md +87 -0
  280. package/vendor-core/docs-content/chapters/15-config.md +93 -0
  281. package/vendor-core/docs-content/chapters/nav-index.json +370 -0
  282. package/vendor-core/docs-content/detection/cache.md +7 -0
  283. package/vendor-core/docs-content/detection/cfg.md +15 -0
  284. package/vendor-core/docs-content/detection/chrn.md +9 -0
  285. package/vendor-core/docs-content/detection/cold.md +4 -0
  286. package/vendor-core/docs-content/detection/cstor.md +4 -0
  287. package/vendor-core/docs-content/detection/fail.md +5 -0
  288. package/vendor-core/docs-content/detection/gc.md +4 -0
  289. package/vendor-core/docs-content/detection/host.md +5 -0
  290. package/vendor-core/docs-content/detection/incmp.md +6 -0
  291. package/vendor-core/docs-content/detection/jobs.md +4 -0
  292. package/vendor-core/docs-content/detection/local.md +6 -0
  293. package/vendor-core/docs-content/detection/mem.md +10 -0
  294. package/vendor-core/docs-content/detection/part.md +5 -0
  295. package/vendor-core/docs-content/detection/plan.md +14 -0
  296. package/vendor-core/docs-content/detection/retry.md +4 -0
  297. package/vendor-core/docs-content/detection/sfail.md +5 -0
  298. package/vendor-core/docs-content/detection/shape.md +5 -0
  299. package/vendor-core/docs-content/detection/shfl.md +4 -0
  300. package/vendor-core/docs-content/detection/skew.md +6 -0
  301. package/vendor-core/docs-content/detection/slow.md +6 -0
  302. package/vendor-core/docs-content/detection/spec.md +8 -0
  303. package/vendor-core/docs-content/detection/spill.md +7 -0
  304. package/vendor-core/docs-content/detection/strag.md +5 -0
  305. package/vendor-core/docs-content/detection/tiny.md +4 -0
  306. package/vendor-core/docs-content/detection/util.md +4 -0
  307. package/vendor-core/docs-content/diagrams/aqe-loop.dark.svg +1 -0
  308. package/vendor-core/docs-content/diagrams/aqe-loop.svg +1 -0
  309. package/vendor-core/docs-content/diagrams/broadcast-vs-shuffle.dark.svg +1 -0
  310. package/vendor-core/docs-content/diagrams/broadcast-vs-shuffle.svg +1 -0
  311. package/vendor-core/docs-content/diagrams/cache-lifecycle.dark.svg +1 -0
  312. package/vendor-core/docs-content/diagrams/cache-lifecycle.svg +1 -0
  313. package/vendor-core/docs-content/diagrams/cold-start-timeline.dark.svg +1 -0
  314. package/vendor-core/docs-content/diagrams/cold-start-timeline.svg +1 -0
  315. package/vendor-core/docs-content/diagrams/columnar-layout.dark.svg +1 -0
  316. package/vendor-core/docs-content/diagrams/columnar-layout.svg +1 -0
  317. package/vendor-core/docs-content/diagrams/container-memory.dark.svg +1 -0
  318. package/vendor-core/docs-content/diagrams/container-memory.svg +1 -0
  319. package/vendor-core/docs-content/diagrams/dag-stages.dark.svg +1 -0
  320. package/vendor-core/docs-content/diagrams/dag-stages.svg +1 -0
  321. package/vendor-core/docs-content/diagrams/driver-executor.dark.svg +1 -0
  322. package/vendor-core/docs-content/diagrams/driver-executor.svg +1 -0
  323. package/vendor-core/docs-content/diagrams/duplicate-plan-subtree.dark.svg +1 -0
  324. package/vendor-core/docs-content/diagrams/duplicate-plan-subtree.svg +1 -0
  325. package/vendor-core/docs-content/diagrams/join-strategy.dark.svg +1 -0
  326. package/vendor-core/docs-content/diagrams/join-strategy.svg +1 -0
  327. package/vendor-core/docs-content/diagrams/memory-borrowing.dark.svg +1 -0
  328. package/vendor-core/docs-content/diagrams/memory-borrowing.svg +1 -0
  329. package/vendor-core/docs-content/diagrams/memory-regions.dark.svg +1 -0
  330. package/vendor-core/docs-content/diagrams/memory-regions.svg +1 -0
  331. package/vendor-core/docs-content/diagrams/repartition-vs-coalesce.dark.svg +1 -0
  332. package/vendor-core/docs-content/diagrams/repartition-vs-coalesce.svg +1 -0
  333. package/vendor-core/docs-content/diagrams/retry-escalation-ladder.dark.svg +1 -0
  334. package/vendor-core/docs-content/diagrams/retry-escalation-ladder.svg +1 -0
  335. package/vendor-core/docs-content/diagrams/shuffle-map-reduce.dark.svg +1 -0
  336. package/vendor-core/docs-content/diagrams/shuffle-map-reduce.svg +1 -0
  337. package/vendor-core/docs-content/diagrams/spill-classification.dark.svg +1 -0
  338. package/vendor-core/docs-content/diagrams/spill-classification.svg +1 -0
  339. package/vendor-core/docs-content/diagrams/udf-execution-models.dark.svg +1 -0
  340. package/vendor-core/docs-content/diagrams/udf-execution-models.svg +1 -0
  341. package/vendor-core/docs-content/tuning/broadcast-sizing.md +78 -0
  342. package/vendor-core/docs-content/tuning/cold-start.md +81 -0
  343. package/vendor-core/docs-content/tuning/duplicate-plan-subtree.md +45 -0
  344. package/vendor-core/docs-content/tuning/failures.md +124 -0
  345. package/vendor-core/docs-content/tuning/gc.md +110 -0
  346. package/vendor-core/docs-content/tuning/job-failure-rate.md +101 -0
  347. package/vendor-core/docs-content/tuning/memory-utilization.md +58 -0
  348. package/vendor-core/docs-content/tuning/retry-waste.md +90 -0
  349. package/vendor-core/docs-content/tuning/shuffle.md +154 -0
  350. package/vendor-core/docs-content/tuning/skew.md +123 -0
  351. package/vendor-core/docs-content/tuning/slow-host.md +117 -0
  352. package/vendor-core/docs-content/tuning/small-files.md +99 -0
  353. package/vendor-core/docs-content/tuning/spill.md +114 -0
  354. package/vendor-core/docs-content/tuning/straggler.md +103 -0
  355. package/vendor-core/docs-content/tuning/tiny-tasks.md +94 -0
  356. package/vendor-core/docs-content/tuning/utilization.md +90 -0
  357. package/vendor-core/docs-site-config.js +10 -17
  358. package/vendor-core/efficiency-model.js +7 -13
  359. package/vendor-core/etl-phases.js +3 -5
  360. package/vendor-core/event-handlers.js +232 -134
  361. package/vendor-core/event-schemas.js +48 -114
  362. package/vendor-core/evidence-availability.js +5 -10
  363. package/vendor-core/evidence-report.js +73 -123
  364. package/vendor-core/export-data.js +48 -0
  365. package/vendor-core/finding-action-label.js +4 -10
  366. package/vendor-core/finding-filter-predicate.js +3 -7
  367. package/vendor-core/finding-generic-recommendation.js +112 -0
  368. package/vendor-core/finding-names.js +51 -0
  369. package/vendor-core/format-utils.js +112 -38
  370. package/vendor-core/impact-band.js +18 -24
  371. package/vendor-core/impact-estimator.js +38 -74
  372. package/vendor-core/ingest.js +7 -13
  373. package/vendor-core/job-groups.js +3 -6
  374. package/vendor-core/list-runs.js +278 -0
  375. package/vendor-core/load-vendored.js +6 -12
  376. package/vendor-core/log-header-peek.js +81 -0
  377. package/vendor-core/lz4-block.js +4 -6
  378. package/vendor-core/mcp-server-factory.js +38 -8
  379. package/vendor-core/mcp-tools.js +105 -76
  380. package/vendor-core/model-assembler.js +8 -16
  381. package/vendor-core/occupancy.js +5 -9
  382. package/vendor-core/parser-worker.js +20 -29
  383. package/vendor-core/plan-dot.js +2 -5
  384. package/vendor-core/plan-duration-attribution.js +78 -29
  385. package/vendor-core/plan-graph-model.js +126 -69
  386. package/vendor-core/plan-node-detail.js +31 -17
  387. package/vendor-core/plan-summary.js +19 -8
  388. package/vendor-core/recommendation-rollup.js +35 -39
  389. package/vendor-core/redact.js +72 -16
  390. package/vendor-core/rolling-log-reassembly.js +4 -6
  391. package/vendor-core/run-comparison.js +86 -72
  392. package/vendor-core/scaling-sim.js +5 -7
  393. package/vendor-core/session-snapshot.js +1 -1
  394. package/vendor-core/shs-fetch.js +4 -6
  395. package/vendor-core/shs-load.js +9 -13
  396. package/vendor-core/shs-request.js +1 -1
  397. package/vendor-core/stage-quantiles.js +14 -0
  398. package/vendor-core/types.js +78 -18
  399. package/vendor-core/wasted-core-hours.js +7 -12
  400. package/public/assets/AutoscalingChurn-CP5OjN6v.js +0 -1
  401. package/public/assets/CacheUtilization-BjyawXL6.js +0 -1
  402. package/public/assets/CachingOpportunity-DV2ABG2G.js +0 -1
  403. package/public/assets/ConfigAudit-DMiBhAoG.js +0 -1
  404. package/public/assets/CoreUsageArea-CGYIgPnt.js +0 -1
  405. package/public/assets/Dashboard-D1_IrWRs.js +0 -12
  406. package/public/assets/ExecutorTimeline-DkaAGqQT.js +0 -1
  407. package/public/assets/Failures-Crngoicu.js +0 -1
  408. package/public/assets/GcPressure-CFXm4BnA.js +0 -1
  409. package/public/assets/IncompleteRun-BWEJTb13.js +0 -1
  410. package/public/assets/JobFailures-BmjxCA-h.js +0 -1
  411. package/public/assets/MemoryUtilization-Bu2uQJbd.js +0 -1
  412. package/public/assets/PlanExplorer-DKUwF0uz.js +0 -1
  413. package/public/assets/PlanGraphRoute-BjPSugIG.js +0 -1
  414. package/public/assets/ShuffleIO--Rur3neu.js +0 -1
  415. package/public/assets/Spill-DIMpt8c2.js +0 -1
  416. package/public/assets/TaskSkew-BDr1DbeI.js +0 -1
  417. package/public/assets/charts-vendor-NMqKV0H4.js +0 -59
  418. package/public/assets/index-4id52G-A.js +0 -9
  419. package/public/assets/index-D9kwVYIO.css +0 -1
  420. package/public/assets/parser-worker-00O9WEQC.js +0 -65
  421. package/public/assets/plan-graph-vendor-BnuhLJ6X.css +0 -1
  422. package/public/assets/plan-graph-vendor-vZQHG2EJ.js +0 -7
  423. package/public/assets/react-vendor-u4pyvC5Y.js +0 -9
  424. package/public/assets/useRecentFiles-46iBU9zJ.js +0 -5
  425. package/public/docs/assets/chunks/@localSearchIndexroot.DclgKtlT.js +0 -1
  426. package/public/docs/assets/chunks/theme.CoT6y5bf.js +0 -2
  427. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.BtjoE_1k.js +0 -1
  428. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.BtjoE_1k.lean.js +0 -1
  429. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.DQyCHQNM.js +0 -1
  430. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.DQyCHQNM.lean.js +0 -1
  431. package/public/docs/assets/contributor-guide_architecture_drill-down.md.BKfyDQck.js +0 -1
  432. package/public/docs/assets/contributor-guide_architecture_drill-down.md.BKfyDQck.lean.js +0 -1
  433. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DaqttKgQ.js +0 -1
  434. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DaqttKgQ.lean.js +0 -1
  435. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.Bk6Iyj9S.js +0 -1
  436. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.Bk6Iyj9S.lean.js +0 -1
  437. package/public/docs/assets/contributor-guide_contributing.md.C-lKs70I.js +0 -1
  438. package/public/docs/assets/contributor-guide_contributing.md.C-lKs70I.lean.js +0 -1
  439. package/public/docs/assets/user-guide_getting-started.md.BJdD7a7_.js +0 -3
  440. package/public/docs/assets/user-guide_getting-started.md.BJdD7a7_.lean.js +0 -1
  441. package/public/docs/assets/user-guide_run-comparison.md.5-oaOfTu.js +0 -1
  442. package/public/docs/assets/user-guide_run-comparison.md.5-oaOfTu.lean.js +0 -1
  443. package/public/docs/assets/user-guide_understanding-findings.md.CK2WZ0Tf.js +0 -1
  444. package/public/docs/assets/user-guide_understanding-findings.md.CK2WZ0Tf.lean.js +0 -1
  445. package/public/vendor/spark-doc/anchors.json +0 -205
  446. package/public/vendor/spark-doc/index.html +0 -4202
  447. package/public/vendor/spark-doc/landing.html +0 -418
  448. package/public/vendor/spark-doc/meta.html +0 -970
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{D as t,M as n,O as r,T as i,_ as a,a as o,d as s,f as c,i as l,l as u,n as d,o as f,s as p,u as m,v as h}from"./charts-vendor-0VMaLVLN.js";import{A as g,D as _,E as v,O as y,P as b,k as x}from"./react-vendor-D2TLlSzI.js";import{p as S}from"./plan-graph-vendor-B0sEms9Z.js";import{A as C,B as ee,C as te,E as w,F as ne,H as re,I as T,L as E,M as ie,N as ae,O as oe,P as se,R as ce,S as D,T as O,V as le,_ as ue,a as k,b as de,d as fe,f as A,g as pe,h as me,i as he,j as ge,k as _e,l as ve,m as ye,n as be,o as xe,p as Se,r as Ce,s as we,t as Te,u as Ee,v as De,w as j,x as Oe,y as ke,z as Ae}from"./useRecentFiles-D0OA_EOK.js";import{t as je}from"./inbox-_QCYkBsP.js";import{A as Me,D as M,Dt as Ne,E as Pe,Et as Fe,Ft as Ie,G as Le,I as Re,It as N,J as ze,Mt as Be,N as Ve,Nt as He,O as Ue,Ot as We,P as Ge,Pt as Ke,T as qe,_ as P,_t as Je,a as Ye,at as Xe,b as F,bt as Ze,c as Qe,h as $e,ht as et,i as I,j as tt,k as L,kt as nt,lt as R,m as rt,n as it,o as at,ot,p as st,pt as ct,s as z,st as lt,ut as B,v as ut,vt as dt,w as ft,y as pt,yt as mt}from"./index-3vlFVNCg.js";import{t as ht}from"./EmptyState-BCA3xioa.js";import{n as gt,t as _t}from"./toggle-group-CUd-KWkp.js";import{n as vt,t as yt}from"./DurationHistogram-ltF-7M0A.js";import{t as bt}from"./downsample-WmNM1qc9.js";import{t as V}from"./WidgetLeadSummary-BdUUi7L5.js";import{n as xt,t as St}from"./StagePill-BlMOW_pU.js";import{i as Ct,n as wt,r as Tt,t as Et}from"./ImpactEstimate-BGt-4WX5.js";import{t as Dt}from"./RowPagination-BLsm8I6i.js";var Ot={name:`copy`,size:24,node:[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]};Ot.node;var kt=nt(Ot),At={name:`list-filter`,size:24,node:[[`path`,{d:`M2 5h20`,key:`1fs1ex`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M9 19h6`,key:`456am0`}]]};At.node;var jt=nt(At),Mt={name:`search-x`,size:24,node:[[`path`,{d:`m13.5 8.5-5 5`,key:`1cs55j`}],[`path`,{d:`m8.5 8.5 5 5`,key:`a8mexj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`path`,{d:`m21 21-4.3-4.3`,key:`1qie3q`}]]};Mt.node;var Nt=nt(Mt),Pt={name:`target`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]};Pt.node;var Ft=nt(Pt),H=e(n(),1),It=[`critical`,`warning`,`info`];function Lt(){return{impactBands:new Set,types:new Set,stages:new Set}}function Rt(e){return e.impactBands.size===0&&e.types.size===0&&e.stages.size===0}function zt(e,t){return E(e,{impactBand:t.impactBands,type:t.types,stageId:t.stages})}function Bt(e,t){return e.filter(e=>zt(e,t))}function Vt(e,t){let n=new Set,r=new Set,i=new Set;for(let a of[...e,...t])n.add(a.impactBand),r.add(a.type),a.stageId!=null&&i.add(a.stageId);return{impactBands:It.filter(e=>n.has(e)),types:[...r].sort(),stages:[...i].sort((e,t)=>e-t)}}function Ht(e){return e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}function Ut(e,t){let n=new URLSearchParams(e),r=Lt();for(let e of Ht(n.get(`impact`)))It.includes(e)&&r.impactBands.add(e);let i=new Set(t.types);for(let e of Ht(n.get(`type`)))i.has(e)&&r.types.add(e);for(let e of Ht(n.get(`stage`))){let t=Number(e);Number.isInteger(t)&&r.stages.add(t)}return r}function Wt(e){let t=[];return e.impactBands.size&&t.push(`impact=${It.filter(t=>e.impactBands.has(t)).join(`,`)}`),e.types.size&&t.push(`type=${[...e.types].sort().join(`,`)}`),e.stages.size&&t.push(`stage=${[...e.stages].sort((e,t)=>e-t).join(`,`)}`),t.length?`?${t.join(`&`)}`:``}var U=S(),Gt=(0,H.createContext)(null);function Kt(e,t){let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n}function qt({options:e,fileId:t,children:n}){let[r,i]=(0,H.useState)(()=>Ut(typeof window>`u`?``:window.location.search,e));(0,H.useEffect)(()=>{if(typeof window>`u`)return;let e=Wt(r),t=`${window.location.pathname}${e}${window.location.hash}`;window.history.replaceState(window.history.state,``,t)},[r]);let a=(0,H.useRef)(t);(0,H.useEffect)(()=>{a.current!==t&&(a.current=t,i(Lt()))},[t]),(0,H.useEffect)(()=>()=>{if(typeof window>`u`)return;let e=`${window.location.pathname}${window.location.hash}`;window.history.replaceState(window.history.state,``,e)},[]),(0,H.useEffect)(()=>{if(typeof window>`u`)return;let t=()=>i(Ut(window.location.search,e));return window.addEventListener(`popstate`,t),()=>window.removeEventListener(`popstate`,t)},[e]);let o=(0,H.useCallback)(e=>i(t=>({...t,impactBands:Kt(t.impactBands,e)})),[]),s=(0,H.useCallback)(e=>i(t=>({...t,types:Kt(t.types,e)})),[]),c=(0,H.useCallback)(e=>i(t=>({...t,stages:Kt(t.stages,e)})),[]),l=(0,H.useCallback)(()=>i(Lt()),[]),u=(0,H.useMemo)(()=>({selection:r,toggleImpactBand:o,toggleType:s,toggleStage:c,clearAll:l}),[r,o,s,c,l]);return(0,U.jsx)(Gt.Provider,{value:u,children:n})}function Jt(){let e=(0,H.useContext)(Gt);if(!e)throw Error(`useFindingFilter outside FindingFilterProvider`);return e}function Yt(){let{clearAll:e}=Jt();return(0,U.jsx)(ht,{icon:Nt,title:`No findings match the active filters`,description:`Adjust or clear the filters to see findings.`,action:(0,U.jsx)(`button`,{type:`button`,onClick:e,className:`cursor-pointer text-sm underline`,children:`Clear all filters`})})}function Xt({className:e,orientation:t=`horizontal`,...n}){return(0,U.jsx)(b,{"data-slot":`separator`,orientation:t,className:N(`shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch`,e),...n})}var Zt={critical:`aria-pressed:bg-critical/10 aria-pressed:text-critical`,warning:`aria-pressed:bg-warning/10 aria-pressed:text-warning`,info:`aria-pressed:bg-info/10 aria-pressed:text-info`};function Qt(e,t,n){let r=new Set(e);for(let e of r)t.has(e)||n(e);for(let e of t)r.has(e)||n(e)}function $t({label:e,count:t,children:n}){return(0,U.jsxs)(_e,{children:[(0,U.jsxs)(ie,{className:N(Ge({variant:`outline`,size:`sm`}),`gap-1.5`),"aria-label":`Filter by ${e.toLowerCase()}`,children:[e,t>0&&(0,U.jsx)(`span`,{className:`rounded-full bg-primary px-1.5 text-xs font-medium text-primary-foreground`,children:t}),(0,U.jsx)(We,{"aria-hidden":`true`,className:`opacity-60`})]}),(0,U.jsx)(ge,{align:`start`,className:`max-h-72 w-56 overflow-y-auto`,children:n})]})}function en({options:e,resultCount:t}){let{selection:n,toggleImpactBand:r,toggleType:i,toggleStage:a,clearAll:o}=Jt(),[s,c]=(0,H.useState)(``),[l,u]=(0,H.useState)(``),d=(0,H.useMemo)(()=>{let t=s.trim();return t?e.stages.filter(e=>String(e).includes(t)):e.stages},[e.stages,s]),f=(0,H.useMemo)(()=>{let t=l.trim().toLowerCase();return t?e.types.filter(e=>e.toLowerCase().includes(t)||dt(e).toLowerCase().includes(t)):e.types},[e.types,l]);if(e.impactBands.length===0&&e.types.length===0&&e.stages.length===0)return null;let p=!Rt(n),m=[...[...n.impactBands].map(e=>({key:`impact-${e}`,label:`impact ${e}`,onRemove:()=>r(e)})),...[...n.types].map(e=>({key:`type-${e}`,label:`type ${e}`,onRemove:()=>i(e)})),...[...n.stages].map(e=>({key:`stage-${e}`,label:`stage ${e}`,onRemove:()=>a(e)}))];return(0,U.jsxs)(`section`,{"aria-label":`Filter findings`,className:`flex flex-wrap items-center gap-x-3 gap-y-2 rounded-xl border border-border/60 p-2`,children:[(0,U.jsxs)(`span`,{title:`Narrow the whole dashboard to findings matching the chosen impact bands, types, or stages`,className:`flex items-center gap-1.5 text-xs font-medium text-muted-foreground`,children:[(0,U.jsx)(jt,{"aria-hidden":`true`,className:`size-3.5`}),`Filter findings`]}),(0,U.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`text-xs text-muted-foreground`,children:p?`${t} finding${t===1?``:`s`} match${t===1?`es`:``} the active filters`:`Showing all ${t} finding${t===1?``:`s`}`}),(0,U.jsx)(Xt,{orientation:`vertical`,className:`h-6`}),e.impactBands.length>0&&(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,U.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:`Impact`}),(0,U.jsx)(_t,{multiple:!0,"aria-label":`Filter by impact`,value:[...n.impactBands],onValueChange:e=>Qt(e,n.impactBands,r),children:e.impactBands.map(e=>(0,U.jsxs)(gt,{value:e,variant:`outline`,size:`sm`,"aria-label":`Filter by impact: ${e}`,className:N(`tap-target-comfortable gap-1.5`,Zt[e]),children:[(0,U.jsx)(M,{impactBand:e}),e]},e))})]}),e.types.length>0&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Xt,{orientation:`vertical`,className:`h-6`}),(0,U.jsxs)($t,{label:`Type`,count:n.types.size,children:[(0,U.jsx)(`div`,{className:`p-1`,children:(0,U.jsx)(oe,{type:`text`,value:l,onChange:e=>u(e.target.value),onKeyDown:e=>e.stopPropagation(),placeholder:`Search type…`,"aria-label":`Search types`,autoComplete:`off`,className:`h-8`})}),f.map(e=>(0,U.jsxs)(C,{checked:n.types.has(e),onCheckedChange:()=>i(e),"aria-label":`Filter by type: ${e}`,children:[(0,U.jsx)(`span`,{className:`rounded bg-muted px-1 text-xs font-medium text-foreground!`,children:dt(e)}),` `,e]},e)),f.length===0&&(0,U.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`No matching type`})]})]}),e.stages.length>0&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Xt,{orientation:`vertical`,className:`h-6`}),(0,U.jsxs)($t,{label:`Stage`,count:n.stages.size,children:[(0,U.jsx)(`div`,{className:`p-1`,children:(0,U.jsx)(oe,{type:`text`,value:s,onChange:e=>c(e.target.value),onKeyDown:e=>e.stopPropagation(),placeholder:`Search stage id…`,"aria-label":`Search stages`,autoComplete:`off`,className:`h-8`})}),d.map(e=>(0,U.jsxs)(C,{checked:n.stages.has(e),onCheckedChange:()=>a(e),"aria-label":`Filter by stage: ${e}`,children:[`Stage `,e]},e)),d.length===0&&(0,U.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`No matching stage`})]})]}),p&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Xt,{orientation:`vertical`,className:`h-6`}),(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[m.map(e=>(0,U.jsxs)(`button`,{type:`button`,onClick:e.onRemove,"aria-label":`Remove filter: ${e.label}`,className:`tap-target-comfortable inline-flex cursor-pointer items-center gap-1 rounded-full border border-border bg-muted px-2 py-0.5 text-xs hover:bg-muted/70`,children:[e.label,` `,(0,U.jsx)(Ze,{"aria-hidden":`true`,className:`size-3`})]},e.key)),(0,U.jsx)(`button`,{type:`button`,onClick:o,className:`tap-target-comfortable cursor-pointer text-xs underline`,children:`Clear all filters`})]})]})]})}function tn(e,t){let n=[];for(let{launch:t,finish:r}of e)r>t&&(n.push({t,delta:1}),n.push({t:r,delta:-1}));n.sort((e,t)=>e.t-t.t||e.delta-t.delta);let r=[],i=0;for(let e=0;e<n.length;e++){let a=n[e];i+=a.delta;let o=n[e+1];if(!o||o.t===a.t)continue;let s=t==null?i:Math.min(i,t);r.push({tStart:a.t,tEnd:o.t,busy:s})}return r}function nn(e,{bucketBy:t=`time`,bucketWidthMs:n=1e3,hypotheticalCores:r=null}={}){let i=tn(e,r);if(t===`coreCount`){let e=[];for(let t of i)e[t.busy]=(e[t.busy]??0)+(t.tEnd-t.tStart);for(let t=0;t<e.length;t++)e[t]===void 0&&(e[t]=0);return{mode:`coreCount`,histogram:e}}if(i.length===0)return{mode:`time`,bucketWidthMs:n,startTime:null,endTime:null,buckets:[]};let a=i[0].tStart,o=i[i.length-1].tEnd,s=[];for(let e=a;e<o;e+=n){let t=e+n,r=0;for(let n of i){let i=Math.max(n.tStart,e),a=Math.min(n.tEnd,t);a>i&&(r+=n.busy*(a-i))}s.push({tStart:e,tEnd:t,busyCoreMs:r,avgBusyCores:r/n})}return{mode:`time`,bucketWidthMs:n,startTime:a,endTime:o,buckets:s}}var rn=220;async function an(e,t){let n=[...e.stages.keys()],r=await Promise.all(n.map(e=>t(e).catch(()=>null))),i=[],a=!1;for(let e of r){if(!e){a=!0;continue}let{metrics:t,fieldNames:n}=e,r=n.length,o=n.indexOf(`launchTime`),s=n.indexOf(`finishTime`);if(o!==-1&&s!==-1)for(let e=0;e<t.length;e+=r)i.push({launch:t[e+o],finish:t[e+s]})}return{intervals:i,incomplete:a}}function on({appModel:e,getTaskData:t}){let{exportMode:n,getTaskData:r}=vt(t),[i,a]=(0,H.useState)(null),[o,s]=(0,H.useState)(!1),[d,m]=(0,H.useState)(!1),h=e.stages.size>0;if((0,H.useEffect)(()=>{if(!h||!d||i!==null||!r)return;let t=!1;return an(e,r).then(({intervals:e,incomplete:n})=>{if(t)return;let{histogram:r}=nn(e,{bucketBy:`coreCount`});a(r??[]),s(n)}),()=>{t=!0}},[e,r,h,d,i]),!h)return null;let g=(i??[]).map((e,t)=>({cores:String(t),coreCount:t,ms:e})),_=bt(g),v=g.reduce((e,t)=>t.ms>e.ms?t:e,g[0]);return(0,U.jsx)(I,{title:`Core-Usage Distribution`,id:`core-usage-histogram`,open:d,onOpenChange:m,summary:i!==null&&v?(0,U.jsx)(V,{value:B(v.ms),context:`at ${v.coreCount} concurrent core${v.coreCount===1?``:`s`}`}):void 0,children:i===null?n?(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Core-usage detail isn’t included in exported reports.`}):(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Loading core usage…`}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(O,{ariaLabel:`Wall-clock time spent at each concurrent-core count across the run. See the table below for exact values.`,height:rn,table:{caption:`Wall-clock time by concurrent-core count`,columns:[`Concurrent cores`,`Time`],rows:i.map((e,t)=>[t,B(e)]),align:[`right`,`right`]},children:(0,U.jsxs)(l,{data:_,children:[(0,U.jsx)(c,{vertical:!1,stroke:j.muted,strokeOpacity:.2}),(0,U.jsx)(p,{dataKey:`cores`,tick:{fontSize:10},label:{value:`Concurrent busy cores`,position:`insideBottom`,offset:-5,fontSize:10}}),(0,U.jsx)(f,{tick:{fontSize:10},width:48,tickFormatter:e=>B(e)}),(0,U.jsx)(u,{dataKey:`ms`,name:`Time`,fill:j.accent})]})}),o?(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Reopen this file to compute full core usage because some task data was released.`}):null,(0,U.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`See `,(0,U.jsx)(Me,{anchor:`#bottleneck-utilization`,children:`how to read concurrent-core utilization`}),`.`]})]})})}function sn({app:e,stages:t,executorsAdded:n,runAggregates:r}){let i=ze(e??{},n),a=(e?.endTime??0)-(e?.startTime??0),o=Le(e,t),s=a/36e5*i,c=i*((o.startup+o.gaps+o.idle)/36e5),l=i*o.stagesActive,u=r?.busyCoreMs??0,d=Math.max(0,l-u)/36e5,f=c+d,p=s>0?Math.round(f/s*100):null,m=0,h=r?.perStage??{};for(let e of Object.keys(h))m+=h[e].totalTaskDurationSum;let g=i>0?m/i:0,_=null;return(c>0||d>0)&&(_=c>=d?`driver`:`executor`),{availableComputeHours:s,driverWasteHours:c,executorWasteHours:d,wastagePct:p,floorZeroSkewMs:g,dominantWaste:_}}function cn(e){let t=e?[...e.values()]:[],n=new Map,r=0;for(let e of t){if(e.submissionTime==null||e.completionTime==null)continue;let t=e.sqlExecutionId==null?`job:${e.id??r++}`:`sql:${e.sqlExecutionId}`,i=n.get(t);i?(i.start=Math.min(i.start,e.submissionTime),i.end=Math.max(i.end,e.completionTime)):n.set(t,{start:e.submissionTime,end:e.completionTime})}let i=[...n.entries()].sort((e,t)=>e[1].start-t[1].start),a=[];for(let e=1;e<i.length;e++)for(let t=0;t<e;t++){let[n,r]=i[t],[o,s]=i[e];s.start<r.end&&r.start<s.end&&a.push([n,o])}return{wallClockReliable:a.length===0,overlappingGroupIds:a}}var ln=`This estimate is derived from a simplified compute model; compare it against wall-clock data before acting on it.`,W=e=>`${Math.round(e*100)/100} core-h`;function un(){return(0,U.jsx)(L,{children:(0,U.jsx)(D,{confidence:`low`,validationRequired:ln})})}function dn({appModel:e}){if(!e.runAggregates)return null;let t=sn({app:e.app,stages:e.stages,executorsAdded:e.executors.added,runAggregates:e.runAggregates});if(t.availableComputeHours<=0)return null;let n=cn(e.jobs),r=null;return t.dominantWaste===`driver`?r=(0,U.jsxs)(`p`,{children:[(0,U.jsx)(`strong`,{children:`Driver-bound waste dominates.`}),` Review driver sizing (spark.driver.memory / spark.driver.cores) before scaling executors.`]}):t.dominantWaste===`executor`&&(r=(0,U.jsxs)(`p`,{children:[(0,U.jsx)(`strong`,{children:`Executor-bound waste dominates.`}),` Review executor count / cores by reducing cluster size or enabling dynamic allocation.`]})),(0,U.jsx)(I,{title:`Compute Efficiency`,statusBadge:(0,U.jsx)(un,{}),defaultCollapsed:!0,summary:(0,U.jsx)(V,{value:t.wastagePct==null?W(t.availableComputeHours):`${t.wastagePct}% wasted`,context:`of ${W(t.availableComputeHours)} available`}),children:(0,U.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[!n.wallClockReliable&&(0,U.jsx)(L,{children:(0,U.jsx)(`p`,{className:`text-muted-foreground`,children:`This run used concurrent job groups: the driver/executor split below is approximate, not precise.`})}),(0,U.jsxs)(`p`,{children:[`Available: `,(0,U.jsx)(`strong`,{children:W(t.availableComputeHours)}),t.wastagePct!=null&&(0,U.jsxs)(U.Fragment,{children:[` `,`· wasted `,(0,U.jsxs)(`strong`,{children:[t.wastagePct,`%`]})]})]}),(0,U.jsxs)(`p`,{children:[(0,U.jsx)(M,{impactBand:`info`}),` Driver-bound waste: `,(0,U.jsx)(`strong`,{children:W(t.driverWasteHours)})]}),(0,U.jsxs)(`p`,{children:[(0,U.jsx)(M,{impactBand:`info`}),` Executor-bound waste: `,(0,U.jsx)(`strong`,{children:W(t.executorWasteHours)})]}),(0,U.jsxs)(`p`,{className:`text-muted-foreground`,children:[`Floor (same executors, zero skew): `,B(t.floorZeroSkewMs)]}),r]})})}function fn(e){let t={extract:0,transform:0,load:0};for(let n of e.values()){let e=Math.max(0,(n.completedAt??0)-(n.submittedAt??0));if(e===0)continue;let r=(n.shuffleReadBytes??0)>0||(n.shuffleWriteBytes??0)>0;(n.inputBytes??0)>0&&(n.shuffleReadBytes??0)===0&&(t.extract+=e),r&&(t.transform+=e),(n.outputBytes??0)>0&&(t.load+=e)}return t}var pn=[{label:`Extract`,key:`extract`},{label:`Transform`,key:`transform`},{label:`Load`,key:`load`}];function mn({appModel:e}){let t=fn(e.stages);if(t.extract+t.transform+t.load===0)return null;let n=pn.reduce((e,n)=>t[n.key]>t[e.key]?n:e);return(0,U.jsx)(I,{title:`ETL Phase Attribution`,defaultCollapsed:!0,summary:(0,U.jsx)(V,{value:`${n.label} ${B(t[n.key])}`,context:`dominant phase`}),children:(0,U.jsxs)(`div`,{className:`space-y-1`,children:[pn.map(({label:e,key:n})=>(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`strong`,{children:e}),`: `,B(t[n])]},n)),(0,U.jsx)(L,{children:(0,U.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Heuristic: a stage that both shuffles and writes counts in Transform and Load, so phases can overlap and need not sum to wall-clock.`})})]})})}var hn=220;function gn(e){let t=e.app,n=e.executors.added,r=e.executors.removed;if(t?.startTime==null||t?.endTime==null)return{times:[],counts:[]};let i=t.endTime-t.startTime,a=Math.max(5e3,Math.floor(i/100)),o=[],s=[],c=new Map(r.map(e=>[e.executorId,e.timestamp]));for(let e=t.startTime;e<=t.endTime;e+=a){let r=n.filter(t=>{let n=c.get(t.executorId)??1/0;return t.timestamp<=e&&e<n}).length;o.push(((e-t.startTime)/1e3).toFixed(0)+`s`),s.push(r)}return{times:o,counts:s}}var _n=(0,H.memo)(function({appModel:e,activeFileId:t}){let{chartData:n,sampled:r,hasSeries:i,peak:a}=(0,H.useMemo)(()=>{let{times:t,counts:n}=gn(e),r=t.map((e,t)=>({label:e,count:n[t]})),i=bt(r),a=n.length>0;return{chartData:r,sampled:i,hasSeries:a,peak:a?Math.max(...n):0}},[e,t]);return i?(0,U.jsx)(I,{title:`Executor Count Over Time`,summary:(0,U.jsx)(V,{value:`${a} peak`,context:`concurrent executors`}),children:(0,U.jsx)(O,{ariaLabel:`Executor count over time. See the table below for exact values.`,height:hn,table:{caption:`Executor timeline: active executor count over time`,columns:[`Time`,`Active executors`],rows:n.map(e=>[e.label,e.count]),align:[`left`,`right`]},children:(0,U.jsxs)(d,{data:r,children:[(0,U.jsx)(c,{vertical:!1,stroke:j.muted,strokeOpacity:.2}),(0,U.jsx)(p,{dataKey:`label`,tick:{fontSize:10},minTickGap:24}),(0,U.jsx)(f,{allowDecimals:!1,tick:{fontSize:10},width:32}),(0,U.jsx)(h,{formatter:e=>[`${e} executor${e===1?``:`s`} active`,``],labelFormatter:()=>``}),(0,U.jsx)(m,{type:`monotone`,dataKey:`count`,name:`Active executors`,stroke:j.clean,fill:j.clean,fillOpacity:.15})]})})}):(0,U.jsx)(I,{title:`Executor Count Over Time`,summary:(0,U.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:`Timeline unavailable: no end time recorded.`}),children:(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`This run has no ApplicationEnd event, so the executor timeline can't be plotted without fabricating an end time. See the Incomplete Run finding for what's still reliable.`})})}),vn=[10,20,50,80,100,110,120,150,200,300,400,500];function yn(e,t,n){return t<=0||n<=0?0:e/Math.min(n,t)}function bn(e,t){let n=0;for(let r of Object.keys(e)){let{totalTaskDurationSum:i,taskCount:a}=e[r];n+=yn(i,a,t)}return n}function xn({app:e,stages:t,runAggregates:n,executorsAdded:r}){let i=n?.perStage??{},a=ze(e??{},r),o=Le(e,t).stagesActive,s=a>0?bn(i,a):0,c=o>0?Math.round(Math.abs(s-o)/o*100):null,l=s>0?o/s:1;return{baselineCores:a,testPercentages:vn,predictions:vn.map(e=>{let t=Math.max(1,Math.round(a*e/100));return{pct:e,cores:t,estMakespanMs:Math.round(bn(i,t)*l)}}),modelErrorPct:c}}var Sn=`What-If Executor Scaling`,Cn=220,wn=20;function Tn([e,t]){let n=(t-e)*.1;return[Math.max(0,e-n),t+n]}function En(e){return[...e.stages.values()].some(e=>{let t=e.submittedAt,n=e.completedAt;return typeof t==`number`&&Number.isFinite(t)&&typeof n==`number`&&Number.isFinite(n)&&n>t})}function Dn(e){return e.evidenceAvailability?.entries.find(e=>e.key===`taskCoreTime`)}function On({reason:e,evidence:t}){return(0,U.jsx)(I,{title:Sn,summary:(0,U.jsxs)(`span`,{className:`text-muted-foreground text-xs`,children:[`Not available: `,e]}),children:(0,U.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Not available: `,e,` `,(0,U.jsx)(D,{evidenceKey:t})]})})}function kn({appModel:e}){let t=Dn(e);if(!Ie(e.runAggregates)||t!=null&&t.state!==`present`)return(0,U.jsx)(On,{reason:t?.summary??`No usable task and core-time evidence in this log.`,evidence:`taskCoreTime`});let n=xn({app:e.app,stages:e.stages,runAggregates:e.runAggregates,executorsAdded:e.executors.added});if(n.baselineCores<=0)return(0,U.jsx)(On,{reason:`Baseline executor/core capacity is unavailable in this log.`});if(!En(e))return(0,U.jsx)(On,{reason:`Usable stage timing is unavailable in this log.`});let r=cn(e.jobs),i=n.modelErrorPct!=null&&n.modelErrorPct>=wn,a=bt(n.predictions),l=n.predictions.reduce((e,t)=>t.estMakespanMs<e.estMakespanMs?t:e);return(0,U.jsx)(I,{title:Sn,defaultCollapsed:!0,summary:(0,U.jsx)(V,{value:B(l.estMakespanMs),context:`best case at ${l.pct}% executors`}),children:(0,U.jsxs)(`div`,{className:`space-y-3`,children:[(0,U.jsx)(L,{children:(0,U.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Model Error:`,` `,(0,U.jsx)(`strong`,{className:i?`text-warning`:void 0,children:n.modelErrorPct==null?`—`:`${n.modelErrorPct}%`}),` `,`(idealized makespan vs. observed); higher means all estimates below carry more error, since a single log only observes one scale.`]})}),(0,U.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Move along this curve by changing `,(0,U.jsx)(`code`,{children:`spark.dynamicAllocation`}),`’s executor bounds, see the `,(0,U.jsx)(Me,{anchor:`#config-autoscale-bounds`,children:`autoscaling config guide`}),`.`]}),r.wallClockReliable?null:(0,U.jsx)(L,{children:(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`This run used concurrent job groups, so the wall-clock-based estimates below may be unreliable.`})}),(0,U.jsx)(L,{children:(0,U.jsx)(`p`,{className:`text-xs`,children:(0,U.jsx)(D,{evidenceKey:`taskCoreTime`})})}),(0,U.jsx)(O,{ariaLabel:`Estimated makespan by executor percentage: diminishing-returns curve.`,height:Cn,table:{caption:`Estimated makespan by executor percentage`,columns:[`% Executors`,`Cores`,`Est. makespan`],rows:n.predictions.map(e=>[`${e.pct}%`,e.cores,B(e.estMakespanMs)]),align:[`right`,`right`,`right`]},children:(0,U.jsxs)(o,{data:a,children:[(0,U.jsx)(c,{stroke:j.muted,strokeOpacity:.2}),(0,U.jsx)(p,{dataKey:`pct`,tickFormatter:e=>`${e}%`,tick:{fontSize:10}}),(0,U.jsx)(f,{domain:Tn,tickFormatter:e=>B(e),tick:{fontSize:10},width:56}),(0,U.jsx)(h,{formatter:e=>[B(Number(e)),`Est. makespan`],labelFormatter:e=>`${e}% executors`}),(0,U.jsx)(s,{type:`monotone`,dataKey:`estMakespanMs`,name:`Est. makespan`,stroke:j.accent,dot:{r:3}})]})})]})})}function An(e){return typeof e?.startTime==`number`&&Number.isFinite(e.startTime)&&typeof e?.endTime==`number`&&Number.isFinite(e.endTime)&&e.endTime>e.startTime}function jn(e){if(!An(e.app))return{efficiency:{value:null,unavailableReason:`application-timing`},wastage:{value:null,unavailableReason:`application-timing`}};let t=Le(e.app,e.stages),n=Math.min(100,Math.round(t.stagesActive/t.total*100));if(!e.runAggregates)return{efficiency:{value:n,unavailableReason:null},wastage:{value:null,unavailableReason:`core-usage-summary`}};let r=sn({app:e.app,stages:e.stages,executorsAdded:e.executors.added,runAggregates:e.runAggregates});return!Number.isFinite(r.availableComputeHours)||r.availableComputeHours<=0?{efficiency:{value:n,unavailableReason:null},wastage:{value:null,unavailableReason:`executor-capacity`}}:{efficiency:{value:n,unavailableReason:null},wastage:{value:r.wastagePct,unavailableReason:null}}}var Mn={critical:`inset 4px 0 0 var(--color-critical)`,warning:`inset 4px 0 0 var(--color-warning)`};function Nn({eyebrow:e,value:t,meta:n,flag:r=null,bar:i,dataTestid:a}){return(0,U.jsxs)(`div`,{"data-testid":a,className:`flex flex-col gap-1 p-3`,style:r?{boxShadow:Mn[r]}:void 0,children:[(0,U.jsxs)(`span`,{className:N(`flex items-center gap-1.5 text-xs font-medium text-muted-foreground`,r&&Pe[r]),children:[r&&(0,U.jsx)(M,{impactBand:r}),e]}),(0,U.jsx)(`div`,{className:N(`font-heading text-2xl font-semibold`,r&&Pe[r]),children:t}),(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n}),i]})}function Pn({pct:e,flag:t,label:n}){let r=Math.max(0,Math.min(100,e));return(0,U.jsx)(`div`,{role:`img`,"aria-label":n,className:`mt-0.5 h-1.5 w-full overflow-hidden rounded-full bg-muted`,children:(0,U.jsx)(`div`,{className:N(`h-full rounded-full`,t?qe[t]:`bg-clean`),style:{width:`${r}%`}})})}function Fn({active:e,total:t}){let n=t>0?Math.max(0,Math.min(100,e/t*100)):0;return(0,U.jsxs)(`div`,{role:`img`,"aria-label":`Active ${B(e)} of ${B(t)} total`,className:`mt-0.5 flex h-1.5 w-full overflow-hidden rounded-full bg-muted`,children:[(0,U.jsx)(`div`,{className:`h-full bg-clean`,style:{width:`${n}%`}}),(0,U.jsx)(`div`,{className:`h-full flex-1 bg-muted-foreground/60`})]})}function In(e){return e>0?`Ran ${B(e)}`:`No stage activity recorded`}function Ln(){return(0,U.jsxs)(`div`,{className:`flex items-start gap-2 rounded-xl border border-warning/40 bg-warning/10 p-4`,children:[(0,U.jsx)(M,{impactBand:`warning`,className:`mt-1.5`}),(0,U.jsxs)(`p`,{className:`text-sm text-warning`,children:[(0,U.jsx)(`span`,{className:`font-semibold tracking-wide uppercase`,children:`Timing unavailable`}),`. This run has no complete application timing interval, so wall-clock, efficiency, and wastage can’t be measured.`]})]})}function Rn({appModel:e,catalog:t}){let n=Ke(),{app:r,stages:i}=e;if(!An(r))return(0,U.jsx)(Ln,{});let a=Le(r,i),o=jn(e),s=a.total,c=o.efficiency.value,l=c==null?null:c<75?`critical`:c<90?`warning`:null,u=t.find(e=>e.type===`coldStart`),d=o.wastage.value,f=d==null?null:d>=70?`critical`:d>=40?`warning`:null;return(0,U.jsx)(st,{className:`overflow-hidden py-0`,children:(0,U.jsxs)(`div`,{className:`grid grid-cols-1 divide-y divide-border sm:grid-cols-3 sm:divide-x sm:divide-y-0`,children:[(0,U.jsx)(Nn,{eyebrow:`Wall-clock`,dataTestid:`kpi-wall-clock`,value:s>0?B(s):`—`,meta:(0,U.jsxs)(U.Fragment,{children:[In(a.stagesActive),u?` · ${u.value}s cold start`:``]}),bar:(0,U.jsx)(Fn,{active:a.stagesActive,total:s})}),(0,U.jsx)(Nn,{eyebrow:`Efficiency`,dataTestid:`kpi-efficiency`,value:c==null?`Unavailable`:(0,U.jsxs)(U.Fragment,{children:[c,(0,U.jsx)(`small`,{children:`%`})]}),flag:l,meta:c==null?`This run has no complete application timing interval.`:s>a.stagesActive?`${In(a.stagesActive)} · ${B(s-a.stagesActive)} idle/gap time`:`executors active the whole run`,bar:c==null?void 0:(0,U.jsx)(Pn,{pct:c,flag:l,label:`Efficiency ${c}%`})}),(0,U.jsx)(Nn,{eyebrow:`Wastage`,dataTestid:`kpi-wastage`,value:d==null?`Unavailable`:(0,U.jsxs)(U.Fragment,{children:[d,(0,U.jsx)(`small`,{children:`%`})]}),flag:f,meta:o.wastage.unavailableReason===`application-timing`?`Wastage needs complete application timing.`:o.wastage.unavailableReason===`core-usage-summary`?`Wastage needs the core-usage summary.`:o.wastage.unavailableReason===`executor-capacity`?`Wastage needs usable executor-capacity data.`:n===`advanced`?`Driver-idle + executor-slack core-hours as a share of available capacity. Directional, not a cost figure.`:`Executor capacity that sat idle. Not a cost figure.`,bar:d==null?void 0:(0,U.jsx)(Pn,{pct:d,flag:f,label:`Wastage ${d}%`})})]})})}function zn({className:e,...t}){return(0,U.jsx)(g,{"data-slot":`accordion`,className:N(`flex w-full flex-col`,e),...t})}function Bn({className:e,...t}){return(0,U.jsx)(x,{"data-slot":`accordion-item`,className:N(`not-last:border-b`,e),...t})}function Vn({className:e,children:t,headingLevel:n=3,...r}){let i=`h${n}`;return(0,U.jsx)(y,{className:`flex`,render:(0,U.jsx)(i,{}),children:(0,U.jsxs)(_,{"data-slot":`accordion-trigger`,className:N(`group/accordion-trigger relative flex flex-1 cursor-pointer items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:cursor-default aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground`,e),...r,children:[t,(0,U.jsx)(We,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden`}),(0,U.jsx)(Ne,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline`})]})})}function Hn({className:e,children:t,...n}){return(0,U.jsx)(v,{"data-slot":`accordion-content`,className:`h-(--accordion-panel-height) overflow-hidden text-sm transition-[height] duration-150 ease-out data-ending-style:h-0 data-starting-style:h-0 motion-reduce:transition-none`,...n,children:(0,U.jsx)(`div`,{className:N(`pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4`,e),children:t})})}function Un(e){return e.length===0?e:e[0].toUpperCase()+e.slice(1)}function Wn({type:e,label:t,thresholdSummary:n}){return(0,U.jsxs)(F,{"data-testid":`clean-check-row`,"data-clean-check-type":e,children:[(0,U.jsx)(P,{className:`w-px`,children:(0,U.jsxs)(`span`,{className:`inline-flex h-6 items-center gap-1 rounded-full bg-clean/10 px-2 font-mono text-xs font-medium whitespace-nowrap text-clean`,children:[(0,U.jsx)(Fe,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}),dt(e)]})}),(0,U.jsxs)(P,{className:`whitespace-normal`,children:[(0,U.jsx)(`span`,{className:`block text-sm font-medium text-foreground`,children:Un(t)}),(0,U.jsx)(L,{children:(0,U.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:Un(`${n}.`)})})]})]})}var Gn=`suggested-improvements`,Kn={skew:`per-stage`,stageShape:`per-stage`,tinyTask:`per-stage`,shuffle:`per-stage`,partitionSizing:`per-stage`,spill:`per-stage`,gc:`per-stage`,stageFailed:`per-stage`,failures:`per-stage`,retryWaste:`per-stage`,slowHost:`per-stage`,stageSlowness:`per-stage`,straggler:`per-stage`,speculationWaste:`per-stage`,incompleteRun:`app-level`,coldStart:`app-level`,memoryUtilization:`app-level`,utilization:`app-level`,coreLocality:`app-level`,cachingOpportunity:`app-level`,cacheUtilization:`app-level`,jobFailureRate:`app-level`,autoscalingChurn:`app-level`,duplicatePlanSubtree:`sql-scope`,smallFiles:`sql-scope`,underBroadcast:`sql-scope`,overBroadcast:`sql-scope`,configAudit:`config-scope`},qn=[`per-stage`,`app-level`,`sql-scope`,`config-scope`],Jn={"per-stage":`Per-stage checks`,"app-level":`App-level checks`,"sql-scope":`SQL plan checks`,"config-scope":`Config checks`};function Yn(e,t){let n=[...e,...t].filter(de);return pe().filter(({type:e})=>!me(e)).map(({component:e,widgetId:t,type:r},i)=>{let a=n.filter(e=>e.type===r);return{component:e,widgetId:t,index:i,findings:a,impactBand:mt(a)}}).filter(e=>e.impactBand!==void 0).sort((e,t)=>Xe[e.impactBand]-Xe[t.impactBand]||e.index-t.index)}function Xn({appModel:e,catalog:t,configFindings:n=[],getTaskData:r,activeFileId:i}){let a=[...t,...n].filter(de),o=Object.keys(Se).filter(e=>!me(e)).filter(e=>!a.some(t=>t.type===e)).map(e=>({type:e,findingLabel:Se[e].findingLabel})),s=new Map;for(let e of o){let t=Kn[e.type]??`app-level`;s.has(t)||s.set(t,[]),s.get(t).push(e)}let c=ye();return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(at,{children:c.map(({component:a,widgetId:o})=>(0,U.jsx)(z,{cardId:`reference-${o}`,widgetId:o,children:(0,U.jsx)(H.Suspense,{fallback:(0,U.jsx)(Ye,{}),children:(0,U.jsx)(a,{appModel:e,catalog:t,configFindings:n,getTaskData:r,activeFileId:i,defaultCollapsed:!0})})},o))}),(0,U.jsx)(zn,{children:(0,U.jsxs)(Bn,{value:`clean-checks`,children:[(0,U.jsx)(Vn,{children:`Clean checks`}),(0,U.jsxs)(Hn,{children:[(0,U.jsxs)(`p`,{className:`pb-2 text-xs text-muted-foreground`,children:[`Every check below passed. No fix needed.`,(0,U.jsx)(L,{children:` Each line's caption states the threshold it was measured against.`})]}),qn.map(e=>{let t=s.get(e);return!t||t.length===0?null:(0,U.jsxs)(`div`,{className:`pt-3 first:pt-0`,children:[(0,U.jsx)(`p`,{className:`pb-1 text-xs font-medium text-muted-foreground`,children:Jn[e]}),(0,U.jsx)(rt,{children:(0,U.jsx)($e,{children:t.map(({type:e,findingLabel:t})=>(0,U.jsx)(Wn,{type:e,label:t,thresholdSummary:ue(e)},e))})})]},e)})]})]})})]})}function Zn(e){switch(e.type){case`skew`:return`For join-driven skew, enable AQE skew-join handling (spark.sql.adaptive.skewJoin.enabled); otherwise salt the key or repartition on a better key to reduce task skew.`;case`stageShape`: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.`}break;case`shuffle`:return`Consider increasing spark.sql.shuffle.partitions or adding a broadcast join to shrink the shuffle.`;case`partitionSizing`:switch(e.rule){case`shufflePartitionSkew`:return`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`Raise spark.sql.shuffle.partitions so each partition is smaller.`;case`maxPartitionTooBig`:return`Repartition to break up the oversized partition before this stage.`}break;case`spill`:return`If the spill is skew-driven, fix task skew first: adding memory will not help. Otherwise raise spark.sql.shuffle.partitions or increase executor memory.`;case`gc`:return 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.`;case`slowHost`:return e.variant===`durationShare`?`Check for data locality or partition assignment skewing work onto one node.`:e.variant===`multiDim`?`Investigate uneven partition assignment or a degraded executor.`:`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. Enable spark.speculation to relaunch a lagging task automatically.`;case`stageSlowness`:return`Often a partition-count problem: raise parallelism via spark.sql.shuffle.partitions or spark.default.parallelism, or check for a large per-task data volume driving heavy shuffle and spill.`;case`stageFailed`:return`Inspect the driver log for the failure reason and the job that triggered it.`;case`failures`:return`Investigate driver logs for executor instability or data-driven errors.`;case`straggler`:return`Rule out a GC pause or a slow shuffle fetch before assuming a hardware issue. If a skewed key is the real cause, that is a candidate for AQE's skew-join handling.`;case`speculationWaste`:return`If task durations are naturally variable rather than genuine stragglers, consider tuning spark.speculation.multiplier/quantile.`;case`retryWaste`:return`Investigate executor loss or fetch failures behind the retried attempts.`;case`tinyTask`:return`Scheduler overhead may dominate: lower spark.sql.shuffle.partitions, or coalesce down to fewer, larger tasks.`;case`coldStart`:return`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.`;case`utilization`:return`Consider reducing cluster size or enabling dynamic allocation.`;case`memoryUtilization`:switch(e.variant){case`idleCores`:return`Reduce cluster size or enable dynamic allocation.`;case`wasteModel`:return`Review spark.executor.memory and executor count.`;case`memoryBand`:if(e.dataUnavailable)break;return e.rule===`heapNearCapacity`?`Memory may be too small: raise spark.executor.memory to avoid OOM/spill.`:`Memory may be over-provisioned: consider reducing spark.executor.memory for cost savings.`}break;case`cacheUtilization`: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.`}break;case`coreLocality`:return`Check spark.locality.wait settings and executor/data colocation.`;case`autoscalingChurn`:return`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.`;case`cachingOpportunity`:return 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.`;case`jobFailureRate`:return`Inspect the driver log for the failed job(s) and the stage failures that triggered them.`;case`configAudit`:switch(e.property){case`spark.shuffle.service.enabled`:return`Set spark.shuffle.service.enabled=true so shuffle data survives executor removal.`;case`spark.dynamicAllocation.minExecutors`:return`Set the minimum executor bound at or below the maximum.`;case`spark.dynamicAllocation.maxExecutors`:return`Set spark.dynamicAllocation.maxExecutors to cap cluster growth.`;case`spark.serializer`:return`Consider spark.serializer=org.apache.spark.serializer.KryoSerializer for faster, smaller buffers.`;case`spark.executor.memoryOverhead`:return`Raise executor memoryOverhead above Spark's default floor to avoid off-heap OOM-kills.`}break;case`duplicatePlanSubtree`:return`Check whether the repeated subtree could be computed once and reused, or cache/persist the shared computation.`;case`smallFiles`:return e.direction===`write`?`Repartition or coalesce before writing to raise the average file size.`:`Compact the upstream output so fewer, larger files are produced.`;case`underBroadcast`:return`This could have been a broadcast join: consider a broadcast() hint or raising spark.sql.autoBroadcastJoinThreshold.`;case`overBroadcast`:return`Check for a misapplied broadcast hint or a misconfigured spark.sql.autoBroadcastJoinThreshold.`}}function Qn(e){let t=Se[e.type],n=typeof e.recommendation==`string`?e.recommendation.trim():``;return!t?.routeable||!n?null:{finding:e,widgetId:t.widgetId,region:t.region,findingLabel:t.findingLabel,stageId:typeof e.stageId==`number`?e.stageId:null,recommendation:n}}function $n(e,t){return t.includes(e)?Qn(e):null}function er(e){return e.impactEstimate?.wallClock?.high??null}function tr(e){let t=new Map(pe().map((e,t)=>[e.widgetId,t])),n=e.map((e,t)=>({target:Qn(e),catalogIndex:t})).filter(e=>e.target!==null);return n.sort((e,n)=>{let r=er(e.target.finding),i=er(n.target.finding);return r!==null&&i!==null&&r!==i?i-r:r!==null==(i!==null)?(t.get(e.target.widgetId)??2**53-1)-(t.get(n.target.widgetId)??2**53-1)||e.catalogIndex-n.catalogIndex:r===null?1:-1}),n[0]?.target??null}var nr=10;function rr(e){return ke(e)&&Se[e.type]!=null}function ir(e){return Oe(e.findings)[0].impactBand}function ar(e){let t=e.impactEstimate;return t?t.wallClock?Ct(t.wallClock.low,t.wallClock.high):t.rawWaste?Tt(t.rawWaste):null:null}function or(e){let t=e.stageId==null?e.stageIds&&e.stageIds.length>0?`St.${ct(e.stageIds)}`:null:`St.${e.stageId}`;if(e.type===`duplicatePlanSubtree`&&e.rootName!=null){let n=sr(e);return t&&n?`${t} · ${n}`:n??t}return t||(e.property?String(e.property):null)}function sr(e){if(e.type!==`duplicatePlanSubtree`||e.rootName==null)return null;let t=et(e.rootName),n=e.groupIndex==null?t:`${t} #${Number(e.groupIndex)+1}`;return e.executionId==null?n:`${n} (SQL ${e.executionId})`}function cr({finding:e,textClassName:t,visibleLimit:n,stackIdentity:r,stagePillClassName:i}){let{stageId:a,stageIds:o}=e;if(a!=null)return(0,U.jsx)(St,{stageId:a});if(o&&o.length>0){let a=sr(e),s=a?(0,U.jsx)(`span`,{className:N(`truncate`,t),title:a,children:a}):null,c=(0,U.jsx)(xt,{pills:o.map(e=>({id:e})),visibleLimit:n,pillOverrideClassName:r?i:void 0});return(0,U.jsx)(`span`,{className:N(`inline-flex min-w-0 items-center gap-1.5`,r?`flex-col`:`flex-wrap`),children:r?(0,U.jsxs)(U.Fragment,{children:[s,c]}):(0,U.jsxs)(U.Fragment,{children:[c,s]})})}let s=or(e);return s?(0,U.jsx)(`span`,{className:N(`min-w-0 truncate`,t),title:s,children:s}):null}function lr(e){return(typeof e.recommendation==`string`?e.recommendation.trim():``)||(Se[e.type]?.findingLabel??e.type)}function ur({finding:e,allFindings:t,onRoute:n}){let r=$n(e,t),i=or(e),a=ar(e),o=lr(e),s=A(e);return(0,U.jsxs)(F,{"data-testid":`fix-these-first-row`,"data-finding-type":e.type,children:[(0,U.jsx)(P,{className:`w-px`,children:(0,U.jsx)(Ue,{type:e.type,impactBand:e.impactBand})}),(0,U.jsx)(P,{className:`whitespace-normal`,children:(0,U.jsxs)(`button`,{type:`button`,className:`cursor-pointer rounded-sm text-left focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:()=>r&&n(r),children:[(0,U.jsx)(`span`,{className:`block text-sm font-medium`,children:s}),(0,U.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:o})]})}),(0,U.jsx)(P,{className:`w-px text-right font-mono text-xs text-muted-foreground`,title:[i,a].filter(Boolean).join(` · `),children:(0,U.jsxs)(`span`,{className:`flex items-center justify-end gap-1.5`,children:[(0,U.jsx)(cr,{finding:e}),a?(0,U.jsx)(`span`,{className:`shrink-0`,children:a}):null]})})]})}function dr({finding:e,allFindings:t,onRoute:n,id:r}){let i=$n(e,t),a=or(e),o=ar(e),s=lr(e),c=A(e),l=e.stageId!=null||a!=null;return(0,U.jsxs)(F,{id:r,"data-testid":`fix-these-first-row`,"data-finding-type":e.type,className:`bg-muted/50`,children:[(0,U.jsxs)(P,{colSpan:2,className:`whitespace-normal`,children:[l?(0,U.jsx)(`div`,{className:`mb-1`,children:(0,U.jsx)(cr,{finding:e,textClassName:`line-clamp-1 break-words text-xs font-medium font-mono`})}):null,(0,U.jsxs)(`button`,{type:`button`,className:`block w-full cursor-pointer rounded-sm text-left focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:()=>i&&n(i),children:[l?null:(0,U.jsx)(`span`,{className:`line-clamp-1 break-words text-xs font-medium`,children:c}),(0,U.jsx)(`span`,{className:`line-clamp-1 break-words text-xs text-muted-foreground`,children:s})]})]}),(0,U.jsx)(P,{className:`w-px text-right font-mono text-xs text-muted-foreground`,children:o})]})}function fr(e){return e.kind===`time`?`×${e.findingCount} · ${Ct(e.recoverableMsHigh,e.recoverableMsHigh)} recoverable`:e.kind===`resource`?`×${e.findingCount} · resource-cost projection`:Object.entries(e.byImpactBand).map(([e,t])=>`${t} ${e}`).join(`, `)}function pr(e){return e.kind===`time`?`${e.findingCount} findings of this type; up to ${Ct(e.recoverableMsHigh,e.recoverableMsHigh)} of run time could be recovered by fixing them`:e.kind===`resource`?`${e.findingCount} findings of this type; a resource-cost estimate (not run time) is projected for fixing them`:`${e.findingCount} findings of this type, by impact`}function mr({group:e,allFindings:t,expanded:n,onToggle:r,onRoute:i}){let[a,o]=(0,H.useState)(0),s=Oe(e.findings),c=s[0],l=Zn(c),u=A(c),d=Math.ceil(s.length/nr),f=Math.min(a,Math.max(0,d-1)),p=s.slice(f*nr,f*nr+nr),m=`fix-these-first-group-content-${e.kind}-${e.type}${`unit`in e?`-${e.unit}`:``}`;return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(F,{"data-testid":`fix-these-first-group-row`,"data-finding-type":e.type,children:[(0,U.jsx)(P,{className:`w-px`,children:(0,U.jsx)(Ue,{type:e.type,impactBand:c.impactBand})}),(0,U.jsx)(P,{className:`whitespace-normal`,children:(0,U.jsxs)(`button`,{type:`button`,"aria-expanded":n,"aria-controls":m,className:`cursor-pointer rounded-sm text-left focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:r,children:[(0,U.jsx)(`span`,{className:`block text-sm font-medium`,children:u}),l?(0,U.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:l}):null]})}),(0,U.jsx)(P,{className:`w-px text-right font-mono text-xs text-muted-foreground`,children:(0,U.jsxs)(`span`,{className:`inline-flex items-center justify-end gap-1.5`,title:pr(e),children:[fr(e),n?(0,U.jsx)(Ne,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):(0,U.jsx)(We,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`})]})})]}),n&&p.map((e,n)=>(0,U.jsx)(dr,{finding:e,allFindings:t,onRoute:i,id:n===0?m:void 0},e.id)),n&&d>1&&(0,U.jsx)(F,{className:`bg-muted/50`,children:(0,U.jsx)(P,{colSpan:3,children:(0,U.jsx)(Dt,{page:f,totalPages:d,onPrev:()=>o(e=>e-1),onNext:()=>o(e=>e+1)})})})]})}function hr({target:e,onRoute:t}){let n=or(e.finding),r=ar(e.finding),i=e.finding.stageId!=null||n!=null,[a,o]=(0,H.useState)(!1),s=async()=>{let t=`${A(e.finding)} — ${lr(e.finding)}`,n=[/[.!?]$/.test(t)?t:`${t}.`,r?`Potential savings: ${r}`:null].filter(Boolean).join(` `);try{await w(n),o(!0),setTimeout(()=>o(!1),1500)}catch{}};return(0,U.jsxs)(`div`,{className:`mb-3 flex flex-col gap-2 rounded-lg border border-primary/40 bg-primary/5 transition-colors hover:bg-primary/10`,children:[(0,U.jsxs)(`button`,{type:`button`,"aria-label":`${A(e.finding)}, ${lr(e.finding)}`,onClick:()=>t(e),className:`flex cursor-pointer flex-col gap-2 rounded-lg px-4 py-3 text-left focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 sm:flex-row sm:items-start sm:justify-between sm:gap-4`,children:[(0,U.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs font-semibold tracking-wide text-primary uppercase`,children:[(0,U.jsx)(Ft,{"aria-hidden":`true`,className:`size-3.5`}),`Highest impact`]}),(0,U.jsxs)(`p`,{className:`mt-2 min-w-0`,children:[(0,U.jsx)(`span`,{className:`text-sm font-semibold`,children:A(e.finding)}),(0,U.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`, `,lr(e.finding)]})]})]}),r?(0,U.jsxs)(`div`,{className:`min-w-0 sm:shrink-0 sm:text-right`,children:[(0,U.jsx)(`p`,{className:`text-[11px] uppercase tracking-wide text-muted-foreground`,children:`Potential savings`}),(0,U.jsx)(`p`,{className:`whitespace-nowrap font-mono text-lg font-semibold leading-tight tabular-nums text-primary`,children:r})]}):null]}),(0,U.jsxs)(`div`,{className:N(`flex items-center gap-3 px-4 pb-3`,i?`justify-between`:`justify-end`),children:[i?(0,U.jsx)(cr,{finding:e.finding,textClassName:`line-clamp-2 max-w-[140px] break-words text-xs font-semibold text-muted-foreground`,visibleLimit:2,stackIdentity:!0,stagePillClassName:`h-5 px-1.5 text-[10px] font-normal`}):null,(0,U.jsx)(`button`,{type:`button`,"data-testid":`copy-finding-button`,onClick:()=>void s(),className:`inline-flex shrink-0 cursor-pointer items-center gap-1 rounded text-xs text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,children:a?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(re,{"aria-hidden":`true`,className:`size-3.5`}),`Copied`]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(kt,{"aria-hidden":`true`,className:`size-3.5`}),`Copy finding`]})})]})]})}function gr(e,t,n){let r=[...e,...t].filter(rr);return{eligible:r,groups:De(r,n),triageTarget:tr(r)}}var _r={critical:`Critical`,warning:`Warning`,info:`Info`},vr=[`critical`,`warning`,`info`];function yr(e){return`${e.kind}-${e.type}-${`unit`in e?e.unit:``}`}function br({impactBand:e,groups:t,widgets:n,allFindings:r,expandedGroupKey:i,onToggleGroup:a,onRoute:o,appModel:s,catalog:c,configFindings:l,getTaskData:u,activeFileId:d}){if(t.length===0&&n.length===0)return null;let f=`impact-band-${e}-heading`;return(0,U.jsxs)(`section`,{"aria-labelledby":f,className:`space-y-3`,children:[(0,U.jsx)(`h2`,{id:f,className:`font-heading text-base font-semibold`,children:_r[e]}),t.length>0&&(0,U.jsx)(rt,{children:(0,U.jsx)($e,{children:t.map(e=>{if(e.findingCount===1)return(0,U.jsx)(ur,{finding:e.findings[0],allFindings:r,onRoute:o},e.findings[0].id);let t=yr(e);return(0,U.jsx)(mr,{group:e,allFindings:r,expanded:i===t,onToggle:()=>a(t),onRoute:o},t)})})}),n.length>0&&(0,U.jsx)(at,{children:n.map(({component:e,widgetId:t,index:n})=>(0,U.jsx)(z,{cardId:`alert-${n}`,widgetId:t,children:(0,U.jsx)(H.Suspense,{fallback:(0,U.jsx)(Ye,{}),children:(0,U.jsx)(e,{appModel:s,catalog:c,configFindings:l,getTaskData:u,activeFileId:d,defaultCollapsed:!0})})},t))})]})}function xr({appModel:e,catalog:t,configFindings:n=[],stages:r,getTaskData:i,activeFileId:a,onRoute:o}){let{eligible:s,groups:c,triageTarget:l}=(0,H.useMemo)(()=>gr(t,n,r),[t,n,r]),u=[...t,...n],d=(0,H.useMemo)(()=>Yn(t,n),[t,n]),[f,p]=(0,H.useState)(null),{groupsByImpactBand:m,widgetsByImpactBand:h}=(0,H.useMemo)(()=>{let e=new Map;for(let t of c){let n=ir(t);e.has(n)||e.set(n,[]),e.get(n).push(t)}let t=new Map;for(let e of d)t.has(e.impactBand)||t.set(e.impactBand,[]),t.get(e.impactBand).push(e);return{groupsByImpactBand:e,widgetsByImpactBand:t}},[c,d]);return(0,U.jsxs)(`div`,{id:Gn,className:`space-y-6 scroll-mt-20`,children:[l?(0,U.jsx)(hr,{target:l,onRoute:o}):null,s.length===0?(0,U.jsx)(ht,{tone:`clean`,icon:Fe,title:`No findings to fix right now.`}):null,vr.map(r=>(0,U.jsx)(br,{impactBand:r,groups:m.get(r)??[],widgets:h.get(r)??[],allFindings:u,expandedGroupKey:f,onToggleGroup:e=>p(t=>t===e?null:e),onRoute:o,appModel:e,catalog:t,configFindings:n,getTaskData:i,activeFileId:a},r)),(0,U.jsx)(Xn,{appModel:e,catalog:t,configFindings:n,getTaskData:i,activeFileId:a})]})}var Sr=[`PROCESS_LOCAL`,`NODE_LOCAL`,`RACK_LOCAL`,`NO_PREF`,`ANY`],Cr=[j.clean,j.accent,j.warning,j.muted,j.critical];function wr(e){return e?new Date(e).toLocaleString():`—`}function Tr({stats:e}){let t=new Map(e.map(e=>[e.locality,e.count])),n=Sr.filter(e=>t.has(e));for(let t of e)Sr.includes(t.locality)||n.push(t.locality);let r=n.map((e,n)=>({locality:e,count:t.get(e)??0,color:Cr[Math.min(n,Cr.length-1)]}));return(0,U.jsx)(O,{ariaLabel:`Task locality distribution`,height:140,table:{caption:`Task locality distribution`,columns:[`Locality tier`,`Task count`],rows:r.map(e=>[e.locality,e.count]),align:[`left`,`right`]},children:(0,U.jsxs)(l,{data:r,children:[(0,U.jsx)(c,{vertical:!1,stroke:j.muted,strokeOpacity:.2}),(0,U.jsx)(p,{dataKey:`locality`,tick:{fontSize:10}}),(0,U.jsx)(f,{allowDecimals:!1,tick:{fontSize:10},width:32}),(0,U.jsx)(h,{formatter:e=>[`${Number(e)} task${Number(e)===1?``:`s`}`,`Tasks`]}),(0,U.jsx)(u,{dataKey:`count`,name:`Tasks`,children:r.map(e=>(0,U.jsx)(a,{fill:e.color},e.locality))})]})})}function Er(e){let t=new Map;for(let n of e){t.has(n.type)||t.set(n.type,{impactBand:n.impactBand,finding:n,recs:new Map});let e=t.get(n.type);Xe[n.impactBand]<Xe[e.impactBand]&&(e.impactBand=n.impactBand,e.finding=n),n.recommendation&&!e.recs.has(n.recommendation)&&e.recs.set(n.recommendation,{extended:n.extended??null})}return[...t.entries()].sort(([,e],[,t])=>Xe[e.impactBand]-Xe[t.impactBand])}function Dr({rec:e,extended:t,finding:n,showImpactEstimate:r}){return(0,U.jsxs)(`div`,{className:`space-y-1 text-sm`,children:[(0,U.jsx)(`p`,{className:`max-w-full leading-normal break-words`,children:e}),t?(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:t}):null,r?(0,U.jsx)(Et,{finding:n}):null]})}function Or({findings:e}){if(e.length===0)return null;let t=Er(e);return(0,U.jsx)(`section`,{className:`space-y-3 rounded-md border p-3`,children:t.map(([e,{impactBand:t,finding:n,recs:r}])=>{let i=wt(n.impactEstimate)!==null;return(0,U.jsxs)(`div`,{className:`space-y-1`,children:[(0,U.jsx)(Ue,{type:e,impactBand:t}),[...r.entries()].map(([e,{extended:t}],r)=>(0,U.jsx)(Dr,{rec:e,extended:t,finding:n,showImpactEstimate:r===0&&i},r))]},e)})})}function kr({stage:e,appModel:t}){return he(e.id,t)?(0,U.jsx)(fe,{title:`Query Plan`,children:(0,U.jsx)(Ce,{stageId:e.id,appModel:t})}):null}function Ar({stage:e,appModel:t,catalog:n,getTaskData:r}){let{exportMode:i,getTaskData:a}=vt(r),[o,s]=(0,H.useState)(null),[c,l]=(0,H.useState)(!1),[u,d]=(0,H.useState)(0),f=(e.taskCount??0)>0,p=n.filter(t=>t.stageId===e.id);(0,H.useEffect)(()=>{if(!f||!a)return;let t=!1;return l(!1),a(e.id).catch(()=>null).then(e=>{t||(e?s(e):l(!0))}),()=>{t=!0}},[u]);let m=(e.completedAt??0)-(e.submittedAt??0),h=(e.memoryBytesSpilled??0)>0||(e.diskBytesSpilled??0)>0,g=(e.jvmGCTime??0)>0||(e.gcPct??0)>0,_=e.fetchWaitTime??0,v=_>0&&m>0?Math.round(_/m*100):null,y=(e.inputBytes??0)>0?((e.outputBytes??0)/(e.inputBytes??0)).toFixed(2):null,b=e.localityStats??[];return(0,U.jsxs)(`div`,{className:`space-y-6`,children:[(0,U.jsx)(Or,{findings:p}),(0,U.jsx)(k,{title:`Overview`,collapsible:!0,defaultOpen:!0,rows:[[`Duration`,B(m)],[`Submitted`,wr(e.submittedAt)],[`Completed`,wr(e.completedAt)],e.sqlExecutionId!=null&&[`SQL Execution`,`#${e.sqlExecutionId}`],e.stageType?[`Stage type`,e.stageType]:!1]}),(0,U.jsx)(k,{title:`Tasks`,collapsible:!0,rows:[[`Total`,String(e.taskCount)],[`Failed`,String(e.failedTasks)],[`P50 duration`,(e.taskDurationP50??0)>0?B(e.taskDurationP50):`—`],[`P95 duration`,(e.taskDurationP95??0)>0?B(e.taskDurationP95):`—`],[`Max duration`,(e.taskDurationMax??0)>0?B(e.taskDurationMax):`—`],(e.peakExecutionMemoryMax??0)>0&&[`Peak execution memory`,R(e.peakExecutionMemoryMax)]],children:f?i?(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Per-task duration data isn’t included in exported reports.`}):o?(0,U.jsx)(yt,{metrics:o.metrics,fieldNames:o.fieldNames,markers:{p50:e.taskDurationP50,p95:e.taskDurationP95}}):c?(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Couldn’t load task data for this stage.`}),(0,U.jsx)(Ve,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>d(e=>e+1),children:`Retry`})]}):(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading task data…`}):null}),(0,U.jsx)(k,{title:`Locality`,collapsible:!0,rows:[],children:b.length>0?(0,U.jsx)(Tr,{stats:b}):null}),(0,U.jsx)(k,{title:`I/O`,collapsible:!0,rows:[[`Input`,R(e.inputBytes)],[`Output`,R(e.outputBytes)],[`Shuffle read`,R(e.shuffleReadBytes)],[`Shuffle write`,R(e.shuffleWriteBytes)],_>0&&[`Fetch wait`,`${B(_)}${v==null?``:` (${v}%)`}`],y!=null&&[`I/O ratio`,y]]}),h?(0,U.jsx)(k,{title:`Spill`,collapsible:!0,rows:[[`Memory spilled`,R(e.memoryBytesSpilled)],[`Disk spilled`,R(e.diskBytesSpilled)],(e.memoryBytesSpilled??0)>0&&[`Classification`,e.spillClassification??`unclassified`]]}):null,g?(0,U.jsx)(k,{title:`GC`,collapsible:!0,rows:[[`JVM GC time`,B(e.jvmGCTime)],[`Executor run time`,B(e.executorRunTime)],[`GC %`,`${(e.gcPct??0).toFixed(1)}%`]]}):null,e.details?(0,U.jsx)(L,{children:(0,U.jsx)(fe,{title:`Call Stack`,children:(0,U.jsx)(`pre`,{className:`overflow-x-auto rounded-md bg-muted p-2 text-xs whitespace-pre-wrap`,children:e.details})})}):null,(0,U.jsx)(kr,{stage:e,appModel:t})]})}function jr({appModel:e,catalog:t,getTaskData:n}){let{stageId:r,close:i}=it(),a=r==null?void 0:e.stages.get(r);return(0,U.jsx)(xe,{open:a!=null,onOpenChange:e=>{e||i()},children:(0,U.jsx)(we,{className:`max-h-[85vh] overflow-y-auto sm:max-w-4xl`,children:a?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(ve,{children:(0,U.jsxs)(Ee,{children:[`Stage `,a.id,` `,(0,U.jsxs)(`span`,{className:`text-muted-foreground`,children:[`— `,a.name??``]})]})}),(0,U.jsx)(Ar,{stage:a,appModel:e,catalog:t,getTaskData:n},a.id)]}):null})})}function Mr(e){return Nr(e)||typeof e==`function`||Pr(e)}function Nr(e){return typeof e==`function`&&(()=>{let t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function Pr(e){return typeof e==`object`&&typeof e.$$typeof==`symbol`&&[`react.memo`,`react.forward_ref`].includes(e.$$typeof.description)}function G(e,t){return e==null?null:Mr(e)?H.createElement(e,t):e}function Fr(e){if(`cell`in e&&e.cell){let t=e.cell,n=t.column.columnDef,r=t,i=n;return r.getIsAggregated?.()?G(i.aggregatedCell??n.cell,t.getContext()):r.getIsPlaceholder?.()?null:G(n.cell,t.getContext())}return`header`in e&&e.header?G(e.header.column.columnDef.header,e.header.getContext()):`footer`in e&&e.footer?G(e.footer.column.columnDef.footer,e.footer.getContext()):null}function Ir({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&60?a&12?a&4?!(a&48)&&c(e,i)?(i.flags=a|40,a&=1):a=0:i.flags=a&-9|32:a=0:i.flags=a|32,a&2&&t(i),a&1){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(1)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&16)a=!0;else if((c&17)==17){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&33)==33){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=-33;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(1)}function s(e){do{let n=e.sub,r=n.flags;(r&48)==32&&(n.flags=r|16,(r&6)==2&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function Lr(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var Rr=[],zr=0,{link:Br,unlink:Vr,propagate:Hr,checkDirty:Ur,shallowPropagate:Wr}=Ir({update(e){return e._update()},notify(e){Rr[Kr++]=e,e.flags&=-3},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,Yr(e))}}),Gr=0,Kr=0,K,qr=0;function Jr(e){try{++qr,e()}finally{--qr||Xr()}}function Yr(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=Vr(n,e)}function Xr(){if(!(qr>0)){for(;Gr<Kr;){let e=Rr[Gr];Rr[Gr++]=void 0,e.notify()}Gr=0,Kr=0}}function Zr(e,t){let n=typeof e==`function`,r=e,i={_snapshot:n?void 0:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:+!n,get(){return K!==void 0&&Br(i,K,zr),i._snapshot},subscribe(e){let t=Lr(e),n={current:!1},r=Qr(()=>{i.get(),n.current?t.next?.(i._snapshot):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=K,o=t?.compare??Object.is;if(n)K=i,++zr,i.depsTail=void 0;else if(e===void 0)return!1;n&&(i.flags=5);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{K=a,n&&(i.flags&=-5),Yr(i)}}};return n?(i.flags=17,i.get=function(){let e=i.flags;if(e&16||e&32&&Ur(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&Wr(e)}}else e&32&&(i.flags=e&-33);return K!==void 0&&Br(i,K,zr),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(Hr(e),Wr(e),Xr())}},i}function Qr(e){let t=()=>{let t=K;K=n,++zr,n.depsTail=void 0,n.flags=6;try{return e()}finally{K=t,n.flags&=-5,Yr(n)}},n={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:6,notify(){let e=this.flags;e&16||e&32&&Ur(this.deps,this)?t():this.flags=2},stop(){this.flags=0,this.depsTail=void 0,Yr(this)}};return t(),n}function $r(e,t){if(Object.is(e,t))return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(let[n,r]of e)if(!t.has(n)||!Object.is(r,t.get(n)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();let n=ei(e);if(n.length!==ei(t).length)return!1;for(let r=0;r<n.length;r++)if(!Object.prototype.hasOwnProperty.call(t,n[r])||!Object.is(e[n[r]],t[n[r]]))return!1;return!0}function ei(e){return Object.keys(e).concat(Object.getOwnPropertySymbols(e))}var ti=e(r(),1);function ni(e,t){return e===t}function ri(e,t=e=>e,n){let r=n?.compare??ni,i=(0,H.useCallback)(t=>{let{unsubscribe:n}=e.subscribe(t);return n},[e]),a=(0,H.useCallback)(()=>e.get(),[e]);return(0,ti.useSyncExternalStoreWithSelector)(i,a,a,t,r)}function ii(e){let t=ri(e.source,e.selector,{compare:$r});return typeof e.children==`function`?e.children(t):e.children}function ai(e){let t=e;return Object.defineProperty(e,"state",{get(){return e.get()}}),`set`in e&&(t.setState=e.set.bind(e)),t}function oi(e){let{createAtom:t,batch:n}=e,r=t(0);return{createOptionsStore:!1,wrapExternalAtoms:!1,addSubscription:()=>{throw Error(`Feature not supported in current reactivity implementation`)},unmount:()=>{throw Error(`Feature not supported in current reactivity implementation`)},schedule:e.schedule??(e=>queueMicrotask(e)),batch:n,untrack:e=>e(),createReadonlyAtom:(e,n)=>{let i=n?.compare??Object.is,a=!1,o,s=()=>{let t=e();return(!a||!i(o,t))&&(o=t,a=!0),o},c=t(()=>(r.get(),s()),{compare:i});return{get:s,subscribe:c.subscribe.bind(c)}},createWritableAtom:(e,n)=>t(e,{compare:n?.compare}),commit:()=>{r.set(e=>e+1)}}}function si(e,t=Object.is){let n=!1,r;return{get:e.get,markCommitted:e=>{r=e,n=!0},subscribe:i=>e.subscribe(e=>{(!n||!t(r,e))&&i(e)})}}function ci(){return oi({createAtom:Zr,batch:Jr})}function li(e,t){return typeof e==`function`?e(t):e}function q(e){if(Array.isArray(e))return e.map(q);if(e&&typeof e==`object`){let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)return e;let n=t===null?J():{},r=Object.keys(e);for(let t=0;t<r.length;t++){let i=r[t];Object.defineProperty(n,i,{configurable:!0,enumerable:!0,value:q(e[i]),writable:!0})}return n}return e}function ui(e,t){let n=Object.keys(t),r=e;for(let e=0;e<n.length;e++){let i=n[e];!i.startsWith(`_memo_`)&&i!==`_cellsCache`&&(r[i]=t[i])}return e}function J(){return Object.create(null)}function di(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function fi(e,t){return n=>{(t.options.atoms?.[e]??t.baseAtoms[e]).set(e=>li(n,e))}}function pi(e){if(typeof e!=`object`||!e)return!1;if(Array.isArray(e))return!0;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function mi(e){return Reflect.ownKeys(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}var hi=3;function gi(e,t){return _i(e,t,hi)}function _i(e,t,n){if(Object.is(e,t))return!0;if(n<=0||!pi(e)||!pi(t)||(Array.isArray(e)||Array.isArray(t))&&(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length))return!1;let r=mi(e),i=mi(t);if(r.length!==i.length)return!1;let a=e,o=t;for(let e=0;e<r.length;e++){let i=r[e];if(!Object.prototype.propertyIsEnumerable.call(t,i)||!_i(a[i],o[i],n-1))return!1}return!0}function vi(e,t,n,r=gi){let i=`on${t.charAt(0).toUpperCase()}${t.slice(1)}Change`,a=e.options[i];a&&a(e=>{let t=li(n,e);return r(e,t)?e:t})}function yi(e){return e instanceof Function}function bi(e,t){let n=[],r=e=>{e.forEach(e=>{n.push(e);let i=t(e);i.length&&r(i)})};return r(e),n}var xi=({fn:e,memoDeps:t,onAfterCompare:n,onAfterUpdate:r,onBeforeCompare:i,onBeforeUpdate:a})=>{let o=[],s;return c=>{i?.();let l=t?.(c),u=!l||l.length!==o?.length;if(!u&&l){for(let e=0;e<l.length;e++)if(l[e]!==o[e]){u=!0;break}}return n?.(u),u?(o=l,a?.(),s=e(...l??[]),r?.(s),s):s}};function Si(e){let t=!1;return()=>{if(!t){t=!0;return}e()}}function Ci({feature:e,fnName:t,objectId:n,onAfterUpdate:r,table:i,...a}){let o=()=>{if(!r)return;let{schedule:e,untrack:t}=i._reactivity;e(()=>t(()=>r()))},s={onAfterUpdate:()=>{o()}};return xi({...a,...s})}function wi(e,t=`_`){let[n,r]=e.split(t);return{fnKey:r,fnName:`${n}.${r}`,parentName:n}}function Y(e,t,n){for(let[r,{fn:i,memoDeps:a}]of Object.entries(n)){let{fnKey:n,fnName:o}=wi(r);t[n]=a?Ci({memoDeps:a,fn:i,fnName:o,table:t,feature:e}):i}}function X(e,t,n,r){for(let[i,{fn:a,memoDeps:o}]of Object.entries(r)){let{fnKey:r,fnName:s}=wi(i);if(o){let i=`_memo_${r}`;t[r]=function(...t){if(!this[i]){let t=this;this[i]=Ci({memoDeps:e=>o(t,e),fn:(...e)=>a(t,...e),fnName:s,objectId:t.id,table:n,feature:e})}return this[i](...t)}}else t[r]=function(...e){return a(this,...e)}}}function Z(e,t,n,...r){return e[t]?.(...r)??n(e,...r)}function Ti(e){return e.row.getValue(e.column.id)}function Ei(e){return e.getValue()??e.table.options.renderFallbackValue}function Di(e){return{table:e.table,column:e.column,row:e.row,cell:e,getValue:()=>e.getValue(),renderValue:()=>e.renderValue()}}var Oi={assignCellPrototype:(e,t)=>{X(`coreCellsFeature`,e,t,{cell_getValue:{fn:e=>Ti(e)},cell_renderValue:{fn:e=>Ei(e)},cell_getContext:{fn:e=>Di(e),memoDeps:e=>[e]}})}};function ki(e){if(!e._headerPrototype){e._headerPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignHeaderPrototype?.(e._headerPrototype,e)}return e._headerPrototype}function Ai(e,t,n){let r=ki(e),i=Object.create(r);i.colSpan=0,i.column=t,i.depth=n.depth,i.headerGroup=null,i.id=n.id??t.id,i.index=n.index,i.isPlaceholder=!!n.isPlaceholder,i.placeholderId=n.placeholderId,i.rowSpan=0,i.subHeaders=[];let a=e._headerInstanceInitFns;for(let e=0;e<a.length;e++)a[e](i);return i}function ji(){return{start:[],end:[]}}function Mi(){return J()}function Ni(e,t){Pi(e)&&Bi(e.table,n=>{let r=Object.assign(J(),n),i=t??!Z(e,`getIsVisible`,Q),a=e.getLeafColumns();for(let e=0;e<a.length;e++){let t=a[e];Pi(t)&&(r[t.id]=i)}return r})}function Q(e){let t=e.table.atoms.columnVisibility?.get();if(!t)return!0;let n=e.columns;return n.length?n.some(e=>Z(e,`getIsVisible`,Q)):(di(t,e.id)?t[e.id]:void 0)??!0}function Pi(e){return(e.columnDef.enableHiding??!0)&&(e.table.options.enableHiding??!0)}function Fi(e){return t=>{Ni(e,t.target.checked)}}function Ii(e){let t=e.getAllCells(),n=[];for(let e=0;e<t.length;e++){let r=t[e];Z(r.column,`getIsVisible`,Q)&&n.push(r)}let{start:r,end:i}=e.table.atoms.columnPinning?.get()??ji();if(!r.length&&!i.length)return n;let a=Z(e,`getVisibleCellsByColumnId`,Li),o=[];for(let e=0;e<r.length;e++){let t=a[r[e]];t&&o.push(t)}let s=[];for(let e=0;e<i.length;e++){let t=a[i[e]];t&&s.push(t)}let c=[];for(let e=0;e<n.length;e++){let t=n[e],a=t.column.id;!r.includes(a)&&!i.includes(a)&&c.push(t)}return[...o,...c,...s]}function Li(e){let t=J(),n=e.getAllCells();for(let e=0;e<n.length;e++){let r=n[e];Z(r.column,`getIsVisible`,Q)&&(t[r.column.id]=r)}return t}function Ri(e){return e.getAllFlatColumns().filter(e=>Z(e,`getIsVisible`,Q))}function zi(e){return e.getAllLeafColumns().filter(e=>Z(e,`getIsVisible`,Q))}function Bi(e,t){vi(e,`columnVisibility`,t)}function Vi(e,t){Bi(e,t?J():Object.assign(J(),q(e.initialState.columnVisibility??{})))}function Hi(e,t){t??=!Ui(e);let n=J(),r=e.getAllLeafColumns();for(let e=0;e<r.length;e++){let i=r[e];n[i.id]=t||!Pi(i)}Bi(e,n)}function Ui(e){return!e.getAllLeafColumns().some(e=>!Z(e,`getIsVisible`,Q))}function Wi(e){return e.getAllLeafColumns().some(e=>Z(e,`getIsVisible`,Q))}function Gi(e){return t=>{Hi(e,t.target.checked)}}function Ki(e,t=1){let n=t;for(let r=0;r<e.length;r++){let i=e[r];Z(i,`getIsVisible`,Q)&&i.columns.length&&(n=Math.max(n,Ki(i.columns,t+1)))}return n}function qi(e,t){return e?`${e}_${t}`:String(t)}function Ji(e,t,n,r){let i=e??``;return t&&(i=i?`${i}_${t}`:String(t)),n&&(i=i?`${i}_${n}`:n),r&&(i=i?`${i}_${r}`:r),i}function Yi(e,t){let n=0;for(let r=0;r<e.length;r++)e[r].column===t&&n++;return n}function Xi(e,t,n,r,i,a){let o={depth:t,id:qi(r,t),headers:[]},s=[];for(let i=0;i<e.length;i++){if(!(i in e))continue;let a=e[i],c=s[s.length-1],l=a.column.depth===o.depth,u,d=!1;if(l&&a.column.parent?u=a.column.parent:(u=a.column,d=!0),c&&c.column===u)c.subHeaders.push(a);else{let e=Ai(n,u,{id:Ji(r,t,u.id,a.id),isPlaceholder:d,placeholderId:d?String(Yi(s,u)):void 0,depth:t,index:s.length});e.subHeaders.push(a),s.push(e)}o.headers.push(a),a.headerGroup=o}for(let e=0;e<a.length;e++)a[e](o);i.push(o),t>0&&Xi(s,t-1,n,r,i,a)}function Zi(e){for(let t=0;t<e.length;t++){let n=e[t];if(!Z(n.column,`getIsVisible`,Q))continue;let r=0;if(n.subHeaders.length){Zi(n.subHeaders);for(let e=0;e<n.subHeaders.length;e++){let t=n.subHeaders[e];Z(t.column,`getIsVisible`,Q)&&(r+=t.colSpan)}}else r=1;if(n.colSpan=r,n.isPlaceholder&&n.subHeaders.length===1&&n.subHeaders[0].column===n.column){let e=1,t=n.subHeaders[0];for(;t;)t.rowSpan=0,e++,t=t.subHeaders.length===1&&t.subHeaders[0].column===n.column?t.subHeaders[0]:void 0;n.rowSpan=e}else n.rowSpan=1}}function Qi(e,t,n,r){let i=Ki(e),a=[],o=n._headerGroupInstanceInitFns,s=Array(t.length);for(let e=0;e<t.length;e++)e in t&&(s[e]=Ai(n,t[e],{depth:i,index:e}));return Xi(s,i-1,n,r,a,o),a.reverse(),Zi(a[0]?.headers??[]),a}function $i(e){if(!e._columnPrototype){e._columnPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignColumnPrototype?.(e._columnPrototype,e)}return e._columnPrototype}function ea(e,t,n,r){let i={...e.getDefaultColumnDef(),...t},a=i.accessorKey,o=a===void 0?void 0:String(a),s=i.id??o?.replaceAll(`.`,`_`)??(typeof i.header==`string`?i.header:void 0),c;if(i.accessorFn)c=i.accessorFn;else if(a!==void 0){if(typeof a==`string`&&a.includes(`.`)){let e=a.split(`.`);c=t=>{let n=t;for(let t=0;t<e.length;t++){let r=e[t];n=n?.[r]}return n}}else c=e=>e[i.accessorKey]}if(!s)throw Error();let l=$i(e),u=Object.create(l);u.accessorFn=c,u.columnDef=i,u.columns=[],u.depth=n,u.id=`${String(s)}`,u.parent=r;let d=e._columnInstanceInitFns;for(let e=0;e<d.length;e++)d[e](u);return u}function ta(e){let t=e.atoms.columnOrder?.get();return n=>{let r=[];if(!t?.length)r=n;else{let e=new Map;for(let t=0;t<n.length;t++){let r=n[t];e.set(r.id,r)}for(let n=0;n<t.length;n++){let i=t[n],a=e.get(i);a&&(r.push(a),e.delete(i))}for(let t=0;t<n.length;t++){let i=n[t];e.has(i.id)&&r.push(i)}}return na(e,r)}}function na(e,t){let n=e.atoms.grouping?.get()??[],{groupedColumnMode:r}=e.options;if(!n.length||!r)return t;let i=t.filter(e=>!n.includes(e.id));if(r===`remove`)return i;let a=new Map;for(let e=0;e<t.length;e++){let n=t[e];a.set(n.id,n)}let o=[];for(let e=0;e<n.length;e++){let t=a.get(n[e]);t&&o.push(t)}return[...o,...i]}function ra(e){return[e,...e.columns.flatMap(e=>e.getFlatColumns())]}function ia(e){if(e.columns.length){let t=e.columns.flatMap(e=>e.getLeafColumns());return Z(e.table,`getOrderColumns`,ta)(t)}return[e]}function aa(e){return{header:e=>{let t=e.header.column.columnDef;return t.accessorKey?t.accessorKey:t.accessorFn?t.id:null},cell:e=>e.renderValue()?.toString?.()??null,...Object.values(e._features).reduce((e,t)=>Object.assign(e,t.getDefaultColumnDef?.()),{}),...e.options.defaultColumn}}function oa(e,t,n,r=0){let i=Array(t.length);for(let a=0;a<t.length;a++){if(!(a in t))continue;let o=t[a],s=ea(e,o,r,n),c=o;s.columns=c.columns?oa(e,c.columns,s,r+1):[],i[a]=s}return i}function sa(e){return oa(e,e.options.columns)}function ca(e){return e.getAllColumns().flatMap(e=>e.getFlatColumns())}function la(e){let t=J(),n=e.getAllFlatColumns();for(let e=0;e<n.length;e++){let r=n[e];t[r.id]=r}return t}function ua(e){let t=e.getAllColumns().flatMap(e=>e.getLeafColumns());return Z(e,`getOrderColumns`,ta)(t)}function da(e){let t=J(),n=e.getAllLeafColumns();for(let e=0;e<n.length;e++){let r=n[e];t[r.id]=r}return t}function fa(e,t){return e.getAllFlatColumnsById()[t]}var pa={assignColumnPrototype:(e,t)=>{X(`coreColumnsFeature`,e,t,{column_getFlatColumns:{fn:e=>ra(e),memoDeps:e=>[e.table.options.columns]},column_getLeafColumns:{fn:e=>ia(e),memoDeps:e=>[e.table.atoms.columnOrder?.get(),e.table.atoms.grouping?.get(),e.table.options.columns,e.table.options.groupedColumnMode]}})},constructTableAPIs:e=>{Y(`coreColumnsFeature`,e,{table_getDefaultColumnDef:{fn:()=>aa(e),memoDeps:()=>[e.options.defaultColumn]},table_getAllColumns:{fn:()=>sa(e),memoDeps:()=>[e.options.columns]},table_getAllFlatColumns:{fn:()=>ca(e),memoDeps:()=>[e.options.columns]},table_getAllFlatColumnsById:{fn:()=>la(e),memoDeps:()=>[e.options.columns]},table_getAllLeafColumns:{fn:()=>ua(e),memoDeps:()=>[e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_getAllLeafColumnsById:{fn:()=>da(e),memoDeps:()=>[e.getAllLeafColumns()]},table_getColumn:{fn:t=>fa(e,t)}})}};function ma(e,t){for(let n=0;n<e.subHeaders.length;n++)ma(e.subHeaders[n],t);t.push(e)}function ha(e){let t=[];return ma(e,t),t}function ga(e){return{column:e.column,header:e,table:e.column.table}}function _a(e){let{start:t,end:n}=e.atoms.columnPinning?.get()??ji(),r=e.getAllColumns(),i=Z(e,`getVisibleLeafColumns`,zi);if(!t.length&&!n.length)return Qi(r,i,e);let a=e.getAllLeafColumnsById(),o=[];for(let e=0;e<t.length;e++){let n=a[t[e]];n&&Z(n,`getIsVisible`,Q)&&o.push(n)}let s=[];for(let e=0;e<n.length;e++){let t=a[n[e]];t&&Z(t,`getIsVisible`,Q)&&s.push(t)}let c=i.filter(e=>!t.includes(e.id)&&!n.includes(e.id));return Qi(r,[...o,...c,...s],e)}function va(e){return[...e.getHeaderGroups()].reverse()}function ya(e){let t=e.getHeaderGroups(),n=[];for(let e=0;e<t.length;e++){let r=t[e].headers;for(let e=0;e<r.length;e++)n.push(r[e])}return n}function ba(e){let t=e.getHeaderGroups()[0]?.headers??[],n=[];for(let e=0;e<t.length;e++){let r=t[e].getLeafHeaders();for(let e=0;e<r.length;e++)n.push(r[e])}return n}var xa={assignHeaderPrototype:(e,t)=>{X(`coreHeadersFeature`,e,t,{header_getLeafHeaders:{fn:e=>ha(e),memoDeps:e=>[e.column.table.options.columns]},header_getContext:{fn:e=>ga(e),memoDeps:e=>[e.column.table.options.columns]}})},constructTableAPIs:e=>{Y(`coreHeadersFeature`,e,{table_getHeaderGroups:{fn:()=>_a(e),memoDeps:()=>[e.options.columns,e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.atoms.columnPinning?.get(),e.atoms.columnVisibility?.get(),e.options.groupedColumnMode]},table_getFooterGroups:{fn:()=>va(e),memoDeps:()=>[e.getHeaderGroups()]},table_getFlatHeaders:{fn:()=>ya(e),memoDeps:()=>[e.getHeaderGroups()]},table_getLeafHeaders:{fn:()=>ba(e),memoDeps:()=>[e.getHeaderGroups()]}})}};function Sa(e){if(!e._rowPrototype){e._rowPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignRowPrototype?.(e._rowPrototype,e)}return e._rowPrototype}var Ca=(e,t,n,r,i,a,o)=>{let s=Sa(e),c=Object.create(s);c._displayIndexCache=-1,c._uniqueValuesCache=J(),c._valuesCache=J(),c.depth=i,c.id=t,c.index=r,c.original=n,c.parentId=o,c.subRows=a??[];let l=e._rowInstanceInitFns;for(let e=0;e<l.length;e++)l[e](c);return c},wa=/([0-9]+)/gm;function Ta(e){let t=Object.assign((e,n,r)=>{let i=e.getValue(r),a=n.getValue(r),o=t.resolveDataValue;return o&&(i=o(i),a=o(a)),t.sort(i,a,e,n,r)},e);return t}Ta({resolveDataValue:e=>ka(e).toLowerCase(),sort:(e,t)=>Aa(e,t)}),Ta({resolveDataValue:e=>ka(e),sort:(e,t)=>Aa(e,t)}),Ta({resolveDataValue:e=>ka(e).toLowerCase(),sort:(e,t)=>Da(e,t)}),Ta({resolveDataValue:e=>ka(e),sort:(e,t)=>Da(e,t)}),Ta({resolveDataValue:e=>Oa(e),sort:(e,t)=>e>t?1:e<t?-1:0});var Ea=Ta({sort:(e,t)=>Da(e,t)});function Da(e,t){return e===t?0:e>t?1:-1}function Oa(e){return e instanceof Date?e.getTime():e}function ka(e){return typeof e==`number`?isNaN(e)||e===1/0||e===-1/0?``:String(e):typeof e==`string`?e:``}function Aa(e,t){let n=0,r=0,i=e.length,a=t.length;for(;n<i&&r<a;){let i=ja(e.charCodeAt(n)),a=ja(t.charCodeAt(r)),o=Ma(e,n,i),s=Ma(t,r,a);if(!i&&!a){let i=Na(e,n,o,t,r,s);if(i)return i;n=o,r=s;continue}if(i!==a)return i?1:-1;let c=Pa(e,n,o,t,r,s);if(c)return c;n=o,r=s}return Ia(e,n)-Ia(t,r)}function ja(e){return e>=48&&e<=57}function Ma(e,t,n){let r=t+1;for(;r<e.length&&ja(e.charCodeAt(r))===n;)r++;return r}function Na(e,t,n,r,i,a){let o=n-t,s=a-i,c=o<s?o:s;for(let n=0;n<c;n++){let a=e.charCodeAt(t+n),o=r.charCodeAt(i+n);if(a>o)return 1;if(o>a)return-1}return o>s?1:s>o?-1:0}function Pa(e,t,n,r,i,a){let o=t;for(;o<n&&e.charCodeAt(o)===48;)o++;let s=i;for(;s<a&&r.charCodeAt(s)===48;)s++;let c=n-o,l=a-s;if(c===0&&l===0)return 0;if(c<=15&&l<=15){let t=Fa(e,o,n),i=Fa(r,s,a);return t>i?1:i>t?-1:0}let u=parseInt(e.slice(t,n),10),d=parseInt(r.slice(i,a),10);return u>d?1:d>u?-1:0}function Fa(e,t,n){let r=0;for(let i=t;i<n;i++)r=r*10+e.charCodeAt(i)-48;return r}function Ia(e,t){let n=0,r=t;for(;r<e.length;)n++,r=Ma(e,r,ja(e.charCodeAt(r)));return n}function La(){return[]}function Ra(e,t){vi(e,`cellSelection`,t?La():q(e.initialState.cellSelection)??La())}function za(e){e.atoms.cellSelection&&(e.options.autoResetAll??e.options.autoResetCellSelection??!0)&&e._reactivity.schedule(()=>Ra(e))}function Ba(e){e.atoms.expanded&&(e.options.autoResetAll??e.options.autoResetExpanded??!e.options.manualExpanding)&&e._reactivity.schedule(()=>Va(e))}function Va(e,t){let n=e.initialState.expanded;vi(e,`expanded`,t?J():n===!0||Object.assign(J(),q(n??{})))}function Ha(e){let t=e.table.atoms.expanded?.get()??{};return!!(e.table.options.getIsRowExpanded?.(e)??(t===!0||Ua(t,e.id)))}function Ua(e,t){return!!(e&&e!==!0&&di(e,t)&&e[t])}var $=0,Wa=10;function Ga(){return{pageIndex:$,pageSize:Wa}}function Ka(e){if(e.options.autoResetAll??e.options.autoResetPageIndex??!e.options.manualPagination){if((e.atoms.pagination?.get()?.pageIndex??$)===$)return;Xa(e,!0)}}function qa(e,t){vi(e,`pagination`,t)}function Ja(e,t){qa(e,t?Ga():q(e.initialState.pagination??Ga()))}function Ya(e,t){qa(e,n=>{let r=li(t,n.pageIndex),i=e.options.pageCount===void 0||e.options.pageCount===-1?2**53-1:e.options.pageCount-1;return r=Math.max(0,Math.min(r,i)),{...n,pageIndex:r}})}function Xa(e,t){Ya(e,t?$:e.initialState.pagination?.pageIndex??$)}function Za(e,t){Qa(e,t?Wa:e.initialState.pagination?.pageSize??Wa)}function Qa(e,t){qa(e,e=>{let n=Math.max(1,li(t,e.pageSize)),r=e.pageSize===1/0?0:e.pageSize*e.pageIndex,i=n===1/0?0:Math.floor(r/n);return{...e,pageIndex:i,pageSize:n}})}function $a(e){let t=so(e),n=[];return t&&t>0&&(n=[...Array(t)].fill(null).map((e,t)=>t)),n}function eo(e){return(e.atoms.pagination?.get()?.pageIndex??0)>0}function to(e){let t=e.atoms.pagination?.get()?.pageIndex??$,n=so(e);return n===-1||n!==0&&t<n-1}function no(e){let t=e.atoms.pagination?.get()?.pageIndex??$,n=so(e);return Number.isFinite(n)&&n>0&&t<n-1}function ro(e){return Ya(e,e=>e-1)}function io(e){return Ya(e,e=>e+1)}function ao(e){return Ya(e,0)}function oo(e){let t=so(e);if(!(!Number.isFinite(t)||t<=0))return Ya(e,t-1)}function so(e){let t=e.options.pageCount;if(t!=null)return t;let n=co(e),r=e.atoms.pagination?.get()?.pageSize??Wa;return r===1/0&&Number.isFinite(n)&&n>0?1:Math.ceil(n/r)}function co(e){return e.options.rowCount??e.getPrePaginatedRowModel().rows.length}function lo(){return[]}function uo(e,t){vi(e,`sorting`,t)}function fo(e,t){uo(e,t?[]:q(e.initialState.sorting??[]))}function po(e){e.atoms.sorting&&(e.options.autoResetAll??e.options.autoResetSorting??!1)&&fo(e)}function mo(e){let t=e.table._rowModelFns.sortFns,n=e.table.getFilteredRowModel().flatRows.slice(0,10),r,i=!1;for(let t=0;t<n.length;t++){let a=n[t].getValue(e.id);if(Object.prototype.toString.call(a)===`[object Date]`){r=`datetime`;break}if(typeof a==`string`&&(i=!0,a.split(wa).length>1)){r=`alphanumeric`;break}}if(!r&&i&&(r=`text`),r){let e=t?.[r];if(e||r===`alphanumeric`&&(e=t?.text),e)return e}return Ea}function ho(e){let t=e.table.getFilteredRowModel().flatRows.slice(0,10);for(let n=0;n<t.length;n++){let r=t[n].getValue(e.id);if(r!=null)return typeof r==`string`?`asc`:`desc`}return`desc`}function go(e){let t=e.table._rowModelFns.sortFns;return yi(e.columnDef.sortFn)?e.columnDef.sortFn:e.columnDef.sortFn===`auto`?mo(e):t?.[e.columnDef.sortFn]??Ea}function _o(e,t,n){let r=yo(e,n&&xo(e)),i=t!==void 0;uo(e.table,a=>{let o=a.findIndex(t=>t.id===e.id),s=o===-1?void 0:a[o],c=[],l,u=i?t:r===`desc`,d=!!(a.length&&xo(e)&&n);return l=d?s?`toggle`:`add`:s?`toggle`:`replace`,l===`toggle`&&(i||r||(l=`remove`)),l===`add`?(c=[...a,{id:e.id,desc:u}],c.splice(0,c.length-(e.table.options.maxMultiSortColCount??2**53-1))):c=l===`toggle`?d?a.map(t=>t.id===e.id?{...t,desc:u}:t):[{id:e.id,desc:u}]:l===`remove`?d?a.filter(t=>t.id!==e.id):[]:[{id:e.id,desc:u}],c})}function vo(e){return e.columnDef.sortDescFirst??e.table.options.sortDescFirst??ho(e)===`desc`?`desc`:`asc`}function yo(e,t){let n=vo(e),r=So(e);return r?r!==n&&(e.table.options.enableSortingRemoval??!0)&&(!t||(e.table.options.enableMultiRemove??!0))?!1:r===`desc`?`asc`:`desc`:n}function bo(e){return(e.columnDef.enableSorting??!0)&&(e.table.options.enableSorting??!0)&&!!e.accessorFn}function xo(e){return e.columnDef.enableMultiSort??e.table.options.enableMultiSort??!!e.accessorFn}function So(e){let t=e.table.atoms.sorting?.get()?.find(t=>t.id===e.id);return t?t.desc?`desc`:`asc`:!1}function Co(e){return e.table.atoms.sorting?.get()?.findIndex(t=>t.id===e.id)??-1}function wo(e){uo(e.table,t=>t.length?t.filter(t=>t.id!==e.id):[])}function To(e){let t=bo(e);return n=>{t&&_o(e,void 0,xo(e)?e.table.options.isMultiSortEvent?.(n):!1)}}function Eo(){return e=>Ci({feature:`coreRowModelsFeature`,table:e,fnName:`table.getCoreRowModel`,memoDeps:()=>[e.options.data],fn:()=>Oo(e,e.options.data),onAfterUpdate:Si(()=>{Ba(e),Ka(e),po(e),za(e)})})}function Do(e,t,n,r=0,i){let a=[];for(let o=0;o<n.length;o++){let s=n[o],c=Ca(e,e.getRowId(s,o,i),s,o,r,void 0,i?.id);t.flatRows.push(c),t.rowsById[c.id]=c,a.push(c),e.options.getSubRows&&(c.originalSubRows=e.options.getSubRows(s,o),c.originalSubRows?.length&&(c.subRows=Do(e,t,c.originalSubRows,r+1,c)))}return a}function Oo(e,t){let n={rows:[],flatRows:[],rowsById:J()};return n.rows=Do(e,n,t),n}function ko(e){return e._rowModels.coreRowModel||(e._rowModels.coreRowModel=e.options.features.coreRowModel?.(e)??Eo()(e)),e._rowModels.coreRowModel()}function Ao(e){return e.getCoreRowModel()}function jo(e){return e._rowModels.filteredRowModel||(e._rowModels.filteredRowModel=e.options.features.filteredRowModel?.(e)),e.options.manualFiltering||!e._rowModels.filteredRowModel?e.getPreFilteredRowModel():e._rowModels.filteredRowModel()}function Mo(e){return e.getFilteredRowModel()}function No(e){return e._rowModels.groupedRowModel||(e._rowModels.groupedRowModel=e.options.features.groupedRowModel?.(e)),e.options.manualGrouping||!e._rowModels.groupedRowModel?e.getPreGroupedRowModel():e._rowModels.groupedRowModel()}function Po(e){return e.getGroupedRowModel()}function Fo(e){return e._rowModels.sortedRowModel||(e._rowModels.sortedRowModel=e.options.features.sortedRowModel?.(e)),e.options.manualSorting||!e._rowModels.sortedRowModel?e.getPreSortedRowModel():e._rowModels.sortedRowModel()}function Io(e){return e.getSortedRowModel()}function Lo(e){return e._rowModels.expandedRowModel||(e._rowModels.expandedRowModel=e.options.features.expandedRowModel?.(e)),e.options.manualExpanding||!e._rowModels.expandedRowModel?e.getPreExpandedRowModel():e._rowModels.expandedRowModel()}function Ro(e){return e.getExpandedRowModel()}function zo(e){return e._rowModels.paginatedRowModel||(e._rowModels.paginatedRowModel=e.options.features.paginatedRowModel?.(e)),e.options.manualPagination||!e._rowModels.paginatedRowModel?e.getPrePaginatedRowModel():e._rowModels.paginatedRowModel()}function Bo(e){return e.getPaginatedRowModel()}var Vo={constructTableAPIs:e=>{Y(`coreRowModelsFeature`,e,{table_getCoreRowModel:{fn:()=>ko(e)},table_getPreFilteredRowModel:{fn:()=>Ao(e)},table_getFilteredRowModel:{fn:()=>jo(e)},table_getPreGroupedRowModel:{fn:()=>Mo(e)},table_getGroupedRowModel:{fn:()=>No(e)},table_getPreSortedRowModel:{fn:()=>Po(e)},table_getSortedRowModel:{fn:()=>Fo(e)},table_getPreExpandedRowModel:{fn:()=>Io(e)},table_getExpandedRowModel:{fn:()=>Lo(e)},table_getPrePaginatedRowModel:{fn:()=>Ro(e)},table_getPaginatedRowModel:{fn:()=>zo(e)},table_getRowModel:{fn:()=>Bo(e)}})}};function Ho(e){if(!e._cellPrototype){e._cellPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignCellPrototype?.(e._cellPrototype,e)}return e._cellPrototype}function Uo(e,t,n){let r=Ho(n),i=Object.create(r);i.column=e,i.id=`${t.id}_${e.id}`,i.row=t;let a=n._cellInstanceInitFns;for(let e=0;e<a.length;e++)a[e](i);return i}function Wo(e){let t=e.table.getRowsInDisplayOrder(),n=e._displayIndexCache;return t[n]===e?n:-1}function Go(e){let t=e.getPrePaginatedRowModel().rows;if(e.options.paginateExpandedRows===!1){let e=[],n=t=>{t._displayIndexCache=e.length,e.push(t),t.subRows.length&&t.getIsExpanded?.()&&t.subRows.forEach(n)};return t.forEach(n),e}for(let e=0;e<t.length;e++)t[e]._displayIndexCache=e;return t}function Ko(e,t){if(di(e._valuesCache,t))return e._valuesCache[t];let n=e.table.getColumn(t);if(n?.accessorFn)return e._valuesCache[t]=n.accessorFn(e.original,e.index),e._valuesCache[t]}function qo(e,t){if(di(e._uniqueValuesCache,t))return e._uniqueValuesCache[t];let n=e.table.getColumn(t);if(n?.accessorFn)return n.columnDef.getUniqueValues?(e._uniqueValuesCache[t]=n.columnDef.getUniqueValues(e.original,e.index),e._uniqueValuesCache[t]):(e._uniqueValuesCache[t]=[e.getValue(t)],e._uniqueValuesCache[t])}function Jo(e,t){return e.getValue(t)??e.table.options.renderFallbackValue}function Yo(e){return bi(e.subRows,e=>e.subRows)}function Xo(e){let t=e.getCoreRowModel().flatRows,n=0;for(let e=0;e<t.length;e++)n=Math.max(n,t[e].depth);return n}function Zo(e){if(e.parentId)return e.table.getCoreRowModel().rowsById[e.parentId]??e.table.getRow(e.parentId,!0)}function Qo(e){let t=[],n=e;for(;;){let e=n.getParentRow();if(!e)break;t.push(e),n=e}return t.reverse()}function $o(e){let t=e.table.getAllLeafColumns(),n=e._cellsCache;n||=e._cellsCache=new WeakMap;let r=Array(t.length);for(let i=0;i<t.length;i++){let a=t[i],o=n.get(a);o||(o=Uo(a,e,e.table),n.set(a,o)),r[i]=o}return r}function es(e){let t=J(),n=e.getAllCells();for(let e=0;e<n.length;e++){let r=n[e];t[r.column.id]=r}return t}function ts(e,t,n,r){return t.options.getRowId?.(e,n,r)??(r?`${r.id}.${n}`:String(n))}function ns(e,t,n){let r=(n?e.getPrePaginatedRowModel():e.getRowModel()).rowsById[t];if(!r&&(r=e.getCoreRowModel().rowsById[t],!r))throw Error();return r}var rs={assignRowPrototype:(e,t)=>{X(`coreRowsFeature`,e,t,{row_getDisplayIndex:{fn:e=>Wo(e)},row_getAllCellsByColumnId:{fn:e=>es(e),memoDeps:e=>[e.getAllCells()]},row_getAllCells:{fn:e=>$o(e),memoDeps:e=>[e.table.getAllLeafColumns()]},row_getLeafRows:{fn:e=>Yo(e),memoDeps:e=>[e.subRows]},row_getParentRow:{fn:e=>Zo(e)},row_getParentRows:{fn:e=>Qo(e)},row_getUniqueValues:{fn:(e,t)=>qo(e,t)},row_getValue:{fn:(e,t)=>Ko(e,t)},row_renderValue:{fn:(e,t)=>Jo(e,t)}})},constructTableAPIs:e=>{Y(`coreRowsFeature`,e,{table_getRowsInDisplayOrder:{fn:()=>Go(e),memoDeps:()=>[e.getPrePaginatedRowModel().rows,e.options.paginateExpandedRows,e.options.paginateExpandedRows===!1?e.atoms.expanded?.get():void 0]},table_getRowId:{fn:(t,n,r)=>ts(t,e,n,r)},table_getRow:{fn:(t,n)=>ns(e,t,n)},table_getMaxSubRowDepth:{fn:()=>Xo(e),memoDeps:()=>[e.getCoreRowModel()]}})}};function is(e,t,n=(e,t)=>e===t){let r=t===void 0?e.options.state:t;e._reactivity.batch(()=>{if(r)for(let t in r){let i=e.baseAtoms[t];if(!i)continue;let a=r[t],o=a===void 0?e.initialState[t]:a;n(e._reactivity.untrack(()=>i.get()),o)||i.set(()=>o)}})}function as(e,t,n=(e,t)=>e===t){e._reactivity.batch(()=>{is(e,t,n),e._reactivity.commit?.()})}function os(e){let t=q(e.initialState);e._reactivity.batch(()=>{let n=Object.keys(t);for(let r=0;r<n.length;r++){let i=n[r];e.baseAtoms[i].set(t[i])}});let n=Object.values(e._features);for(let t=0;t<n.length;t++)n[t].resetTableInstanceData?.(e)}function ss(e,t){let{features:n,atoms:r,initialState:i}=e.options;if(!e.options.mergeOptions)return{...e.options,...t,features:n,atoms:r,initialState:i};let a=e.options.mergeOptions(e.options,t),o={...Object.getOwnPropertyDescriptors(a)};return Object.defineProperties(Object.create(Object.getPrototypeOf(a)),{...o,features:{value:n,enumerable:!0,configurable:!0,writable:!0},atoms:{value:r,enumerable:!0,configurable:!0,writable:!0},initialState:{value:i,enumerable:!0,configurable:!0,writable:!0}})}function cs(e,t,n){let r=ss(e,li(t,e.options));e.optionsStore?e.optionsStore.set(()=>r):e.options=r,n?.syncExternalState!==!1&&as(e,r.state??null)}var ls={coreCellsFeature:Oi,coreColumnsFeature:pa,coreHeadersFeature:xa,coreRowModelsFeature:Vo,coreRowsFeature:rs,coreTablesFeature:{constructTableAPIs:e=>{Y(`coreTablesFeature`,e,{table_reset:{fn:()=>os(e)},table_setOptions:{fn:t=>cs(e,t)}})}}};function us(e){return e}function ds(e,t={}){return Object.values(e).forEach(e=>{t=e.getInitialState?.(t)??t}),q(t)}function fs(e){let t=e.features.coreReactivityFeature,{aggregationFns:n,columnMeta:r,coreRowModel:i,expandedRowModel:a,facetedMinMaxValues:o,facetedRowModel:s,facetedUniqueValues:c,filterFns:l,filterMeta:u,filteredRowModel:d,groupedRowModel:f,paginatedRowModel:p,sortFns:m,sortedRowModel:h,tableMeta:g,..._}=e.features,v={_cellInstanceInitFns:[],_columnInstanceInitFns:[],_features:{...ls,..._},_headerGroupInstanceInitFns:[],_headerInstanceInitFns:[],_reactivity:t,_rowInstanceInitFns:[],_rowModelFns:{aggregationFns:n,filterFns:l,sortFns:m},_rowModels:{},atoms:{},baseAtoms:{}},y=Object.values(v._features),b={...y.reduce((e,t)=>Object.assign(e,t.getDefaultTableOptions?.(v)),{}),...e};if(t.wrapExternalAtoms&&b.atoms)for(let[e,n]of Object.entries(b.atoms)){let r=n,i=t.createWritableAtom(r.get(),{debugName:`externalAtom/${e}`});b.atoms[e]=i;let a=!1,o=r.subscribe(e=>{a||i.set(e)}),s=i.subscribe(e=>{a=!0,r.set(e),a=!1});t.addSubscription(o),t.addSubscription(s)}t.createOptionsStore?(v.optionsStore=t.createWritableAtom(b,{debugName:`table/optionsStore`}),Object.defineProperty(v,"options",{configurable:!0,enumerable:!0,get(){return v.optionsStore.get()},set(e){v.optionsStore.set(()=>e)}})):v.options=b,v.initialState=ds(v._features,v.options.initialState);let x=Object.keys(v.initialState);for(let e=0;e<x.length;e++){let n=x[e];v.baseAtoms[n]=t.createWritableAtom(v.initialState[n],{debugName:`table/baseAtoms/${n}`}),v.atoms[n]=t.createReadonlyAtom(()=>{let e=v.options,t=e.atoms?.[n],r=t?t.get():v.baseAtoms[n].get();if(t)return r;let i=e.state;if(i&&di(i,n)){let e=i[n];return e===void 0?v.initialState[n]:e}return r},{debugName:`table/atoms/${n}`})}is(v),v.store=ai(t.createReadonlyAtom(()=>{let e={};for(let t=0;t<x.length;t++){let n=x[t];e[n]=v.atoms[n].get()}return e},{compare:$r,debugName:`table/store`}));for(let e=0;e<y.length;e++){let t=y[e];t.initTableInstanceData?.(v),t.initCellInstanceData&&v._cellInstanceInitFns.push(t.initCellInstanceData.bind(t)),t.initColumnInstanceData&&v._columnInstanceInitFns.push(t.initColumnInstanceData.bind(t)),t.initHeaderGroupInstanceData&&v._headerGroupInstanceInitFns.push(t.initHeaderGroupInstanceData.bind(t)),t.initHeaderInstanceData&&v._headerInstanceInitFns.push(t.initHeaderInstanceData.bind(t)),t.initRowInstanceData&&v._rowInstanceInitFns.push(t.initRowInstanceData.bind(t)),t.constructTableAPIs?.(v)}return v}var ps={getInitialState:e=>({columnVisibility:Mi(),...e}),getDefaultTableOptions:e=>({onColumnVisibilityChange:fi(`columnVisibility`,e)}),assignColumnPrototype:(e,t)=>{X(`columnVisibilityFeature`,e,t,{column_getIsVisible:{fn:e=>Q(e),memoDeps:e=>[t.options.columns,t.atoms.columnVisibility?.get(),e.columns]},column_getCanHide:{fn:e=>Pi(e)},column_getToggleVisibilityHandler:{fn:e=>Fi(e)},column_toggleVisibility:{fn:(e,t)=>Ni(e,t)}})},assignRowPrototype:(e,t)=>{X(`columnVisibilityFeature`,e,t,{row_getVisibleCells:{fn:e=>Ii(e),memoDeps:e=>[e.getAllCells(),t.atoms.columnPinning?.get(),t.atoms.columnVisibility?.get()]},row_getVisibleCellsByColumnId:{fn:e=>Li(e),memoDeps:e=>[e.getAllCells(),t.atoms.columnVisibility?.get()]}})},constructTableAPIs:e=>{Y(`columnVisibilityFeature`,e,{table_getVisibleFlatColumns:{fn:()=>Ri(e),memoDeps:()=>[e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_getVisibleLeafColumns:{fn:()=>zi(e),memoDeps:()=>[e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_setColumnVisibility:{fn:t=>Bi(e,t)},table_resetColumnVisibility:{fn:t=>Vi(e,t)},table_toggleAllColumnsVisible:{fn:t=>Hi(e,t)},table_getIsAllColumnsVisible:{fn:()=>Ui(e)},table_getIsSomeColumnsVisible:{fn:()=>Wi(e)},table_getToggleAllColumnsVisibilityHandler:{fn:()=>Gi(e)}})}},ms={getInitialState:e=>({...e,pagination:{...Ga(),...e.pagination}}),getDefaultTableOptions:e=>({onPaginationChange:fi(`pagination`,e)}),constructTableAPIs:e=>{Y(`rowPaginationFeature`,e,{table_autoResetPageIndex:{fn:()=>Ka(e)},table_setPagination:{fn:t=>qa(e,t)},table_resetPagination:{fn:t=>Ja(e,t)},table_setPageIndex:{fn:t=>Ya(e,t)},table_resetPageIndex:{fn:t=>Xa(e,t)},table_setPageSize:{fn:t=>Qa(e,t)},table_getPageCount:{fn:()=>so(e)},table_resetPageSize:{fn:t=>Za(e,t)},table_getPageOptions:{fn:()=>$a(e)},table_getCanPreviousPage:{fn:()=>eo(e)},table_getCanNextPage:{fn:()=>to(e)},table_getCanLastPage:{fn:()=>no(e)},table_previousPage:{fn:()=>ro(e)},table_nextPage:{fn:()=>io(e)},table_firstPage:{fn:()=>ao(e)},table_lastPage:{fn:()=>oo(e)},table_getRowCount:{fn:()=>co(e)}})}},hs={getInitialState(e){return{sorting:lo(),...e}},getDefaultColumnDef(){return{sortFn:`auto`,sortUndefined:1}},getDefaultTableOptions(e){return{autoResetSorting:!1,onSortingChange:fi(`sorting`,e),isMultiSortEvent:e=>e.shiftKey}},assignColumnPrototype(e,t){X(`rowSortingFeature`,e,t,{column_getAutoSortFn:{fn:e=>mo(e)},column_getAutoSortDir:{fn:e=>ho(e)},column_getSortFn:{fn:e=>go(e)},column_toggleSorting:{fn:(e,t,n)=>_o(e,t,n)},column_getFirstSortDir:{fn:e=>vo(e)},column_getNextSortingOrder:{fn:(e,t)=>yo(e,t)},column_getCanSort:{fn:e=>bo(e)},column_getCanMultiSort:{fn:e=>xo(e)},column_getIsSorted:{fn:e=>So(e)},column_getSortIndex:{fn:e=>Co(e)},column_clearSorting:{fn:e=>wo(e)},column_getToggleSortingHandler:{fn:e=>To(e)}})},constructTableAPIs(e){Y(`rowSortingFeature`,e,{table_setSorting:{fn:t=>uo(e,t)},table_resetSorting:{fn:t=>fo(e,t)}})}};function gs(e){let t=[],n=e=>{t.push(e),e.subRows.length&&Ha(e)&&e.subRows.forEach(n)};return e.rows.forEach(n),{rows:t,flatRows:e.flatRows,rowsById:e.rowsById}}function _s(){return e=>{let t=e;return Ci({feature:`rowPaginationFeature`,table:t,fnName:`table.getPaginatedRowModel`,memoDeps:()=>[t.getPrePaginatedRowModel(),t.atoms.pagination?.get(),t.options.paginateExpandedRows?void 0:t.atoms.expanded?.get()],fn:()=>vs(t)})}}function vs(e){let t=e.getPrePaginatedRowModel(),n=e.atoms.pagination?.get();if(!t.rows.length)return t;let{pageSize:r,pageIndex:i}=n??Ga(),{rows:a,flatRows:o,rowsById:s}=t,c=a;if(r!==1/0||i!==0){let e=r*i,t=e+r;c=a.slice(e,t)}let l;l=e.options.paginateExpandedRows?{rows:c,flatRows:o,rowsById:s}:gs({rows:c,flatRows:o,rowsById:s}),l.flatRows=[];let u=new Set,d=e=>{u.has(e.id)||(u.add(e.id),l.flatRows.push(e),e.subRows.length&&e.subRows.forEach(d))};return l.rows.forEach(d),l}function ys(){return e=>{let t=e;return Ci({feature:`rowSortingFeature`,table:t,fnName:`table.getSortedRowModel`,memoDeps:()=>[t.atoms.sorting?.get(),t.getPreSortedRowModel()],fn:()=>bs(t),onAfterUpdate:Si(()=>Ka(t))})}}function bs(e){let t=e.getPreSortedRowModel(),n=e.atoms.sorting?.get();if(!t.rows.length||!n?.length)return t;let r=[],i=n.filter(t=>{let n=e.getColumn(t.id);return n?bo(n):!1});if(!i.length)return t;let a=[];for(let t=0;t<i.length;t++){let n=i[t],r=e.getColumn(n.id);r&&a.push({id:n.id,desc:n.desc,sortUndefined:r.columnDef.sortUndefined,invertSorting:r.columnDef.invertSorting,sortFn:go(r)})}let o=(e,t)=>{for(let n=0;n<a.length;n++){let r=a[n],i=r.sortUndefined,o=r.desc,s=0;if(i){let n=e.getValue(r.id),a=t.getValue(r.id),o=n===void 0,c=a===void 0;if(o&&c)continue;if(o||c){if(i===`first`)return o?-1:1;if(i===`last`)return o?1:-1;s=o?i:-i}}if(s===0&&(s=r.sortFn(e,t,r.id)),s!==0)return o&&(s*=-1),r.invertSorting&&(s*=-1),s}return e.index-t.index},s=e=>{let t=e.slice();t.sort(o);let n=!1;for(let i=0;i<t.length;i++){let a=t[i];a!==e[i]&&(n=!0);let o=r.length;if(r.push(a),a.subRows.length){let e=s(a.subRows);if(e.changed){let s=Object.create(Object.getPrototypeOf(a));ui(s,a),s.subRows=e.rows,t[i]=s,r[o]=s,n=!0}}}return{rows:t,changed:n}};return{rows:s(t.rows).rows,flatRows:r,rowsById:t.rowsById}}var xs=typeof window>`u`?H.useEffect:H.useLayoutEffect;function Ss(e,t){let[{table:n,rootSource:r}]=(0,H.useState)(()=>{let t=fs({...e,features:{coreReactivityFeature:ci(),...e.features}});return t.Subscribe=(e=>ii({...e,source:e.source??t.store})),t.FlexRender=Fr,{table:t,rootSource:si(t.store,$r)}}),i=n;cs(i,t=>({...t,...e}),{syncExternalState:!1});let a=i.options.state,o=r.get(),s=ri(r,t,{compare:$r});return xs(()=>{r.markCommitted(o),as(i,a??null,$r)}),(0,H.useMemo)(()=>({...n,options:e,state:s}),[n,e,s])}var Cs=us({columnVisibilityFeature:ps,rowSortingFeature:hs,rowPaginationFeature:ms,sortedRowModel:ys(),paginatedRowModel:_s()}),ws=10,Ts=10,Es=new Set([`duration`,`taskCount`,`shuffleRead`,`fetchWait`,`gcPct`,`skew`,`spill`]);function Ds(e,t){return e.length>t?`${e.slice(0,t)}…`:e}function Os(e){return e<=0?(0,U.jsx)(U.Fragment,{children:`0`}):(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[e,` `,(0,U.jsx)(ft,{label:`RETRY`,impactBand:`critical`})]})}function ks(e,t,n){if(e<=0)return(0,U.jsx)(U.Fragment,{children:`—`});let r=B(e);if(t<=0)return(0,U.jsx)(U.Fragment,{children:r});let i=e/t;return i>.3?(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[r,` `,(0,U.jsx)(ft,{label:n===`advanced`?`${Math.round(i*100)}%`:`High`,impactBand:`critical`})]}):i>.15?(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[r,` `,(0,U.jsx)(ft,{label:n===`advanced`?`${Math.round(i*100)}%`:`Elevated`,impactBand:`info`})]}):(0,U.jsx)(U.Fragment,{children:r})}function As(e,t){if(!e||e<=0||!t||t<=0)return(0,U.jsx)(U.Fragment,{children:`—`});let n=t/e,r=n<.01?`${n.toExponential(1)}×`:`${n.toFixed(2)}×`;return n>2||n<.1?(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[r,` `,(0,U.jsx)(ft,{label:`extreme`,impactBand:`info`})]}):(0,U.jsx)(U.Fragment,{children:r})}function js(e,t){if(e<=0)return(0,U.jsx)(U.Fragment,{children:`—`});let n=t??`unclassified`;return(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[R(e),` `,(0,U.jsx)(ft,{label:ot[n],impactBand:`warning`,title:lt[n]})]})}function Ms(e,t){return!e||e<=0?0:(t??0)/e}function Ns(e){let t=new Map;for(let n of e)t.has(n.type)||t.set(n.type,[]),t.get(n.type).push(n);return[...t.values()].map(e=>{let t=mt(e);return e.find(e=>e.impactBand===t)??e[0]})}function Ps({appModel:e,catalog:t,getTaskData:n,onRoute:r}){let{openStage:i}=it(),a=Ke(),[o,s]=(0,H.useState)(!1),[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)([]),[f,p]=(0,H.useState)({pageIndex:0,pageSize:ws}),{catalogByStage:m,flaggedStageIds:h,frequency:g}=(0,H.useMemo)(()=>{let e=new Map,n=new Set;for(let r of t)r.stageId!=null&&(n.add(r.stageId),e.has(r.stageId)||e.set(r.stageId,[]),e.get(r.stageId).push(r));return{catalogByStage:e,flaggedStageIds:n,frequency:Je(t)}},[t]),_=(0,H.useMemo)(()=>{let t=[...e.stages.values()],n=o?t.filter(e=>h.has(e.id)):[...t].sort((e,t)=>(t.completedAt??0)-(t.submittedAt??0)-((e.completedAt??0)-(e.submittedAt??0))).slice(0,Ts),r=c.trim().toLowerCase();return(r?n.filter(e=>(e.name??``).toLowerCase().includes(r)||String(e.id).includes(r)):n).map(e=>({stage:e,tags:Ns(m.get(e.id)??[]),frequency:g.get(e.id)??0}))},[e.stages,o,h,m,g,c]),v=(0,H.useMemo)(()=>{if(!r)return null;let e=new Map;for(let n of t){let r=$n(n,t);r&&e.set(n,r)}return e},[t,r]),y=(0,H.useMemo)(()=>[{id:`id`,header:`Stage`,accessorFn:e=>e.stage.id,cell:({getValue:e})=>{let t=e();return(0,U.jsx)(`button`,{type:`button`,"aria-label":`Open Stage ${t} details`,className:`inline-flex cursor-pointer items-center rounded-sm hover:underline underline-offset-2 focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:e=>{e.stopPropagation(),i(t)},children:(0,U.jsx)(`strong`,{children:t})})}},{id:`name`,header:`Operation`,accessorFn:e=>e.stage.name??``,cell:({row:e})=>{let t=e.original.stage.id;return(0,U.jsxs)(`span`,{className:`inline-flex flex-wrap items-center gap-1.5`,children:[Ds(e.original.stage.name??``,40),e.original.tags.map((e,n)=>{let i=v?v.get(e)??null:null,a=i&&r?{target:i,onRoute:r}:null,o=wt(e.impactEstimate);return(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[a?(0,U.jsx)(`button`,{type:`button`,"aria-label":`Investigate ${a.target.findingLabel} in Stage ${t}`,title:`Investigate ${a.target.findingLabel} in Stage ${t}`,className:`inline-flex cursor-pointer items-center rounded-full hover:underline underline-offset-2 focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:e=>{e.stopPropagation(),a.onRoute(a.target)},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&e.stopPropagation()},children:(0,U.jsx)(Ue,{type:e.type,impactBand:e.impactBand,plainBadge:!0})}):(0,U.jsx)(Ue,{type:e.type,impactBand:e.impactBand}),o?(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:o}):null]},n)})]})}},{id:`type`,header:`Type`,accessorFn:e=>e.stage.stageType??``,cell:({row:e})=>(0,U.jsx)(tt,{variant:`outline`,children:e.original.stage.stageType??`—`})},{id:`duration`,header:`Duration`,accessorFn:e=>(e.stage.completedAt??0)-(e.stage.submittedAt??0),cell:({getValue:e})=>(0,U.jsx)(U.Fragment,{children:B(e())})},{id:`taskCount`,header:`Tasks`,accessorFn:e=>e.stage.taskCount},{id:`retried`,header:`Retried`,accessorFn:e=>e.stage.failedTasks??0,cell:({getValue:e})=>Os(e())},{id:`shuffleRead`,header:`Shuffle Read`,accessorFn:e=>e.stage.shuffleReadBytes??0,cell:({getValue:e})=>(0,U.jsx)(U.Fragment,{children:R(e())})},{id:`fetchWait`,header:`Fetch Wait`,accessorFn:e=>e.stage.fetchWaitTime??0,cell:({row:e})=>ks(e.original.stage.fetchWaitTime??0,e.original.stage.executorRunTime??0,a)},...a===`advanced`?[{id:`ioRatio`,header:`I/O Ratio`,accessorFn:e=>e.stage.inputBytes?(e.stage.outputBytes??0)/e.stage.inputBytes:0,cell:({row:e})=>As(e.original.stage.inputBytes??0,e.original.stage.outputBytes??0)}]:[],{id:`spill`,header:`Spill (mem)`,accessorFn:e=>e.stage.memoryBytesSpilled??0,cell:({row:e})=>js(e.original.stage.memoryBytesSpilled??0,e.original.stage.spillClassification)},...a===`advanced`?[{id:`gcPct`,header:`GC%`,accessorFn:e=>e.stage.gcPct??0,cell:({getValue:e})=>(0,U.jsxs)(U.Fragment,{children:[e().toFixed(1),`%`]})},{id:`skew`,header:`Skew P95/median`,accessorFn:e=>Ms(e.stage.taskDurationP50,e.stage.taskDurationP95),cell:({getValue:e})=>{let t=e();return(0,U.jsx)(U.Fragment,{children:t>0?`${t.toFixed(1)}×`:`—`})}}]:[],{id:`frequency`,header:`Flagged`,accessorFn:e=>e.frequency,cell:({getValue:e})=>{let t=e();return t<=1?(0,U.jsx)(U.Fragment,{children:`—`}):(0,U.jsx)(tt,{variant:`outline`,children:`Flagged by ${t}`})}}],[t,r,v,i,a]),b=Ss({features:Cs,data:_,columns:y,state:{sorting:u,pagination:f},sortDescFirst:!1,onSortingChange:d,onPaginationChange:p});function x(){s(e=>!e),d([]),p({pageIndex:0,pageSize:ws})}let S=e=>e===`asc`?` ▲`:e===`desc`?` ▼`:``,C=e=>e===`asc`?`ascending`:e===`desc`?`descending`:`none`;return(0,U.jsx)(I,{title:`Stage Summary`,children:(0,U.jsxs)(`div`,{className:`space-y-3`,children:[(0,U.jsx)(oe,{type:`text`,value:c,onChange:e=>{l(e.target.value),p(e=>({...e,pageIndex:0}))},placeholder:`Filter by stage name or ID…`,"aria-label":`Filter by stage name or ID`,className:`max-w-xs`}),(0,U.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Scroll sideways to see all columns →`}),(0,U.jsx)(Ve,{type:`button`,variant:`outline`,size:`sm`,onClick:x,children:o?`Top ${Ts} by duration`:`Problems only`})]}),(0,U.jsxs)(`p`,{className:`sr-only`,role:`status`,"aria-live":`polite`,children:[`Showing `,_.length,` stage`,_.length===1?``:`s`,`: `,` `,o?`problems only`:`top ${Ts} by duration`,`.`]}),(0,U.jsxs)(rt,{children:[(0,U.jsx)(pt,{children:b.getHeaderGroups().map(e=>(0,U.jsx)(F,{children:e.headers.map(e=>{let t=e.column.getIsSorted(),n=e.column.getToggleSortingHandler();return(0,U.jsxs)(ut,{scope:`col`,tabIndex:e.column.getCanSort()?0:void 0,"aria-sort":C(t),className:N(e.column.getCanSort()&&`tap-target-comfortable cursor-pointer select-none`,Es.has(e.column.id)&&`text-right`),onClick:n,onKeyDown:e=>{n&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n(e))},children:[G(e.column.columnDef.header,e.getContext()),S(t)]},e.id)})},e.id))}),(0,U.jsx)($e,{children:b.getRowModel().rows.length===0?(0,U.jsx)(F,{children:(0,U.jsx)(P,{colSpan:y.length,className:`text-muted-foreground`,children:(0,U.jsxs)(`span`,{className:`flex items-center justify-center gap-2 py-2`,children:[(0,U.jsx)(je,{"aria-hidden":`true`,className:`size-4 shrink-0`}),`No stages to show.`]})})}):b.getRowModel().rows.map(e=>(0,U.jsx)(F,{className:`cursor-pointer`,onClick:()=>i(e.original.stage.id),children:e.getVisibleCells().map(e=>(0,U.jsx)(P,{className:Es.has(e.column.id)?`text-right`:void 0,children:G(e.column.columnDef.cell,e.getContext())},e.id))},e.id))})]}),b.getPageCount()>1?(0,U.jsxs)(`div`,{className:`flex items-center justify-end gap-2 text-xs`,children:[(0,U.jsx)(Ve,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:()=>b.previousPage(),disabled:!b.getCanPreviousPage(),children:`Previous`}),(0,U.jsxs)(`span`,{className:`text-muted-foreground`,children:[`Page `,f.pageIndex+1,` of `,b.getPageCount()]}),(0,U.jsx)(Ve,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:()=>b.nextPage(),disabled:!b.getCanNextPage(),children:`Next`})]}):null]})})}var Fs=20,Is=24,Ls=40,Rs=200,zs=640;function Bs(e,t=Fs){let n=[...e].filter(e=>e.submittedAt&&e.completedAt),r=n.length;return r<=t?{stages:n.sort((e,t)=>e.submittedAt-t.submittedAt),total:r,capped:!1}:{stages:[...n].sort((e,t)=>t.completedAt-t.submittedAt-(e.completedAt-e.submittedAt)).slice(0,t).sort((e,t)=>e.submittedAt-t.submittedAt),total:r,capped:!0}}function Vs({appModel:e,catalog:t}){let{openStage:n}=it(),r=[...e.stages.values()].filter(e=>e.submittedAt&&e.completedAt),i=r.length,o=r.reduce((e,t)=>Math.min(e,t.submittedAt),1/0),s=e.app?.startTime??(Number.isFinite(o)?o:0),d=new Set(t.filter(e=>e.stageId!=null).map(e=>e.stageId)),m=Ke(),[g,_]=(0,H.useState)(()=>m===`advanced`?i:Fs),{stages:v}=Bs(r,g),y=bt(v).map(e=>({stageId:e.id,label:`Stage ${e.id}`,wait:e.submittedAt-s,duration:e.completedAt-e.submittedAt,flagged:d.has(e.id)})),b=Math.min(zs,Math.max(Rs,y.length*Is+Ls)),x=b-Ls,S=Math.max(1,Math.floor(x/Is)),C=Math.max(1,Math.ceil(y.length/S));return(0,U.jsx)(I,{title:`Job Timeline`,summary:i>0?(0,U.jsx)(V,{value:`${i} stage${i===1?``:`s`}`,context:`${d.size} flagged`}):void 0,children:i===0?(0,U.jsx)(ht,{tone:`neutral`,icon:je,title:`No stages in this run.`}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,U.jsx)(`label`,{htmlFor:`timeline-topn`,children:`showing top`}),(0,U.jsx)(`input`,{id:`timeline-topn`,type:`number`,min:1,max:i,value:Math.min(g,i),onChange:e=>{let t=parseInt(e.target.value,10);Number.isFinite(t)||(t=g),_(Math.max(1,Math.min(i,t)))},className:`w-16 rounded border border-input bg-transparent px-1 py-0.5`,"aria-label":`Number of stages to show`}),(0,U.jsxs)(`span`,{children:[`of `,i,` by duration · flagged in red`]})]}),(0,U.jsx)(O,{ariaLabel:`Job timeline: stage durations by time from app start.`,height:b,table:{caption:`Job timeline: stage durations by time from app start`,columns:[`Stage`,`Start`,`Duration`],rows:y.map(e=>[e.label,B(e.wait),B(e.duration)]),align:[`left`,`right`,`right`]},children:(0,U.jsxs)(l,{data:y,layout:`vertical`,children:[(0,U.jsx)(c,{stroke:j.muted,strokeOpacity:.2,horizontal:!1}),(0,U.jsx)(p,{type:`number`,tickFormatter:e=>`${Math.round(e/1e3)}s`,tick:{fontSize:10},tickCount:10}),(0,U.jsx)(f,{type:`category`,dataKey:`label`,tick:{fontSize:10},width:64,interval:0,tickFormatter:(e,t)=>t%C===0?e:``}),(0,U.jsx)(h,{formatter:(e,t)=>t===`Duration`?B(Number(e)):[null,null]}),(0,U.jsx)(u,{dataKey:`wait`,stackId:`timeline`,fill:`transparent`,name:`Wait`}),(0,U.jsx)(u,{dataKey:`duration`,stackId:`timeline`,name:`Duration`,cursor:`pointer`,onClick:e=>n(e.payload.stageId),children:y.map(e=>(0,U.jsx)(a,{fill:e.flagged?j.critical:j.accent,stroke:e.flagged?j.critical:`none`,strokeWidth:e.flagged?2:0},e.stageId))})]})})]})})}var Hs={present:`present`,disabled:`disabled`,notEmitted:`not emitted`,notApplicable:`not applicable`,outsideEventLog:`outside event log`,unknown:`unknown`},Us={present:`info`,disabled:`warning`,notEmitted:`warning`,notApplicable:`muted`,outsideEventLog:`muted`,unknown:`muted`};function Ws({entry:e}){let t=e.evidence?.count,n=T(),r=`${e.summary}${t==null?``:` · ${t} observed`}`,{tooltipProps:i,srOnlyTooltip:a}=te(r);return(0,U.jsxs)(`li`,{id:`evidence-availability-${e.key}`,tabIndex:-1,ref:t=>n(e.key,t),className:`flex flex-col gap-0.5 rounded-md px-2 py-1 outline-none focus:ring-2 focus:ring-ring`,...i,children:[(0,U.jsxs)(`span`,{className:`flex items-center justify-between gap-2`,children:[(0,U.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,U.jsx)(M,{impactBand:Us[e.state]}),(0,U.jsx)(`span`,{className:`truncate text-sm font-medium`,children:se(e.key)})]}),(0,U.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:Hs[e.state]}),a]}),(0,U.jsx)(L,{children:(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:r})})]})}function Gs(e){return Object.keys(Hs).map(t=>[t,e.filter(e=>e.state===t).length]).filter(([,e])=>e>0).map(([e,t])=>`${t} ${Hs[e]}`).join(` · `)}function Ks({ledger:e}){let{evidenceCardOpen:t,setEvidenceCardOpen:n}=ne();return(0,U.jsx)(I,{title:`Evidence availability`,open:t,onOpenChange:n,summary:(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e?Gs(e.entries):`Unavailable for this restored run`}),children:e?(0,U.jsx)(`ul`,{className:`grid grid-cols-1 gap-x-4 gap-y-0.5 sm:grid-cols-2`,"aria-label":`Evidence availability ledger`,children:e.entries.map(e=>(0,U.jsx)(Ws,{entry:e},e.key))}):(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Evidence availability is unavailable for this restored run.`})})}var qs=64;function Js(e,t){return t>=1?e:`color-mix(in srgb, ${e} ${t*100}%, transparent)`}function Ys(e){return[{key:`startup`,label:`Startup`,value:e.startup,color:j.info,fillOpacity:1},{key:`stagesActive`,label:`Stages active`,value:e.stagesActive,color:j.clean,fillOpacity:1},{key:`gaps`,label:`Scheduler gaps`,value:e.gaps,color:j.warning,fillOpacity:1},{key:`idle`,label:`Idle`,value:e.idle,color:j.muted,fillOpacity:.6}].filter(e=>e.value>0).map(e=>({...e,legendColor:Js(e.color,e.fillOpacity)}))}var Xs=(0,H.memo)(function({appModel:e}){let{app:n,stages:r}=e,a=Le(n,r);if(a.total<=0)return null;let o=Ys(a),s=e=>a.total>0?e/a.total*100:0,c=o.reduce((e,t)=>t.value>e.value?t:e,o[0]),d=[o.reduce((e,t)=>({...e,[t.key]:t.value}),{name:`total`})];return(0,U.jsxs)(I,{title:`Wall-Clock Breakdown`,badges:(0,U.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[B(a.total),` total`]}),summary:(0,U.jsx)(V,{value:`${c.label} ${Math.round(s(c.value))}%`,context:`of ${B(a.total)} total`}),children:[(0,U.jsx)(O,{ariaLabel:`Wall-clock breakdown: ${B(a.total)} total, split across startup, active stages, scheduler gaps and idle time. See the table below for exact values.`,height:qs,table:{caption:`Wall-clock time breakdown`,columns:[`Segment`,`Duration`,`% of total`],rows:o.map(e=>[e.label,B(e.value),`${Math.round(s(e.value))}%`]),align:[`left`,`right`,`right`]},children:(0,U.jsxs)(l,{data:d,layout:`vertical`,stackOffset:`expand`,margin:{top:0,right:0,bottom:0,left:0},children:[(0,U.jsx)(p,{type:`number`,hide:!0,domain:[0,1]}),(0,U.jsx)(f,{type:`category`,dataKey:`name`,hide:!0}),(0,U.jsx)(h,{shared:!1,labelFormatter:()=>``,formatter:(e,t)=>[B(Number(e)),t]}),(0,U.jsx)(i,{wrapperStyle:{fontSize:12},itemSorter:e=>o.findIndex(t=>t.key===e.dataKey),formatter:(e,t)=>{let n=o.find(e=>e.key===t.dataKey);return(0,U.jsx)(`span`,{style:{color:n?.color},children:e})},content:e=>(0,U.jsx)(t,{...e,payload:e.payload?.map(e=>{let t=o.find(t=>t.key===e.dataKey);return t?{...e,color:t.legendColor}:e})})}),o.map(e=>(0,U.jsx)(u,{dataKey:e.key,name:e.label,stackId:`wallclock`,fill:e.color,fillOpacity:e.fillOpacity},e.key))]})}),(0,U.jsx)(L,{children:(0,U.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-3 text-xs text-muted-foreground`,children:o.map(e=>(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,U.jsx)(`span`,{className:`inline-block size-2.5 rounded-sm`,style:{backgroundColor:e.color,opacity:e.fillOpacity}}),e.label,` (`,B(e.value),`)`]},e.key))})})]})}),Zs=36e5,Qs=5,$s={totalCoreHours:null,usefulCoreHours:null,wastedCoreHours:null,totalCores:null,topStages:[]};function ec(e,t=[],n){if(!n||e?.startTime==null||e?.endTime==null)return $s;let r=e.endTime-e.startTime;if(r<=0)return $s;let i=ze(e,t);if(i<=0)return $s;let a=i*r/Zs,o=(n.busyCoreMs??0)/Zs;return{totalCoreHours:a,usefulCoreHours:o,wastedCoreHours:Math.max(0,a-o),totalCores:i,topStages:Object.entries(n.perStage??{}).map(([e,t])=>({stageId:Number(e),coreMs:t?.totalTaskDurationSum??0})).sort((e,t)=>t.coreMs-e.coreMs).slice(0,Qs)}}function tc({appModel:e}){let t=ec(e.app,e.executors.added,e.runAggregates);if(t.totalCoreHours==null)return null;let n=t.totalCoreHours>0?Math.round(t.wastedCoreHours/t.totalCoreHours*100):0;return(0,U.jsx)(I,{title:`Wasted Core-Hours`,statusBadge:(0,U.jsx)(un,{}),defaultCollapsed:!0,summary:(0,U.jsx)(V,{value:(0,U.jsx)(`span`,{className:`whitespace-nowrap`,children:W(t.wastedCoreHours)}),context:`wasted of ${W(t.totalCoreHours)} allocated`}),children:(0,U.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,U.jsxs)(`p`,{children:[`Allocated: `,(0,U.jsx)(`strong`,{children:W(t.totalCoreHours)}),` · Used:`,` `,(0,U.jsx)(`strong`,{children:W(t.usefulCoreHours)})]}),(0,U.jsxs)(`p`,{children:[(0,U.jsx)(M,{impactBand:`info`}),` Wasted: `,(0,U.jsx)(`strong`,{children:W(t.wastedCoreHours)}),` (`,n,`% of allocated)`]}),(0,U.jsx)(L,{children:(0,U.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Allocated = `,t.totalCores,` cores over the run; used = core-time that actually ran tasks.`]})}),t.topStages.length>0&&(0,U.jsxs)(`div`,{className:`space-y-1`,children:[(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Top stages by task core-time`}),(0,U.jsx)(`ul`,{className:`space-y-0.5`,children:t.topStages.map(e=>(0,U.jsxs)(`li`,{className:`flex justify-between gap-2`,children:[(0,U.jsxs)(`span`,{children:[`Stage `,e.stageId]}),(0,U.jsx)(`span`,{className:`text-muted-foreground tabular-nums`,children:W(e.coreMs/36e5)})]},e.stageId))})]})]})})}function nc({appModel:e,catalog:t,getTaskData:n,activeFileId:r,onRoute:i}){return(0,U.jsxs)(`div`,{className:`space-y-6`,children:[(0,U.jsx)(`h2`,{className:`sr-only`,children:`Full app report`}),(0,U.jsx)(Xs,{appModel:e}),(0,U.jsx)(Vs,{appModel:e,catalog:t}),(0,U.jsx)(_n,{appModel:e,activeFileId:r}),(0,U.jsx)(Ps,{appModel:e,catalog:t,getTaskData:n,onRoute:i}),(0,U.jsxs)(at,{children:[(0,U.jsx)(z,{cardId:`reference-evidence-availability`,collapsedTile:!0,children:(0,U.jsx)(Ks,{ledger:e.evidenceAvailability})}),(0,U.jsx)(z,{cardId:`reference-etl-phases`,collapsedTile:!0,children:(0,U.jsx)(mn,{appModel:e})}),(0,U.jsx)(z,{cardId:`reference-scaling-sim`,collapsedTile:!0,children:(0,U.jsx)(kn,{appModel:e})}),(0,U.jsx)(z,{cardId:`reference-efficiency-model`,collapsedTile:!0,children:(0,U.jsx)(dn,{appModel:e})}),(0,U.jsx)(z,{cardId:`reference-wasted-core-hours`,collapsedTile:!0,children:(0,U.jsx)(tc,{appModel:e})}),(0,U.jsx)(z,{cardId:`reference-core-usage-histogram`,collapsedTile:!0,children:(0,U.jsx)(on,{appModel:e,getTaskData:n})})]})]})}function rc({appModel:e,catalog:t,configFindings:n,getTaskData:r,activeFileId:i,options:a,onRoute:o,activeTab:s,onActiveTabChange:c}){let{selection:l}=Jt(),u=(0,H.useMemo)(()=>Bt(t,l),[t,l]),d=(0,H.useMemo)(()=>Bt(n??[],l),[n,l]),f=u.length+d.length,p=t.length+(n??[]).length>0&&f===0;return(0,U.jsxs)(`main`,{className:`flex-1 space-y-6 p-4`,children:[(0,U.jsx)(en,{options:a,resultCount:f}),p&&(0,U.jsx)(Yt,{}),(0,U.jsx)(Rn,{appModel:e,catalog:u}),!p&&(0,U.jsxs)(ce,{value:s,onValueChange:e=>c(e),children:[(0,U.jsxs)(ee,{variant:`chrome`,"aria-label":`Report view`,children:[(0,U.jsx)(le,{value:`findings`,className:`tap-target-comfortable`,children:`Findings`}),(0,U.jsx)(le,{value:`full-report`,className:`tap-target-comfortable`,children:`Full app report`})]}),(0,U.jsxs)(Ae,{value:`findings`,keepMounted:!0,children:[(0,U.jsx)(`h2`,{className:`sr-only`,children:`Findings`}),(0,U.jsx)(xr,{appModel:e,catalog:u,configFindings:d,stages:e.stages,getTaskData:r,activeFileId:i,onRoute:o})]}),(0,U.jsx)(Ae,{value:`full-report`,keepMounted:!0,children:(0,U.jsx)(nc,{appModel:e,catalog:u,getTaskData:r,configFindings:d,activeFileId:i,onRoute:o})})]})]})}function ic(){let{resetToDropZone:e,startLoad:t,getTaskData:n}=Re(),r=He(e=>e.appModel),i=He(e=>e.catalog),a=He(e=>e.activeFileId),o=He(e=>e.exportMode),{recentEntries:s,onPickRecent:c,onRemoveRecent:l}=Te(a),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(`findings`),{referenceOpen:m}=ne(),[h,g]=(0,H.useState)(null),[_,v]=(0,H.useState)(null),[y,b]=(0,H.useState)(null),x=(0,H.useRef)(0),S=(0,H.useRef)(null),C=(0,H.useRef)(null),ee=(0,H.useRef)(new Map),te=(0,H.useRef)(new Map),w=(0,H.useRef)(null),re=h?.target??null;(0,H.useEffect)(()=>()=>{w.current&&clearTimeout(w.current)},[]),(0,H.useEffect)(()=>{m&&p(`full-report`)},[m]);let T=(0,H.useCallback)(e=>{S.current?.token===e&&(S.current=null,C.current=null,g(t=>t?.token===e?null:t))},[]),E=(0,H.useCallback)(e=>{if(S.current?.token!==e.token)return null;let{catalog:t,activeFileId:n}=Be.getState();if(C.current!==n)return null;let r=$n(e.target.finding,t);return!r||r.widgetId!==e.target.widgetId||r.region!==e.target.region?null:r},[]),ie=(0,H.useCallback)(e=>{p(`findings`);let t=x.current+1;x.current=t;let{catalog:n,activeFileId:r}=Be.getState(),i=$n(e.finding,n);if(!i||i.widgetId!==e.widgetId||i.region!==e.region){S.current=null,C.current=null,g(null);return}let a={target:i,token:t};S.current=a,C.current=r,g(a)},[]),ae=(0,H.useCallback)((e,t)=>{ee.current.set(e,t);let n=S.current;return n?.target.widgetId===e&&E(n)&&t.open(),()=>{ee.current.get(e)===t&&ee.current.delete(e)}},[E]),oe=(0,H.useCallback)((e,t)=>(te.current.set(e,t),()=>{te.current.get(e)===t&&te.current.delete(e)}),[]),se=(0,H.useCallback)((e,t)=>{if(!t)return;let n=S.current;if(!n||n.target.widgetId!==e)return;let r=E(n);if(!r){T(n.token);return}let i=ee.current.get(e);if(!i)return;let a=i.getDisclosureButton();if(!a){T(n.token);return}let o=window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,s=te.current.get(r.finding);s?(s.scrollIntoView({behavior:o?`auto`:`smooth`,block:`center`,inline:`nearest`}),s.focus({preventScroll:!0}),w.current&&clearTimeout(w.current),b(r.finding),w.current=setTimeout(()=>{w.current=null,b(null)},2e3)):(i.wrapperElement.scrollIntoView({behavior:o?`auto`:`smooth`,block:`start`,inline:`nearest`}),a.focus({preventScroll:!0}),v(e)),T(n.token)},[T,E]),ce=(0,H.useCallback)(e=>{v(t=>t===e?null:t)},[]);(0,H.useLayoutEffect)(()=>{if(!h)return;let e=E(h);if(!e){T(h.token);return}ee.current.get(e.widgetId)?.open()},[T,E,h]),(0,H.useLayoutEffect)(()=>{let e=S.current;e&&!E(e)&&T(e.token)},[a,i,T,E]);let D=He(e=>e.configFindings),O=(0,H.useMemo)(()=>Vt(i,D),[i,D]);return(0,U.jsxs)(`div`,{"data-testid":`dashboard`,className:`relative flex min-h-screen flex-col`,style:{paddingRight:`var(--docs-inset, 0px)`},onDragOver:e=>{o||(e.preventDefault(),d(!0))},onDragLeave:()=>d(!1),onDrop:e=>{if(o)return;e.preventDefault(),d(!1);let n=e.dataTransfer.files[0];n&&t(n)},children:[(0,U.jsx)(be,{onLoadNew:e,recentEntries:s,activeFileId:a,onPickRecent:c,onRemoveRecent:l}),(0,U.jsx)(qt,{options:O,fileId:a,children:(0,U.jsx)(Qe,{registerWidget:ae,registerFindingAnchor:oe,reportWidgetOpen:se,clearRouteFocus:ce,focusedWidgetId:_,activeRouteTarget:re,flashedFinding:y,children:(0,U.jsx)(rc,{appModel:r,catalog:i,configFindings:D,getTaskData:n,activeFileId:a,options:O,onRoute:ie,activeTab:f,onActiveTabChange:p})})}),(0,U.jsx)(jr,{appModel:r,catalog:i,getTaskData:n}),u&&(0,U.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none fixed inset-0 z-50 flex items-center justify-center bg-background/80`,children:(0,U.jsx)(`p`,{className:`rounded-lg border-2 border-dashed border-primary px-6 py-4 text-lg font-medium`,children:`Drop to load a new event log`})})]})}function ac(){return(0,U.jsx)(ae,{children:(0,U.jsx)(ic,{})})}export{ac as Dashboard};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{S as r}from"./useRecentFiles-D0OA_EOK.js";import{O as i,at as a,i as o,k as s,l as c,r as l,yt as u}from"./index-3vlFVNCg.js";import{t as d}from"./WidgetLeadSummary-BdUUi7L5.js";import{n as f}from"./StagePill-BlMOW_pU.js";import{t as p}from"./ImpactEstimate-BGt-4WX5.js";import{t as m}from"./RowPagination-BLsm8I6i.js";import{i as h,r as g}from"./impact-sort-DxaUheWV.js";import{n as _,t as v}from"./finding-anchor-DEV8JvgH.js";import{t as y}from"./usePagedRows-jNUWgVTD.js";import{n as b,t as x}from"./useSortMode-BaeAA5cw.js";var S=e(t(),1),C=n();function w({finding:e}){let t=_([e]);return(0,C.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-2 ${v} transition-colors ${t.flashClassName}`,children:[e.stageIds&&e.stageIds.length>0?(0,C.jsx)(f,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,C.jsxs)(`p`,{children:[e.recommendation,` `,(0,C.jsx)(p,{finding:e})]})]})}var T=(0,S.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:n,setSortMode:f,orderBy:p}=x(),[_,v]=(0,S.useState)(!t),[T,E]=(0,S.useState)(0),{findings:D,pills:O,groupConfidence:k}=(0,S.useMemo)(()=>{let t=e.filter(e=>e.type===`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]),A=p(D,e=>[e],h),j=c(),M=j?A.findIndex(e=>e===j.finding):null,{totalPages:N,effectivePage:P,visible:F}=y(A,T,E,M);return D.length===0?null:(0,C.jsxs)(o,{title:`Redundant Plan Subtree`,impactBand:u(D),open:_,onOpenChange:v,badges:(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(i,{type:`duplicatePlanSubtree`,impactBand:u(D)??`info`,className:l}),g(D,D.length,_)?(0,C.jsx)(b,{mode:n,onChange:f}):null]}),statusBadge:(0,C.jsx)(s,{children:(0,C.jsx)(r,{confidence:k?.confidence,validationRequired:k?.validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,C.jsx)(d,{value:`${O.length} stage${O.length===1?``:`s`}`,context:`${D.length} finding${D.length===1?``:`s`} flagged`}),children:[(0,C.jsx)(`ul`,{className:`space-y-3 text-sm`,children:F.map(e=>(0,C.jsx)(w,{finding:e},e.id))}),(0,C.jsx)(m,{page:P,totalPages:N,onPrev:()=>E(e=>e-1),onNext:()=>E(e=>e+1)})]})});export{T as DuplicatePlanSubtree};
@@ -0,0 +1 @@
1
+ import{f as e,i as t,l as n,o as r,p as i,s as a,v as o}from"./charts-vendor-0VMaLVLN.js";import{p as s}from"./plan-graph-vendor-B0sEms9Z.js";import{T as c,w as l}from"./useRecentFiles-D0OA_EOK.js";import{Nt as u,ct as d}from"./index-3vlFVNCg.js";function f(e){let t=u(e=>e.exportMode);return{exportMode:t,getTaskData:t?void 0:e}}var p=s(),m=5,h=30,g=220;function _(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 v({metrics:s,fieldNames:u,markers:f={}}){let v=u.indexOf(`duration`);if(v===-1)return null;let y=u.length,b=s.length/y,x=[];for(let e=0;e<b;e++)x.push(s[e*y+v]);if(x.length<m)return(0,p.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Too few tasks (`,x.length,`) for a distribution.`]});let{labels:S,data:C}=d(x,h),w=S[1]-S[0],T=S.map((e,t)=>({bin:`${(e/1e3).toFixed(1)}s`,range:`${(e/1e3).toFixed(1)}s – ${((e+w)/1e3).toFixed(1)}s`,ms:e,count:C[t]})),E=f.p50==null?null:_(S,f.p50),D=f.p95==null?null:_(S,f.p95),O=E==null?void 0:T.find(e=>e.ms===E)?.bin,k=D==null?void 0:T.find(e=>e.ms===D)?.bin;return(0,p.jsx)(c,{title:`Task duration`,ariaLabel:`Task duration histogram`,height:g,table:{caption:`Task duration histogram`,columns:[`Duration bin`,`Task count`],rows:T.map(e=>[e.range,e.count]),align:[`right`,`right`]},children:(0,p.jsxs)(t,{data:T,children:[(0,p.jsx)(e,{vertical:!1,stroke:l.muted,strokeOpacity:.2}),(0,p.jsx)(a,{dataKey:`bin`,tick:{fontSize:10}}),(0,p.jsx)(r,{allowDecimals:!1,tick:{fontSize:10},width:32}),(0,p.jsx)(o,{formatter:e=>[`${Number(e)} task${Number(e)===1?``:`s`}`,`Count`],labelFormatter:(e,t)=>t?.[0]?.payload?.range??e}),(0,p.jsx)(n,{dataKey:`count`,name:`Tasks`,fill:l.accent}),O?(0,p.jsx)(i,{x:O,stroke:l.accent,label:`P50`}):null,k?(0,p.jsx)(i,{x:k,stroke:l.warning,label:`P95`}):null]})})}export{f as n,v as t};
@@ -0,0 +1 @@
1
+ import{p as e}from"./plan-graph-vendor-B0sEms9Z.js";import{It as t}from"./index-3vlFVNCg.js";var n=e(),r={clean:{box:`border-clean/40 bg-clean/10`,icon:`text-clean`,title:`text-clean`},neutral:{box:`border-border/60 bg-muted/40`,icon:`text-muted-foreground`,title:`text-foreground`}};function 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{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{D as r,O as i,at as a,ft as o,i as s,l as c,mt as l,yt as u}from"./index-3vlFVNCg.js";import{t as d}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as f}from"./ImpactEstimate-BGt-4WX5.js";import{t as p}from"./RowPagination-BLsm8I6i.js";import{n as m}from"./finding-anchor-DEV8JvgH.js";import{t as h}from"./usePagedRows-jNUWgVTD.js";var g=e(t(),1),_=n();function v({finding:e}){let t=m([e]);return(0,_.jsxs)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`transition-colors ${t.flashClassName}`,children:[(0,_.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2`,children:[(0,_.jsx)(r,{impactBand:e.impactBand,className:`mt-1.5`}),(0,_.jsx)(`strong`,{children:o(`pct`,l(e))}),` average executor utilization`]}),(0,_.jsx)(f,{finding:e}),(0,_.jsx)(`p`,{children:e.recommendation})]})}var y=(0,g.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[n,r]=(0,g.useState)(0),f=(0,g.useMemo)(()=>e.filter(e=>e.type===`utilization`).slice().sort((e,t)=>a[e.impactBand]-a[t.impactBand]),[e]),m=c(),y=m?f.findIndex(e=>e===m.finding):null,{totalPages:b,effectivePage:x,visible:S}=h(f,n,r,y);return f.length===0?null:(0,_.jsxs)(s,{title:`Executor Utilization`,impactBand:u(f),badges:(0,_.jsx)(i,{type:`utilization`,impactBand:u(f)??`info`}),defaultCollapsed:t,summary:(0,_.jsx)(d,{value:`${o(`pct`,l(f[0]))} average`,context:`${f.length} item${f.length===1?``:`s`} flagged`}),children:[(0,_.jsx)(`div`,{className:`space-y-2 text-sm`,children:S.map(e=>(0,_.jsx)(v,{finding:e},e.id))}),(0,_.jsx)(p,{page:x,totalPages:b,onPrev:()=>r(e=>e-1),onNext:()=>r(e=>e+1)})]})});export{y as ExecutorUtilization};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{S as r}from"./useRecentFiles-D0OA_EOK.js";import{O as i,i as a,k as o,l as s,ut as c,yt as l}from"./index-3vlFVNCg.js";import{t as u}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as d}from"./ImpactEstimate-BGt-4WX5.js";import{t as f}from"./RowPagination-BLsm8I6i.js";import{r as p}from"./impact-sort-DxaUheWV.js";import{n as m,t as h}from"./finding-anchor-DEV8JvgH.js";import{t as g}from"./usePagedRows-jNUWgVTD.js";import{n as _,t as v}from"./useSortMode-BaeAA5cw.js";import{t as y}from"./StageHeader-BTzGkK8k.js";var b=e(t(),1),x=n(),S=`GC % = total JVM GC time ÷ total executor run time; it can exceed 100% when GC pauses overlap many concurrent task threads.`;function C(e){return[...e].sort((e,t)=>(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0))}function w({finding:e,appModel:t}){let n=m([e]),i=(e.stageId==null?void 0:t.stages.get(e.stageId))?.executorRunTime;return(0,x.jsxs)(`li`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-2 ${h} transition-colors ${n.flashClassName}`,children:[(0,x.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,x.jsx)(y,{stageId:e.stageId,appModel:t}),(0,x.jsx)(o,{children:(0,x.jsx)(r,{confidence:e.confidence,validationRequired:e.validationRequired})})]}),(0,x.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`GC: `,(0,x.jsxs)(`strong`,{children:[e.value,`%`]}),` · Executor run time:`,` `,(0,x.jsx)(`strong`,{children:c(i??0)})]}),(0,x.jsx)(d,{finding:e}),(0,x.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.recommendation})]})}function T({title:e,findings:t,appModel:n,page:r,setPage:i,routeTarget:a,orderBy:o}){let s=o(C(t),e=>[e],e=>e.stageId),c=a?s.findIndex(e=>e===a.finding):null,{totalPages:l,effectivePage:u,visible:d}=g(s,r,i,c);return(0,x.jsxs)(`section`,{className:`space-y-2`,children:[(0,x.jsxs)(`h4`,{className:`font-heading text-sm font-medium`,children:[e,` · `,t.length,` stage`,t.length===1?``:`s`]}),(0,x.jsx)(`ul`,{className:`space-y-3`,children:d.map(e=>(0,x.jsx)(w,{finding:e,appModel:n},e.stageId))}),(0,x.jsx)(f,{page:u,totalPages:l,onPrev:()=>i(e=>e-1),onNext:()=>i(e=>e+1)})]})}function E({catalog:e,appModel:t,defaultCollapsed:n=!0}){let[r,c]=(0,b.useState)(0),[d,f]=(0,b.useState)(0),{sortMode:m,setSortMode:h,orderBy:g}=v(),[y,C]=(0,b.useState)(!n),w=s(),E=(0,b.useRef)(!1);(0,b.useEffect)(()=>{if(!E.current){E.current=!0;return}c(0),f(0)},[t]);let D=e.filter(e=>e.type===`gc`);if(D.length===0)return null;let O=D.filter(e=>e.direction!==`low`),k=D.filter(e=>e.direction===`low`),A=l(D),j=[...D].sort((e,t)=>(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0))[0];return(0,x.jsx)(a,{title:`GC Pressure`,impactBand:A,badges:(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(i,{type:`gc`,impactBand:A??`info`}),p(D,D.length,y)?(0,x.jsx)(_,{mode:m,onChange:e=>{h(e),c(0),f(0)}}):null]}),defaultCollapsed:n,open:y,onOpenChange:C,summary:(0,x.jsx)(u,{value:`${j.value}%`,context:`${D.length} stage${D.length===1?``:`s`} flagged`}),children:(0,x.jsxs)(`div`,{className:`space-y-4`,children:[(0,x.jsx)(o,{children:(0,x.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:S})}),O.length>0&&(0,x.jsx)(T,{title:`GC overhead`,findings:O,appModel:t,page:r,setPage:c,routeTarget:w,orderBy:g}),k.length>0&&(0,x.jsx)(T,{title:`Low GC (cost)`,findings:k,appModel:t,page:d,setPage:f,routeTarget:w,orderBy:g})]})})}export{E as GcPressure};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{lt as r,ut as i}from"./index-3vlFVNCg.js";var a=e(t(),1),o=n();function s(e){return e===0?`0s`:i(e)}function c(e,t){let n=s(e),r=s(t);return n===r?r:`${n}-${r}`}function l(e){let t=Math.round(e.value*10)/10;switch(e.unit){case`bytes`:return r(e.value);case`ms`:return s(e.value);case`mbSeconds`:return`${t.toLocaleString(`en-US`)} MB-s`;case`coreHours`:return`${t.toFixed(1)} core-h`;case`coreMs`:return`${t.toLocaleString(`en-US`)} core-ms`;default:return String(e.value)}}function u(e){return/^0(\.0+)?(?:[^0-9.]|$)/.test(e)}function d(e){if(!e)return null;if(e.wallClock){if(e.wallClock.high<=0)return null;let t=s(e.wallClock.high);return u(t)?null:t}if(e.rawWaste){if(e.rawWaste.value<=0)return null;let t=l(e.rawWaste);return u(t)?null:t}return null}function f({finding:e}){let t=(0,a.useId)(),n=e.impactEstimate;if(!n)return null;let r=n.wallClock&&n.wallClock.high>0?s(n.wallClock.high):null,i=r&&!u(r)?c(n.wallClock.low,n.wallClock.high):null,d=n.rawWaste&&n.rawWaste.value>0?l(n.rawWaste):null,f=!i&&d&&!u(d)?d:null,p=i??f;if(!p)return null;let m=`Estimate method: ${n.estimateMethod}`;return(0,o.jsxs)(`span`,{className:`impact-estimate text-xs text-muted-foreground`,title:m,tabIndex:0,"aria-describedby":t,children:[`Potential savings: `,(0,o.jsx)(`strong`,{children:p}),(0,o.jsx)(`span`,{id:t,className:`sr-only`,children:m})]})}export{c as i,d as n,l as r,f as t};
@@ -0,0 +1 @@
1
+ import{p as e}from"./plan-graph-vendor-B0sEms9Z.js";import{O as t,i as n}from"./index-3vlFVNCg.js";import{t as r}from"./ImpactEstimate-BGt-4WX5.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}),(0,i.jsxs)(`div`,{className:`space-y-1 pt-1`,children:[(0,i.jsx)(`p`,{children:`This run’s event log never recorded an ApplicationEnd event.`}),t?(0,i.jsx)(`p`,{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{p as e}from"./plan-graph-vendor-B0sEms9Z.js";import{O as t,i as n,k as r}from"./index-3vlFVNCg.js";import{t as i}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as a}from"./ImpactEstimate-BGt-4WX5.js";var o=e();function s({finding:e}){let t=e.failedJobs,n=e.totalJobs,i=e.failedTasks,s=e.totalTasks,c=e.taskFailureRate,{value:l,recommendation:u}=e;return(0,o.jsxs)(`div`,{className:`flex flex-col gap-1 transition-colors`,children:[(0,o.jsxs)(`p`,{children:[`Failure rate: `,(0,o.jsxs)(`strong`,{children:[l,`%`]}),` (`,t,` of `,n,` completed jobs)`]}),(0,o.jsx)(r,{children:(0,o.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Task-failure context: `,i,` of `,s,` tasks failed (`,c,`%).`]})}),(0,o.jsx)(a,{finding:e}),u?(0,o.jsx)(`p`,{children:u}):null]})}function c({catalog:e,defaultCollapsed:r=!0}){let a=e.find(e=>e.type===`jobFailureRate`);if(!a)return null;let{impactBand:c,value:l}=a,u=a.failedJobs,d=a.totalJobs;return(0,o.jsx)(n,{title:`Job Failures`,impactBand:c,badges:(0,o.jsx)(t,{type:`jobFailureRate`,impactBand:c}),defaultCollapsed:r,summary:(0,o.jsx)(i,{value:`${l}%`,context:`${u} of ${d} completed jobs failed`}),children:(0,o.jsx)(s,{finding:a})})}export{c as JobFailures};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{S as r,b as i}from"./useRecentFiles-D0OA_EOK.js";import{D as a,O as o,at as s,ft as c,i as l,k as u,l as d,mt as f,yt as p}from"./index-3vlFVNCg.js";import{t as m}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as h}from"./ImpactEstimate-BGt-4WX5.js";import{t as g}from"./RowPagination-BLsm8I6i.js";import{n as _}from"./finding-anchor-DEV8JvgH.js";import{t as v}from"./usePagedRows-jNUWgVTD.js";var y=e(t(),1),b=n();function x(e){let t=f(e),n=c(`pct`,t);return e.variant===`idleCores`?`${n} of allocated core-time idle`:e.variant===`memoryBand`?e.rule===`heapNearCapacity`?`${n} of allocated heap used: near capacity`:`${n} of allocated heap used: over-provisioned`:`~${t.toLocaleString(`en-US`)} MB-seconds wasted`}function S(e){let t=e.recommendation??``,n=t.indexOf(`: `);return n===-1?` ${t}`:`; ${t.slice(n+2)}`}function C(e){if(e.rule==null)return null;let t=e.recommendation??``,n=t.indexOf(`: `);return n===-1?null:` ${t.slice(0,n)}.`}function w(e){return`executorId`in e&&e.executorId!=null?`Executor ${e.executorId}`:e.variant===`idleCores`?`Idle cores`:`Memory waste`}function T({finding:e}){let t=_([e]);return e.dataUnavailable?(0,b.jsx)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-1 transition-colors ${t.flashClassName}`,children:(0,b.jsx)(u,{children:(0,b.jsx)(`p`,{className:`text-muted-foreground`,children:e.recommendation})})}):(0,b.jsxs)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`transition-colors ${t.flashClassName}`,children:[(0,b.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2`,children:[(0,b.jsx)(a,{impactBand:e.impactBand,className:`mt-1.5`}),(0,b.jsx)(`strong`,{children:w(e)})]}),(0,b.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[x(e),S(e),C(e)==null?null:(0,b.jsx)(u,{children:C(e)})]}),(0,b.jsx)(h,{finding:e})]})}var E=(0,y.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[n,a]=(0,y.useState)(0),{findings:c,groupConfidence:f}=(0,y.useMemo)(()=>{let t=e.filter(e=>e.type===`memoryUtilization`).sort((e,t)=>s[e.impactBand]-s[t.impactBand]),n=t.filter(i);return{findings:t,groupConfidence:n.every(e=>e.confidence===n[0]?.confidence)?n[0]:void 0}},[e]),h=d(),_=h?c.findIndex(e=>e===h.finding):null,{totalPages:x,effectivePage:S,visible:C}=v(c,n,a,_);if(!c.some(i))return null;let E=c.find(e=>!e.dataUnavailable)??c[0];return(0,b.jsxs)(l,{title:`Memory Utilization`,impactBand:p(c),badges:(0,b.jsx)(o,{type:`memoryUtilization`,impactBand:p(c)??`info`}),statusBadge:(0,b.jsx)(u,{children:(0,b.jsx)(r,{confidence:f?.confidence,validationRequired:f?.validationRequired,evidenceKey:`executorMetrics`})}),defaultCollapsed:t,summary:(0,b.jsx)(m,{value:w(E),context:`${c.length} item${c.length===1?``:`s`} flagged`}),children:[(0,b.jsx)(`div`,{className:`space-y-2 text-sm`,children:C.map(e=>(0,b.jsx)(T,{finding:e},e.id))}),(0,b.jsx)(g,{page:S,totalPages:x,onPrev:()=>a(e=>e-1),onNext:()=>a(e=>e+1)})]})});export{E as MemoryUtilization};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{S as r}from"./useRecentFiles-D0OA_EOK.js";import{O as i,at as a,i as o,k as s,l as c,r as l,yt as u}from"./index-3vlFVNCg.js";import{t as d}from"./WidgetLeadSummary-BdUUi7L5.js";import{n as f}from"./StagePill-BlMOW_pU.js";import{t as p}from"./ImpactEstimate-BGt-4WX5.js";import{t as m}from"./RowPagination-BLsm8I6i.js";import{i as h,r as g}from"./impact-sort-DxaUheWV.js";import{n as _,t as v}from"./finding-anchor-DEV8JvgH.js";import{t as y}from"./usePagedRows-jNUWgVTD.js";import{n as b,t as x}from"./useSortMode-BaeAA5cw.js";var S=e(t(),1),C=n();function w({finding:e}){let t=_([e]);return(0,C.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-2 ${v} transition-colors ${t.flashClassName}`,children:[e.stageIds&&e.stageIds.length>0?(0,C.jsx)(f,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,C.jsxs)(`p`,{children:[e.recommendation,` `,(0,C.jsx)(p,{finding:e})]})]})}var T=(0,S.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:n,setSortMode:f,orderBy:p}=x(),[_,v]=(0,S.useState)(!t),[T,E]=(0,S.useState)(0),{findings:D,pills:O}=(0,S.useMemo)(()=>{let t=e.filter(e=>e.type===`overBroadcast`).sort((e,t)=>a[e.impactBand]-a[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds??[]))].map(e=>({id:e}))}},[e]),k=p(D,e=>[e],h),A=c(),j=A?k.findIndex(e=>e===A.finding):null,{totalPages:M,effectivePage:N,visible:P}=y(k,T,E,j);return D.length===0?null:(0,C.jsxs)(o,{title:`Oversized Broadcast Join`,impactBand:u(D),open:_,onOpenChange:v,badges:(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(i,{type:`overBroadcast`,impactBand:u(D)??`info`,className:l}),g(D,D.length,_)?(0,C.jsx)(b,{mode:n,onChange:f}):null]}),statusBadge:(0,C.jsx)(s,{children:(0,C.jsx)(r,{confidence:D[0].confidence,validationRequired:D[0].validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,C.jsx)(d,{value:`${O.length} stage${O.length===1?``:`s`}`,context:`${D.length} finding${D.length===1?``:`s`} flagged`}),children:[(0,C.jsx)(`ul`,{className:`space-y-3 text-sm`,children:P.map(e=>(0,C.jsx)(w,{finding:e},e.id))}),(0,C.jsx)(m,{page:N,totalPages:M,onPrev:()=>E(e=>e-1),onNext:()=>E(e=>e+1)})]})});export{T as OverBroadcast};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{i as r}from"./useRecentFiles-D0OA_EOK.js";import{O as i,Pt as a,at as o,i as s,l as c,lt as l,mt as u,yt as d}from"./index-3vlFVNCg.js";import{t as f}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as p}from"./ImpactEstimate-BGt-4WX5.js";import{t as m}from"./RowPagination-BLsm8I6i.js";import{r as h}from"./impact-sort-DxaUheWV.js";import{n as g,t as _}from"./finding-anchor-DEV8JvgH.js";import{t as v}from"./usePagedRows-jNUWgVTD.js";import{n as y,t as b}from"./useSortMode-BaeAA5cw.js";import{t as x}from"./StageHeader-BTzGkK8k.js";import{a as S,i as C,n as w,r as T,t as E}from"./select-kuy1MiAo.js";import{t as D}from"./PlanExplorer-_2oB5ouy.js";var O=e(t(),1),k=n();function A(e){if(e.rule===`lowShuffleParallelism`)return`${u(e)} tasks carrying the shuffle`;let t=u(e);return e.rule===`maxPartitionTooBig`?`Largest partition ${l(t)} (too large)`:`Largest partition ${l(t)}`}function j({entry:e,appModel:t}){let n=a(),i=g(e.partitions),o=n===`advanced`&&r(e.stageId,t);return(0,k.jsxs)(`div`,{ref:i.ref,tabIndex:i.tabIndex,"data-flashed":i.dataFlashed,className:`space-y-2 ${_} transition-colors ${i.flashClassName}`,children:[(0,k.jsx)(x,{stageId:e.stageId,appModel:t}),(0,k.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.partitions.map((e,t)=>(0,k.jsxs)(`span`,{children:[t>0?` · `:``,A(e)]},e.id))}),(0,k.jsx)(p,{finding:e.partitions[0]}),(0,k.jsxs)(`div`,{className:`space-y-2 pt-1`,children:[(0,k.jsx)(`ul`,{className:`list-disc space-y-1 pl-5 text-xs text-muted-foreground`,children:e.partitions.map(e=>(0,k.jsxs)(`li`,{children:[e.recommendation,` `,(0,k.jsx)(p,{finding:e})]},e.id))}),o?(0,k.jsx)(D,{stageId:e.stageId,appModel:t}):null]})]})}var M=(0,O.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let[r,a]=(0,O.useState)(0),[l,u]=(0,O.useState)(!n),{sortMode:p,setSortMode:g,orderBy:_}=b(),x=c(),{partitionFindings:D,sorted:A,orderedEntries:M}=(0,O.useMemo)(()=>{let e=t.filter(e=>e.type===`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),o[t.impactBand]<o[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)=>o[e.impactBand]-o[t.impactBand]||e.stageId-t.stageId);return{partitionFindings:e,sorted:r,orderedEntries:_(r,e=>e.partitions,e=>e.stageId)}},[t,p]),N=x?M.findIndex(e=>e.partitions.includes(x.finding)):null,{totalPages:P,effectivePage:F,visible:I}=v(M,r,a,N);if(D.length===0){let t=e.stages.size;return(0,k.jsx)(s,{title:`Partition Sizing`,open:l,onOpenChange:u,summary:(0,k.jsx)(f,{value:`No issues`,context:`no issue detected: partition sizing checked across ${t} stage${t===1?``:`s`}`}),children:(0,k.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No partition-sizing issues detected.`})})}let L=d(D),R=h(D,A.length,l);return(0,k.jsx)(s,{title:`Partition Sizing`,impactBand:L,open:l,onOpenChange:u,summary:(0,k.jsx)(f,{value:`Stage ${A[0].stageId}`,context:`${A.length} stage${A.length===1?``:`s`} flagged`}),badges:(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(i,{type:`partitionSizing`,impactBand:L??`info`}),R?(0,k.jsx)(y,{mode:p,onChange:e=>{g(e),a(0)}}):null]}),children:(0,k.jsxs)(`div`,{className:`space-y-4`,children:[I.map(t=>(0,k.jsx)(j,{entry:t,appModel:e},t.stageId)),(0,k.jsx)(m,{page:F,totalPages:P,onPrev:()=>a(e=>e-1),onNext:()=>a(e=>e+1),renderJumpControl:()=>(0,k.jsxs)(E,{value:String(F*6),onValueChange:e=>a(Math.floor(Number(e)/6)),children:[(0,k.jsx)(C,{size:`sm`,"aria-label":`Jump to stage`,children:(0,k.jsx)(S,{placeholder:`Jump to stage`})}),(0,k.jsx)(w,{children:M.map((e,t)=>(0,k.jsxs)(T,{value:String(t),children:[`Stage `,e.stageId]},e.stageId))})]})})]})})});export{M as PartitionSizing};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{i as r,r as i}from"./useRecentFiles-D0OA_EOK.js";import{C as a,Dt as o,Ot as s,S as c,x as l}from"./index-3vlFVNCg.js";var u=e(t(),1),d=n();function f({stageId:e,appModel:t}){let[n,f]=(0,u.useState)(!1);return r(e,t)?(0,d.jsx)(`div`,{className:`space-y-3`,children:(0,d.jsxs)(l,{open:n,onOpenChange:f,children:[(0,d.jsxs)(a,{"aria-expanded":String(n),className:`flex cursor-pointer items-center gap-2 bg-transparent text-left`,children:[(0,d.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:`Plan context`}),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)(c,{keepMounted:!0,children:(0,d.jsx)(`div`,{className:`pt-3`,children:(0,d.jsx)(i,{stageId:e,appModel:t})})})]})}):null}export{f as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{C as n,S as r,T as i,_ as a,b as o,g as s,h as c,m as l,v as u,w as d,x as f,y as p}from"./react-vendor-D2TLlSzI.js";import{a as m,c as h,d as g,f as _,i as v,l as y,n as b,o as x,p as S,r as ee,s as C,t as w,u as T}from"./plan-graph-vendor-B0sEms9Z.js";import{c as E,f as D,i as O,l as k,n as A,o as j,s as M,t as te,u as ne,w as N}from"./useRecentFiles-D0OA_EOK.js";import{$ as P,A as re,D as F,E as I,I as ie,It as L,Mt as R,N as z,O as B,P as V,Q as H,T as U,W as ae,Z as W,bt as oe,dt as se,et as ce,it as le,kt as G,lt as ue,nt as K,rt as de,tt as fe,ut as q,vt as pe,w as me,wt as he,yt as ge}from"./index-3vlFVNCg.js";import{t as _e}from"./impact-sort-DxaUheWV.js";var ve={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`}]]};ve.node;var ye=G(ve),be={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`}]]};be.node;var xe=G(be),Se={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`}]]};Se.node;var Ce=G(Se),we={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`}]]};we.node;var Te=G(we),Ee={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`}]]};Ee.node;var De=G(Ee),Oe={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`}]]};Oe.node;var ke=G(Oe),Ae={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`}]]};Ae.node;var je=G(Ae),Me={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`}]]};Me.node;var Ne=G(Me),J=e(t(),1);function Pe({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:fe(n.name,n.detail??``),primaryMetric:ce(n.metrics),segmentIndex:i,splitRole:a,durationShare:o??null,exclusiveDurationShare:s??null,findings:c,metrics:(n.metrics??[]).map(e=>({name:e.name,value:P(e)})),detailText:n.detail&&n.detail!==n.name?n.detail:``}}function Fe(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}=K(e),f=l.filter(Boolean).length,p=c&&s!=null?W(e,i,c,s,o):null,m=o===`exclusive`?p:c&&s!=null?W(e,i,c,s,`exclusive`):null,h=new Map,g=c&&s!=null?ae(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 de(l,e,g,d))h.set(t,n)}let _=new Map;if(s!=null){for(let e of a)if(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;le(e,(e,t)=>{let n=e.id,r=H(e.name),a=u.get(e),o=t?t.id:null,s=e.exchangeRole===`write`&&t?t.id:n,c=Pe({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 Ie=24,Le=32;function Re(e,t,n={}){let r=new w.graphlib.Graph({compound:!!n.groupOf});r.setGraph({rankdir:`RL`,nodesep:128,ranksep:60,ranker:`tight-tree`}),r.setDefaultEdgeLabel(()=>({}));let i=new Set;if(n.groupOf){for(let t of e){let e=n.groupOf(t);e&&i.add(e)}for(let e of i)r.setNode(e,{})}for(let t of e){r.setNode(t.id,{width:220,height:90});let e=n.groupOf?.(t);e&&r.setParent(t.id,e)}for(let e of t)r.setEdge(e.source,e.target);return w.layout(r),e.map(e=>{let t=r.node(e.id);return{...e,position:{x:t.x-110,y:t.y-45}}})}function ze(e,t,n={}){let r=n.paddingX??Ie,i=n.paddingY??Ie,a=n.headerHeight??Le,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 Be(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 ze(a,t,n))r.add(e.id),i.push(e)}return i}var Y=S();function Ve({delay:e=0,...t}){return(0,Y.jsx)(p,{"data-slot":`tooltip-provider`,delay:e,...t})}function He({...e}){return(0,Y.jsx)(i,{"data-slot":`tooltip`,...e})}function Ue({...e}){return(0,Y.jsx)(d,{"data-slot":`tooltip-trigger`,...e})}function We({className:e,side:t=`top`,sideOffset:i=4,align:a=`center`,alignOffset:s=0,children:c,...l}){return(0,Y.jsx)(n,{children:(0,Y.jsx)(r,{align:a,alignOffset:s,side:t,sideOffset:i,className:`isolate z-50`,children:(0,Y.jsxs)(f,{"data-slot":`tooltip-content`,className:L(`z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 motion-reduce:animate-none`,e),...l,children:[c,(0,Y.jsx)(o,{className:`z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5`})]})})})}function Ge(e){return e==null?null:e>=40?`critical`:e>=15?`warning`:`info`}var X={scan:`⇩`,exchange:`⇄`,join:`⋈`,aggregate:`Σ`,sort:`↕`,filter:`∇`,aqe:`⚙`,boilerplate:`·`,transform:`→`};function Ke(e){return e.find(e=>e.impactBand===`critical`)??e.find(e=>e.impactBand===`warning`)??e[0]}function qe({data:e}){let{label:t,operatorDetail:n,primaryMetric:r,category:i,splitRole:a,durationSharePct:o,findings:s}=e,c=X[i]??X.transform,l=Ge(o);return(0,Y.jsxs)(`div`,{className:`relative flex flex-col overflow-visible rounded-md border border-border bg-card px-3 py-2 text-xs shadow-sm`,style:{width:220,height:90},"data-category":i,children:[(0,Y.jsx)(m,{type:`target`,position:g.Right,className:`opacity-0!`}),(0,Y.jsx)(m,{type:`source`,position:g.Left,className:`opacity-0!`}),s&&s.length>0?(()=>{let e=Ke(s);return(0,Y.jsxs)(He,{children:[(0,Y.jsxs)(Ue,{"data-testid":`node-finding-badge`,className:L(`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`,I[e.impactBand]),children:[(0,Y.jsx)(F,{impactBand:e.impactBand}),pe(e.type),s.length>1?(0,Y.jsx)(`span`,{children:s.length}):null]}),(0,Y.jsx)(We,{className:`max-w-xs`,children:(0,Y.jsx)(`ul`,{className:`flex flex-col gap-1 text-left`,children:s.map((e,t)=>(0,Y.jsxs)(`li`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(F,{impactBand:e.impactBand}),(0,Y.jsx)(`span`,{children:D(e)})]},e.id??`${e.type}-${t}`))})})]})})():null,a===`read`?(0,Y.jsx)(`p`,{className:`truncate text-xs text-muted-foreground`,children:`paired: see write half`}):null,o!=null&&l?(0,Y.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,Y.jsxs)(`span`,{className:L(`shrink-0 text-[10px] font-medium tabular-nums`,I[l]),children:[o,`%`]}),(0,Y.jsx)(`div`,{className:`h-1.5 flex-1 overflow-hidden rounded-full bg-muted`,children:(0,Y.jsx)(`div`,{"data-testid":`duration-heat-bar-fill`,className:L(`h-full rounded-full`,U[l]),style:{width:`${o>0?Math.max(o,4):0}%`}})}),(0,Y.jsxs)(`span`,{className:`sr-only`,children:[`Duration share `,o,`%, `,l===`critical`?`high`:l===`warning`?`medium`:`low`]})]}):null,(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(`span`,{"aria-hidden":`true`,className:`shrink-0`,children:c}),(0,Y.jsx)(`span`,{className:`min-w-0 truncate font-medium`,title:t,children:t})]}),n?(0,Y.jsx)(`p`,{className:`truncate text-muted-foreground`,title:n,children:n}):null,r?(0,Y.jsx)(`p`,{className:`truncate text-muted-foreground`,title:r,children:r}):null]})}var Je={read:`Read half. Consumes the shuffle written by its paired write half.`,write:`Write half. Produces the shuffle its paired read half consumes.`};function Ye({node:e,onClose:t,onJumpToPaired:n}){let r=X[e.category]??X.transform,i=e.findings??[],a=e.metrics??[],o=e.category.charAt(0).toUpperCase()+e.category.slice(1);return(0,Y.jsxs)(`div`,{"data-testid":`plan-node-detail`,role:`dialog`,"aria-label":`Plan node detail: ${e.label}`,className:`flex h-full w-80 shrink-0 flex-col gap-3 overflow-y-auto border-l border-border bg-card p-3 text-xs`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,Y.jsx)(`span`,{"aria-hidden":`true`,className:`shrink-0`,children:r}),(0,Y.jsx)(`span`,{className:`break-words font-medium`,children:e.label})]}),(0,Y.jsx)(z,{type:`button`,variant:`ghost`,size:`icon`,className:`size-6 shrink-0`,"aria-label":`Close node detail`,onClick:t,children:(0,Y.jsx)(oe,{className:`size-4`})})]}),(0,Y.jsxs)(`p`,{className:`text-muted-foreground`,children:[o,` · Segment `,e.segmentIndex+1,e.durationSharePct==null?null:(0,Y.jsxs)(Y.Fragment,{children:[` · `,(0,Y.jsxs)(`span`,{className:`text-foreground`,children:[e.durationSharePct,`%`]}),` of plan stage time`]})]}),e.splitRole?(0,Y.jsxs)(Z,{title:`Exchange`,children:[(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:Je[e.splitRole]}),e.exchangeShuffleBytes==null?e.label.startsWith(`Broadcast`)?(0,Y.jsx)(`p`,{className:`mt-1 text-muted-foreground`,children:`Broadcast, no shuffle`}):null:(0,Y.jsxs)(`p`,{className:`mt-1 text-muted-foreground`,children:[`Shuffle written`,` `,(0,Y.jsx)(`span`,{className:`font-medium tabular-nums text-foreground`,children:ue(e.exchangeShuffleBytes)})]}),e.pairedNodeId&&n?(0,Y.jsxs)(z,{type:`button`,variant:`outline`,size:`sm`,className:`mt-2 h-7 w-full justify-start gap-1.5`,onClick:()=>n(e.pairedNodeId),children:[(0,Y.jsx)(ye,{className:`size-3.5`,"aria-hidden":`true`}),`Jump to `,e.splitRole===`read`?`write`:`read`,` half`]}):null]}):null,i.length>0?(0,Y.jsx)(Z,{title:`Findings`,children:(0,Y.jsx)(`ul`,{className:`flex flex-col gap-1.5`,children:i.map((e,t)=>(0,Y.jsxs)(`li`,{className:`flex items-start gap-1.5`,children:[(0,Y.jsx)(B,{type:e.type,impactBand:e.impactBand,className:`shrink-0`}),(0,Y.jsx)(`span`,{className:`break-words`,children:D(e)})]},e.id??`${e.type}-${t}`))})}):null,a.length>0?(0,Y.jsx)(Z,{title:`Metrics`,children:(0,Y.jsx)(`dl`,{className:`grid grid-cols-[1fr_auto] gap-x-3 gap-y-1`,children:a.map((e,t)=>(0,Y.jsxs)(`div`,{className:`contents`,children:[(0,Y.jsx)(`dt`,{className:`min-w-0 break-words text-muted-foreground`,children:e.name}),(0,Y.jsx)(`dd`,{className:`text-right font-medium tabular-nums`,children:e.value})]},`${e.name}-${t}`))})}):null,e.detailText?(0,Y.jsx)(Z,{title:`Plan detail`,children:(0,Y.jsx)(`pre`,{"data-testid":`plan-node-detail-text`,className:`max-h-48 overflow-auto whitespace-pre-wrap break-words rounded bg-muted p-2 font-mono text-[11px] leading-snug`,children:e.detailText})}):null]})}function Z({title:e,children:t}){return(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`p`,{className:`mb-1 font-medium text-muted-foreground`,children:e}),t]})}var Xe=[{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 Ze(){return(0,Y.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,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`p`,{className:`mb-1 font-medium text-muted-foreground`,children:`Operators`}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1`,children:Xe.map(({category:e,label:t})=>(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{"aria-hidden":`true`,children:X[e]}),t]},e))})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`p`,{className:`mb-1 font-medium text-muted-foreground`,children:`Duration share`}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{className:L(`h-1.5 w-6 rounded-full`,U.info)}),` low`]}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{className:L(`h-1.5 w-6 rounded-full`,U.warning)}),` medium`]}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{className:L(`h-1.5 w-6 rounded-full`,U.critical)}),` high`]})]})]}),(0,Y.jsxs)(`p`,{className:`text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`text-foreground`,children:`Edge thickness`}),` = shuffle bytes moved across an exchange.`]}),(0,Y.jsxs)(`p`,{className:`text-muted-foreground`,children:[`A `,(0,Y.jsx)(`span`,{className:`text-foreground`,children:`segment`}),` box groups one Exchange-bounded stage of the plan; a`,` `,(0,Y.jsx)(`span`,{className:`text-foreground`,children:`stage`}),` box (full-plan view) wraps every segment of one Spark stage.`]})]})}function Qe({...e}){return(0,Y.jsx)(u,{"data-slot":`popover`,...e})}function $e({...e}){return(0,Y.jsx)(a,{"data-slot":`popover-trigger`,...e})}function et({align:e=`center`,alignOffset:t=0,side:n=`bottom`,sideOffset:r=8,className:i,...a}){return(0,Y.jsx)(s,{children:(0,Y.jsx)(c,{className:`isolate z-50 outline-none`,align:e,alignOffset:t,side:n,sideOffset:r,children:(0,Y.jsx)(l,{"data-slot":`popover-content`,className:L(`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 tt({ariaLabel:e,name:t,options:n,value:r,onChange:i,trailingContent:a}){return(0,Y.jsx)(Ve,{children:(0,Y.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,Y.jsxs)(He,{children:[(0,Y.jsxs)(Ue,{render:(0,Y.jsx)(`label`,{className:`tap-target-comfortable flex min-h-8 items-center gap-1.5 px-1 text-sm`}),children:[(0,Y.jsx)(`input`,{type:`radio`,name:t,value:e.value,checked:r===e.value,onChange:()=>i(e.value)}),e.label]}),(0,Y.jsx)(We,{children:e.description})]},e.value)),a]})})}var nt=[{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 rt({mode:e,onChange:t,hiddenCount:n}){return(0,Y.jsx)(tt,{ariaLabel:`Node filter`,name:`plan-graph-filter`,options:nt,value:e,onChange:t,trailingContent:n>0?(0,Y.jsx)(me,{label:`${n} nodes hidden`,impactBand:`info`}):null})}var it=[{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 at({mode:e,onChange:t}){return(0,Y.jsx)(tt,{ariaLabel:`Duration heat bar scope`,name:`plan-graph-duration-mode`,options:it,value:e,onChange:t})}function ot({filterMode:e,onFilterModeChange:t,hiddenCount:n,durationMode:r,onDurationModeChange:i,iconOnly:a=!1}){return(0,Y.jsxs)(Qe,{children:[(0,Y.jsxs)($e,{"aria-label":a?`Settings`:void 0,title:a?`Settings`:void 0,className:L(V({variant:`ghost`,size:a?`icon`:`sm`}),`tap-target-comfortable`,a?void 0:`gap-1.5`),children:[(0,Y.jsx)(De,{"aria-hidden":`true`}),a?null:`Settings`]}),(0,Y.jsxs)(et,{align:a?`start`:`end`,side:a?`right`:`bottom`,"aria-label":`Plan graph settings`,className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`mb-1.5 text-xs font-medium text-muted-foreground`,children:`Node filter`}),(0,Y.jsx)(rt,{mode:e,onChange:t,hiddenCount:n})]}),(0,Y.jsx)(`div`,{"aria-hidden":`true`,className:`h-px bg-border`}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`mb-1.5 text-xs font-medium text-muted-foreground`,children:`Duration attribution`}),(0,Y.jsx)(at,{mode:r,onChange:i})]})]})]})}var st=e=>e.data;function ct({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}=T(),[h,g]=(0,J.useState)(null),[_,v]=(0,J.useState)(null),y=[...e].filter(e=>st(e).durationSharePct!=null).sort((e,t)=>(st(t).durationSharePct??0)-(st(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,Y.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,Y.jsxs)(lt,{children:[(0,Y.jsx)(Q,{label:`Zoom in`,onClick:()=>d({duration:200}),children:(0,Y.jsx)(Ne,{"aria-hidden":`true`})}),(0,Y.jsx)(Q,{label:`Zoom out`,onClick:()=>f({duration:200}),children:(0,Y.jsx)(je,{"aria-hidden":`true`})}),(0,Y.jsx)(Q,{label:`Fit to view`,onClick:()=>p({duration:200}),children:(0,Y.jsx)(Te,{"aria-hidden":`true`})})]}),(0,Y.jsx)(ut,{}),(0,Y.jsxs)(lt,{children:[(0,Y.jsx)(Q,{label:`Next worst duration`,disabled:y.length===0,onClick:()=>x(y,h,g),children:(0,Y.jsx)(ke,{"aria-hidden":`true`})}),t.length>0?(0,Y.jsx)(Q,{label:`Next problem`,onClick:()=>x(t,_,v),children:(0,Y.jsx)(xe,{"aria-hidden":`true`})}):null]}),(0,Y.jsx)(ut,{}),(0,Y.jsxs)(lt,{children:[(0,Y.jsx)(ot,{iconOnly:!0,filterMode:n,onFilterModeChange:r,hiddenCount:i,durationMode:a,onDurationModeChange:o}),(0,Y.jsx)(Q,{label:s?`Hide legend`:`Legend`,pressed:s,onClick:c,children:(0,Y.jsx)(he,{"aria-hidden":`true`})}),(0,Y.jsx)(Q,{label:l?`Hide minimap`:`Show minimap`,pressed:l,onClick:u,children:(0,Y.jsx)(Ce,{"aria-hidden":`true`})})]})]})}function lt({children:e}){return(0,Y.jsx)(`div`,{className:`flex flex-col items-center gap-1`,children:e})}function ut(){return(0,Y.jsx)(`div`,{"aria-hidden":`true`,className:`my-0.5 h-px w-6 bg-border`})}function Q({label:e,onClick:t,disabled:n,pressed:r,children:i}){return(0,Y.jsx)(z,{type:`button`,variant:`ghost`,size:`icon`,className:L(`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 dt(e){if(e.type!==`planNode`)return`var(--muted)`;let t=e.data.findings??[],n=ge(t);return n?N[n]:`var(--plan-aggregate)`}function ft({finding:e,className:t}){let n=se(e);return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Y.jsx)(B,{type:e.type,impactBand:e.impactBand,className:t}),n?(0,Y.jsx)(`span`,{className:`font-mono text-[10px] leading-none whitespace-nowrap text-muted-foreground`,children:n}):null]})}function pt({data:e}){let{width:t,height:n,stageId:r,durationLabel:i,findings:a}=e;return(0,Y.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,Y.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,Y.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,Y.jsx)(me,{label:i??`—`,impactBand:`info`,title:`Approximate share of this stage's wall time`}),a.length>0?(0,Y.jsx)(`div`,{className:`ml-auto flex min-w-0 flex-wrap items-center justify-end gap-1`,children:a.map((e,t)=>(0,Y.jsx)(ft,{finding:e,className:`h-4 gap-1 px-1.5 text-xs`},e.id??`${e.type}-${t}`))}):null]})})}function mt({data:e}){let{width:t,height:n,stageId:r,findings:i,showOwnFindings:a=!0,onSelect:o}=e;return(0,Y.jsxs)(`div`,{className:`relative rounded-xl border border-primary/25 bg-primary/5 nopan nodrag`,style:{width:t,height:n,pointerEvents:`all`},children:[(0,Y.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,Y.jsx)(`div`,{className:`absolute left-2 right-2 top-1 flex flex-wrap gap-1`,children:i.map((e,t)=>(0,Y.jsx)(ft,{finding:e,className:`h-4 gap-1 px-1.5 text-xs`},e.id??`${e.type}-${t}`))}):null,(0,Y.jsxs)(`span`,{className:`absolute right-2 bottom-1 text-xs font-medium text-primary`,children:[`Stage `,r]})]})}var ht=1.5,gt=.55;function _t(e,t){return!(e>0)||!(t>0)?0:Math.min(1,Math.log(e+1)/Math.log(t+1))}function vt(e,t){return ht+7.5*_t(e,t)}function yt(e,t){return gt+.44999999999999996*_t(e,t)}function bt({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:a,markerEnd:o,data:s}){let[c,l,u]=_({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:a}),{shuffleBytes:d=0,maxShuffleBytes:f=0}=s??{},p=vt(d,f),m=yt(d,f),h=d>0&&d<1e3?`<1 KB`:ue(d);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(ee,{path:c,markerEnd:o,style:{stroke:`var(--text-muted)`,strokeWidth:p,strokeOpacity:m}}),(0,Y.jsx)(v,{children:(0,Y.jsxs)(He,{children:[(0,Y.jsx)(Ue,{"data-testid":`exchange-edge-label`,className:`nodrag nopan pointer-events-auto absolute cursor-help rounded bg-card/90 px-1 py-0.5 font-mono text-[10px] leading-none text-muted-foreground ring-1 ring-border`,style:{transform:`translate(-50%, -50%) translate(${l}px, ${u}px)`},children:h}),(0,Y.jsx)(We,{className:`max-w-xs`,children:(0,Y.jsxs)(`p`,{children:[h,` of shuffle written across this exchange. Edge thickness scales with the volume moved.`]})})]})})]})}var xt={planNode:qe,segmentGroup:pt,stageGroup:mt},St={exchange:bt},Ct=1,wt=2,Tt=3,Et=e=>e.data,$={padding:.06,maxZoom:1.75};function Dt({resizeTick:e,fitSignal:t,centerRequest:n}){let{fitView:r,setCenter:i,getNode:a}=T();return(0,J.useEffect)(()=>{if(!n||n.token===0||!n.nodeId)return;let e=a(n.nodeId);e?i(e.position.x,e.position.y,{zoom:1,duration:300}):r({nodes:[{id:n.nodeId}],duration:300,maxZoom:1})},[n,i,a,r]),(0,J.useEffect)(()=>{let e=()=>r({duration:200,...$});return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[r]),(0,J.useEffect)(()=>{e!==0&&r({duration:200,...$})},[e,r]),(0,J.useEffect)(()=>{t!==0&&r({duration:300,...$})},[t,r]),null}function Ot(){let e=(0,J.useRef)(null),[t,n]=(0,J.useState)(0);return(0,J.useEffect)(()=>{let t=e.current;if(!t)return;let r=!0,i=new ResizeObserver(()=>{if(r){r=!1;return}n(e=>e+1)});return i.observe(t),()=>i.disconnect()},[]),{ref:e,tick:t}}function kt(e,t){return e.filter(e=>e.stageId===t||e.stageIds?.includes(t))}function At({model:e,showMiniMap:t,findings:n=[],stageId:r,segmentStageIds:i,visibleNodeIds:a,visibleEdges:o,onSelectStage:s,selectedNodeId:c=null,onSelectNode:l,onJumpToPaired:u,centerRequest:d,fitSignal:f=0,filterMode:p=`basic`,onFilterModeChange:m=()=>{},hiddenCount:g=0,durationMode:_=`exclusive`,onDurationModeChange:v=()=>{}}){let{flowNodes:S,flowEdges:ee}=(0,J.useMemo)(()=>{let t=e.nodes.reduce((e,t)=>e+(t.exclusiveDurationShare??t.durationShare??0),0),c=e=>`segment-${e.segmentIndex}`,l=e.scope===`full`,u=e=>{let t=i?.get(e.segmentIndex);return t==null?null:`stage-${t}`},d=a?Re(e.nodes.filter(e=>a.has(e.id)),o??e.edges,{groupOf:c}):Re(e.nodes,e.edges,{groupOf:c}),f=new Set(d.map(c)),p=l?new Set(d.map(u).filter(e=>e!=null)):null,m=e.nodes.some(e=>!f.has(c(e)))||p!=null&&e.nodes.some(e=>{let t=u(e);return t!=null&&!p.has(t)})?Re(e.nodes,e.edges,{groupOf:c}):d,h=d.map(e=>{let n=e.durationShare!=null&&t>0?Math.round(e.durationShare/t*100):null,r=e.splitRole===`read`?`${e.label}, paired: see write half`:[e.label,e.operatorDetail,e.primaryMetric,n==null?null:`${n}% of the plan's total stage duration`].filter(Boolean).join(`, `);return{id:e.id,type:`planNode`,position:e.position,draggable:!1,zIndex:Tt,measured:{width:220,height:90},ariaLabel:r,ariaRole:`button`,data:{...e,durationSharePct:n}}}),g=Be(c,[d,m]).map(t=>{let r=Number(t.id.replace(`segment-`,``)),a=e.nodes.filter(e=>c(e)===t.id),o=a.reduce((e,t)=>e+(t.exclusiveDurationShare??t.durationShare??0),0),s=a.some(e=>e.durationShare!=null),l=i?.get(r)??null,u=l==null?[]:kt(n,l);return{id:t.id,type:`segmentGroup`,position:t.position,draggable:!1,selectable:!1,focusable:!1,zIndex:wt,style:{width:t.width,height:t.height},measured:{width:t.width,height:t.height},data:{width:t.width,height:t.height,stageId:l,durationLabel:s?q(o):null,findings:u}}}),_=new Set(g.map(e=>e.data.stageId).filter(e=>e!=null)),v=l?(()=>{let e={paddingX:32,paddingY:64,headerHeight:0},t=Be(u,[d,m],e),i=`stage-${r}`;if(kt(n,r).length>0&&!t.some(e=>e.id===i)){let[n]=Be(()=>i,[d,m],e);n&&t.push(n)}return t.map(e=>{let t=Number(e.id.replace(`stage-`,``));return{id:e.id,type:`stageGroup`,position:e.position,draggable:!1,selectable:!1,focusable:!1,zIndex:Ct,style:{width:e.width,height:e.height},measured:{width:e.width,height:e.height},data:{width:e.width,height:e.height,stageId:t,findings:kt(n,t),showOwnFindings:!_.has(t),onSelect:()=>s?.(t)}}})})():[],y=o??e.edges,b=y.reduce((e,t)=>Math.max(e,t.shuffleBytes??0),0),x=y.map(e=>e.shuffleBytes?{id:e.id,source:e.source,target:e.target,type:`exchange`,data:{shuffleBytes:e.shuffleBytes,maxShuffleBytes:b}}:{id:e.id,source:e.source,target:e.target});return{flowNodes:[...v,...g,...h],flowEdges:x}},[e,n,r,i,a,o,s]),{ref:w,tick:T}=Ot(),[E,D]=(0,J.useState)(!0),[O,k]=(0,J.useState)(!0),A=c?S.find(e=>e.id===c&&e.type===`planNode`):void 0,j=S.filter(e=>e.type===`planNode`),M=S.filter(e=>e.type===`stageGroup`&&(e.data.findings?.length??0)>0).sort(_e(e=>e.data.findings??[])),te=a!=null&&a.size===0&&e.nodes.length>0;return(0,Y.jsx)(h,{children:(0,Y.jsx)(Ve,{children:(0,Y.jsxs)(`div`,{ref:w,className:`flex min-h-0 flex-1`,children:[(0,Y.jsx)(ct,{planNodes:j,problemNodes:M,filterMode:p,onFilterModeChange:m,hiddenCount:g,durationMode:_,onDurationModeChange:v,legendOpen:E,onToggleLegend:()=>D(e=>!e),miniMapOpen:t&&O,onToggleMiniMap:()=>k(e=>!e)}),(0,Y.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,Y.jsxs)(y,{nodes:S,edges:ee,nodeTypes:xt,edgeTypes:St,"aria-label":`Plan graph. Operators and the data flowing between them. Tab to move between operators, Enter to open an operator's details.`,fitView:!0,fitViewOptions:$,minZoom:.05,edgesFocusable:!1,onNodeClick:(e,t)=>{t.type===`planNode`&&l?.(t.id)},onPaneClick:()=>l?.(null),children:[(0,Y.jsx)(b,{}),(0,Y.jsx)(Dt,{resizeTick:T,fitSignal:f,centerRequest:d}),te?(0,Y.jsx)(C,{position:`top-center`,children:(0,Y.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,E?(0,Y.jsx)(C,{position:`bottom-left`,children:(0,Y.jsx)(Ze,{})}):null,t&&O?(0,Y.jsx)(x,{nodeColor:dt,pannable:!0,zoomable:!0,ariaLabel:`Plan overview. Drag to pan and scroll to zoom the graph.`}):null]})}),A?(0,Y.jsx)(Ye,{node:Et(A),onClose:()=>l?.(null),onJumpToPaired:u}):null]})})})}function jt({open:e,nodeCount:t,onConfirm:n,onCancel:r}){return(0,Y.jsx)(j,{open:e,onOpenChange:e=>{e||r()},children:(0,Y.jsxs)(M,{children:[(0,Y.jsx)(k,{children:(0,Y.jsx)(ne,{children:`Expand to full plan?`})}),(0,Y.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`This plan has `,t,` nodes. Rendering the full graph may take several seconds.`]}),(0,Y.jsxs)(E,{children:[(0,Y.jsx)(z,{type:`button`,variant:`outline`,size:`sm`,onClick:r,children:`Cancel`}),(0,Y.jsx)(z,{type:`button`,size:`sm`,onClick:n,children:`Expand anyway`})]})]})})}var Mt={io:[`scan`,`exchange`],basic:[`scan`,`exchange`,`join`,`aggregate`,`sort`,`filter`],advanced:null},Nt=300;function Pt(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 Ft(e,t){try{return Fe(e,t)}catch{return null}}var It=new Map;function Lt(e,t,n,r){return`${e??`none`}::${t}::${n}::${r}`}function Rt(){It.clear()}var zt=R.getState().modelResetCount;R.subscribe(e=>{e.modelResetCount!==zt&&(zt=e.modelResetCount,Rt())});function Bt(e,t,n){let r=Lt(n,t.stageId,t.scope,t.durationMode),i=It.get(r);if(i)return i;let a=Ft(e,t);return a&&It.set(r,a),a}function Vt({stageId:e,appModel:t,findings:n,activeFileId:r,onClose:i,initialScope:a}){let{resetToDropZone:o}=ie(),{recentEntries:s,onPickRecent:c,onRemoveRecent:l}=te(r),[u,d]=(0,J.useState)(`basic`),[f,p]=(0,J.useState)(`exclusive`),[m,h]=(0,J.useState)(a??`segment`),[g,_]=(0,J.useState)(!1),[v,y]=(0,J.useState)(a!==`full`),[b,x]=(0,J.useState)(!1),[S,ee]=(0,J.useState)(e),[C,w]=(0,J.useState)(null),[T,E]=(0,J.useState)(0),[D,k]=(0,J.useState)({nodeId:null,token:0}),[j,M]=(0,J.useState)(null),ne=e=>k(t=>({nodeId:e,token:t.token+1}));(0,J.useEffect)(()=>{w(null)},[S,m,u]);let N=O(S,t),P=N?Bt(N,{scope:`segment`,stageId:S,appModel:t,findings:n,durationMode:f},r):null,F=P!=null&&P.scope===`full`&&m===`segment`&&P.nodes.length>Nt,I=F&&!b;(0,J.useEffect)(()=>{I&&_(!0)},[I]);let L=N&&(m===`full`||g)?Bt(N,{scope:`full`,stageId:S,appModel:t,findings:n,durationMode:f},r):null,R=!v&&m===`full`&&L!=null&&L.nodes.length>Nt,B=g||R;(0,J.useEffect)(()=>{let e=e=>{e.key!==`Escape`||B||(C?w(null):i())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i,B,C]);let V=F||R?null:m===`full`?L:P;(0,J.useEffect)(()=>{j&&m===`full`&&V?.nodes.some(e=>e.id===j)&&(w(j),ne(j),M(null))},[j,m,V]);function H(){let e=N?Bt(N,{scope:`full`,stageId:S,appModel:t,findings:n,durationMode:f},r):null;e&&e.nodes.length>Nt?_(!0):(h(`full`),E(e=>e+1))}function U(){h(`segment`),E(e=>e+1)}function ae(e){if(V?.nodes.some(t=>t.id===e)){w(e),ne(e);return}M(e),H()}let W=(0,J.useCallback)(e=>{ee(e),h(`segment`),y(!0),x(!1),M(null),E(e=>e+1)},[]);function oe(){y(!0),h(`full`),_(!1),E(e=>e+1)}function se(){_(!1),M(null),R&&(y(!0),h(`segment`),P?.scope===`full`&&x(!0)),I&&x(!0)}function ce(e){return i(),c(e)}let{visibleNodeIds:le,filteredEdges:G,hiddenNodes:ue}=(0,J.useMemo)(()=>{let e=Mt[u],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?Pt(V.edges,t):[],hiddenNodes:V?V.nodes.filter(e=>!t.has(e.id)):[]}},[V,u]),K=V?.scope===`full`,de=m===`full`,fe=(0,J.useId)(),q=K&&!de;return(0,Y.jsxs)(`div`,{"data-testid":`dashboard`,className:`flex h-screen flex-col`,style:{paddingRight:`var(--docs-inset, 0px)`},children:[(0,Y.jsx)(A,{onLoadNew:o,recentEntries:s,activeFileId:r,onPickRecent:ce,onRemoveRecent:l,leadingContent:(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsxs)(`h1`,{className:`truncate font-heading text-sm font-semibold`,children:[`Plan graph: Stage `,S]}),V&&V.scope===`segment`?(0,Y.jsxs)(`p`,{className:`truncate text-xs text-muted-foreground`,children:[`Segment `,V.segmentIndex+1,` of `,V.segmentCount]}):null,(0,Y.jsx)(`p`,{className:`truncate text-xs text-muted-foreground`,children:(0,Y.jsx)(re,{anchor:`#bottleneck-duplicate-plan-subtree`,children:`Plan Advisor docs`})})]}),sectionControls:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`flex flex-col items-end gap-0.5`,children:[(0,Y.jsx)(z,{type:`button`,variant:`outline`,size:`sm`,disabled:q,"aria-describedby":q?fe:void 0,onClick:K?U:H,children:K?`Back to segment view`:`Expand to full plan`}),q?(0,Y.jsx)(`p`,{id:fe,className:`text-xs text-muted-foreground`,children:`This stage's plan couldn't be scoped to a single segment`}):null]}),(0,Y.jsx)(z,{variant:`ghost`,size:`sm`,onClick:i,children:`Close`})]})}),(0,Y.jsx)(`div`,{className:`flex flex-1 flex-col overflow-hidden`,children:R?null:!N||!V?(0,Y.jsx)(`p`,{role:`alert`,className:`p-6 text-sm text-destructive`,children:F?`This plan has more nodes than the graph view can safely render without expanding. Click "Expand to full plan" to confirm.`:`Couldn't build the plan graph for this stage.`}):(0,Y.jsx)(At,{model:V,visibleNodeIds:le,visibleEdges:G,showMiniMap:!0,findings:n,stageId:S,segmentStageIds:V.segmentStageIds,onSelectStage:W,selectedNodeId:C,onSelectNode:w,onJumpToPaired:ae,centerRequest:D,fitSignal:T,filterMode:u,onFilterModeChange:d,hiddenCount:ue.length,durationMode:f,onDurationModeChange:p})}),(0,Y.jsx)(jt,{open:B,nodeCount:L?.nodes.length??0,onConfirm:oe,onCancel:se})]})}export{Vt as PlanGraphRoute};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{D as r,O as i,at as a,i as o,k as s,l as c,mt as l,ut as u,yt as d}from"./index-3vlFVNCg.js";import{t as f}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as p}from"./StagePill-BlMOW_pU.js";import{t as m}from"./ImpactEstimate-BGt-4WX5.js";import{t as h}from"./RowPagination-BLsm8I6i.js";import{r as g}from"./impact-sort-DxaUheWV.js";import{n as _}from"./finding-anchor-DEV8JvgH.js";import{t as v}from"./usePagedRows-jNUWgVTD.js";import{n as y,t as b}from"./useSortMode-BaeAA5cw.js";var x=e(t(),1),S=n();function C(e){return e.stageId!=null}function w(e){return String(e.extended??``).replace(/, wasting \d+s of executor time\./,`.`)}function T(e){let t=String(e.recommendation??``),n=t.indexOf(`: `);return n===-1?t:t.slice(n+2)}function E({finding:e}){let t=_([e]);return(0,S.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`flex flex-col gap-1 transition-colors ${t.flashClassName}`,children:[(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(p,{stageId:e.stageId}),(0,S.jsx)(r,{impactBand:e.impactBand})]}),(0,S.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Wasted `,(0,S.jsx)(`strong`,{children:u(l(e))}),` of executor time.`,e.extended?(0,S.jsxs)(s,{children:[` `,w(e)]}):null]}),e.recommendation?(0,S.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:T(e)}):null,(0,S.jsx)(m,{finding:e})]})}function D({appModel:e,catalog:t,defaultCollapsed:n=!0}){let[r,s]=(0,x.useState)(0),{sortMode:p,setSortMode:m,orderBy:_}=b(),[w,T]=(0,x.useState)(!n),D=c(),O=(0,x.useRef)(!1);(0,x.useEffect)(()=>{if(!O.current){O.current=!0;return}s(0)},[e]);let k=t.filter(C).filter(e=>e.type===`retryWaste`),A=[...k].sort((e,t)=>a[e.impactBand]-a[t.impactBand]||(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0)),j=_(A,e=>[e],e=>e.stageId),M=D?j.findIndex(e=>e===D.finding):null,{totalPages:N,effectivePage:P,visible:F}=v(j,r,s,M);return k.length===0?null:(0,S.jsxs)(o,{title:`Retry Waste`,impactBand:d(k),badges:(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(i,{type:`retryWaste`,impactBand:d(k)}),g(k,k.length,w)?(0,S.jsx)(y,{mode:p,onChange:e=>{m(e),s(0)}}):null]}),open:w,onOpenChange:T,summary:(0,S.jsx)(f,{value:u(l(A[0])),context:`${k.length} item${k.length===1?``:`s`} flagged`}),children:[(0,S.jsx)(`ul`,{className:`space-y-3`,children:F.map(e=>(0,S.jsx)(E,{finding:e},e.id))}),(0,S.jsx)(h,{page:P,totalPages:N,onPrev:()=>s(e=>e-1),onNext:()=>s(e=>e+1)})]})}export{D as RetryWaste};
@@ -0,0 +1 @@
1
+ import{p as e}from"./plan-graph-vendor-B0sEms9Z.js";import{N as t}from"./index-3vlFVNCg.js";var n=e();function r({page:e,totalPages:r,onPrev:i,onNext:a,renderJumpControl:o}){return r<=1?null:(0,n.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs ${o?`justify-between`:`justify-end`}`,children:[o?.(),(0,n.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,n.jsx)(t,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable tap-target-comfortable--sm`,onClick:i,disabled:e===0,children:`Previous`}),(0,n.jsxs)(`span`,{className:`text-muted-foreground`,children:[`Page `,e+1,` of `,r]}),(0,n.jsx)(t,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable tap-target-comfortable--sm`,onClick:a,disabled:e===r-1,children:`Next`})]})]})}export{r as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{i as r}from"./useRecentFiles-D0OA_EOK.js";import{O as i,Pt as a,at as o,gt as s,i as c,l,lt as u,mt as d,yt as f}from"./index-3vlFVNCg.js";import{t as p}from"./WidgetLeadSummary-BdUUi7L5.js";import{n as m}from"./StagePill-BlMOW_pU.js";import{t as h}from"./ImpactEstimate-BGt-4WX5.js";import{t as g}from"./RowPagination-BLsm8I6i.js";import{r as _}from"./impact-sort-DxaUheWV.js";import{n as v,t as y}from"./finding-anchor-DEV8JvgH.js";import{t as b}from"./usePagedRows-jNUWgVTD.js";import{n as x,t as S}from"./useSortMode-BaeAA5cw.js";import{t as C}from"./StageHeader-BTzGkK8k.js";import{a as w,i as T,n as E,r as D,t as O}from"./select-kuy1MiAo.js";import{t as k}from"./PlanExplorer-_2oB5ouy.js";var A=e(t(),1),j=n();function M({entry:e,appModel:t}){let n=a(),i=v([e.shuffle]),o=t.stages.get(e.stageId),c=o?s(o):null,l=n===`advanced`&&r(e.stageId,t);return(0,j.jsxs)(`div`,{ref:i.ref,tabIndex:i.tabIndex,"data-flashed":i.dataFlashed,className:`space-y-2 ${y} transition-colors ${i.flashClassName}`,children:[(0,j.jsx)(C,{stageId:e.stageId,appModel:t}),(0,j.jsxs)(`p`,{className:`text-sm`,children:[`Shuffle read: `,(0,j.jsx)(`strong`,{children:u(d(e.shuffle))}),` · `,`Write: `,u(o?.shuffleWriteBytes??0)]}),(0,j.jsx)(h,{finding:e.shuffle}),c||l?(0,j.jsxs)(`div`,{className:`space-y-2 pt-1`,children:[c?(0,j.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Try `,(0,j.jsxs)(`code`,{children:[`spark.sql.shuffle.partitions = `,c.recommended]}),`: current`,` `,c.current,` tasks, target 128 MB per partition`]}):null,l?(0,j.jsx)(k,{stageId:e.stageId,appModel:t}):null]}):null]})}var N=(0,A.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let[r,a]=(0,A.useState)(0),[s,h]=(0,A.useState)(!n),{sortMode:v,setSortMode:y,orderBy:C}=S(),k=l(),{shuffleFindings:N,sorted:P,orderedEntries:F}=(0,A.useMemo)(()=>{let e=t.filter(e=>e.type===`shuffle`),n=[...e.filter(e=>e.stageId!=null).map(e=>({stageId:e.stageId,shuffle:e,impactBand:e.impactBand,peak:d(e)}))].sort((e,t)=>o[e.impactBand]-o[t.impactBand]||t.peak-e.peak);return{shuffleFindings:e,sorted:n,orderedEntries:C(n,e=>[e.shuffle],e=>e.stageId)}},[t,v]),I=k?F.findIndex(e=>e.shuffle===k.finding):null,{totalPages:L,effectivePage:R,visible:z}=b(F,r,a,I);if(N.length===0){let t=0;for(let n of e.stages.values())t=Math.max(t,n.shuffleReadBytes??0);return(0,j.jsx)(c,{title:`Shuffle I/O`,open:s,onOpenChange:h,summary:(0,j.jsx)(p,{value:u(t),context:`no issue detected: peak shuffle read`}),children:(0,j.jsx)(`div`,{className:`flex flex-col gap-1`,children:(0,j.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No shuffle read/write issues detected.`})})})}let B=f(N),V=F.map(e=>({id:e.stageId})),H=_(N,P.length,s);return(0,j.jsx)(c,{title:`Shuffle I/O`,impactBand:B,open:s,onOpenChange:h,summary:(0,j.jsx)(p,{value:u(P[0].peak),context:`Peak shuffle read · ${P.length} stage${P.length===1?``:`s`} flagged`}),badges:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(i,{type:`shuffle`,impactBand:B??`info`}),H?(0,j.jsx)(x,{mode:v,onChange:e=>{y(e),a(0)}}):null]}),children:(0,j.jsxs)(`div`,{className:`space-y-4`,children:[(0,j.jsx)(m,{pills:V}),z.map(t=>(0,j.jsx)(M,{entry:t,appModel:e},t.stageId)),(0,j.jsx)(g,{page:R,totalPages:L,onPrev:()=>a(e=>e-1),onNext:()=>a(e=>e+1),renderJumpControl:()=>(0,j.jsxs)(O,{value:String(R*6),onValueChange:e=>a(Math.floor(Number(e)/6)),children:[(0,j.jsx)(T,{size:`sm`,"aria-label":`Jump to stage`,children:(0,j.jsx)(w,{placeholder:`Jump to stage`})}),(0,j.jsx)(E,{children:F.map((e,t)=>(0,j.jsxs)(D,{value:String(t),children:[`Stage `,e.stageId,` (`,u(e.peak),`)`]},e.stageId))})]})})]})})});export{N as ShuffleIO};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{ft as r,mt as i}from"./index-3vlFVNCg.js";import{t as a}from"./StageFindingGroup-AyI7BMd3.js";var o=e(t(),1),s=n();function c(e){return`${e.metric}: ${r(`ratio`,i(e))}`}var l=(0,o.memo)(function(e){return(0,s.jsx)(a,{...e,type:`skew`,title:`Task Skew`,idPrefix:`skew`,findingLabel:c})});export{l as Skew};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{D as r,O as i,at as a,ft as o,i as s,l as c,mt as l}from"./index-3vlFVNCg.js";import{t as u}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as d}from"./ImpactEstimate-BGt-4WX5.js";import{t as f}from"./RowPagination-BLsm8I6i.js";import{r as p}from"./impact-sort-DxaUheWV.js";import{n as m}from"./finding-anchor-DEV8JvgH.js";import{t as h}from"./usePagedRows-jNUWgVTD.js";import{n as g,t as _}from"./useSortMode-BaeAA5cw.js";import{t as v}from"./StageHeader-BTzGkK8k.js";var y=e(t(),1),b=n();function x(e){let t=l(e);if(e.metric===`execMaxMedianRatio`)return`Executor ${e.executorId}: ${o(`ratio`,t)} median on ${e.dimension??`this metric`}`;let n=Math.round((e.hostTaskShare??0)*100);return e.metric===`hostDurationShare`?`${e.host}: ${o(`pctFraction`,t)} of this stage's task time (${o(`pct`,n)} of tasks)`:`${e.host}: ${o(`ratio`,t)} median task time (${o(`pct`,n)} of tasks)`}function S(e){if(e.metric!==`hostDurationShare`&&e.metric!==`execMaxMedianRatio`)return null;let t=e.recommendation??``,n=t.indexOf(`: `);return n===-1?null:t.slice(n)}function C({finding:e,appModel:t}){let n=m([e]),i=S(e);return(0,b.jsxs)(`li`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-1 text-sm transition-colors ${n.flashClassName}`,children:[(0,b.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,b.jsx)(r,{impactBand:e.impactBand}),e.stageId==null?null:(0,b.jsx)(v,{stageId:e.stageId,appModel:t})]}),(0,b.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[x(e),i]}),(0,b.jsx)(d,{finding:e}),i==null?(0,b.jsx)(`p`,{className:`text-muted-foreground pt-1`,children:e.recommendation}):null]})}var w=(0,y.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let{sortMode:r,setSortMode:o,orderBy:l}=_(),[d,m]=(0,y.useState)(!n),[v,S]=(0,y.useState)(0),w=t.filter(e=>e.type===`slowHost`).slice().sort((e,t)=>a[e.impactBand]-a[t.impactBand]),T=l(w,e=>[e],e=>e.stageId??null),E=c(),D=E?T.findIndex(e=>e===E.finding):null,{totalPages:O,effectivePage:k,visible:A}=h(T,v,S,D);return w.length===0?null:(0,b.jsxs)(s,{title:`Slow Executor Host`,impactBand:w[0].impactBand,badges:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(i,{type:`slowHost`,impactBand:w[0].impactBand}),p(w,w.length,d)?(0,b.jsx)(g,{mode:r,onChange:o}):null]}),open:d,onOpenChange:m,summary:(0,b.jsx)(u,{value:x(w[0]),context:`${w.length} issue${w.length===1?``:`s`} flagged`}),children:[(0,b.jsx)(`ul`,{className:`space-y-2`,children:A.map(t=>(0,b.jsx)(C,{finding:t,appModel:e},t.id))}),(0,b.jsx)(f,{page:k,totalPages:O,onPrev:()=>S(e=>e-1),onNext:()=>S(e=>e+1)})]})});export{w as SlowHost};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{S as r}from"./useRecentFiles-D0OA_EOK.js";import{O as i,at as a,i as o,k as s,l as c,r as l,yt as u}from"./index-3vlFVNCg.js";import{t as d}from"./WidgetLeadSummary-BdUUi7L5.js";import{n as f}from"./StagePill-BlMOW_pU.js";import{t as p}from"./ImpactEstimate-BGt-4WX5.js";import{t as m}from"./RowPagination-BLsm8I6i.js";import{i as h,r as g}from"./impact-sort-DxaUheWV.js";import{n as _,t as v}from"./finding-anchor-DEV8JvgH.js";import{t as y}from"./usePagedRows-jNUWgVTD.js";import{n as b,t as x}from"./useSortMode-BaeAA5cw.js";var S=e(t(),1),C=n();function w({finding:e}){let t=_([e]);return(0,C.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-2 ${v} transition-colors ${t.flashClassName}`,children:[e.stageIds&&e.stageIds.length>0?(0,C.jsx)(f,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,C.jsxs)(`p`,{children:[e.recommendation,` `,(0,C.jsx)(p,{finding:e})]})]})}var T=(0,S.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:n,setSortMode:f,orderBy:p}=x(),[_,v]=(0,S.useState)(!t),[T,E]=(0,S.useState)(0),{findings:D,pills:O}=(0,S.useMemo)(()=>{let t=e.filter(e=>e.type===`smallFiles`).sort((e,t)=>a[e.impactBand]-a[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds??[]))].map(e=>({id:e}))}},[e,n]),k=p(D,e=>[e],h),A=c(),j=A?k.findIndex(e=>e===A.finding):null,{totalPages:M,effectivePage:N,visible:P}=y(k,T,E,j);return D.length===0?null:(0,C.jsxs)(o,{title:`Excessive Small Files`,impactBand:u(D),open:_,onOpenChange:v,badges:(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(i,{type:`smallFiles`,impactBand:u(D)??`info`,className:l}),g(D,D.length,_)?(0,C.jsx)(b,{mode:n,onChange:f}):null]}),statusBadge:(0,C.jsx)(s,{children:(0,C.jsx)(r,{confidence:D[0].confidence,validationRequired:D[0].validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,C.jsx)(d,{value:`${O.length} stage${O.length===1?``:`s`}`,context:`${D.length} finding${D.length===1?``:`s`} flagged`}),children:[(0,C.jsx)(`ul`,{className:`space-y-3 text-sm`,children:P.map(e=>(0,C.jsx)(w,{finding:e},e.id))}),(0,C.jsx)(m,{page:N,totalPages:M,onPrev:()=>E(e=>e-1),onNext:()=>E(e=>e+1)})]})});export{T as SmallFiles};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{D as r,O as i,at as a,i as o,l as s,mt as c,ut as l}from"./index-3vlFVNCg.js";import{t as u}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as d}from"./ImpactEstimate-BGt-4WX5.js";import{t as f}from"./RowPagination-BLsm8I6i.js";import{r as p}from"./impact-sort-DxaUheWV.js";import{n as m}from"./finding-anchor-DEV8JvgH.js";import{t as h}from"./usePagedRows-jNUWgVTD.js";import{n as g,t as _}from"./useSortMode-BaeAA5cw.js";import{t as v}from"./StageHeader-BTzGkK8k.js";var y=e(t(),1),b=n();function x(e){return l(c(e))}function S({finding:e,appModel:t}){let n=m([e]);return(0,b.jsxs)(`li`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-1 text-sm transition-colors ${n.flashClassName}`,children:[(0,b.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,b.jsx)(r,{impactBand:e.impactBand}),e.stageId==null?null:(0,b.jsx)(v,{stageId:e.stageId,appModel:t}),(0,b.jsx)(`strong`,{children:x(e)})]}),(0,b.jsx)(d,{finding:e}),(0,b.jsx)(`p`,{className:`text-muted-foreground pt-1`,children:e.recommendation})]})}var C=(0,y.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let{sortMode:r,setSortMode:c,orderBy:l}=_(),[d,m]=(0,y.useState)(!n),[v,C]=(0,y.useState)(0),w=t.filter(e=>e.type===`speculationWaste`).slice().sort((e,t)=>a[e.impactBand]-a[t.impactBand]),T=l(w,e=>[e],e=>e.stageId??null),E=s(),D=E?T.findIndex(e=>e===E.finding):null,{totalPages:O,effectivePage:k,visible:A}=h(T,v,C,D);return w.length===0?null:(0,b.jsxs)(o,{title:`Speculation Waste`,impactBand:w[0].impactBand,badges:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(i,{type:`speculationWaste`,impactBand:w[0].impactBand}),p(w,w.length,d)?(0,b.jsx)(g,{mode:r,onChange:c}):null]}),open:d,onOpenChange:m,summary:(0,b.jsx)(u,{value:x(w[0]),context:`${w.length} issue${w.length===1?``:`s`} flagged`}),children:[(0,b.jsx)(`ul`,{className:`space-y-2`,children:A.map(t=>(0,b.jsx)(S,{finding:t,appModel:e},t.id))}),(0,b.jsx)(f,{page:k,totalPages:O,onPrev:()=>C(e=>e-1),onNext:()=>C(e=>e+1)})]})});export{C as SpeculationWaste};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t,_ as n,c as r,d as i,f as a,l as o,o as s,r as c,s as l,t as u,v as d}from"./charts-vendor-0VMaLVLN.js";import{p as f}from"./plan-graph-vendor-B0sEms9Z.js";import{B as p,R as m,S as h,T as g,V as _,i as v,w as y,z as b}from"./useRecentFiles-D0OA_EOK.js";import{A as x,D as S,Et as C,O as w,Pt as T,at as E,gt as ee,i as D,k as O,l as k,lt as A,mt as j,ot as M,st as N,w as P}from"./index-3vlFVNCg.js";import{t as F}from"./EmptyState-BCA3xioa.js";import{t as I}from"./downsample-WmNM1qc9.js";import{t as L}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as R}from"./StagePill-BlMOW_pU.js";import{t as z}from"./ImpactEstimate-BGt-4WX5.js";import{t as B}from"./RowPagination-BLsm8I6i.js";import{r as V}from"./impact-sort-DxaUheWV.js";import{n as H,t as U}from"./finding-anchor-DEV8JvgH.js";import{t as W}from"./usePagedRows-jNUWgVTD.js";import{n as G,t as K}from"./useSortMode-BaeAA5cw.js";import{t as q}from"./PlanExplorer-_2oB5ouy.js";var J=e(t(),1),Y=f(),X=240,Z=524288e3,Q=10;function $(e){let t=e.spillBytes>Z,n=e.gcPct>Q;return t&&n?`critical`:t||n?`warning`:`info`}function te(e){return y[$(e)]}function ne({active:e,payload:t}){if(!e||!t?.length)return null;let n=t[0]?.payload;if(!n)return null;let r=$(n);return(0,Y.jsxs)(`div`,{className:`rounded-md border border-border bg-popover px-2 py-1.5 text-xs text-popover-foreground shadow-md`,children:[(0,Y.jsxs)(`p`,{children:[A(n.spillBytes),` spilled`]}),(0,Y.jsxs)(`p`,{children:[n.gcPct.toFixed(1),`% GC`]}),(0,Y.jsxs)(`p`,{className:`mt-1 flex items-center gap-1.5 font-medium`,children:[(0,Y.jsx)(S,{impactBand:r}),r.toUpperCase()]})]})}function re({appModel:e}){let t=[];for(let n of e.stages.values()){let e=n.memoryBytesSpilled??0;e<=0||t.push({stageId:n.id,spillBytes:e,gcPct:n.gcPct??0,submittedAt:n.submittedAt??0})}if(t.length===0)return(0,Y.jsx)(F,{tone:`clean`,icon:C,title:`No stages spilled memory in this run.`});let f=I(t),h=[...f].sort((e,t)=>e.submittedAt-t.submittedAt).map(e=>({stage:`S${e.stageId}`,spillMB:e.spillBytes/1048576,gcPct:e.gcPct}));return(0,Y.jsxs)(m,{defaultValue:`scatter`,children:[(0,Y.jsxs)(p,{"aria-label":`Memory pressure view`,children:[(0,Y.jsx)(_,{value:`scatter`,children:`Scatter`}),(0,Y.jsx)(_,{value:`twin`,children:`Twin bars`})]}),(0,Y.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Spill and GC pressure both stem from tight executor memory, see`,` `,(0,Y.jsx)(x,{anchor:`#memory-model`,children:`how Spark’s memory model works`}),`.`]}),(0,Y.jsxs)(b,{value:`scatter`,children:[(0,Y.jsxs)(`div`,{className:`mb-1 flex items-center gap-3 text-xs text-muted-foreground`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(S,{impactBand:`critical`}),`CRITICAL`]}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(S,{impactBand:`warning`}),`WARNING`]}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(S,{impactBand:`info`}),`INFO`]})]}),(0,Y.jsx)(g,{ariaLabel:`Memory pressure scatter: spilled memory versus GC percent, one point per stage that spilled.`,height:X,table:{caption:`Memory spilled and GC percent by stage`,columns:[`Stage`,`Memory spilled`,`GC %`],rows:f.map(e=>[`S${e.stageId}`,A(e.spillBytes),`${e.gcPct.toFixed(1)}%`]),align:[`left`,`right`,`right`]},children:(0,Y.jsxs)(c,{children:[(0,Y.jsx)(a,{stroke:y.muted,strokeOpacity:.2}),(0,Y.jsx)(l,{type:`number`,dataKey:`spillBytes`,name:`Memory spilled`,tickFormatter:e=>A(e),tick:{fontSize:10}}),(0,Y.jsx)(s,{type:`number`,dataKey:`gcPct`,name:`GC %`,tick:{fontSize:10},width:32}),(0,Y.jsx)(d,{cursor:{strokeDasharray:`3 3`},content:ne}),(0,Y.jsx)(r,{data:f,name:`Spill vs. GC`,children:f.map(e=>(0,Y.jsx)(n,{fill:te(e)},e.stageId))})]})})]}),(0,Y.jsx)(b,{value:`twin`,children:(0,Y.jsx)(g,{ariaLabel:`Memory pressure by stage: spilled memory and GC percent across stages in submission order.`,height:X,table:{caption:`Spilled memory and GC percent by stage, submission order`,columns:[`Stage`,`Spill (MB)`,`GC %`],rows:h.map(e=>[e.stage,e.spillMB.toFixed(1),`${e.gcPct.toFixed(1)}%`]),align:[`left`,`right`,`right`]},children:(0,Y.jsxs)(u,{data:h,children:[(0,Y.jsx)(a,{stroke:y.muted,strokeOpacity:.2}),(0,Y.jsx)(l,{dataKey:`stage`,tick:{fontSize:10}}),(0,Y.jsx)(s,{yAxisId:`left`,tick:{fontSize:10},width:36}),(0,Y.jsx)(s,{yAxisId:`right`,orientation:`right`,tick:{fontSize:10},width:36}),(0,Y.jsx)(d,{}),(0,Y.jsx)(o,{yAxisId:`left`,dataKey:`spillMB`,name:`Spill (MB)`,fill:y.critical}),(0,Y.jsx)(i,{yAxisId:`right`,dataKey:`gcPct`,name:`GC %`,stroke:y.info,dot:!1})]})})})]})}function ie(e,t){return e.stages.get(t)?.spillClassification??`unclassified`}function ae({finding:e,appModel:t}){let n=H([e]),r=T(),i=t.stages.get(e.stageId),a=ie(t,e.stageId),o=a===`volume`&&i?ee(i):null,s=r===`advanced`&&v(e.stageId,t);return(0,Y.jsxs)(`div`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-2 ${U} transition-colors ${n.flashClassName}`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsx)(S,{impactBand:e.impactBand}),(0,Y.jsx)(P,{label:M[a],impactBand:e.impactBand,title:N[a]}),(0,Y.jsx)(R,{stageId:e.stageId})]}),(0,Y.jsx)(O,{children:(0,Y.jsx)(h,{confidence:e.confidence,validationRequired:e.validationRequired})})]}),(0,Y.jsxs)(`p`,{className:`text-sm`,children:[`Memory spilled: `,(0,Y.jsx)(`strong`,{children:A(j(e))}),` · `,`Disk: `,A(i?.diskBytesSpilled??0)]}),(0,Y.jsx)(z,{finding:e}),o?(0,Y.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Try: `,(0,Y.jsxs)(`code`,{children:[`spark.sql.shuffle.partitions = `,o.recommended]}),` (current ${o.current} tasks, target 128 MB per partition)`]}):null,e.recommendation?(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.recommendation}):null,s?(0,Y.jsx)(`div`,{className:`pt-1`,children:(0,Y.jsx)(q,{stageId:e.stageId,appModel:t})}):null]})}var oe=(0,J.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let{sortMode:r,setSortMode:i,orderBy:a}=K(),[o,s]=(0,J.useState)(!n),[c,l]=(0,J.useState)(0),{findings:u,sorted:d,orderedFindings:f}=(0,J.useMemo)(()=>{let e=t.filter(e=>e.type===`spill`&&e.stageId!=null),n=[...e].sort((e,t)=>(E[e.impactBand]??9)-(E[t.impactBand]??9)||(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0));return{findings:e,sorted:n,orderedFindings:a(n,e=>[e],e=>e.stageId)}},[t,r]),p=k(),m=p?f.findIndex(e=>e===p.finding):null,{totalPages:h,effectivePage:g,visible:_}=W(f,c,l,m);if(u.length===0){let t=0;for(let n of e.stages.values())t=Math.max(t,n.memoryBytesSpilled??0);return(0,Y.jsx)(D,{title:`Spill: no issue detected (max ${A(t)} spilled)`,children:(0,Y.jsx)(F,{tone:`clean`,icon:C,title:`No stages spilled memory in this run.`})})}let v=d[0].impactBand;return(0,Y.jsx)(D,{title:`Spill`,impactBand:v,badges:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(w,{type:`spill`,impactBand:v}),V(u,d.length,o)?(0,Y.jsx)(G,{mode:r,onChange:i}):null]}),open:o,onOpenChange:s,summary:(0,Y.jsx)(L,{value:A(typeof d[0].value==`number`?d[0].value:0),context:`peak · ${d.length} stage${d.length===1?``:`s`}`}),children:(0,Y.jsxs)(`div`,{className:`space-y-4`,children:[(0,Y.jsx)(re,{appModel:e}),_.map(t=>(0,Y.jsx)(ae,{finding:t,appModel:e},t.stageId)),(0,Y.jsx)(B,{page:g,totalPages:h,onPrev:()=>l(e=>e-1),onNext:()=>l(e=>e+1)})]})})});export{oe as Spill};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{D as r,O as i,at as a,i as o,l as s,yt as c}from"./index-3vlFVNCg.js";import{t as l}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as u}from"./StagePill-BlMOW_pU.js";import{t as d}from"./ImpactEstimate-BGt-4WX5.js";import{t as f}from"./RowPagination-BLsm8I6i.js";import{r as p}from"./impact-sort-DxaUheWV.js";import{n as m}from"./finding-anchor-DEV8JvgH.js";import{t as h}from"./usePagedRows-jNUWgVTD.js";import{n as g,t as _}from"./useSortMode-BaeAA5cw.js";var v=e(t(),1),y=n();function b(e){return e.stageId!=null}function x({finding:e}){let t=m([e]);return(0,y.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`flex flex-col gap-1 transition-colors ${t.flashClassName}`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,y.jsx)(u,{stageId:e.stageId}),(0,y.jsx)(r,{impactBand:e.impactBand})]}),(0,y.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Stage attempt failed outright. Reason: `,(0,y.jsx)(`strong`,{children:String(e.value)})]}),(0,y.jsx)(d,{finding:e}),e.recommendation?(0,y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.recommendation}):null]})}function S({appModel:e,catalog:t,defaultCollapsed:n=!0}){let[r,u]=(0,v.useState)(0),{sortMode:d,setSortMode:m,orderBy:S}=_(),[C,w]=(0,v.useState)(!n),T=s(),E=(0,v.useRef)(!1);(0,v.useEffect)(()=>{if(!E.current){E.current=!0;return}u(0)},[e]);let D=t.filter(b).filter(e=>e.type===`stageFailed`),O=S([...D].sort((e,t)=>a[e.impactBand]-a[t.impactBand]||e.stageId-t.stageId),e=>[e],e=>e.stageId),k=T?O.findIndex(e=>e===T.finding):null,{totalPages:A,effectivePage:j,visible:M}=h(O,r,u,k);return D.length===0?null:(0,y.jsxs)(o,{title:`Failed Stages`,impactBand:c(D),badges:(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(i,{type:`stageFailed`,impactBand:c(D)}),p(D,D.length,C)?(0,y.jsx)(g,{mode:d,onChange:e=>{m(e),u(0)}}):null]}),open:C,onOpenChange:w,summary:(0,y.jsx)(l,{value:D.length,context:`stage${D.length===1?``:`s`} failed outright`}),children:[(0,y.jsx)(`ul`,{className:`space-y-3`,children:M.map(e=>(0,y.jsx)(x,{finding:e},e.id))}),(0,y.jsx)(f,{page:j,totalPages:A,onPrev:()=>u(e=>e-1),onNext:()=>u(e=>e+1)})]})}export{S as StageFailed};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{S as r,i}from"./useRecentFiles-D0OA_EOK.js";import{D as a,Dt as o,O as s,Ot as c,Pt as l,at as u,i as d,k as f,l as p,ut as m,yt as h}from"./index-3vlFVNCg.js";import{n as g,t as _}from"./DurationHistogram-ltF-7M0A.js";import{t as v}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as y}from"./ImpactEstimate-BGt-4WX5.js";import{t as b}from"./RowPagination-BLsm8I6i.js";import{r as x}from"./impact-sort-DxaUheWV.js";import{n as S,t as C}from"./finding-anchor-DEV8JvgH.js";import{t as w}from"./usePagedRows-jNUWgVTD.js";import{n as T,t as E}from"./useSortMode-BaeAA5cw.js";import{t as D}from"./StageHeader-BTzGkK8k.js";import{t as O}from"./PlanExplorer-_2oB5ouy.js";var k=e(t(),1),A=n();function j({expanded:e,onClick:t,label:n,location:r,controlsId:i}){let a=r?` for ${r}`:``;return(0,A.jsxs)(`button`,{type:`button`,"aria-expanded":e,"aria-controls":i,"aria-label":`${e?`Hide`:`Show`} ${n.toLowerCase()}${a}`,onClick:t,className:`tap-target-comfortable tap-target-comfortable--sm flex w-fit cursor-pointer items-center gap-1 text-xs font-medium text-primary underline underline-offset-2`,children:[n,e?(0,A.jsx)(o,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}):(0,A.jsx)(c,{"aria-hidden":`true`,className:`size-3.5 shrink-0`})]})}function M(e){let[t,n]=(0,k.useState)(!1),[r,i]=(0,k.useState)(null),[a,o]=(0,k.useState)(!1),[s,c]=(0,k.useState)(!1),[l,u]=(0,k.useState)(!1);return{expanded:t,data:r,loading:a,error:s,toggle:()=>{let r=!t;n(r),r&&e&&!l&&!a&&(o(!0),e().then(e=>i(e)).catch(()=>c(!0)).finally(()=>{u(!0),o(!1)}))}}}function N({group:e,appModel:t,getTaskData:n,idPrefix:o,findingLabel:s}){let{exportMode:c,getTaskData:u}=g(n),{expanded:d,data:p,error:h,toggle:v}=M(u?()=>u(e.stageId):void 0),b=S(e.findings),x=t.stages.get(e.stageId),w=l()===`advanced`&&i(e.stageId,t),T=`${o}-stage-${e.stageId}-detail`;return(0,A.jsxs)(`div`,{ref:b.ref,tabIndex:b.tabIndex,"data-flashed":b.dataFlashed,className:`space-y-2 ${C} transition-colors ${b.flashClassName}`,children:[(0,A.jsx)(D,{stageId:e.stageId,appModel:t}),(0,A.jsx)(`ul`,{className:`flex flex-col gap-1.5`,children:e.findings.map((e,t)=>(0,A.jsxs)(`li`,{className:`flex flex-wrap items-center gap-2 text-xs text-muted-foreground`,children:[(0,A.jsx)(a,{impactBand:e.impactBand}),(0,A.jsx)(`span`,{children:s(e)}),(0,A.jsx)(y,{finding:e}),(0,A.jsx)(f,{children:(0,A.jsx)(r,{confidence:e.confidence,validationRequired:e.validationRequired})})]},t))}),x?.taskDurationP50==null?null:(0,A.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`P50 `,m(x.taskDurationP50),` · P95 `,m(x.taskDurationP95),` · Max`,` `,m(x.taskDurationMax)]}),e.slowHost?(0,A.jsxs)(`p`,{className:`flex items-start gap-2 text-xs`,children:[(0,A.jsx)(a,{impactBand:e.slowHost.impactBand,className:`mt-1`}),(0,A.jsxs)(`span`,{children:[(0,A.jsx)(`strong`,{children:`Slow host:`}),` `,e.slowHost.host,` (`,e.slowHost.value,`× median,`,` `,Math.round((e.slowHost.hostTaskShare??0)*100),`% of tasks)`]})]}):null,e.straggler?(0,A.jsxs)(`p`,{className:`flex items-start gap-2 text-xs`,children:[(0,A.jsx)(a,{impactBand:e.straggler.impactBand,className:`mt-1`}),(0,A.jsxs)(`span`,{children:[(0,A.jsx)(`strong`,{children:`Stragglers:`}),` `,(e.straggler.speculativeTasks??0)>0?`${e.straggler.speculativeTasks} speculative task${e.straggler.speculativeTasks===1?``:`s`}`:`${e.straggler.value}% of tasks > 4× P50`]})]}):null,(0,A.jsx)(j,{expanded:d,onClick:v,label:`Task detail`,location:`Stage ${e.stageId}`,controlsId:T}),d?(0,A.jsxs)(`div`,{id:T,className:`space-y-3 pt-1`,children:[p?(0,A.jsx)(_,{metrics:p.metrics,fieldNames:p.fieldNames,markers:{p50:x?.taskDurationP50,p95:x?.taskDurationP95}}):c?(0,A.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Task data isn’t included in exported reports.`}):h?(0,A.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Task data unavailable for this stage.`}):(0,A.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading task data…`}),w?(0,A.jsx)(O,{stageId:e.stageId,appModel:t}):null]}):null]})}var P=(0,k.memo)(function({appModel:e,catalog:t,getTaskData:n,defaultCollapsed:r=!0,type:i,title:a,idPrefix:o,findingLabel:c}){let[l,f]=(0,k.useState)(0),{sortMode:m,setSortMode:g,orderBy:_}=E(),[y,S]=(0,k.useState)(!r),{relevant:C,stageGroups:D,orderedGroups:O}=(0,k.useMemo)(()=>{let e=t.filter(e=>e.type===i),n=new Map;for(let t of e)t.stageId!=null&&(n.has(t.stageId)||n.set(t.stageId,[]),n.get(t.stageId).push(t));let r=[...n.entries()].map(([e,n])=>({stageId:e,findings:n,impactBand:h(n)??`info`,slowHost:t.find(t=>t.type===`slowHost`&&t.stageId===e),straggler:t.find(t=>t.type===`straggler`&&t.stageId===e)})).sort((e,t)=>u[e.impactBand]-u[t.impactBand]||e.stageId-t.stageId);return{relevant:e,stageGroups:r,orderedGroups:_(r,e=>e.findings,e=>e.stageId)}},[t,m,i]),j=p(),M=j?O.findIndex(e=>e.findings.some(e=>e===j.finding)):null,{totalPages:P,effectivePage:F,visible:I}=w(O,l,f,M);if(C.length===0)return null;let L=h(C);return(0,A.jsxs)(d,{title:a,impactBand:L,badges:(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(s,{type:i,impactBand:L??`info`}),x(C,D.length,y)?(0,A.jsx)(T,{mode:m,onChange:g}):null]}),open:y,onOpenChange:S,summary:(0,A.jsx)(v,{value:`${D.length} stage${D.length===1?``:`s`}`,context:`${C.length} finding${C.length===1?``:`s`} flagged`}),children:[(0,A.jsx)(`div`,{className:`space-y-3`,children:I.map(t=>(0,A.jsx)(N,{group:t,appModel:e,getTaskData:n,idPrefix:o,findingLabel:c},t.stageId))}),(0,A.jsx)(b,{page:F,totalPages:P,onPrev:()=>f(e=>e-1),onNext:()=>f(e=>e+1)})]})});export{P as t};