sparkforensics-server 0.5.2 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. package/index.js +16 -7
  2. package/package.json +1 -1
  3. package/public/assets/AutoscalingChurn-DenWKTv-.js +1 -0
  4. package/public/assets/CacheUtilization-DLz7NdjV.js +1 -0
  5. package/public/assets/CachingOpportunity-zpQIqhzm.js +1 -0
  6. package/public/assets/ChartTheme-DAiARbLP.js +8 -0
  7. package/public/assets/ColdStart-C-9HjxWl.js +1 -0
  8. package/public/assets/ConfigAudit-D0V9tcrJ.js +1 -0
  9. package/public/assets/CoreUsageArea-yeerrljd.js +1 -0
  10. package/public/assets/Dashboard-DkUPrHKV.js +1 -0
  11. package/public/assets/DisclosureContext-DK1_iz6J.js +1 -0
  12. package/public/assets/DuplicatePlanSubtree-xDNDbCd3.js +1 -0
  13. package/public/assets/DurationHistogram-B6jsE0Ov.js +1 -0
  14. package/public/assets/EmptyState-C1uL40VU.js +1 -0
  15. package/public/assets/ExecutorUtilization-DXDZKmSc.js +1 -0
  16. package/public/assets/GcPressure-MRf7I4IG.js +1 -0
  17. package/public/assets/ImpactEstimate-Dm3xWbzV.js +1 -0
  18. package/public/assets/IncompleteRun-CaLOhMtf.js +1 -0
  19. package/public/assets/JobFailures-CzmzlvhO.js +1 -0
  20. package/public/assets/MemoryUtilization-AWUMUjCH.js +1 -0
  21. package/public/assets/NestedLoopJoin-C9sNr6Ss.js +1 -0
  22. package/public/assets/OverBroadcast-BOmRE6ca.js +1 -0
  23. package/public/assets/PartitionHint-BL2EmJfE.js +1 -0
  24. package/public/assets/PartitionSizing-BzBySvUq.js +1 -0
  25. package/public/assets/PlanExplorer-DdiQRcJU.js +1 -0
  26. package/public/assets/PlanGraphRoute-CIH9gBuR.js +1 -0
  27. package/public/assets/PlanView-B1hxzFRs.js +2 -0
  28. package/public/assets/PythonUdf-DvgCCueD.js +1 -0
  29. package/public/assets/RetryWaste-uXXu_CyM.js +1 -0
  30. package/public/assets/RowPagination-C-LzWkI5.js +1 -0
  31. package/public/assets/RowStatusCluster-Dbtmte7l.js +1 -0
  32. package/public/assets/ShuffleIO-nALwzC1_.js +1 -0
  33. package/public/assets/Skew-CHMEKgvk.js +1 -0
  34. package/public/assets/SlowHost-yyvjpHk6.js +1 -0
  35. package/public/assets/SmallFiles-y6odJ97n.js +1 -0
  36. package/public/assets/SpeculationWaste-C-SD2LOt.js +1 -0
  37. package/public/assets/Spill-DHTMmOup.js +1 -0
  38. package/public/assets/StageFailed-CQ3DxC9R.js +1 -0
  39. package/public/assets/StageFindingGroup-BgYLyj5q.js +1 -0
  40. package/public/assets/StageHeader-CIETkjVZ.js +1 -0
  41. package/public/assets/StagePill--P7PDd3s.js +1 -0
  42. package/public/assets/StageShape-BIv8vx_o.js +1 -0
  43. package/public/assets/StageSlowness-MMqzERxN.js +1 -0
  44. package/public/assets/Straggler-BgrY7AyW.js +1 -0
  45. package/public/assets/TaskFailures-BHHyKYTs.js +1 -0
  46. package/public/assets/TinyTask-DDScNhCl.js +1 -0
  47. package/public/assets/UnderBroadcast-CGIC04TI.js +1 -0
  48. package/public/assets/WidgetLeadSummary-CXFZP00C.js +1 -0
  49. package/public/assets/button-DbpTz2yk.js +1 -0
  50. package/public/assets/charts-vendor-CtTxwTeu.js +59 -0
  51. package/public/assets/composite-C9Nu2EI9.js +1 -0
  52. package/public/assets/d3-vendor-DNlD2-cz.js +1 -0
  53. package/public/assets/detector-registry-Bp8hrLua.js +2 -0
  54. package/public/assets/downsample-WmNM1qc9.js +1 -0
  55. package/public/assets/finding-anchor-Dr40LkS9.js +1 -0
  56. package/public/assets/findings-of-type-BL2u3RGZ.js +1 -0
  57. package/public/assets/impact-sort-mC5ISgX8.js +1 -0
  58. package/public/assets/inbox-KPU1Gppm.js +1 -0
  59. package/public/assets/index-CaRVPvAT.css +2 -0
  60. package/public/assets/index-fDiwfuoO.js +14 -0
  61. package/public/assets/inertValue-L9VxV0VE.js +1 -0
  62. package/public/assets/instrument-sans-latin-ext-wdth-normal-C5E2Gvlv.woff2 +0 -0
  63. package/public/assets/instrument-sans-latin-wdth-normal-BVScPF0l.woff2 +0 -0
  64. package/public/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  65. package/public/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  66. package/public/assets/layout.worker-CLcBHxVp.js +3 -0
  67. package/public/assets/{parser-worker-CA5RxqKc.js → parser-worker-CRIOPMOW.js} +8 -8
  68. package/public/assets/plan-graph-vendor-Ce6d4HU6.js +7 -0
  69. package/public/assets/react-vendor-C6KcUD36.js +9 -0
  70. package/public/assets/select-BHqOqun5.js +1 -0
  71. package/public/assets/toggle-DPeN6aNa.js +1 -0
  72. package/public/assets/toggle-group-Kl3uyHSr.js +1 -0
  73. package/public/assets/usePagedRows-BafD6bEN.js +1 -0
  74. package/public/assets/useRecentFiles-DzJZAoOT.js +3 -0
  75. package/public/assets/useRegisterFieldControl-pQv-ZDoU.js +1 -0
  76. package/public/assets/useScrollLock-BCxn_dMp.js +1 -0
  77. package/public/assets/useSortMode-DjrAN-z4.js +1 -0
  78. package/public/docs/404.html +3 -7
  79. package/public/docs/assets/{app.eYTPqTeq.js → app.1gvzd5Zb.js} +1 -1
  80. package/public/docs/assets/chunks/@localSearchIndexroot.DS2TQP5_.js +1 -0
  81. package/public/docs/assets/chunks/{VPLocalSearchBox.DsZrQKQR.js → VPLocalSearchBox.CNxT3s0I.js} +1 -1
  82. package/public/docs/assets/chunks/{theme.DsTNE2pE.js → theme.C5lLqUv7.js} +2 -2
  83. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CqKM_jEG.js +1 -0
  84. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CqKM_jEG.lean.js +1 -0
  85. package/public/docs/assets/{contributor-guide_architecture_board-widgets_caching-and-memory.md.8bH1HnZp.js → contributor-guide_architecture_board-widgets_caching-and-memory.md.BYDo3ClR.js} +1 -1
  86. package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.ajUAVdbc.js +1 -0
  87. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.WqY74T0T.js +1 -0
  88. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.WqY74T0T.lean.js +1 -0
  89. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CHHgywoP.js +1 -0
  90. package/public/docs/assets/{contributor-guide_architecture_detector-contract.md.wj6Et6UD.lean.js → contributor-guide_architecture_detector-contract.md.CHHgywoP.lean.js} +1 -1
  91. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.DIz3_oz9.js +1 -0
  92. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.DIz3_oz9.lean.js +1 -0
  93. package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.WH4tRHPL.js +1 -0
  94. package/public/docs/assets/{contributor-guide_architecture_detector-contract_threshold-tables.md.CKjWG56Y.lean.js → contributor-guide_architecture_detector-contract_threshold-tables.md.WH4tRHPL.lean.js} +1 -1
  95. package/public/docs/assets/{contributor-guide_architecture_drill-down.md.CqZPrdo9.js → contributor-guide_architecture_drill-down.md.yB-Hz2XT.js} +1 -1
  96. package/public/docs/assets/{contributor-guide_architecture_drill-down.md.CqZPrdo9.lean.js → contributor-guide_architecture_drill-down.md.yB-Hz2XT.lean.js} +1 -1
  97. package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.BQZE04sw.js +1 -0
  98. package/public/docs/assets/{contributor-guide_architecture_drill-down_plan-graph.md.DwOozIEs.lean.js → contributor-guide_architecture_drill-down_plan-graph.md.BQZE04sw.lean.js} +1 -1
  99. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.K71YB-Rr.js +1 -0
  100. package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.CZv_ZGOp.lean.js → contributor-guide_architecture_impact-estimation.md.K71YB-Rr.lean.js} +1 -1
  101. package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.DLCAffwn.js +1 -0
  102. package/public/docs/assets/{contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.BUucRc0A.lean.js → contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.DLCAffwn.lean.js} +1 -1
  103. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.JFrzDMwo.js +1 -0
  104. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.JFrzDMwo.lean.js +1 -0
  105. package/public/docs/assets/contributor-guide_architecture_overview.md.nxkpOhgf.js +1 -0
  106. package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.U-9KMDFK.js +1 -0
  107. package/public/docs/assets/{contributor-guide_architecture_state-and-history_run-comparison-internals.md.CZA0JLtV.lean.js → contributor-guide_architecture_state-and-history_run-comparison-internals.md.U-9KMDFK.lean.js} +1 -1
  108. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BrSz8Ezh.js +1 -0
  109. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.B7rjSF_h.js +1 -0
  110. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.B7rjSF_h.lean.js +1 -0
  111. package/public/docs/assets/{contributor-guide_architecture_widget-rendering_list-sort-mode.md.BuHKgH0C.js → contributor-guide_architecture_widget-rendering_list-sort-mode.md.37hcZJ7q.js} +1 -1
  112. package/public/docs/assets/{contributor-guide_architecture_widget-rendering_row-expand-contract.md.ZT89u9f1.js → contributor-guide_architecture_widget-rendering_row-expand-contract.md.mK_VmAWk.js} +1 -1
  113. package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.BAnhi2-d.js → contributor-guide_architecture_worker-protocol.md.Br6OE7RW.js} +1 -1
  114. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.Br6OE7RW.lean.js +1 -0
  115. package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.IVyaXrGe.js +1 -0
  116. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_cli-and-mcp.md.DC1YqXBp.lean.js → contributor-guide_architecture_worker-protocol_cli-and-mcp.md.IVyaXrGe.lean.js} +1 -1
  117. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DSVFPpWb.js → contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DVSXn-bb.js} +1 -1
  118. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_evidence-availability.md.CjimIDBY.js → contributor-guide_architecture_worker-protocol_evidence-availability.md.D3S5cyOW.js} +2 -2
  119. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_evidence-availability.md.CjimIDBY.lean.js → contributor-guide_architecture_worker-protocol_evidence-availability.md.D3S5cyOW.lean.js} +1 -1
  120. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.CtmCU57I.js +1 -0
  121. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_evidence-report.md.DVGZOWvW.lean.js → contributor-guide_architecture_worker-protocol_evidence-report.md.CtmCU57I.lean.js} +1 -1
  122. package/public/docs/assets/contributor-guide_contributing.md.DBW4drtZ.js +1 -0
  123. package/public/docs/assets/{contributor-guide_development-setup.md.D9bu4j_c.js → contributor-guide_development-setup.md.B21ZTDhn.js} +3 -3
  124. package/public/docs/assets/contributor-guide_development-setup.md.B21ZTDhn.lean.js +1 -0
  125. package/public/docs/assets/contributor-guide_testing.md.DpkozNoG.js +4 -0
  126. package/public/docs/assets/{contributor-guide_testing.md.By6XGR9a.lean.js → contributor-guide_testing.md.DpkozNoG.lean.js} +1 -1
  127. package/public/docs/assets/{index.md.CHJVslga.js → index.md.lMm7SUMz.js} +1 -1
  128. package/public/docs/assets/{index.md.CHJVslga.lean.js → index.md.lMm7SUMz.lean.js} +1 -1
  129. package/public/docs/assets/instrument-sans-latin-ext-wdth-normal.C5E2Gvlv.woff2 +0 -0
  130. package/public/docs/assets/instrument-sans-latin-wdth-normal.BVScPF0l.woff2 +0 -0
  131. package/public/docs/assets/jetbrains-mono-cyrillic-wght-normal.D73BlboJ.woff2 +0 -0
  132. package/public/docs/assets/jetbrains-mono-greek-wght-normal.Bw9x6K1M.woff2 +0 -0
  133. package/public/docs/assets/jetbrains-mono-latin-ext-wght-normal.DBQx-q_a.woff2 +0 -0
  134. package/public/docs/assets/jetbrains-mono-latin-wght-normal.B9CIFXIH.woff2 +0 -0
  135. package/public/docs/assets/jetbrains-mono-vietnamese-wght-normal.Bt-aOZkq.woff2 +0 -0
  136. package/public/docs/assets/style.Cfxqlj0y.css +1 -0
  137. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.C0pcQoNc.js +29 -0
  138. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.C0pcQoNc.lean.js +1 -0
  139. package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.CGaxPX_1.js +1 -0
  140. package/public/docs/assets/{user-guide_getting-started_tuning-thresholds.md.B_MyjyZm.js → user-guide_getting-started_tuning-thresholds.md.BGVE-wrc.js} +2 -2
  141. package/public/docs/assets/{user-guide_getting-started_tuning-thresholds.md.B_MyjyZm.lean.js → user-guide_getting-started_tuning-thresholds.md.BGVE-wrc.lean.js} +1 -1
  142. package/public/docs/assets/{user-guide_mcp-tools.md.C65SjWUL.js → user-guide_mcp-tools.md.49r3L2YE.js} +1 -1
  143. package/public/docs/assets/{user-guide_mcp-tools_compare-runs.md.Cc_gLoix.js → user-guide_mcp-tools_compare-runs.md.BQ_kIptC.js} +11 -6
  144. package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.BQ_kIptC.lean.js +1 -0
  145. package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.azCZXkH8.js +44 -0
  146. package/public/docs/assets/{user-guide_mcp-tools_diagnose-run.md.BP1vnHA5.lean.js → user-guide_mcp-tools_diagnose-run.md.azCZXkH8.lean.js} +1 -1
  147. package/public/docs/assets/{user-guide_mcp-tools_evaluate-budgets.md.BB0nDY3Z.js → user-guide_mcp-tools_evaluate-budgets.md.dpQpRQ7z.js} +2 -2
  148. package/public/docs/assets/{user-guide_mcp-tools_evaluate-budgets.md.BB0nDY3Z.lean.js → user-guide_mcp-tools_evaluate-budgets.md.dpQpRQ7z.lean.js} +1 -1
  149. package/public/docs/assets/{user-guide_mcp-tools_get-finding-evidence.md.rKyu4wts.js → user-guide_mcp-tools_get-finding-evidence.md.CH6FkNLX.js} +2 -1
  150. package/public/docs/assets/{user-guide_mcp-tools_get-finding-evidence.md.rKyu4wts.lean.js → user-guide_mcp-tools_get-finding-evidence.md.CH6FkNLX.lean.js} +1 -1
  151. package/public/docs/assets/{user-guide_mcp-tools_get-run-summary.md.DpxZ4ZNp.js → user-guide_mcp-tools_get-run-summary.md.EhaIsele.js} +1 -1
  152. package/public/docs/assets/user-guide_run-comparison.md.B_LOkdBf.js +1 -0
  153. package/public/docs/assets/user-guide_run-comparison.md.B_LOkdBf.lean.js +1 -0
  154. package/public/docs/assets/user-guide_understanding-findings.md.C4riKCKl.js +1 -0
  155. package/public/docs/assets/user-guide_understanding-findings.md.C4riKCKl.lean.js +1 -0
  156. package/public/docs/contributor-guide/architecture/board-widgets/caching-and-memory.html +6 -10
  157. package/public/docs/contributor-guide/architecture/board-widgets/plan-advisor.html +6 -10
  158. package/public/docs/contributor-guide/architecture/board-widgets/visual-system-and-templating.html +6 -10
  159. package/public/docs/contributor-guide/architecture/board-widgets.html +6 -10
  160. package/public/docs/contributor-guide/architecture/detector-contract/plan-attribution.html +6 -10
  161. package/public/docs/contributor-guide/architecture/detector-contract/threshold-tables.html +6 -10
  162. package/public/docs/contributor-guide/architecture/detector-contract.html +6 -10
  163. package/public/docs/contributor-guide/architecture/drill-down/plan-graph.html +6 -10
  164. package/public/docs/contributor-guide/architecture/drill-down.html +6 -10
  165. package/public/docs/contributor-guide/architecture/impact-estimation/caveats-tuning-and-coverage.html +6 -10
  166. package/public/docs/contributor-guide/architecture/impact-estimation/stage-union-rollup.html +6 -10
  167. package/public/docs/contributor-guide/architecture/impact-estimation.html +6 -10
  168. package/public/docs/contributor-guide/architecture/index.html +5 -9
  169. package/public/docs/contributor-guide/architecture/overview.html +6 -10
  170. package/public/docs/contributor-guide/architecture/state-and-history/history-server-intake.html +5 -9
  171. package/public/docs/contributor-guide/architecture/state-and-history/run-comparison-internals.html +6 -10
  172. package/public/docs/contributor-guide/architecture/state-and-history.html +5 -9
  173. package/public/docs/contributor-guide/architecture/widget-rendering/findings-tab.html +6 -10
  174. package/public/docs/contributor-guide/architecture/widget-rendering/investigation-routing.html +5 -9
  175. package/public/docs/contributor-guide/architecture/widget-rendering/list-sort-mode.html +6 -10
  176. package/public/docs/contributor-guide/architecture/widget-rendering/reference-section.html +5 -9
  177. package/public/docs/contributor-guide/architecture/widget-rendering/row-expand-contract.html +6 -10
  178. package/public/docs/contributor-guide/architecture/widget-rendering.html +6 -10
  179. package/public/docs/contributor-guide/architecture/worker-protocol/cli-and-mcp.html +6 -10
  180. package/public/docs/contributor-guide/architecture/worker-protocol/core-and-event-validation.html +6 -10
  181. package/public/docs/contributor-guide/architecture/worker-protocol/evidence-availability.html +7 -11
  182. package/public/docs/contributor-guide/architecture/worker-protocol/evidence-report.html +6 -10
  183. package/public/docs/contributor-guide/architecture/worker-protocol.html +6 -10
  184. package/public/docs/contributor-guide/contributing.html +6 -10
  185. package/public/docs/contributor-guide/development-setup.html +8 -12
  186. package/public/docs/contributor-guide/testing.html +9 -10
  187. package/public/docs/favicon.svg +2 -2
  188. package/public/docs/hashmap.json +1 -1
  189. package/public/docs/index.html +6 -10
  190. package/public/docs/logo-dark.svg +1 -0
  191. package/public/docs/logo-light.svg +1 -0
  192. package/public/docs/tuning-reference/anti-patterns.html +5 -9
  193. package/public/docs/tuning-reference/aqe.html +5 -9
  194. package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +5 -9
  195. package/public/docs/tuning-reference/bottleneck-cold-start.html +5 -9
  196. package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +5 -9
  197. package/public/docs/tuning-reference/bottleneck-failures.html +5 -9
  198. package/public/docs/tuning-reference/bottleneck-gc.html +5 -9
  199. package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +5 -9
  200. package/public/docs/tuning-reference/bottleneck-memory-utilization.html +5 -9
  201. package/public/docs/tuning-reference/bottleneck-retry-waste.html +5 -9
  202. package/public/docs/tuning-reference/bottleneck-shuffle.html +5 -9
  203. package/public/docs/tuning-reference/bottleneck-skew.html +5 -9
  204. package/public/docs/tuning-reference/bottleneck-slow-host.html +5 -9
  205. package/public/docs/tuning-reference/bottleneck-small-files.html +5 -9
  206. package/public/docs/tuning-reference/bottleneck-spill.html +5 -9
  207. package/public/docs/tuning-reference/bottleneck-straggler.html +5 -9
  208. package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +5 -9
  209. package/public/docs/tuning-reference/bottleneck-utilization.html +5 -9
  210. package/public/docs/tuning-reference/caching.html +5 -9
  211. package/public/docs/tuning-reference/cluster-config.html +5 -9
  212. package/public/docs/tuning-reference/config.html +5 -9
  213. package/public/docs/tuning-reference/data-formats.html +5 -9
  214. package/public/docs/tuning-reference/index.html +5 -9
  215. package/public/docs/tuning-reference/intro.html +5 -9
  216. package/public/docs/tuning-reference/joins.html +5 -9
  217. package/public/docs/tuning-reference/memory-model.html +5 -9
  218. package/public/docs/tuning-reference/metrics.html +5 -9
  219. package/public/docs/tuning-reference/partitioning.html +5 -9
  220. package/public/docs/tuning-reference/pyspark.html +5 -9
  221. package/public/docs/tuning-reference/shuffle.html +5 -9
  222. package/public/docs/tuning-reference/spark-architecture.html +5 -9
  223. package/public/docs/tuning-reference/table-formats.html +5 -9
  224. package/public/docs/user-guide/alternative-log-retrieval/managed-platforms.html +5 -9
  225. package/public/docs/user-guide/alternative-log-retrieval/ssh-bastion.html +5 -9
  226. package/public/docs/user-guide/alternative-log-retrieval.html +5 -9
  227. package/public/docs/user-guide/getting-started/ci-and-automation.html +17 -15
  228. package/public/docs/user-guide/getting-started/reading-the-dashboard.html +6 -10
  229. package/public/docs/user-guide/getting-started/regression-metric-keys.html +5 -9
  230. package/public/docs/user-guide/getting-started/tuning-thresholds.html +7 -11
  231. package/public/docs/user-guide/getting-started.html +5 -9
  232. package/public/docs/user-guide/mcp-tools/compare-runs.html +16 -15
  233. package/public/docs/user-guide/mcp-tools/diagnose-run.html +28 -11
  234. package/public/docs/user-guide/mcp-tools/evaluate-budgets.html +6 -10
  235. package/public/docs/user-guide/mcp-tools/get-finding-documentation.html +5 -9
  236. package/public/docs/user-guide/mcp-tools/get-finding-evidence.html +7 -10
  237. package/public/docs/user-guide/mcp-tools/get-reference-doc.html +5 -9
  238. package/public/docs/user-guide/mcp-tools/get-run-summary.html +6 -10
  239. package/public/docs/user-guide/mcp-tools/list-runs.html +5 -9
  240. package/public/docs/user-guide/mcp-tools.html +6 -10
  241. package/public/docs/user-guide/run-comparison/how-stages-are-matched.html +5 -9
  242. package/public/docs/user-guide/run-comparison.html +6 -10
  243. package/public/docs/user-guide/understanding-findings.html +6 -10
  244. package/public/export-template.html +46 -46
  245. package/public/favicon.svg +2 -2
  246. package/public/index.html +8 -10
  247. package/public/sample-runs/sample-run.ndjson.gz +0 -0
  248. package/vendor-core/allocation.js +126 -39
  249. package/vendor-core/analyzer.js +85 -58
  250. package/vendor-core/api-merge-writes.js +3 -0
  251. package/vendor-core/aqe-skew.js +347 -0
  252. package/vendor-core/cli/budgets.js +6 -4
  253. package/vendor-core/cli/collect-run-pair.js +89 -0
  254. package/vendor-core/cli/collect-run-worker.js +16 -0
  255. package/vendor-core/cli/collect-run.js +1 -2
  256. package/vendor-core/cli/native-zstd.js +12 -16
  257. package/vendor-core/comparability.js +234 -0
  258. package/vendor-core/comparison-output.js +15 -7
  259. package/vendor-core/comparison-verdict.js +105 -25
  260. package/vendor-core/core-source-hash.txt +1 -1
  261. package/vendor-core/core-time-series.js +0 -1
  262. package/vendor-core/core-usage-locality.js +1 -1
  263. package/vendor-core/delta-log-paths.js +10 -1
  264. package/vendor-core/detectors.js +1078 -416
  265. package/vendor-core/docs-config.js +0 -4
  266. package/vendor-core/docs-content/detection/cache.md +2 -1
  267. package/vendor-core/docs-content/detection/cfg.md +19 -11
  268. package/vendor-core/docs-content/detection/cold.md +2 -1
  269. package/vendor-core/docs-content/detection/gc.md +7 -3
  270. package/vendor-core/docs-content/detection/host.md +11 -1
  271. package/vendor-core/docs-content/detection/mem.md +17 -6
  272. package/vendor-core/docs-content/detection/part.md +3 -1
  273. package/vendor-core/docs-content/detection/plan.md +55 -13
  274. package/vendor-core/docs-content/detection/shfl.md +11 -5
  275. package/vendor-core/docs-content/detection/skew.md +48 -1
  276. package/vendor-core/docs-content/detection/slow.md +4 -2
  277. package/vendor-core/docs-content/detection/spec.md +6 -1
  278. package/vendor-core/docs-content/detection/spill.md +6 -3
  279. package/vendor-core/docs-content/detection/strag.md +19 -6
  280. package/vendor-core/docs-content/detection/tiny.md +9 -3
  281. package/vendor-core/docs-content/detection/util.md +6 -2
  282. package/vendor-core/effective-conf.js +7 -10
  283. package/vendor-core/efficiency-model.js +24 -16
  284. package/vendor-core/etl-phases.js +1 -2
  285. package/vendor-core/event-handlers.js +175 -57
  286. package/vendor-core/event-schemas.js +21 -16
  287. package/vendor-core/evidence-availability.js +9 -2
  288. package/vendor-core/evidence-report.js +118 -35
  289. package/vendor-core/executor-peaks.js +41 -0
  290. package/vendor-core/export-data.js +5 -5
  291. package/vendor-core/finding-identity.js +78 -0
  292. package/vendor-core/finding-presentation.js +129 -39
  293. package/vendor-core/finding-types.js +108 -30
  294. package/vendor-core/format-utils.js +14 -15
  295. package/vendor-core/html-export.js +1 -1
  296. package/vendor-core/impact-band.js +2 -2
  297. package/vendor-core/impact-format.js +47 -19
  298. package/vendor-core/impact-model.js +28 -17
  299. package/vendor-core/job-groups.js +4 -4
  300. package/vendor-core/mcp-server-factory.js +48 -12
  301. package/vendor-core/mcp-tools.js +179 -24
  302. package/vendor-core/median.js +2 -2
  303. package/vendor-core/nested-loop-join.js +73 -0
  304. package/vendor-core/occupancy.js +1 -2
  305. package/vendor-core/parser-worker.js +1 -1
  306. package/vendor-core/plan-graph-model.js +14 -22
  307. package/vendor-core/plan-node-detail.js +2 -3
  308. package/vendor-core/plan-summary.js +24 -19
  309. package/vendor-core/plan-tree-walk.js +6 -8
  310. package/vendor-core/python-stage.js +12 -1
  311. package/vendor-core/recommendation-rollup.js +13 -12
  312. package/vendor-core/redact.js +52 -46
  313. package/vendor-core/remediation.js +10 -5
  314. package/vendor-core/run-aggregates.js +6 -8
  315. package/vendor-core/run-comparison.js +226 -66
  316. package/vendor-core/run-identity.js +12 -0
  317. package/vendor-core/run-interpretation.js +21 -0
  318. package/vendor-core/run-metrics.js +2 -2
  319. package/vendor-core/run-output.js +44 -11
  320. package/vendor-core/run-totals.js +12 -0
  321. package/vendor-core/run-verdict.js +76 -3
  322. package/vendor-core/scaling-sim.js +3 -4
  323. package/vendor-core/snappy-block.js +2 -2
  324. package/vendor-core/spark-conf.js +168 -0
  325. package/vendor-core/sql-stages.js +2 -2
  326. package/vendor-core/stage-alignment.js +2 -12
  327. package/vendor-core/stage-identity.js +58 -3
  328. package/vendor-core/stage-label.js +14 -0
  329. package/vendor-core/stage-plan-nodes.js +17 -3
  330. package/vendor-core/stage-quantiles.js +141 -9
  331. package/vendor-core/stage-structure.js +17 -3
  332. package/vendor-core/threshold-overrides.js +9 -3
  333. package/vendor-core/types.js +70 -23
  334. package/vendor-core/wall-clock.js +8 -0
  335. package/vendor-core/wasted-core-hours.js +12 -12
  336. package/vendor-core/write-targets.js +146 -14
  337. package/vendor-core/zstd-worker-client.js +1 -1
  338. package/vendor-core/zstd-worker.js +1 -1
  339. package/public/assets/AutoscalingChurn-8t3U3isq.js +0 -1
  340. package/public/assets/CacheUtilization-CJs9tTum.js +0 -1
  341. package/public/assets/CachingOpportunity-D1NcHs0V.js +0 -1
  342. package/public/assets/ColdStart-CdRJ9gD8.js +0 -1
  343. package/public/assets/ConfigAudit-B5Gbe5js.js +0 -1
  344. package/public/assets/CoreUsageArea-a--NTRGY.js +0 -1
  345. package/public/assets/Dashboard-C1hNeX49.js +0 -2
  346. package/public/assets/DisclosureContext-ZpE6CkHx.js +0 -1
  347. package/public/assets/DuplicatePlanSubtree-dobXdz7E.js +0 -1
  348. package/public/assets/ExecutorUtilization-D9grwi7t.js +0 -1
  349. package/public/assets/GcPressure-8-G2ri10.js +0 -1
  350. package/public/assets/IncompleteRun-B91lky7a.js +0 -1
  351. package/public/assets/JobFailures-BsWvBMyJ.js +0 -1
  352. package/public/assets/MemoryUtilization-BM5schZI.js +0 -1
  353. package/public/assets/OverBroadcast-DdN8JIJH.js +0 -1
  354. package/public/assets/PartitionHint-CUvbnnxy.js +0 -1
  355. package/public/assets/PartitionSizing-CY5HDYtp.js +0 -1
  356. package/public/assets/PlanExplorer-DgHCDBD_.js +0 -1
  357. package/public/assets/PlanGraphRoute-DH3KJb8j.js +0 -1
  358. package/public/assets/RetryWaste-DOnE9vGF.js +0 -1
  359. package/public/assets/ShuffleIO-MMnDESkF.js +0 -1
  360. package/public/assets/Skew-BmZZJ5ms.js +0 -1
  361. package/public/assets/SlowHost-CsJzfEqo.js +0 -1
  362. package/public/assets/SmallFiles-BoK3R1Ex.js +0 -1
  363. package/public/assets/SpeculationWaste-CnVxB5AJ.js +0 -1
  364. package/public/assets/Spill-BhNicyBy.js +0 -1
  365. package/public/assets/StageFailed-mAhHU4l_.js +0 -1
  366. package/public/assets/StageFindingGroup-BEtPWcT0.js +0 -1
  367. package/public/assets/StageHeader-DJkYkrsU.js +0 -1
  368. package/public/assets/StageShape-BDxRknLp.js +0 -1
  369. package/public/assets/StageSlowness-BPRw-otN.js +0 -1
  370. package/public/assets/Straggler-CZCbnOWP.js +0 -1
  371. package/public/assets/TaskFailures-C57YcLFQ.js +0 -1
  372. package/public/assets/TinyTask-Bi84qU7n.js +0 -1
  373. package/public/assets/UnderBroadcast-DdQV7htE.js +0 -1
  374. package/public/assets/charts-vendor-0VMaLVLN.js +0 -59
  375. package/public/assets/finding-anchor-Cl6_5hfV.js +0 -1
  376. package/public/assets/impact-sort-CssZ6MT2.js +0 -1
  377. package/public/assets/index-2h_TgUAb.css +0 -2
  378. package/public/assets/index-B-03mG7K.js +0 -14
  379. package/public/assets/plan-graph-vendor-BYl-AzN5.js +0 -7
  380. package/public/assets/react-vendor-DEdfrRTJ.js +0 -9
  381. package/public/assets/select-CQjNhprm.js +0 -1
  382. package/public/assets/usePagedRows-Dyl6T8Ok.js +0 -1
  383. package/public/assets/useRecentFiles-XZEnLlal.js +0 -11
  384. package/public/assets/useSortMode-Dhvit8dt.js +0 -1
  385. package/public/docs/assets/chunks/@localSearchIndexroot.u_e5bQz4.js +0 -1
  386. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.YQcj5EI4.js +0 -1
  387. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.YQcj5EI4.lean.js +0 -1
  388. package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.RlzvUmNm.js +0 -1
  389. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.DYgUpIJB.js +0 -1
  390. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.DYgUpIJB.lean.js +0 -1
  391. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.wj6Et6UD.js +0 -1
  392. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.js +0 -1
  393. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.lean.js +0 -1
  394. package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.CKjWG56Y.js +0 -1
  395. package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.DwOozIEs.js +0 -1
  396. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.CZv_ZGOp.js +0 -1
  397. package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.BUucRc0A.js +0 -1
  398. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.js +0 -1
  399. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.lean.js +0 -1
  400. package/public/docs/assets/contributor-guide_architecture_overview.md.C1sSvm9i.js +0 -1
  401. package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.CZA0JLtV.js +0 -1
  402. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BOZ1azXG.js +0 -1
  403. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.js +0 -1
  404. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.lean.js +0 -1
  405. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.BAnhi2-d.lean.js +0 -1
  406. package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.DC1YqXBp.js +0 -1
  407. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.DVGZOWvW.js +0 -1
  408. package/public/docs/assets/contributor-guide_contributing.md.CQMvGwFt.js +0 -1
  409. package/public/docs/assets/contributor-guide_development-setup.md.D9bu4j_c.lean.js +0 -1
  410. package/public/docs/assets/contributor-guide_testing.md.By6XGR9a.js +0 -1
  411. package/public/docs/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  412. package/public/docs/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  413. package/public/docs/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  414. package/public/docs/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  415. package/public/docs/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  416. package/public/docs/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  417. package/public/docs/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  418. package/public/docs/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  419. package/public/docs/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  420. package/public/docs/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  421. package/public/docs/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  422. package/public/docs/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  423. package/public/docs/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  424. package/public/docs/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  425. package/public/docs/assets/style.tmDhD3c8.css +0 -1
  426. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.OUQqw3mI.js +0 -23
  427. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.OUQqw3mI.lean.js +0 -1
  428. package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.Obf3W3__.js +0 -1
  429. package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.Cc_gLoix.lean.js +0 -1
  430. package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.BP1vnHA5.js +0 -23
  431. package/public/docs/assets/user-guide_run-comparison.md.BUALkohi.js +0 -1
  432. package/public/docs/assets/user-guide_run-comparison.md.BUALkohi.lean.js +0 -1
  433. package/public/docs/assets/user-guide_understanding-findings.md.C9YRruMT.js +0 -1
  434. package/public/docs/assets/user-guide_understanding-findings.md.C9YRruMT.lean.js +0 -1
  435. /package/public/docs/assets/{contributor-guide_architecture_board-widgets_caching-and-memory.md.8bH1HnZp.lean.js → contributor-guide_architecture_board-widgets_caching-and-memory.md.BYDo3ClR.lean.js} +0 -0
  436. /package/public/docs/assets/{contributor-guide_architecture_board-widgets_plan-advisor.md.RlzvUmNm.lean.js → contributor-guide_architecture_board-widgets_plan-advisor.md.ajUAVdbc.lean.js} +0 -0
  437. /package/public/docs/assets/{contributor-guide_architecture_overview.md.C1sSvm9i.lean.js → contributor-guide_architecture_overview.md.nxkpOhgf.lean.js} +0 -0
  438. /package/public/docs/assets/{contributor-guide_architecture_widget-rendering.md.BOZ1azXG.lean.js → contributor-guide_architecture_widget-rendering.md.BrSz8Ezh.lean.js} +0 -0
  439. /package/public/docs/assets/{contributor-guide_architecture_widget-rendering_list-sort-mode.md.BuHKgH0C.lean.js → contributor-guide_architecture_widget-rendering_list-sort-mode.md.37hcZJ7q.lean.js} +0 -0
  440. /package/public/docs/assets/{contributor-guide_architecture_widget-rendering_row-expand-contract.md.ZT89u9f1.lean.js → contributor-guide_architecture_widget-rendering_row-expand-contract.md.mK_VmAWk.lean.js} +0 -0
  441. /package/public/docs/assets/{contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DSVFPpWb.lean.js → contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DVSXn-bb.lean.js} +0 -0
  442. /package/public/docs/assets/{contributor-guide_contributing.md.CQMvGwFt.lean.js → contributor-guide_contributing.md.DBW4drtZ.lean.js} +0 -0
  443. /package/public/docs/assets/{user-guide_getting-started_reading-the-dashboard.md.Obf3W3__.lean.js → user-guide_getting-started_reading-the-dashboard.md.CGaxPX_1.lean.js} +0 -0
  444. /package/public/docs/assets/{user-guide_mcp-tools.md.C65SjWUL.lean.js → user-guide_mcp-tools.md.49r3L2YE.lean.js} +0 -0
  445. /package/public/docs/assets/{user-guide_mcp-tools_get-run-summary.md.DpxZ4ZNp.lean.js → user-guide_mcp-tools_get-run-summary.md.EhaIsele.lean.js} +0 -0
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import http from 'node:http';
3
- import { realpathSync, existsSync } from 'node:fs';
3
+ import { realpathSync, existsSync, readFileSync } from 'node:fs';
4
4
  import { dirname, join } from 'node:path';
5
5
  import { fileURLToPath, pathToFileURL } from 'node:url';
6
6
  import { resolveStaticRoot, serveStatic } from './lib/static-files.js';
@@ -12,11 +12,7 @@ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/
12
12
  const DEFAULT_PORT = 4173;
13
13
  const DEFAULT_HOST = '127.0.0.1';
14
14
 
15
- // vendor-core/ is populated by vendor-core.mjs at publish time. In the monorepo the
16
- // packages/core/src/ sibling's load-vendored.js is used, which prefers a leftover
17
- // vendor-core/ only while it still matches core/src and warns when it does not.
18
- // load-vendored.js is the one module located by hand; the rest load through its
19
- // exported loadVendored().
15
+ // Core loading (vendor-core/ vs core/src): docs-site/contributor-guide/development-setup.md, "Generated and vendored files".
20
16
  async function loadVendoredCore(dir, moduleName, opts) {
21
17
  const srcHelper = join(dir, '..', 'core', 'src', 'load-vendored.js');
22
18
  const helperPath = existsSync(srcHelper) ? srcHelper : join(dir, 'vendor-core', 'load-vendored.js');
@@ -24,6 +20,16 @@ async function loadVendoredCore(dir, moduleName, opts) {
24
20
  return loadVendored(dir, moduleName, opts);
25
21
  }
26
22
 
23
+ // The provenance stamp the MCP tools report: this package's name and version, and the build id of
24
+ // the core it loaded.
25
+ async function loadGenerator(dir) {
26
+ const srcHelper = join(dir, '..', 'core', 'src', 'load-vendored.js');
27
+ const helperPath = existsSync(srcHelper) ? srcHelper : join(dir, 'vendor-core', 'load-vendored.js');
28
+ const { coreBuildId } = await import(pathToFileURL(helperPath).href);
29
+ const { name, version } = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8'));
30
+ return { name, version, buildId: coreBuildId(dir) };
31
+ }
32
+
27
33
  async function loadCreateMcpServer(dir) {
28
34
  const mod = await loadVendoredCore(dir, 'mcp-server-factory');
29
35
  return mod.createMcpServer;
@@ -52,6 +58,8 @@ export function createServer({
52
58
  // This no-op handler marks it handled without hiding the failure from the
53
59
  // /mcp handler's own await (rejections are observable per-consumer).
54
60
  createMcpServerPromise.catch(() => {});
61
+ // Hashing core's sources is not free: started on the first /mcp request, then shared.
62
+ let generatorPromise;
55
63
 
56
64
  return http.createServer(async (req, res) => {
57
65
  try {
@@ -64,7 +72,8 @@ export function createServer({
64
72
  // one request and the SDK throws on reuse, so make a fresh
65
73
  // server+transport pair per request.
66
74
  const createMcpServer = await createMcpServerPromise;
67
- const mcpServer = createMcpServer();
75
+ generatorPromise ??= loadGenerator(dir);
76
+ const mcpServer = createMcpServer({ generator: await generatorPromise });
68
77
  // allowedHosts is matched against the raw Host header (host:port), so
69
78
  // derive the port from the actual socket, not a hardcode: tests bind to
70
79
  // an ephemeral port via listen(0, ...).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sparkforensics-server",
3
- "version": "0.5.2",
3
+ "version": "0.8.1",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Local companion server for the SparkForensics dashboard: serves the app and proxies Spark History Server fetches to avoid browser CORS restrictions.",
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{C as r,c as i,s as a}from"./DisclosureContext-DK1_iz6J.js";import{b as o,f as s,l as c,o as l,s as u,t as d,v as f,y as p}from"./charts-vendor-CtTxwTeu.js";import{k as m}from"./index-fDiwfuoO.js";import{i as h,t as g}from"./ChartTheme-DAiARbLP.js";import{t as _}from"./downsample-WmNM1qc9.js";import{t as v}from"./WidgetLeadSummary-CXFZP00C.js";import{t as y}from"./ImpactEstimate-Dm3xWbzV.js";var b=e(t(),1),x=n(),S=60,C=6e4,w=220;function T(e,t,n,r,i){if(e.length===0&&t.length===0)return[];let a=Math.max(i,r-n),o=Math.max(1,Math.ceil(a/i)),s=[];for(let e=0;e<o;e++)s.push({tStart:n+e*i,adds:0,removes:0});let c=e=>Math.min(o-1,Math.max(0,Math.floor((e-n)/i)));for(let t of e)s[c(t.timestamp)].adds++;for(let e of t)s[c(e.timestamp)].removes++;return s}function E(e,t){let n=Math.max(1,t-e);return Math.max(C,Math.ceil(n/S))}function D(e){if(e<=0)return 1;let t=10**Math.floor(Math.log10(e)),n=e/t;return(n<=1?1:n<=2?2:n<=5?5:10)*t}function O(e){let t=D(e.reduce((e,t)=>Math.max(e,Math.abs(t.added),Math.abs(t.removed)),0));return{domain:[-t,t],ticks:[-t,-t/2,0,t/2,t]}}function k(e){return Math.abs(e.height)<1?null:(0,x.jsx)(p,{...e})}function A({finding:e}){return(0,x.jsxs)(`div`,{className:`flex flex-col gap-1 transition-colors`,children:[(0,x.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Short-lived executors: `,(0,x.jsxs)(`strong`,{children:[e.value,`%`]})]}),(0,x.jsx)(y,{finding:e}),(0,x.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2 text-sm`,children:[(0,x.jsx)(a,{impactBand:e.impactBand,className:`mt-1.5`}),(0,x.jsx)(`span`,{children:(0,x.jsx)(r,{anchor:`#config-autoscale-bounds`,children:`Tuning executorIdleTimeout and the min/max bounds`})})]})]})}var j=(0,b.memo)(function({appModel:e,activeFileId:t,catalog:n=[],defaultCollapsed:r=!0}){let a=(0,b.useMemo)(()=>{let t=e.executors.added,n=e.executors.removed;if(t.length===0&&n.length===0)return{hasEvents:!1,added:t,removed:n};let r=e.app,i=r?.startTime??0,a=r?.endTime??i,o=E(i,a),s=_(T(t,n,i,a,o)).map(e=>({t:`${Math.round((e.tStart-i)/1e3)}s`,added:e.adds,removed:-e.removes}));return{hasEvents:!0,added:t,removed:n,rows:s,yAxisScale:O(s)}},[e,t]);if(!a.hasEvents)return(0,x.jsx)(m,{title:`Autoscaling Churn`,summary:(0,x.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:`No executor add/remove events (static allocation).`}),children:(0,x.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`No executor add/remove events (static allocation).`})});let{added:p,removed:y,rows:S,yAxisScale:C}=a,D=n.find(e=>e.type===`autoscalingChurn`);return(0,x.jsx)(m,{title:`Autoscaling Churn`,impactBand:D?.impactBand,fixFor:D?[D]:[],badges:D&&(0,x.jsx)(i,{type:`autoscalingChurn`,impactBand:D.impactBand}),defaultCollapsed:r,summary:(0,x.jsx)(v,{value:`${p.length} added / ${y.length} removed`,context:D?`${D.value}% short-lived executors, ${D.impactBand}`:`executor churn events`}),children:(0,x.jsxs)(`div`,{className:`space-y-2`,children:[D&&(0,x.jsx)(A,{finding:D}),(0,x.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`executors added / removed over time`}),(0,x.jsx)(h,{ariaLabel:`Executor added and removed counts per time bucket over the run.`,height:w,table:{caption:`Executor added/removed counts by time bucket`,columns:[`Time`,`Executors added`,`Executors removed`],rows:S.map(e=>[e.t,e.added,Math.abs(e.removed)]),align:[`right`,`right`,`right`]},children:(0,x.jsxs)(d,{data:S,children:[(0,x.jsx)(s,{stroke:g.muted,strokeOpacity:.2}),(0,x.jsx)(u,{dataKey:`t`,tick:{fontSize:10}}),(0,x.jsx)(l,{tick:{fontSize:10},width:32,domain:C.domain,ticks:C.ticks}),(0,x.jsx)(f,{formatter:(e,t)=>[Math.abs(Number(e)),t]}),(0,x.jsx)(o,{wrapperStyle:{fontSize:12}}),(0,x.jsx)(c,{dataKey:`added`,name:`Added`,stackId:`churn`,fill:g.stage,shape:k}),(0,x.jsx)(c,{dataKey:`removed`,name:`Removed`,stackId:`churn`,fill:g.muted,shape:k})]})})]})})});export{j as AutoscalingChurn};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{C as r,Ft as i,Gt as a,Ot as o,Wt as s,Xt as c,c as l,s as u,zt as d}from"./DisclosureContext-DK1_iz6J.js";import{H as f,P as p,R as m,U as h,V as g,W as _,k as v,z as y}from"./index-fDiwfuoO.js";import{t as b}from"./WidgetLeadSummary-CXFZP00C.js";import{n as x}from"./findings-of-type-BL2u3RGZ.js";import{t as S}from"./RowPagination-C-LzWkI5.js";import{t as C}from"./ImpactEstimate-Dm3xWbzV.js";import{n as w}from"./finding-anchor-Dr40LkS9.js";import{t as T}from"./usePagedRows-BafD6bEN.js";var E=e(t(),1),D=n(),O=70;function k(e){if(!e)return`—`;let t=[];return e.useMemory&&t.push(`Memory`),e.useDisk&&t.push(`Disk`),e.deserialized?t.push(`Deserialized`):(e.useMemory||e.useDisk)&&t.push(`Serialized`),(e.replication??1)>1&&t.push(`x${e.replication}`),t.join(` · `)||`—`}function A(e){return e.name||`RDD ${e.id}`}function j(e){let t=a(A(e));return t.length<=O?t:`${t.slice(0,O)}…`}function M(e){if(e.variant===`storageUnobserved`)return`No block updates logged: cached partition counts and sizes are unknown`;let t=d(`pct`,s(e));return e.variant===`diskSpillover`?`${t} spilled to disk: ${i(e.diskSize??0)} disk / ${i(e.memorySize??0)} memory`:`${t} cached (${e.numCachedPartitions??0}/${e.numPartitions??0} partitions)`}function N({finding:e}){let t=w([e]),n=e.dataUnavailable?`Cache storage not logged`:e.rddName??`RDD ${e.rddId}`;return(0,D.jsxs)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-1 transition-colors ${t.flashClassName}`,children:[(0,D.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2`,children:[(0,D.jsx)(u,{impactBand:e.impactBand,className:`mt-1.5`}),(0,D.jsx)(`span`,{children:n})]}),(0,D.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.dataUnavailable?e.recommendation:M(e)}),(0,D.jsx)(C,{finding:e})]})}var P=(0,E.memo)(function({appModel:e,catalog:t}){let[n,a]=(0,E.useState)(0),[d,C]=(0,E.useState)(0),w=e.app?.rddInfo,O=(0,E.useMemo)(()=>w?[...w.values()].filter(e=>(e.storageLevel?.useMemory||e.storageLevel?.useDisk)&&(e.numCachedPartitions??0)>0).sort((e,t)=>(t.memorySize??0)+(t.diskSize??0)-((e.memorySize??0)+(e.diskSize??0))):[],[w]),M=(0,E.useMemo)(()=>x(t,`cacheUtilization`).sort((e,t)=>o[e.impactBand]-o[t.impactBand]),[t]),P=T(O,n,a),F=p(),I=F?M.findIndex(e=>e===F.finding):null,L=T(M,d,C,I),R=M.find(e=>e.dataUnavailable);if(O.length===0&&!R)return null;let z=e=>M.filter(t=>t.rddId===e),B=O.reduce((e,t)=>e+(t.memorySize??0)+(t.diskSize??0),0);return(0,D.jsx)(`div`,{"data-widget":`cache-utilization`,children:(0,D.jsxs)(v,{title:`Cache Storage`,fixFor:M,impactBand:c(M),badges:(0,D.jsxs)(D.Fragment,{children:[M.length>0?(0,D.jsx)(l,{type:`cacheUtilization`,impactBand:c(M)??`info`}):null,(0,D.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[O.length>0?`${O.length} cached RDD${O.length===1?``:`s`}`:`cache storage not logged`,`, see`,` `,(0,D.jsx)(r,{anchor:`#memory-model`,children:`how Spark accounts cached memory`})]})]}),defaultCollapsed:!0,summary:O.length>0?(0,D.jsx)(b,{value:i(B),context:`cached across memory + disk`}):(0,D.jsx)(b,{value:`Unknown`,context:`${s(R)} persisted, no block updates`}),children:[O.length>0?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(m,{children:[(0,D.jsx)(h,{children:(0,D.jsxs)(_,{children:[(0,D.jsx)(f,{children:`RDD`}),(0,D.jsx)(f,{children:`Storage level`}),(0,D.jsx)(f,{className:`text-right`,children:`Cached partitions`}),(0,D.jsx)(f,{className:`text-right`,children:`Memory`}),(0,D.jsx)(f,{className:`text-right`,children:`Disk`})]})}),(0,D.jsx)(y,{children:P.visible.map(e=>{let t=A(e),n=j(e),r=z(e.id);return(0,D.jsxs)(_,{children:[(0,D.jsxs)(g,{className:`max-w-80 truncate`,title:t===n?void 0:t,children:[n,r.length>0&&(0,D.jsx)(u,{impactBand:c(r)??`info`,className:`ml-1.5`})]}),(0,D.jsx)(g,{children:k(e.storageLevel)}),(0,D.jsxs)(g,{className:`text-right`,children:[e.numCachedPartitions,` / `,e.numPartitions]}),(0,D.jsx)(g,{className:`text-right`,children:i(e.memorySize??0)}),(0,D.jsx)(g,{className:`text-right`,children:i(e.diskSize??0)})]},e.id)})})]}),(0,D.jsx)(S,{page:P.effectivePage,totalPages:P.totalPages,onPrev:()=>a(e=>e-1),onNext:()=>a(e=>e+1)})]}):null,M.length>0?(0,D.jsxs)(`div`,{className:`mt-3 space-y-2 text-sm`,children:[L.visible.map(e=>(0,D.jsx)(N,{finding:e},e.id)),(0,D.jsx)(S,{page:L.effectivePage,totalPages:L.totalPages,onPrev:()=>C(e=>e-1),onNext:()=>C(e=>e+1)})]}):null]})})});export{P as CacheUtilization};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{Ft as r,c as i,in as a,u as o,x as s}from"./DisclosureContext-DK1_iz6J.js";import{H as c,P as l,R as u,U as d,V as f,W as p,k as m,z as h}from"./index-fDiwfuoO.js";import{t as g}from"./RowStatusCluster-Dbtmte7l.js";import{t as _}from"./WidgetLeadSummary-CXFZP00C.js";import{n as v}from"./findings-of-type-BL2u3RGZ.js";import{t as y}from"./RowPagination-C-LzWkI5.js";import{t as b}from"./ImpactEstimate-Dm3xWbzV.js";import{n as x}from"./finding-anchor-Dr40LkS9.js";import{t as S}from"./usePagedRows-BafD6bEN.js";var C={name:`git-merge`,size:24,node:[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M6 21V9a9 9 0 0 0 9 9`,key:`7kw0sc`}]]};C.node;var w=a(C),T=e(t(),1),E=n();function D({relations:e,operator:t}){let n=t===`union`?`union`:`join`;return(0,E.jsx)(`span`,{className:`inline-flex flex-wrap items-baseline`,children:e.map((e,t)=>(0,E.jsxs)(`span`,{children:[t>0?(0,E.jsxs)(E.Fragment,{children:[` `,(0,E.jsx)(`span`,{className:`mx-1 font-semibold uppercase text-xs tracking-wide text-primary`,children:n}),` `]}):null,e.relation]},e.relation))})}function O({finding:e}){let t=x([e]),n=e.variant===`composite`;return(0,E.jsxs)(p,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`transition-colors ${t.flashClassName}`,children:[(0,E.jsx)(f,{children:(0,E.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[n?(0,E.jsx)(w,{className:`size-3.5 text-muted-foreground`,"aria-hidden":`true`}):null,n&&e.relations&&e.relations.length>0?(0,E.jsx)(D,{relations:e.relations,operator:e.operator}):(0,E.jsx)(`span`,{children:e.relation}),n?(0,E.jsx)(s,{variant:`outline`,className:`text-xs uppercase border-dashed`,children:e.operator?.toUpperCase()}):(0,E.jsx)(s,{variant:`secondary`,className:`text-xs uppercase`,children:e.format})]})}),(0,E.jsxs)(f,{children:[e.value,` queries`]}),(0,E.jsx)(f,{className:`text-right`,children:r(e.totalReadBytes)}),(0,E.jsxs)(f,{children:[(0,E.jsx)(b,{finding:e}),(0,E.jsx)(o,{children:(0,E.jsx)(g,{confidence:e.confidence,validationRequired:e.validationRequired})})]})]})}var k=(0,T.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[n,r]=(0,T.useState)(0),a=(0,T.useMemo)(()=>v(e,`cachingOpportunity`).sort((e,t)=>t.totalReadBytes-e.totalReadBytes||(t.value??0)-(e.value??0)),[e]),s=l(),f=s?a.findIndex(e=>e===s.finding):null,{totalPages:g,effectivePage:b,visible:x}=S(a,n,r,f);if(a.length===0)return null;let C=a[0];return(0,E.jsx)(m,{title:`Caching Opportunities`,fixFor:a,impactBand:`info`,badges:(0,E.jsx)(i,{type:`cachingOpportunity`,impactBand:`info`}),defaultCollapsed:t,summary:(0,E.jsx)(_,{value:`${C.value}×`,context:`read by ${C.value} queries: ${C.relation}`}),children:(0,E.jsxs)(`div`,{className:`space-y-3`,children:[(0,E.jsxs)(u,{children:[(0,E.jsx)(d,{children:(0,E.jsxs)(p,{children:[(0,E.jsx)(c,{children:`Relation`}),(0,E.jsx)(c,{children:`Read by`}),(0,E.jsx)(c,{className:`text-right`,children:`Data read`}),(0,E.jsx)(c,{children:`Estimate`})]})}),(0,E.jsx)(h,{children:x.map((e,t)=>(0,E.jsx)(O,{finding:e},`${e.format}:${e.relation}:${(e.executionIds??[]).join(`,`)}:${t}`))})]}),(0,E.jsx)(o,{children:(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Reuse is inferred from plan structure, not confirmed by execution. Verify before caching.`})}),(0,E.jsx)(y,{page:b,totalPages:g,onPrev:()=>r(e=>e-1),onNext:()=>r(e=>e+1)})]})})});export{k as CachingOpportunity};
@@ -0,0 +1,8 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{mn as r,n as i}from"./DisclosureContext-DK1_iz6J.js";import{c as a,d as o,g as s,h as c,l,m as u,u as d,x as f}from"./charts-vendor-CtTxwTeu.js";import{B as p,H as m,R as h,U as g,V as _,W as v,z as y}from"./index-fDiwfuoO.js";var b=e(t(),1),x=n(),S={light:``,dark:`.dark`},C={width:320,height:200},w=b.createContext(null);function T({id:e,className:t,children:n,config:i,initialDimension:a=C,...o}){let s=b.useId(),c=`chart-${e??s.replace(/:/g,``)}`;return(0,x.jsx)(w.Provider,{value:{config:i},children:(0,x.jsxs)(`div`,{"data-slot":`chart`,"data-chart":c,className:r(`flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden`,t),...o,children:[(0,x.jsx)(E,{id:c,config:i}),(0,x.jsx)(f,{initialDimension:a,children:n})]})})}var E=({id:e,config:t})=>{let n=Object.entries(t).filter(([,e])=>e.theme??e.color);return n.length?(0,x.jsx)(`style`,{dangerouslySetInnerHTML:{__html:Object.entries(S).map(([t,r])=>`
2
+ ${r} [data-chart=${e}] {
3
+ ${n.map(([e,n])=>{let r=n.theme?.[t]??n.color;return r?` --color-${e}: ${r};`:null}).join(`
4
+ `)}
5
+ }
6
+ `).join(`
7
+ `)}}):null};async function D(e){if(navigator.clipboard?.writeText)try{await navigator.clipboard.writeText(e);return}catch{}let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t);try{if(t.select(),!document.execCommand(`copy`))throw Error(`copy unavailable`)}finally{t.remove()}}var O=`(prefers-reduced-motion: reduce)`;function k(e){if(typeof window>`u`||!window.matchMedia)return()=>{};let t=window.matchMedia(O);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)}function A(){return typeof window>`u`||!window.matchMedia?!1:window.matchMedia(O).matches}function j(){return(0,b.useSyncExternalStore)(k,A,()=>!1)}var M={accent:`var(--color-accent)`,warning:`var(--color-warning)`,critical:`var(--color-critical)`,info:`var(--color-info)`,clean:`var(--color-clean)`,muted:`var(--color-muted-foreground)`,stage:`var(--color-chart-stage)`,startup:`var(--color-chart-startup)`,gap:`var(--color-chart-gap)`,idle:`var(--color-chart-idle)`},N=`var(--color-popover-foreground)`,P={background:`var(--color-popover)`,border:`1px solid var(--color-border)`,borderRadius:6,color:N,fontSize:12,padding:`6px 10px`},F={contentStyle:P,labelStyle:{color:N,fontWeight:600},itemStyle:{color:N}};function I(e,t){return[e,...t].map(e=>e.join(` `)).join(`
8
+ `)}function L({caption:e,columns:t,rows:n,align:r}){let[i,a]=(0,b.useState)(!1),[o,s]=(0,b.useState)(!1);async function c(){try{await D(I(t,n)),s(!0),setTimeout(()=>s(!1),1500)}catch{}}return(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,x.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,x.jsx)(`button`,{type:`button`,className:`tap-target-comfortable cursor-pointer text-muted-foreground text-xs underline`,"aria-expanded":i,onClick:()=>a(e=>!e),children:`▤ Table`}),(0,x.jsx)(`button`,{type:`button`,className:`tap-target-comfortable cursor-pointer text-muted-foreground text-xs underline`,onClick:c,children:`⧉ Copy`}),(0,x.jsx)(`span`,{"aria-live":`polite`,className:`text-xs text-muted-foreground`,children:o?`Copied`:``})]}),(0,x.jsxs)(h,{className:i?void 0:`sr-only`,children:[(0,x.jsx)(p,{className:`sr-only`,children:e}),(0,x.jsx)(g,{children:(0,x.jsx)(v,{children:t.map((e,t)=>(0,x.jsx)(m,{className:r?.[t]===`right`?`text-right`:void 0,children:e},e))})}),(0,x.jsx)(y,{children:n.map((e,t)=>(0,x.jsx)(v,{children:e.map((e,t)=>(0,x.jsx)(_,{className:r?.[t]===`right`?`text-right`:void 0,children:e},t))},t))})]})]})}var R=new Set([d,l,o,s,c,u,a]);function z(e){if(!(0,b.isValidElement)(e))return e;let{children:t,isAnimationActive:n}=e.props,r=t==null?t:b.Children.map(t,z),i=R.has(e.type)&&n===void 0;return!i&&r===t?e:(0,b.cloneElement)(e,i?{isAnimationActive:!1}:{},...t==null?[]:[r])}function B({title:e,ariaLabel:t,height:n,children:r,table:a}){let o=j()?z(r):r,s=i();return(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[e?(0,x.jsx)(`p`,{className:`text-muted-foreground text-xs font-medium`,children:e}):null,s?(0,x.jsx)(T,{role:`img`,"aria-label":t,config:{},className:`aspect-auto w-full`,style:{height:n},initialDimension:{width:320,height:n},children:o}):(0,x.jsx)(`div`,{style:{height:n},"aria-hidden":!0}),a?(0,x.jsx)(L,{...a}):null]})}export{D as a,B as i,P as n,F as r,M as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{Ot as r,c as i,s as a}from"./DisclosureContext-DK1_iz6J.js";import{P as o,k as s}from"./index-fDiwfuoO.js";import{n as c,t as l}from"./WidgetLeadSummary-CXFZP00C.js";import{t as u}from"./RowPagination-C-LzWkI5.js";import{t as d}from"./ImpactEstimate-Dm3xWbzV.js";import{r as f}from"./impact-sort-mC5ISgX8.js";import{n as p}from"./finding-anchor-Dr40LkS9.js";import{t as m}from"./usePagedRows-BafD6bEN.js";import{n as h,t as g}from"./useSortMode-DjrAN-z4.js";var _=e(t(),1),v=n();function y(e){return`${e.value}s`}function b({finding:e}){let t=p([e]);return(0,v.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-1 text-sm transition-colors ${t.flashClassName}`,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,v.jsx)(a,{impactBand:e.impactBand}),(0,v.jsx)(`strong`,{children:y(e)})]}),(0,v.jsx)(d,{finding:e})]})}var x=(0,_.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:n,setSortMode:a,orderBy:d}=g(),[p,x]=(0,_.useState)(!t),[S,C]=(0,_.useState)(0),w=e.filter(e=>e.type===`coldStart`).slice().sort((e,t)=>r[e.impactBand]-r[t.impactBand]),T=d(w,e=>[e],e=>e.stageId??null),E=o(),D=E?T.findIndex(e=>e===E.finding):null,{totalPages:O,effectivePage:k,visible:A}=m(T,S,C,D);return w.length===0?null:(0,v.jsxs)(s,{title:`Cold Start`,fixFor:w,impactBand:w[0].impactBand,badges:(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(i,{type:`coldStart`,impactBand:w[0].impactBand}),f(w,w.length,p)?(0,v.jsx)(h,{mode:n,onChange:a}):null]}),open:p,onOpenChange:x,summary:(0,v.jsx)(l,{value:y(w[0]),context:c(w.length)}),children:[(0,v.jsx)(`ul`,{className:`space-y-2`,children:A.map(e=>(0,v.jsx)(b,{finding:e},e.id))}),(0,v.jsx)(u,{page:k,totalPages:O,onPrev:()=>C(e=>e-1),onNext:()=>C(e=>e+1)})]})});export{x as ColdStart};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{C as r,Ot as i,Xt as a,c as o,gt as s,s as c,u as l}from"./DisclosureContext-DK1_iz6J.js";import{P as u,k as d,l as f}from"./index-fDiwfuoO.js";import{t as p}from"./RowStatusCluster-Dbtmte7l.js";import{t as m}from"./WidgetLeadSummary-CXFZP00C.js";import{n as h}from"./findings-of-type-BL2u3RGZ.js";import{t as g}from"./RowPagination-C-LzWkI5.js";import{t as _}from"./ImpactEstimate-Dm3xWbzV.js";import{n as v}from"./finding-anchor-Dr40LkS9.js";import{t as y}from"./usePagedRows-BafD6bEN.js";var b=e(t(),1),x=n();function S({finding:e}){let t=v([e]);return(0,x.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-1 transition-colors ${t.flashClassName}`,children:[(0,x.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,x.jsx)(c,{impactBand:e.impactBand}),(0,x.jsx)(`code`,{className:`text-xs`,children:e.property}),(0,x.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`=`}),(0,x.jsx)(`code`,{className:`rounded bg-accent/10 px-1.5 py-0.5 font-mono text-xs text-accent`,children:e.valueText})]}),(0,x.jsx)(_,{finding:e}),(0,x.jsxs)(`p`,{className:`text-sm`,children:[f(e.recommendation??``).measured??e.recommendation,e.docAnchor?(0,x.jsxs)(x.Fragment,{children:[` `,(0,x.jsxs)(r,{anchor:e.docAnchor,children:[`Why `,e.property,` matters`]})]}):null]})]})}var C=(0,b.memo)(function({appModel:e,configFindings:t,defaultCollapsed:n=!0}){let[r,c]=(0,b.useState)(0),f=(0,b.useMemo)(()=>h(t??[],`configAudit`).sort((e,t)=>i[e.impactBand]-i[t.impactBand]),[t]),_=u(),v=_?f.findIndex(e=>e===_.finding):null,{totalPages:C,effectivePage:w,visible:T}=y(f,r,c,v);if(f.length===0){let t=e.evidenceAvailability?.entries.find(e=>e.key===`sparkConfiguration`),n;if(t)n=t.state===`present`?`No misconfigurations detected.`:t.state===`unknown`&&t.reasonCode===`parseIncomplete`?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`span`,{children:[t.summary,` `]}),(0,x.jsx)(l,{children:(0,x.jsx)(p,{evidenceKey:`sparkConfiguration`})})]}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`span`,{children:`No environment info captured in this log. `}),(0,x.jsx)(l,{children:(0,x.jsx)(p,{evidenceKey:`sparkConfiguration`})})]});else{let t=e.app?.evidenceInputs;n=(t?t.environmentUpdates>0:Object.keys(e.app?.config??{}).length>0||e.app?.resources)?`No misconfigurations detected.`:(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`span`,{children:`No environment info captured in this log. `}),(0,x.jsx)(l,{children:(0,x.jsx)(p,{evidenceKey:`sparkConfiguration`})})]})}let r=(0,x.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:n});return(0,x.jsx)(d,{title:`Config Audit`,compact:!0,summary:r,children:r})}let E=a(f);return(0,x.jsxs)(d,{title:`Config Audit`,fixFor:f,impactBand:E,badges:(0,x.jsx)(o,{type:`configAudit`,impactBand:E??`info`,docAnchor:s(f)}),statusBadge:(0,x.jsx)(l,{children:(0,x.jsx)(p,{evidenceKey:`sparkConfiguration`})}),defaultCollapsed:n,summary:(0,x.jsx)(m,{value:`${f.length}`,context:`misconfiguration${f.length===1?``:`s`} flagged`}),children:[(0,x.jsx)(`ul`,{className:`space-y-4`,children:T.map(e=>(0,x.jsx)(S,{finding:e},e.id))}),(0,x.jsx)(g,{page:w,totalPages:C,onPrev:()=>c(e=>e-1),onNext:()=>c(e=>e+1)})]})});export{C as ConfigAudit};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n}from"./react-vendor-C6KcUD36.js";import{C as r,It as i,Tt as a,c as o,s,u as c,v as l}from"./DisclosureContext-DK1_iz6J.js";import{t as u}from"./inbox-KPU1Gppm.js";import{b as d,f,n as p,o as m,s as h,u as g,v as _}from"./charts-vendor-CtTxwTeu.js";import{k as v}from"./index-fDiwfuoO.js";import{t as y}from"./EmptyState-C1uL40VU.js";import{t as b}from"./RowStatusCluster-Dbtmte7l.js";import{i as x,r as S,t as C}from"./ChartTheme-DAiARbLP.js";import{t as w}from"./downsample-WmNM1qc9.js";import{t as T}from"./WidgetLeadSummary-CXFZP00C.js";import{t as E}from"./RowPagination-C-LzWkI5.js";import{t as D}from"./ImpactEstimate-Dm3xWbzV.js";import{t as O}from"./usePagedRows-BafD6bEN.js";var k=e(t(),1),A=n(),j=240,M={PROCESS_LOCAL:`Process-local`,NODE_LOCAL:`Node-local`,RACK_LOCAL:`Rack-local`,NO_PREF:`No preference`,ANY:`Any`,OTHER:`Other`,idle:`Idle`},N={PROCESS_LOCAL:C.clean,NODE_LOCAL:C.accent,RACK_LOCAL:C.warning,NO_PREF:C.muted,ANY:C.critical,OTHER:C.muted,idle:C.muted},P=`Core Usage by Locality`,F=(0,k.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[n,F]=(0,k.useState)(0),I=l()?.data.coreLocality,L=(0,k.useMemo)(()=>{let e=I?.chart??{hasActivity:!1};return e.hasActivity?{...e,sampled:w(e.points)}:e},[I]),R=I?.ratio.topStages??[],z=e.find(e=>e.type===`coreLocality`),B=e.some(e=>e.type===`memoryUtilization`&&e.variant===`idleCores`),V=R.filter(e=>e.nonLocalTasks>0),{totalPages:H,effectivePage:U,visible:W}=O(V,n,F);if(!L.hasActivity)return(0,A.jsx)(v,{title:P,summary:(0,A.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:`No stage activity to plot.`}),children:(0,A.jsx)(y,{tone:`neutral`,icon:u,title:`No stage activity to plot.`})});let{order:G,points:K,sampled:q,peakCores:J}=L;return(0,A.jsx)(v,{title:P,impactBand:z?.impactBand,badges:z?(0,A.jsx)(o,{type:`coreLocality`,impactBand:z.impactBand}):null,defaultCollapsed:t,summary:(0,A.jsx)(T,{value:`${i(J)} cores`,context:`busy at the peak`}),children:(0,A.jsxs)(`div`,{className:`space-y-2`,children:[(0,A.jsx)(c,{children:(0,A.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`approximate: stage-level attribution`,z?null:(0,A.jsxs)(A.Fragment,{children:[`, see `,(0,A.jsx)(r,{anchor:`#bottleneck-utilization`,children:`how utilization is measured`})]})]})}),z?(0,A.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2 text-sm`,children:[(0,A.jsx)(s,{impactBand:z.impactBand,className:`mt-1.5`}),(0,A.jsxs)(`span`,{children:[(0,A.jsxs)(`strong`,{children:[z.value,`% non-local`]}),`. `,a(z)]})]}):null,z?(0,A.jsx)(D,{finding:z}):null,(0,A.jsx)(c,{children:z?(0,A.jsx)(b,{confidence:z.confidence,validationRequired:z.validationRequired}):null}),(0,A.jsx)(x,{ariaLabel:`Approximate concurrent core usage over time, stacked by task locality tier, with idle capacity shown. See the legend for tier colors.`,height:j,table:{caption:`Concurrent core usage over time by locality tier`,columns:[`Time (s)`,...G.map(e=>M[e]??e)],rows:K.map(e=>[e.t,...G.map(t=>Math.round(e[t]))]),align:Array.from({length:G.length+1},()=>`right`)},children:(0,A.jsxs)(p,{data:q,children:[(0,A.jsx)(f,{vertical:!1,stroke:C.muted,strokeOpacity:.2}),(0,A.jsx)(h,{dataKey:`t`,tick:{fontSize:10},tickFormatter:e=>`${e}s`}),(0,A.jsx)(m,{tick:{fontSize:10},width:36,label:{value:`avg concurrent cores`,angle:-90,position:`insideLeft`,fontSize:12}}),(0,A.jsx)(_,{...S,labelFormatter:e=>`${e}s from app start`,formatter:e=>typeof e==`number`?e.toFixed(2):String(e)}),(0,A.jsx)(d,{wrapperStyle:{fontSize:12}}),G.map(e=>(0,A.jsx)(g,{type:`monotone`,dataKey:e,name:M[e]??e,stackId:`cores`,stroke:N[e]??C.muted,fill:N[e]??C.muted,fillOpacity:e===`idle`?.15:.8,isAnimationActive:!1},e))]})}),(0,A.jsx)(c,{children:W.length>0?(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(`ul`,{className:`space-y-1 text-xs text-muted-foreground`,children:W.map(e=>(0,A.jsxs)(`li`,{children:[`Stage `,e.stageId,`: `,Math.round(e.ratio*100),`% non-local (`,e.nonLocalTasks,`/`,e.taskCount,` tasks)`]},e.stageId))}),(0,A.jsx)(E,{page:U,totalPages:H,onPrev:()=>F(e=>e-1),onNext:()=>F(e=>e+1)})]}):null}),(0,A.jsx)(c,{children:B?(0,A.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Idle cores also flagged → see Memory Utilization widget`}):null})]})})});export{F as CoreUsageArea};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,i as n,n as r}from"./react-vendor-C6KcUD36.js";import{A as i,An as a,At as o,C as s,Cn as c,Dn as l,E as u,Ft as d,Gt as f,H as p,I as m,L as h,Lt as g,Ot as _,R as v,Sn as y,Tt as b,U as x,V as S,Vt as C,Xt as w,Yt as T,_ as E,_n as D,an as O,c as k,d as A,dn as j,f as ee,fn as M,ft as N,g as te,gn as ne,gt as re,h as ie,i as ae,in as P,jt as oe,kn as se,m as ce,mn as F,nn as le,o as ue,on as I,p as de,pt as fe,r as pe,rn as me,s as he,sn as ge,u as L,v as R,vn as _e,x as ve,y as ye,yt as be}from"./DisclosureContext-DK1_iz6J.js";import{n as xe,t as z}from"./button-DbpTz2yk.js";import{b as Se}from"./useRegisterFieldControl-pQv-ZDoU.js";import{a as Ce,c as we,i as Te,n as Ee,o as De,r as Oe,s as ke,t as Ae}from"./PlanView-B1hxzFRs.js";import{a as je,c as Me,i as Ne,n as Pe,o as Fe,r as Ie,s as Le,t as Re}from"./useRecentFiles-DzJZAoOT.js";import{t as ze}from"./inbox-KPU1Gppm.js";import{S as Be,_ as Ve,a as He,b as Ue,d as We,f as Ge,i as Ke,l as qe,n as Je,o as Ye,s as Xe,u as Ze,v as Qe}from"./charts-vendor-CtTxwTeu.js";import{A as $e,C as et,D as tt,H as nt,L as rt,M as B,N as it,O as at,P as ot,Q as st,R as ct,St as lt,T as ut,U as dt,V,W as H,a as ft,c as pt,ht as mt,j as ht,k as U,l as gt,mt as _t,o as vt,s as yt,u as bt,w as xt,x as St,xt as Ct,z as wt}from"./index-fDiwfuoO.js";import{d as Tt,p as Et}from"./toggle-DPeN6aNa.js";import{REGISTRY as Dt,alwaysMountedWidgets as Ot,isAlwaysMountedType as kt,orderedWidgets as At}from"./detector-registry-Bp8hrLua.js";import{t as jt}from"./EmptyState-C1uL40VU.js";import{a as Mt,i as Nt,n as Pt,o as Ft,r as It,t as Lt}from"./RowStatusCluster-Dbtmte7l.js";import{n as Rt,t as zt}from"./toggle-group-Kl3uyHSr.js";import{n as Bt,t as Vt}from"./DurationHistogram-B6jsE0Ov.js";import{a as Ht,i as Ut,n as Wt,t as W}from"./ChartTheme-DAiARbLP.js";import{t as Gt}from"./downsample-WmNM1qc9.js";import{t as G}from"./WidgetLeadSummary-CXFZP00C.js";import{t as Kt}from"./findings-of-type-BL2u3RGZ.js";import{n as qt,t as Jt}from"./StagePill--P7PDd3s.js";import{t as Yt}from"./RowPagination-C-LzWkI5.js";import{t as Xt}from"./ImpactEstimate-Dm3xWbzV.js";var Zt={name:`circle-dashed`,size:24,node:[[`path`,{d:`M10.1 2.182a10 10 0 0 1 3.8 0`,key:`5ilxe3`}],[`path`,{d:`M13.9 21.818a10 10 0 0 1-3.8 0`,key:`11zvb9`}],[`path`,{d:`M17.609 3.721a10 10 0 0 1 2.69 2.7`,key:`1iw5b2`}],[`path`,{d:`M2.182 13.9a10 10 0 0 1 0-3.8`,key:`c0bmvh`}],[`path`,{d:`M20.279 17.609a10 10 0 0 1-2.7 2.69`,key:`1ruxm7`}],[`path`,{d:`M21.818 10.1a10 10 0 0 1 0 3.8`,key:`qkgqxc`}],[`path`,{d:`M3.721 6.391a10 10 0 0 1 2.7-2.69`,key:`1mcia2`}],[`path`,{d:`M6.391 20.279a10 10 0 0 1-2.69-2.7`,key:`1fvljs`}]]};Zt.node;var Qt=P(Zt),$t={name:`circle-x`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]],aliases:[`x-circle`]};$t.node;var en=P($t),tn={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`}]]};tn.node;var nn=P(tn),rn={name:`list-filter`,size:24,node:[[`path`,{d:`M2 5h20`,key:`1fs1ex`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M9 19h6`,key:`456am0`}]]};rn.node;var an=P(rn),on={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`}]]};on.node;var sn=P(on),K=e(t(),1),cn=[`critical`,`warning`,`info`];function ln(){return{impactBands:new Set,types:new Set,stages:new Set}}function un(e){return e.impactBands.size===0&&e.types.size===0&&e.stages.size===0}function dn(e,t){return ft({...e,stageId:vt(e)},{impactBand:t.impactBands,type:t.types,stageId:t.stages})}function fn(e,t){return e.filter(e=>dn(e,t))}function pn(e,t){return[`impactBands`,`types`,`stages`].filter(n=>!dn(e,{...ln(),[n]:t[n]}))}function mn(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);let e=vt(a);e!=null&&i.add(e)}return{impactBands:cn.filter(e=>n.has(e)),types:[...r].sort(),stages:[...i].sort((e,t)=>e-t)}}function hn(e){return e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}function gn(e,t){let n=new URLSearchParams(e),r=ln();for(let e of hn(n.get(`impact`)))cn.includes(e)&&r.impactBands.add(e);let i=new Set(t.types);for(let e of hn(n.get(`type`)))i.has(e)&&r.types.add(e);for(let e of hn(n.get(`stage`))){let t=Number(e);Number.isInteger(t)&&r.stages.add(t)}return r}function _n(e){let t=[];return e.impactBands.size&&t.push(`impact=${cn.filter(t=>e.impactBands.has(t)).join(`,`)}`),e.types.size&&t.push(`type=${[...e.types].sort().join(`,`)}`),e.stages.size&&t.push(`stage=${[...e.stages].sort((e,t)=>e-t).join(`,`)}`),t.length?`?${t.join(`&`)}`:``}var q=n(),vn=(0,K.createContext)(null);function yn(e,t){let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n}function bn({options:e,fileId:t,children:n}){let[r,i]=(0,K.useState)(()=>gn(typeof window>`u`?``:window.location.search,e));(0,K.useEffect)(()=>{if(typeof window>`u`)return;let e=_n(r),t=`${window.location.pathname}${e}${window.location.hash}`;window.history.replaceState(window.history.state,``,t)},[r]);let a=(0,K.useRef)(t);(0,K.useEffect)(()=>{a.current!==t&&(a.current=t,i(ln()))},[t]),(0,K.useEffect)(()=>()=>{if(typeof window>`u`)return;let e=`${window.location.pathname}${window.location.hash}`;window.history.replaceState(window.history.state,``,e)},[]),(0,K.useEffect)(()=>{if(typeof window>`u`)return;let t=()=>i(gn(window.location.search,e));return window.addEventListener(`popstate`,t),()=>window.removeEventListener(`popstate`,t)},[e]);let o=(0,K.useCallback)(e=>i(t=>({...t,impactBands:yn(t.impactBands,e)})),[]),s=(0,K.useCallback)(e=>i(t=>({...t,types:yn(t.types,e)})),[]),c=(0,K.useCallback)(e=>i(t=>({...t,stages:yn(t.stages,e)})),[]),l=(0,K.useCallback)(()=>i(ln()),[]),u=(0,K.useMemo)(()=>({selection:r,toggleImpactBand:o,toggleType:s,toggleStage:c,clearAll:l,replaceSelection:i}),[r,o,s,c,l]);return(0,q.jsx)(vn.Provider,{value:u,children:n})}function xn(){let e=(0,K.useContext)(vn);if(!e)throw Error(`useFindingFilter outside FindingFilterProvider`);return e}function Sn(){let{clearAll:e}=xn();return(0,q.jsx)(jt,{icon:sn,title:`No findings match the active filters`,description:`Adjust or clear the filters to see findings.`,action:(0,q.jsx)(`button`,{type:`button`,onClick:e,className:`cursor-pointer text-sm font-medium text-accent underline-offset-4 hover:underline`,children:`Clear all filters`})})}function Cn({className:e,orientation:t=`horizontal`,...n}){return(0,q.jsx)(Me,{"data-slot":`separator`,orientation:t,className:F(`shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch`,e),...n})}var wn={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 Tn(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 En({label:e,count:t,children:n}){return(0,q.jsxs)(Ne,{children:[(0,q.jsxs)(Le,{className:F(xe({variant:`outline`,size:`sm`}),`gap-1.5`),"aria-label":`Filter by ${e.toLowerCase()}`,children:[e,t>0&&(0,q.jsx)(`span`,{className:`rounded-sm bg-primary px-1.5 text-xs font-medium text-primary-foreground`,children:t}),(0,q.jsx)(me,{"aria-hidden":`true`,className:`opacity-60`})]}),(0,q.jsx)(Fe,{align:`start`,className:`max-h-72 w-56 overflow-y-auto`,children:n})]})}function Dn({options:e,resultCount:t}){let{selection:n,toggleImpactBand:r,toggleType:i,toggleStage:a,clearAll:o}=xn(),[s,c]=(0,K.useState)(``),[l,u]=(0,K.useState)(``),d=(0,K.useMemo)(()=>{let t=s.trim();return t?e.stages.filter(e=>String(e).includes(t)):e.stages},[e.stages,s]),f=(0,K.useMemo)(()=>{let t=l.trim().toLowerCase();return t?e.types.filter(e=>e.toLowerCase().includes(t)||T(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=!un(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,q.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,q.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,q.jsx)(an,{"aria-hidden":`true`,className:`size-3.5`}),`Filter findings`]}),(0,q.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,q.jsx)(Cn,{orientation:`vertical`,className:`h-6`}),e.impactBands.length>0&&(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:`Impact`}),(0,q.jsx)(zt,{multiple:!0,"aria-label":`Filter by impact`,value:[...n.impactBands],onValueChange:e=>Tn(e,n.impactBands,r),children:e.impactBands.map(e=>(0,q.jsxs)(Rt,{value:e,variant:`outline`,size:`sm`,"aria-label":`Filter by impact: ${e}`,className:F(`tap-target-comfortable gap-1.5`,wn[e]),children:[(0,q.jsx)(he,{impactBand:e}),e]},e))})]}),e.types.length>0&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Cn,{orientation:`vertical`,className:`h-6`}),(0,q.jsxs)(En,{label:`Type`,count:n.types.size,children:[(0,q.jsx)(`div`,{className:`p-1`,children:(0,q.jsx)(Ie,{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,q.jsxs)(je,{checked:n.types.has(e),onCheckedChange:()=>i(e),"aria-label":`Filter by type: ${e}`,children:[(0,q.jsx)(`span`,{className:`rounded bg-muted px-1 text-xs font-medium text-foreground!`,children:T(e)}),` `,e]},e)),f.length===0&&(0,q.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`No matching type`})]})]}),e.stages.length>0&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Cn,{orientation:`vertical`,className:`h-6`}),(0,q.jsxs)(En,{label:`Stage`,count:n.stages.size,children:[(0,q.jsx)(`div`,{className:`p-1`,children:(0,q.jsx)(Ie,{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,q.jsxs)(je,{checked:n.stages.has(e),onCheckedChange:()=>a(e),"aria-label":`Filter by stage: ${e}`,children:[`Stage `,e]},e)),d.length===0&&(0,q.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`No matching stage`})]})]}),p&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Cn,{orientation:`vertical`,className:`h-6`}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[m.map(e=>(0,q.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-sm border border-border bg-muted px-2 py-0.5 text-xs hover:bg-muted/70`,children:[e.label,` `,(0,q.jsx)(mt,{"aria-hidden":`true`,className:`size-3`})]},e.key)),(0,q.jsx)(`button`,{type:`button`,onClick:o,className:`tap-target-comfortable cursor-pointer text-xs underline`,children:`Clear all filters`})]})]})]})}function On(e){let[t,n]=(0,K.useState)(!1),r=ot(),i=e!=null&&r?.widgetId===e;return(0,K.useLayoutEffect)(()=>{i&&n(!0)},[i]),{open:t||i,toggle:()=>n(e=>!(e||i))}}function kn({widget:e,widgetProps:t}){let{component:n,widgetId:r,index:i}=e;return(0,q.jsx)(B,{cardId:`alert-${i}`,widgetId:r,children:(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)($e,{}),children:(0,q.jsx)(n,{...t})})})}function An(e){let t=Dt[e.type],n=typeof e.recommendation==`string`?e.recommendation.trim():``;return!t?.routeable||!n?null:{finding:e,widgetId:t.widgetId,region:t.region,findingLabel:pt(e.type),stageId:typeof e.stageId==`number`?e.stageId:null,recommendation:n}}function jn(e,t){return t.includes(e)?An(e):null}function Mn(e,t){return Nn(e,t)[0]??null}function Nn(e,t){return ce(e,t).map(An).filter(e=>e!==null)}function Pn(e){return e.data.verdict.steps.map(t=>de(e,t.leadIndex)).filter(e=>e!=null)}function Fn(e,t){let n=new Map,r=new Set;return Pn(e).forEach((e,i)=>{let a=An(e)?.widgetId;a&&t.has(a)&&!r.has(a)&&(r.add(a),n.set(i,a))}),n}var In=K.createContext(void 0);function Ln(){let e=K.useContext(In);if(e===void 0)throw Error(l(10));return e}var Rn={value:()=>null},zn=K.forwardRef(function(e,t){let{render:n,className:r,disabled:i=!1,hiddenUntilFound:o,keepMounted:s,loopFocus:c,onValueChange:l,multiple:u=!1,orientation:d=`vertical`,value:f,defaultValue:p,style:m,...h}=e,g=p??_e,_=K.useRef([]),[v,y]=N({controlled:f,default:g,name:`Accordion`,state:`value`}),b=a((e,t,n)=>{if(!u){let t=v[0]===e?[]:[e];if(l?.(t,n),n.isCanceled)return;y(t)}else if(t){let t=v.slice();if(t.push(e),l?.(t,n),n.isCanceled)return;y(t)}else{let t=v.filter(t=>t!==e);if(l?.(t,n),n.isCanceled)return;y(t)}}),x=K.useMemo(()=>({value:v,disabled:i,orientation:d}),[v,i,d]),S=K.useMemo(()=>({disabled:i,handleValueChange:b,hiddenUntilFound:o??!1,keepMounted:s??!1,state:x,value:v}),[i,b,o,s,x,v]),C=ne(`div`,e,{state:x,ref:t,props:h,stateAttributesMapping:Rn});return(0,q.jsx)(In.Provider,{value:S,children:(0,q.jsx)(Et,{elementsRef:_,children:C})})}),Bn=K.createContext(void 0);function Vn(){let e=K.useContext(Bn);if(e===void 0)throw Error(l(9));return e}var Hn=`data-index`,Un={...m,index:e=>({[Hn]:String(e)}),...v,value:()=>null},Wn=K.forwardRef(function(e,t){let{className:n,disabled:r=!1,onOpenChange:i,render:o,value:s,style:c,...l}=e,{ref:u,index:d}=Tt(),f=y(t,u),{disabled:p,handleValueChange:m,state:h,value:g}=Ln(),_=M(),v=s??_,b=r||p,C=g.indexOf(v)!==-1,w=a((e,t)=>{i?.(e,t),!t.isCanceled&&m(v,e,t)}),T=x({open:C,onOpenChange:w,disabled:b}),E=K.useMemo(()=>({open:T.open,disabled:T.disabled,transitionStatus:T.transitionStatus}),[T.open,T.disabled,T.transitionStatus]),D=K.useMemo(()=>({...T,onOpenChange:w,state:E}),[T,E,w]),O=K.useMemo(()=>({...h,hidden:!C&&!T.mounted,index:d,disabled:b,open:C}),[T.mounted,b,d,C,h]),k=M(),[A,j]=K.useState(),ee=A===null?void 0:A??k,N=K.useMemo(()=>({defaultTriggerId:k,open:C,state:O,setTriggerId:j,triggerId:ee}),[k,C,O,j,ee]),te=ne(`div`,e,{state:O,ref:f,props:l,stateAttributesMapping:Un});return(0,q.jsx)(S.Provider,{value:D,children:(0,q.jsx)(Bn.Provider,{value:N,children:te})})}),Gn=K.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,{state:o}=Vn();return ne(`h3`,e,{state:o,ref:t,props:a,stateAttributesMapping:Un})}),Kn=K.forwardRef(function(e,t){let{disabled:n,className:r,id:i,render:a,nativeButton:o=!0,style:s,...l}=e,{panelId:u,open:d,handleTrigger:f,disabled:m}=p(),{getButtonProps:g,buttonRef:_}=c({disabled:n||m,focusableWhenDisabled:!0,native:o}),{defaultTriggerId:v,state:y,setTriggerId:b}=Vn(),x=i||void 0,S=x??v;return se(()=>(b(e=>x??(e===null?void 0:e)),()=>{b(e=>e===x?null:e)}),[x,b]),ne(`button`,e,{state:y,ref:[t,_],props:[{"aria-controls":d?u:void 0,"aria-expanded":d,id:S,onClick:f},l,g],stateAttributesMapping:h})}),qn=`--accordion-panel-height`,Jn=`--accordion-panel-width`,Yn=K.forwardRef(function(e,t){let{className:n,hiddenUntilFound:r,keepMounted:a,id:o,render:s,style:c,...l}=e,{hiddenUntilFound:u,keepMounted:d}=Ln(),{defaultPanelId:f,mounted:m,onOpenChange:h,open:g,setMounted:_,setOpen:v,setPanelIdState:y,transitionStatus:b}=p(),x=r??u,S=a??d,C=o||void 0,w=o??f;se(()=>(y(e=>C??(e===null?void 0:e)),()=>{y(e=>e===C?null:e)}),[C,y]);let{height:T,props:E,ref:O,shouldPreventOpenAnimation:k,shouldRender:A,transitionStatus:j,width:ee}=i({externalRef:t,hiddenUntilFound:x,id:w,keepMounted:S,mounted:m,onOpenChange:h,open:g,setMounted:_,setOpen:v,transitionStatus:b}),{state:M,triggerId:N}=Vn(),te={...M,transitionStatus:j},re=D(c,te),ie=ne(`div`,{...e,style:void 0},{state:te,ref:O,props:[E,{"aria-labelledby":N,role:`region`,style:{[qn]:T===void 0?`auto`:`${T}px`,[Jn]:ee===void 0?`auto`:`${ee}px`}},l,re?{style:re}:void 0,k?{style:{animationName:`none`}}:void 0],stateAttributesMapping:Un});return A?ie:null});function Xn({className:e,...t}){return(0,q.jsx)(zn,{"data-slot":`accordion`,className:F(`flex w-full flex-col`,e),...t})}function Zn({className:e,...t}){return(0,q.jsx)(Wn,{"data-slot":`accordion-item`,className:F(`not-last:border-b`,e),...t})}function Qn({className:e,children:t,headingLevel:n=3,...r}){let i=`h${n}`;return(0,q.jsx)(Gn,{className:`flex`,render:(0,q.jsx)(i,{}),children:(0,q.jsxs)(Kn,{"data-slot":`accordion-trigger`,className:F(`group/accordion-trigger relative flex flex-1 cursor-pointer items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:cursor-default aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground`,e),...r,children:[t,(0,q.jsx)(me,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden`}),(0,q.jsx)(le,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline`})]})})}function $n({className:e,children:t,...n}){return(0,q.jsx)(Yn,{"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,q.jsx)(`div`,{className:F(`pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4`,e),children:t})})}function er(e){return e.length===0?e:e[0].toUpperCase()+e.slice(1)}function tr({type:e,label:t,thresholdSummary:n,status:r=`passed`}){let i=r===`notRun`;return(0,q.jsxs)(H,{"data-testid":`clean-check-row`,"data-clean-check-type":e,"data-clean-check-status":r,children:[(0,q.jsx)(V,{className:`w-px`,children:(0,q.jsxs)(`span`,{className:i?`inline-flex h-6 items-center gap-1 rounded-sm bg-muted px-2 font-mono text-xs font-medium whitespace-nowrap text-muted-foreground`:`inline-flex h-6 items-center gap-1 rounded-sm bg-clean/10 px-2 font-mono text-xs font-medium whitespace-nowrap text-clean`,children:[(0,q.jsx)(i?Qt:Ct,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}),T(e)]})}),(0,q.jsxs)(V,{className:`whitespace-normal`,children:[(0,q.jsx)(`span`,{className:`block text-sm font-medium text-foreground`,children:er(t)}),(0,q.jsx)(L,{children:(0,q.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:er(`${n}.`)})})]})]})}var nr=`suggested-improvements`,rr={stage:`per-stage`,app:`app-level`,sql:`sql-scope`,config:`config-scope`},ir=[`per-stage`,`app-level`,`sql-scope`,`config-scope`],ar={"per-stage":`Per-stage checks`,"app-level":`App-level checks`,"sql-scope":`SQL plan checks`,"config-scope":`Config checks`};function or(e,t,n){let r=[...e,...t].filter(be);return At(n).filter(({type:e})=>!kt(e)).map(({component:e,widgetId:t,type:n},i)=>{let a=r.filter(e=>e.type===n);return{component:e,widgetId:t,index:i,findings:a,impactBand:w(a)}}).filter(e=>e.impactBand!==void 0).sort((e,t)=>_[e.impactBand]-_[t.impactBand]||e.index-t.index)}function sr({catalog:e,configFindings:t=[],coverage:n,detectors:r}){let i=[...e,...t].filter(be),a=e=>e in n.notRunReasons,o=Object.keys(Dt).filter(e=>!kt(e)).filter(e=>!i.some(t=>t.type===e)).map(e=>({type:e,findingLabel:pt(e)})),s=o.filter(({type:e})=>!a(e)),c=o.filter(({type:e})=>a(e)),l=c.length>0?n.gaps:[],u=new Map;for(let e of s){let t=r[e.type]?.scope,n=t?rr[t]:`app-level`;u.has(n)||u.set(n,[]),u.get(n).push(e)}return(0,q.jsx)(Xn,{children:(0,q.jsxs)(Zn,{value:`clean-checks`,children:[(0,q.jsx)(Qn,{children:`Clean checks`}),(0,q.jsxs)($n,{children:[c.length>0?(0,q.jsxs)(`div`,{"data-testid":`clean-checks-not-run`,className:`pb-4`,children:[(0,q.jsx)(`p`,{className:`pb-1 text-xs font-medium text-muted-foreground`,children:`Not checked on this log`}),(0,q.jsx)(`p`,{className:`pb-2 text-xs text-muted-foreground`,children:`The log lacked the data these checks need, so they neither passed nor failed.`}),l.length>0?(0,q.jsx)(`ul`,{"data-testid":`clean-checks-not-run-reasons`,className:`list-disc space-y-0.5 pb-2 pl-5 text-xs text-muted-foreground [overflow-wrap:anywhere]`,children:l.map(e=>(0,q.jsx)(`li`,{children:e},e))}):null,(0,q.jsx)(ct,{children:(0,q.jsx)(wt,{children:c.map(({type:e,findingLabel:t})=>(0,q.jsx)(tr,{type:e,label:t,thresholdSummary:r[e]?.thresholdSummary??``,status:`notRun`},e))})})]}):null,(0,q.jsxs)(`p`,{className:`pb-2 text-xs text-muted-foreground`,children:[s.length===0?`No check could run on this log.`:`Every check below passed.`,(0,q.jsx)(L,{children:` Each caption gives the threshold it was held to.`})]}),ir.map(e=>{let t=u.get(e);return!t||t.length===0?null:(0,q.jsxs)(`div`,{className:`pt-3 first:pt-0`,children:[(0,q.jsx)(`p`,{className:`pb-1 text-xs font-medium text-muted-foreground`,children:ar[e]}),(0,q.jsx)(ct,{children:(0,q.jsx)(wt,{children:t.map(({type:e,findingLabel:t})=>(0,q.jsx)(tr,{type:e,label:t,thresholdSummary:r[e]?.thresholdSummary??``},e))})})]},e)})]})]})})}function cr(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 lr(e,{bucketBy:t=`time`,bucketWidthMs:n=1e3,hypotheticalCores:r=null}={}){let i=cr(e,r);if(t===`coreCount`){let e=[];for(let t of i)e[t.busy]=(e[t.busy]??0)+(t.tEnd-t.tStart);for(let t=0;t<e.length;t++)e[t]===void 0&&(e[t]=0);return{mode:`coreCount`,histogram:e}}if(i.length===0)return{mode:`time`,bucketWidthMs:n,startTime:null,endTime:null,buckets:[]};let a=i[0].tStart,o=i[i.length-1].tEnd,s=[];for(let e=a;e<o;e+=n){let t=e+n,r=0;for(let n of i){let i=Math.max(n.tStart,e),a=Math.min(n.tEnd,t);a>i&&(r+=n.busy*(a-i))}s.push({tStart:e,tEnd:t,busyCoreMs:r,avgBusyCores:r/n})}return{mode:`time`,bucketWidthMs:n,startTime:a,endTime:o,buckets:s}}async function ur(e,t){let n=[...e.stages.keys()],r=await Promise.all(n.map(e=>t(e).catch(()=>null))),i=[],a=!1;for(let e of r){if(!e){a=!0;continue}let{metrics:t,fieldNames:n}=e,r=n.length,o=n.indexOf(`launchTime`),s=n.indexOf(`finishTime`);if(o!==-1&&s!==-1)for(let e=0;e<t.length;e+=r)i.push({launch:t[e+o],finish:t[e+s]})}return{intervals:i,incomplete:a}}async function dr(e,t){let{intervals:n,incomplete:r}=await ur(e,t),{histogram:i}=lr(n,{bucketBy:`coreCount`});return{histogram:i??[],incomplete:r}}var fr=220;function pr({appModel:e,getTaskData:t}){let{exportMode:n,getTaskData:r}=Bt(t),[i,a]=(0,K.useState)(null),[o,c]=(0,K.useState)(!1),[l,u]=(0,K.useState)(!1),d=e.stages.size>0;if((0,K.useEffect)(()=>{if(!d||!l||i!==null||!r)return;let t=!1;return dr(e,r).then(({histogram:e,incomplete:n})=>{t||(a(e),c(n))}),()=>{t=!0}},[e,r,d,l,i]),!d)return null;let f=(i??[]).map((e,t)=>({cores:String(t),coreCount:t,ms:e})),p=Gt(f),m=f.reduce((e,t)=>t.ms>e.ms?t:e,f[0]);return(0,q.jsx)(U,{title:`Core-Usage Distribution`,id:`core-usage-histogram`,open:l,onOpenChange:u,summary:i!==null&&m?(0,q.jsx)(G,{value:g(m.ms),context:`at ${m.coreCount} concurrent core${m.coreCount===1?``:`s`}`}):void 0,children:i===null?n?(0,q.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Core-usage detail isn’t included in exported reports.`}):(0,q.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Loading core usage…`}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Ut,{ariaLabel:`Wall-clock time spent at each concurrent-core count across the run. See the table below for exact values.`,height:fr,table:{caption:`Wall-clock time by concurrent-core count`,columns:[`Concurrent cores`,`Time`],rows:i.map((e,t)=>[t,g(e)]),align:[`right`,`right`]},children:(0,q.jsxs)(Ke,{data:p,children:[(0,q.jsx)(Ge,{vertical:!1,stroke:W.muted,strokeOpacity:.2}),(0,q.jsx)(Xe,{dataKey:`cores`,tick:{fontSize:10},label:{value:`Concurrent busy cores`,position:`insideBottom`,offset:-5,fontSize:12}}),(0,q.jsx)(Ye,{tick:{fontSize:10},width:48,tickFormatter:e=>g(e)}),(0,q.jsx)(qe,{dataKey:`ms`,name:`Time`,fill:W.stage})]})}),o?(0,q.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,q.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`See `,(0,q.jsx)(s,{anchor:`#bottleneck-utilization`,children:`how to read concurrent-core utilization`}),`.`]})]})})}var mr=`This estimate is derived from a simplified compute model; compare it against wall-clock data before acting on it.`,hr=e=>`${Math.round(e*100)/100} core-h`;function gr(){let e=R()?.data,t=e?.efficiency;if(!e||!t||t.availableComputeHours<=0)return null;let{usefulCoreHours:n,totalCores:r,topStages:i}=e.wastedCoreHours,a=null;return t.dominantWaste===`driver`?a=(0,q.jsxs)(`p`,{children:[(0,q.jsx)(`strong`,{children:`Most of it is driver waste:`}),` review spark.driver.memory and spark.driver.cores before scaling executors.`]}):t.dominantWaste===`executor`&&(a=(0,q.jsxs)(`p`,{children:[(0,q.jsx)(`strong`,{children:`Most of it is executor waste:`}),` reduce cluster size or enable dynamic allocation.`]})),(0,q.jsx)(U,{title:`Compute Efficiency`,statusBadge:(0,q.jsx)(L,{children:(0,q.jsx)(Lt,{confidence:`low`,validationRequired:mr})}),defaultCollapsed:!0,summary:(0,q.jsx)(G,{value:t.wastagePct==null?hr(t.availableComputeHours):`${t.wastagePct}% wasted`,context:`of ${hr(t.availableComputeHours)} available`}),children:(0,q.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[!e.wallClockReliable&&(0,q.jsx)(L,{children:(0,q.jsx)(`p`,{className:`text-muted-foreground`,children:`This run used concurrent job groups: the driver/executor split below is approximate, not precise.`})}),(0,q.jsxs)(`p`,{children:[`Available: `,(0,q.jsx)(`strong`,{children:hr(t.availableComputeHours)}),n!=null&&(0,q.jsxs)(q.Fragment,{children:[` `,`· Used: `,(0,q.jsx)(`strong`,{children:hr(n)})]}),t.wastagePct!=null&&(0,q.jsxs)(q.Fragment,{children:[` `,`· wasted `,(0,q.jsxs)(`strong`,{children:[t.wastagePct,`%`]})]})]}),r!=null&&(0,q.jsx)(L,{children:(0,q.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Available = cores × the time each executor was alive (peak `,r,` cores); used = core-time that actually ran tasks.`]})}),(0,q.jsxs)(`p`,{children:[(0,q.jsx)(he,{impactBand:`info`}),` Driver-bound waste: `,(0,q.jsx)(`strong`,{children:hr(t.driverWasteHours)})]}),(0,q.jsxs)(`p`,{children:[(0,q.jsx)(he,{impactBand:`info`}),` Executor-bound waste: `,(0,q.jsx)(`strong`,{children:hr(t.executorWasteHours)})]}),(0,q.jsxs)(`p`,{className:`text-muted-foreground`,children:[`Floor (same executors, zero skew): `,g(t.floorZeroSkewMs)]}),a,i.length>0&&(0,q.jsxs)(`div`,{className:`space-y-1`,children:[(0,q.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Top stages by task core-time`}),(0,q.jsx)(`ul`,{className:`space-y-0.5`,children:i.map(e=>(0,q.jsxs)(`li`,{className:`flex justify-between gap-2`,children:[(0,q.jsxs)(`span`,{children:[`Stage `,e.stageId]}),(0,q.jsx)(`span`,{className:`text-muted-foreground tabular-nums`,children:hr(e.coreMs/36e5)})]},e.stageId))})]})]})})}var _r=[{label:`Extract`,key:`extract`},{label:`Transform`,key:`transform`},{label:`Load`,key:`load`}];function vr(){let e=R()?.data.etlPhases;if(!e||e.extract+e.transform+e.load===0)return null;let t=_r.reduce((t,n)=>e[n.key]>e[t.key]?n:t);return(0,q.jsx)(U,{title:`ETL Phase Attribution`,defaultCollapsed:!0,summary:(0,q.jsx)(G,{value:`${t.label} ${g(e[t.key])}`,context:`largest phase`}),children:(0,q.jsxs)(`div`,{className:`space-y-1`,children:[_r.map(({label:t,key:n})=>(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`strong`,{children:t}),`: `,g(e[n])]},n)),(0,q.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Sums the run time of each phase's stages, so overlapping stages count twice and a phase can exceed the wall-clock.`}),(0,q.jsx)(L,{children:(0,q.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Heuristic: a stage that both shuffles and writes counts in Transform and Load.`})})]})})}var yr=220;function br(e,t){if(e.length===0)return null;if(t===0)return`No executors recorded in this run`;let n=e.findIndex(e=>e>0),r=n===-1?[]:e.slice(n);if(r.some(e=>e!==r[0]))return null;let i=r[0]??t;return i===1?`One executor for the whole run`:`${i} executors for the whole run`}function xr(e){let t=e.app,n=e.executors.added,r=e.executors.removed;if(t?.startTime==null||t?.endTime==null)return{times:[],counts:[]};let i=t.endTime-t.startTime,a=Math.max(5e3,Math.floor(i/100)),o=[],s=[],c=new Map(r.map(e=>[e.executorId,e.timestamp]));for(let e=t.startTime;e<=t.endTime;e+=a){let r=n.filter(t=>{let n=c.get(t.executorId)??1/0;return t.timestamp<=e&&e<n}).length;o.push(((e-t.startTime)/1e3).toFixed(0)+`s`),s.push(r)}return{times:o,counts:s}}function Sr({active:e,payload:t,label:n}){return!e||!t||t.length===0?null:(0,q.jsxs)(`div`,{style:Wt,"data-testid":`executor-count-tooltip`,children:[`At `,String(n),`: Active executors `,String(t[0].value)]})}var Cr=(0,K.memo)(function({appModel:e,activeFileId:t}){let{chartData:n,sampled:r,hasSeries:i,peak:a,constantSentence:o}=(0,K.useMemo)(()=>{let{times:t,counts:n}=xr(e),r=t.map((e,t)=>({label:e,count:n[t]})),i=Gt(r),a=n.length>0;return{chartData:r,sampled:i,hasSeries:a,peak:a?Math.max(...n):0,constantSentence:br(n,e.executors.added.length)}},[e,t]);return i?o?(0,q.jsx)(U,{title:`Executor Count Over Time`,summary:(0,q.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:o}),children:(0,q.jsxs)(`p`,{className:`text-muted-foreground text-sm`,"data-testid":`executor-count-constant`,children:[o,`.`]})}):(0,q.jsx)(U,{title:`Executor Count Over Time`,summary:(0,q.jsx)(G,{value:`${a} peak`,context:`concurrent executors`}),children:(0,q.jsx)(Ut,{ariaLabel:`Executor count over time. See the table below for exact values.`,height:yr,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,q.jsxs)(Je,{data:r,children:[(0,q.jsx)(Ge,{vertical:!1,stroke:W.muted,strokeOpacity:.2}),(0,q.jsx)(Xe,{dataKey:`label`,tick:{fontSize:10},minTickGap:24}),(0,q.jsx)(Ye,{allowDecimals:!1,tick:{fontSize:10},width:32}),(0,q.jsx)(Qe,{content:Sr}),(0,q.jsx)(Ze,{type:`stepAfter`,dataKey:`count`,name:`Active executors`,stroke:W.stage,fill:W.stage,fillOpacity:.15})]})})}):(0,q.jsx)(U,{title:`Executor Count Over Time`,summary:(0,q.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:`Timeline unavailable: no end time recorded.`}),children:(0,q.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.`})})}),wr=[10,20,50,80,100,110,120,150,200,300,400,500];function Tr(e,t,n){return t<=0||n<=0?0:e/Math.min(n,t)}function Er(e,t){let n=0;for(let r of Object.keys(e)){let{totalTaskDurationSum:i,taskCount:a}=e[r];n+=Tr(i,a,t)}return n}function Dr({app:e,observedActiveMs:t,runAggregates:n,executorsAdded:r}){let i=n?.perStage??{},a=_t(e??{},r),o=a>0?Er(i,a):0,s=t>0?Math.round(Math.abs(o-t)/t*100):null,c=o>0?t/o:1;return{baselineCores:a,testPercentages:wr,predictions:wr.map(e=>{let t=Math.max(1,Math.round(a*e/100));return{pct:e,cores:t,estMakespanMs:Math.round(Er(i,t)*c)}}),modelErrorPct:s}}var Or=`What-If Executor Scaling`,kr=220,Ar=20;function jr([e,t]){let n=(t-e)*.1;return[Math.max(0,e-n),t+n]}function Mr(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 Nr(e){return e.evidenceAvailability?.entries.find(e=>e.key===`taskCoreTime`)}function Pr({reason:e,evidence:t}){return(0,q.jsx)(U,{title:Or,summary:(0,q.jsxs)(`span`,{className:`text-muted-foreground text-xs`,children:[`Not available: `,e]}),children:(0,q.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Not available: `,e,` `,(0,q.jsx)(Lt,{evidenceKey:t})]})})}function Fr(e){if(e===100)return`with the current executors`;if(e<100)return`with ${e}% of the executors`;let t=e/100;return`with ${Number.isInteger(t)?t:t.toFixed(1)}× the executors`}function Ir({appModel:e}){let t=R()?.data,n=Nr(e);if(!j(e.runAggregates)||n!=null&&n.state!==`present`)return(0,q.jsx)(Pr,{reason:n?.summary??`No usable task and core-time evidence in this log.`,evidence:`taskCoreTime`});if(!t)return null;let r=Dr({app:e.app,observedActiveMs:t.wallClock.stagesActive,runAggregates:e.runAggregates,executorsAdded:e.executors.added});if(r.baselineCores<=0)return(0,q.jsx)(Pr,{reason:`Baseline executor/core capacity is unavailable in this log.`});if(!Mr(e))return(0,q.jsx)(Pr,{reason:`Usable stage timing is unavailable in this log.`});let i=r.modelErrorPct!=null&&r.modelErrorPct>=Ar,a=Gt(r.predictions),o=r.predictions.reduce((e,t)=>t.estMakespanMs<e.estMakespanMs?t:e);return(0,q.jsx)(U,{title:Or,defaultCollapsed:!0,summary:(0,q.jsx)(G,{value:g(o.estMakespanMs),context:`best case, ${Fr(o.pct)}`}),children:(0,q.jsxs)(`div`,{className:`space-y-3`,children:[(0,q.jsx)(L,{children:(0,q.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Model Error:`,` `,(0,q.jsx)(`strong`,{className:i?`text-warning`:void 0,children:r.modelErrorPct==null?`—`:`${r.modelErrorPct}%`}),` `,`(idealized makespan vs. observed); higher means all estimates below carry more error, since a single log only observes one scale.`]})}),(0,q.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Move along this curve by changing `,(0,q.jsx)(`code`,{children:`spark.dynamicAllocation`}),`’s executor bounds, see the `,(0,q.jsx)(s,{anchor:`#config-autoscale-bounds`,children:`autoscaling config guide`}),`.`]}),t.wallClockReliable?null:(0,q.jsx)(L,{children:(0,q.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,q.jsx)(L,{children:(0,q.jsx)(`p`,{className:`text-xs`,children:(0,q.jsx)(Lt,{evidenceKey:`taskCoreTime`})})}),(0,q.jsx)(Ut,{ariaLabel:`Estimated makespan by executor percentage: diminishing-returns curve.`,height:kr,table:{caption:`Estimated makespan by executor percentage`,columns:[`% Executors`,`Cores`,`Est. makespan`],rows:r.predictions.map(e=>[`${e.pct}%`,e.cores,g(e.estMakespanMs)]),align:[`right`,`right`,`right`]},children:(0,q.jsxs)(He,{data:a,children:[(0,q.jsx)(Ge,{stroke:W.muted,strokeOpacity:.2}),(0,q.jsx)(Xe,{dataKey:`pct`,tickFormatter:e=>`${e}%`,tick:{fontSize:10}}),(0,q.jsx)(Ye,{domain:jr,tickFormatter:e=>g(e),tick:{fontSize:10},width:56}),(0,q.jsx)(Qe,{formatter:e=>[g(Number(e)),`Est. makespan`],labelFormatter:e=>`${e}% executors`}),(0,q.jsx)(We,{type:`monotone`,dataKey:`estMakespanMs`,name:`Est. makespan`,stroke:W.accent,dot:{r:3}})]})})]})})}function Lr({code:e,impactBand:t,className:n}){return(0,q.jsx)(`span`,{"data-step-code":e,title:`Step ${e} in the verdict`,className:F(`shrink-0 font-mono text-xs font-semibold tabular-nums`,t?ue[t]:`text-muted-foreground`,n),children:e})}function Rr(e){if(e.app?.startTime)return e.app.startTime;let t=1/0;for(let n of e.stages.values())n.submittedAt&&(t=Math.min(t,n.submittedAt));return Number.isFinite(t)?t:null}function zr(e){let t=-1/0;for(let n of e.stages.values())n.completedAt&&(t=Math.max(t,n.completedAt));let n=Rr(e),r=e.app?.endTime??(Number.isFinite(t)?t:null);return n==null||r==null||r<=n?null:(r-n)/1e3}var Br=[.1,.2,.5,1,2,5,10,15,30,60,120,300,600,900,1800,3600,7200,10800,21600,43200,86400],Vr=.5;function Hr(e,t=10){if(!(e>0))return[0];let n=Br.find(n=>Math.ceil(e/n)<=t-1)??Br[Br.length-1],r=[];for(let t=0;t*n<e-Vr*n;t++)r.push(Math.round(t*n*1e3)/1e3);return r.push(e),r}var Ur=e=>String(e).padStart(2,`0`);function Wr(e){if(!Number.isFinite(e)||e<0)return`0s`;if(e<60)return`${Number(e.toFixed(1))}s`;if(e<3600){let t=Math.floor(e/60),n=Math.round(e-t*60);return n===60&&(t+=1,n=0),t===60?`1h`:n===0?`${t}m`:`${t}m${Ur(n)}s`}let t=Math.floor(e/3600),n=Math.round((e-t*3600)/60);return n===60&&(t+=1,n=0),n===0?`${t}h`:`${t}h${Ur(n)}m`}var Gr=20,Kr=24,qr=40,Jr=200,Yr=640,Xr=10;function Zr(e,t=Gr){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 Qr({appModel:e,catalog:t}){let{openStage:n}=St(),r=[...e.stages.values()].filter(e=>e.submittedAt&&e.completedAt),i=r.length,a=r.reduce((e,t)=>Math.min(e,t.submittedAt),1/0),o=e.app?.startTime??(Number.isFinite(a)?a:0),s=new Set(t.filter(e=>e.stageId!=null).map(e=>e.stageId)),c=ge(),[l,u]=(0,K.useState)(()=>c===`advanced`?i:Gr),{stages:d}=Zr(r,l),f=Gt(d).map(e=>({stageId:e.id,label:`Stage ${e.id}`,wait:e.submittedAt-o,duration:e.completedAt-e.submittedAt,flagged:s.has(e.id)})),p=Math.min(Yr,Math.max(Jr,f.length*Kr+qr)),m=p-qr,h=f.reduce((e,t)=>Math.max(e,t.wait+t.duration),0),_=Hr(h/1e3,Xr).map(e=>e*1e3),v=Math.max(1,Math.floor(m/Kr)),y=Math.max(1,Math.ceil(f.length/v));return(0,q.jsx)(U,{title:`Job Timeline`,subtitle:`seconds from app start`,summary:i>0?(0,q.jsx)(G,{value:`${i} stage${i===1?``:`s`}`,context:`${s.size} flagged`}):void 0,children:i===0?(0,q.jsx)(jt,{tone:`neutral`,icon:ze,title:`No stages in this run.`}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,q.jsx)(`label`,{htmlFor:`timeline-topn`,children:`showing top`}),(0,q.jsx)(`input`,{id:`timeline-topn`,type:`number`,min:1,max:i,value:Math.min(l,i),onChange:e=>{let t=parseInt(e.target.value,10);Number.isFinite(t)||(t=l),u(Math.max(1,Math.min(i,t)))},className:`h-6 w-16 rounded border border-input bg-transparent px-1 py-0.5`,"aria-label":`Number of stages to show`}),(0,q.jsxs)(`span`,{children:[`of `,i,` by duration · flagged in red`]})]}),(0,q.jsx)(Ut,{ariaLabel:`Job timeline: stage durations by time from app start.`,height:p,table:{caption:`Job timeline: stage durations by time from app start`,columns:[`Stage`,`Start`,`Duration`],rows:f.map(e=>[e.label,g(e.wait),g(e.duration)]),align:[`left`,`right`,`right`]},children:(0,q.jsxs)(Ke,{data:f,layout:`vertical`,children:[(0,q.jsx)(Ge,{stroke:W.muted,strokeOpacity:.2,horizontal:!1}),(0,q.jsx)(Xe,{type:`number`,domain:[0,h],ticks:_,tickFormatter:e=>Wr(e/1e3),tick:{fontSize:10}}),(0,q.jsx)(Ye,{type:`category`,dataKey:`label`,tick:{fontSize:12},width:64,interval:0,tickFormatter:(e,t)=>t%y===0?e:``}),(0,q.jsx)(Qe,{formatter:(e,t)=>t===`Duration`?g(Number(e)):[null,null]}),(0,q.jsx)(qe,{dataKey:`wait`,stackId:`timeline`,fill:`transparent`,name:`Wait`}),(0,q.jsx)(qe,{dataKey:`duration`,stackId:`timeline`,name:`Duration`,cursor:`pointer`,onClick:e=>n(e.payload.stageId),children:f.map(e=>(0,q.jsx)(Ve,{fill:e.flagged?W.critical:W.stage,stroke:e.flagged?W.critical:`none`,strokeWidth:e.flagged?2:0},e.stageId))})]})})]})})}var $r=8,ei=6,ti=8,ni=(e,t)=>Math.max(0,Math.min(100,e/t*100));function ri({interpretation:e}){let t=I(e=>e.appModel),n=e.data.verdict.steps,r=(0,K.useMemo)(()=>{let r=zr(t),i=Rr(t);if(r==null||i==null)return null;let a=new Map,{byStage:o}=te(e);n.forEach((t,n)=>{let r=de(e,t.leadIndex);t.stageId!=null&&r&&o.get(t.stageId)===`F${n+1}`&&a.set(t.stageId,{code:o.get(t.stageId),impactBand:r.impactBand})});let s=[...t.stages.values()].filter(e=>e.submittedAt&&e.completedAt),{stages:c,total:l}=Zr(s,$r),u=new Set(c.map(e=>e.id)),d=s.filter(e=>a.has(e.id)&&!u.has(e.id)),f=[...c,...d].sort((e,t)=>e.submittedAt-t.submittedAt);return f.length===0?null:{rows:f.map(e=>{let t=ni((e.submittedAt-i)/1e3,r),n=ni((e.completedAt-i)/1e3,r);return{stage:e,leftPct:t,widthPct:Math.max(n-t,.5),step:a.get(e.id)??null}}),runEndSec:r,total:l,ticks:Hr(r,ei)}},[t,e,n]);if(!r)return null;let{rows:i,runEndSec:a,total:o,ticks:s}=r,c=[`${i.length===o?`All ${o}`:`${i.length} of ${o}`} stages on the run clock, ${Wr(a)} total.`,...i.filter(e=>e.step).map(e=>`Step ${e.step.code}: Stage ${e.stage.id}, from ${Wr(e.leftPct/100*a)} to ${Wr((e.leftPct+e.widthPct)/100*a)}.`)].join(` `);return(0,q.jsx)(`figure`,{"data-testid":`verdict-strip`,className:`verdict-strip m-0`,role:`img`,"aria-label":c,children:(0,q.jsxs)(`div`,{"aria-hidden":`true`,children:[i.map(({stage:e,leftPct:t,widthPct:n,step:r})=>{let i=n>=ti;return(0,q.jsxs)(`div`,{className:`verdict-strip__row`,"data-step-code":r?.code,children:[(0,q.jsxs)(`span`,{className:F(`truncate`,r&&`text-foreground`),children:[`stage `,e.id]}),(0,q.jsxs)(`div`,{className:`verdict-strip__lane`,children:[s.slice(1,-1).map(e=>(0,q.jsx)(`i`,{className:`verdict-strip__grid`,style:{left:`${ni(e,a)}%`}},e)),(0,q.jsx)(`div`,{className:F(`verdict-strip__bar`,r?ae[r.impactBand]:`verdict-strip__bar--neutral`),style:{left:`${t}%`,width:`${n}%`},children:r&&i?(0,q.jsx)(`span`,{className:`verdict-strip__code verdict-strip__code--inside`,children:r.code}):null}),r&&!i?(0,q.jsx)(`span`,{className:F(`verdict-strip__code`,ue[r.impactBand]),style:t+n<88?{left:`calc(${t+n}% + 4px)`}:{right:`calc(${100-t}% + 4px)`},children:r.code}):null]})]},e.id)}),(0,q.jsxs)(`div`,{className:`verdict-strip__axis`,children:[(0,q.jsx)(`span`,{}),(0,q.jsx)(`div`,{children:s.map((e,t)=>(0,q.jsx)(`span`,{style:t===0?{left:0}:t===s.length-1?{right:0}:{left:`${ni(e,a)}%`,transform:`translateX(-50%)`},children:Wr(e)},e))})]})]})})}function ii({text:e,label:t,testId:n}){let[r,i]=(0,K.useState)(!1);return(0,q.jsxs)(z,{variant:`outline`,size:`sm`,className:`h-7 border-border bg-transparent text-xs`,"data-testid":n,onClick:()=>{Ht(e).then(()=>{i(!0),setTimeout(()=>i(!1),1500)}).catch(()=>{})},children:[r?(0,q.jsx)(Se,{"aria-hidden":`true`}):(0,q.jsx)(nn,{"aria-hidden":`true`}),r?`Copied`:t]})}var ai=`h-6 border-border bg-transparent px-2 text-xs font-medium dark:bg-transparent`;function oi({step:e,finding:t,interpretation:n,index:r,onRoute:i,evidence:a}){let{openStage:o}=St(),s=On(a?.widgetId??null),c=`next-step-${r}-evidence`,{measured:l,fix:u}=gt(e.recommendation),d=ie(n,t),f=d?.figure??null,p=d?.meaning??null,m=`next-step-${r}-title`,h=ge()===`advanced`,g=h?d?.provenance??null:null,_=h&&t.confidence&&t.confidence!==`high`?t.confidence:null;return(0,q.jsxs)(`li`,{className:`verdict-step`,"data-testid":`next-step`,"aria-labelledby":m,children:[(0,q.jsx)(Lr,{code:`F${r+1}`,impactBand:r===0?t.impactBand:void 0,className:`pt-0.5`}),(0,q.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-2.5 gap-y-1 [overflow-wrap:anywhere]`,children:[(0,q.jsx)(k,{type:t.type,impactBand:t.impactBand,docAnchor:t.docAnchor}),(0,q.jsxs)(`h3`,{id:m,className:`text-[0.9375rem] font-semibold`,children:[yt(t),e.stageId==null?null:(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:` in `}),(0,q.jsxs)(`button`,{type:`button`,className:`cursor-pointer rounded-sm font-normal text-muted-foreground underline decoration-dotted underline-offset-2 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,title:`Open Stage ${e.stageId} details`,onClick:()=>o(e.stageId),children:[`Stage `,e.stageId]})]})]})]}),f?(0,q.jsxs)(`p`,{className:`verdict-step__save font-mono text-xs text-muted-foreground tabular-nums`,children:[(0,q.jsx)(`span`,{className:`verdict-step__save-label`,children:`Potential savings `}),(0,q.jsx)(`span`,{className:`verdict-step__save-figure font-semibold text-foreground`,children:f}),p?(0,q.jsxs)(`span`,{className:`verdict-step__save-meaning`,children:[` `,p]}):null]}):(0,q.jsx)(`span`,{"aria-hidden":`true`}),(0,q.jsxs)(`div`,{className:`verdict-step__body min-w-0 space-y-1 [overflow-wrap:anywhere]`,children:[l?(0,q.jsxs)(`p`,{className:`text-[0.8125rem] text-muted-foreground`,children:[(0,q.jsx)(`span`,{className:`font-semibold text-foreground`,children:`What's happening: `}),l]}):null,(0,q.jsxs)(`p`,{className:`text-[0.8125rem] text-muted-foreground`,children:[(0,q.jsx)(`span`,{className:`font-semibold text-foreground`,children:`What to try: `}),u]}),g||_?(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,"data-testid":`next-step-provenance`,children:[g?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`span`,{className:`font-medium text-foreground`,children:`Estimate: `}),g]}):null,_?(0,q.jsxs)(`span`,{title:typeof t.validationRequired==`string`?t.validationRequired:void 0,children:[g?` `:``,`${_[0].toUpperCase()}${_.slice(1)} confidence: verify before acting.`]}):null]}):null,e.relatedTypes.length>0?(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Also flagged here, likely the same cause: `,e.relatedTypes.map(pt).join(`, `),`.`]}):null,(0,q.jsx)(`div`,{className:`flex flex-wrap items-center gap-1 pt-1`,children:(0,q.jsxs)(z,{size:`sm`,variant:r===0?`soft`:`outline`,className:F(ai,r===0&&`border-transparent bg-accent-soft dark:bg-accent-soft`),"data-shortcut-target":!0,"aria-expanded":a?s.open:void 0,"aria-controls":a?c:void 0,onClick:()=>{if(a){s.toggle();return}let e=An(t);e&&i(e)},children:[a&&s.open?`Hide evidence`:`Show evidence`,a?s.open?(0,q.jsx)(le,{"aria-hidden":`true`}):(0,q.jsx)(me,{"aria-hidden":`true`}):(0,q.jsx)(lt,{"aria-hidden":`true`})]})}),a&&s.open?(0,q.jsx)(`div`,{id:c,className:`pt-2`,children:a.card}):null]})]})}function si({interpretation:e,onRoute:t}){let{openStage:n}=St(),r=e.data.verdict.costSteps.map(t=>({entry:t,finding:de(e,t.leadIndex)})).filter(e=>e.finding!=null);return r.length===0?null:(0,q.jsxs)(`div`,{className:`mt-4`,"data-testid":`cost-lane`,children:[(0,q.jsx)(`p`,{className:`trace-eyebrow`,children:`By core time`}),(0,q.jsx)(`ol`,{"aria-label":`Findings by core time`,className:`mt-1.5 space-y-1.5`,children:r.map(({entry:e,finding:r})=>(0,q.jsxs)(`li`,{className:`flex min-w-0 flex-wrap items-center gap-x-2.5 gap-y-1 text-[0.8125rem]`,children:[(0,q.jsx)(k,{type:r.type,impactBand:r.impactBand,docAnchor:r.docAnchor}),(0,q.jsxs)(`button`,{type:`button`,className:`cursor-pointer rounded-sm text-left font-medium underline decoration-dotted underline-offset-2 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,onClick:()=>{if(e.stageId!=null)n(e.stageId);else{let e=An(r);e&&t(e)}},children:[yt(r),e.stageId==null?``:` in Stage ${e.stageId}`]}),(0,q.jsxs)(`span`,{className:`font-mono text-xs text-muted-foreground tabular-nums`,children:[(0,q.jsx)(`span`,{className:`font-semibold text-foreground`,children:e.figure}),` of core time`]})]},r.id??e.leadIndex))})]})}var ci=`docs/user-guide/understanding-findings.html`;function li(){let[e,t]=(0,K.useState)(!1),n=u(),r=I(e=>e.exportMode);return(0,q.jsxs)(`div`,{className:`text-sm`,children:[(0,q.jsxs)(`button`,{type:`button`,className:`tap-target-comfortable inline-flex cursor-pointer items-center gap-1 rounded-sm text-left font-medium text-primary underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,"aria-expanded":e,"aria-controls":`newcomer-primer`,onClick:()=>t(e=>!e),children:[`New to Spark tuning? How to read this report`,e?(0,q.jsx)(le,{"aria-hidden":`true`,className:`size-4`}):(0,q.jsx)(me,{"aria-hidden":`true`,className:`size-4`})]}),e?(0,q.jsxs)(`div`,{id:`newcomer-primer`,className:`mt-2 max-w-prose space-y-2 rounded-md border border-border bg-muted/40 p-3 text-muted-foreground`,children:[(0,q.jsxs)(`p`,{children:[(0,q.jsx)(`span`,{className:`font-medium text-foreground`,children:`Stages and tasks.`}),` Spark splits each job into stages. A stage runs the same code as many tasks, one per slice (partition) of the data, and it finishes only when its slowest task does. Stage numbers match the Spark UI.`]}),(0,q.jsxs)(`p`,{children:[(0,q.jsx)(`span`,{className:`font-medium text-foreground`,children:`Executors and cores.`}),` Tasks run on executors, the worker processes of your cluster, one task per core at a time. Idle capacity is how much of those cores ran nothing.`]}),(0,q.jsxs)(`p`,{children:[(0,q.jsx)(`span`,{className:`font-medium text-foreground`,children:`Shuffle.`}),` Moving data between stages, for example for a join or a group-by. It is often the most expensive part of a job.`]}),(0,q.jsxs)(`p`,{children:[(0,q.jsx)(`span`,{className:`font-medium text-foreground`,children:`Potential savings and colors.`}),` A time figure, such as 58.6s of run time, estimates how much sooner the run could finish; it is not a guarantee. A resource figure in core-hours (core-h) or gigabyte-hours of memory (GB-h) is cluster time a fix would free up: it cuts cost, but may not shorten the run. Red (critical), amber (warning) and blue (info) show how serious each finding is. When a finding shows a time-savings figure, its color usually follows that figure.`]}),r?null:(0,q.jsx)(`a`,{href:ci,target:`_blank`,rel:`noopener noreferrer`,className:`inline-block text-primary underline-offset-4 hover:underline`,onClick:e=>{!n||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||(e.preventDefault(),n.openSite(ci))},children:`What every finding means`})]}):null]})}function ui({interpretation:e,onRoute:t,onShowMoreFindings:n,moreFindingsCount:r=0,renderEvidence:i,evidenceOwners:a}){let{title:o,summary:s,failed:c,clean:l,failureReason:u,copyText:d,idleLine:f}=e.data.verdict,p=e.data.verdict.steps.map(t=>({step:t,finding:de(e,t.leadIndex)})).filter(e=>e.finding!=null),m=ge(),h=e=>{let t=a?.get(e),n=t?i?.(t):null;return t&&n?{widgetId:t,card:n}:null};return(0,q.jsxs)(`section`,{id:`run-verdict`,tabIndex:-1,"aria-labelledby":`run-verdict-title`,"data-testid":`run-verdict`,className:F(`scroll-mt-20 rounded-xl border bg-card px-4 pt-5 pb-4 outline-none focus-visible:ring-2 focus-visible:ring-ring sm:px-5`,l?`border-clean/40`:c?`border-critical/40`:`border-border`),children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`p`,{className:`trace-eyebrow`,"aria-hidden":`true`,children:`Verdict`}),(0,q.jsxs)(`h2`,{id:`run-verdict-title`,className:F(`mt-1 flex items-center gap-2 font-heading text-[1.375rem] leading-tight font-semibold sm:text-[1.625rem]`,l&&`text-clean`,c&&`text-critical`),children:[l?(0,q.jsx)(Ct,{"aria-hidden":`true`,className:`size-5 shrink-0`}):null,c?(0,q.jsx)(en,{"aria-hidden":`true`,className:`size-5 shrink-0`}):null,o]}),(0,q.jsx)(`p`,{className:`mt-1.5 max-w-[72ch] text-sm text-muted-foreground`,children:s.join(` `)}),f?(0,q.jsx)(`p`,{"data-testid":`run-idle-line`,className:`max-w-[72ch] text-sm text-muted-foreground`,children:f}):null,u?(0,q.jsxs)(`p`,{"data-testid":`run-failure-reason`,className:`max-w-prose pt-1 text-sm`,children:[(0,q.jsx)(`span`,{className:`font-medium`,children:`Spark's recorded reason: `}),(0,q.jsx)(`code`,{className:`font-mono text-xs [overflow-wrap:anywhere]`,children:u})]}):null]}),(0,q.jsx)(ri,{interpretation:e}),m===`advanced`?null:(0,q.jsx)(`div`,{className:`mt-4`,children:(0,q.jsx)(li,{})}),p.length>0?(0,q.jsx)(`p`,{className:`trace-eyebrow mt-4`,children:`By wall clock (run time)`}):null,p.length>0?(0,q.jsx)(`ol`,{"aria-label":`Next steps`,className:`verdict-steps`,children:p.map(({step:n,finding:r},i)=>(0,q.jsx)(oi,{step:n,finding:r,interpretation:e,index:i,onRoute:t,evidence:h(i)},n.key))}):null,(0,q.jsx)(si,{interpretation:e,onRoute:t}),p.length>0?(0,q.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center justify-between gap-2`,children:[r>0?(0,q.jsxs)(z,{variant:`ghost`,size:`sm`,className:`h-6 px-2 text-xs`,onClick:n,children:[`More findings (`,r,`)`,(0,q.jsx)(lt,{"aria-hidden":`true`})]}):(0,q.jsx)(`span`,{}),(0,q.jsx)(ii,{label:`Copy next steps`,testId:`copy-plan-button`,text:d??``})]}):null,m===`advanced`&&p.length>1?(0,q.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:c?`Order: failures first, then highest potential savings; impact band breaks ties.`:`Order: highest potential savings first, unestimated last; impact band breaks ties.`}):null]})}function di(){let e=I(e=>e.activeFileId),t=I(e=>e.exportMode),{resetToDropZone:n}=st(),r=u();return t||e!==`sample-run`?null:(0,q.jsxs)(`section`,{"aria-label":`Sample run`,"data-testid":`sample-run-notice`,className:`flex flex-col gap-2 rounded-xl border border-border border-l-[3px] border-l-accent bg-card px-4 py-2.5 text-[0.8125rem] text-muted-foreground sm:flex-row sm:items-center sm:justify-between sm:gap-4`,children:[(0,q.jsxs)(`p`,{className:`max-w-prose`,children:[(0,q.jsx)(`span`,{className:`font-medium text-foreground`,children:`This is the sample run`}),`, a real Spark job from a public example corpus, picked because it shows several common problems. Everything below works the same on your own event log.`]}),(0,q.jsxs)(`div`,{className:`-ml-2.5 flex shrink-0 flex-wrap items-center gap-1 sm:ml-0`,children:[(0,q.jsxs)(z,{size:`sm`,variant:`ghost`,className:`text-accent hover:text-accent`,onClick:n,children:[`Load my event log`,(0,q.jsx)(lt,{"aria-hidden":`true`})]}),(0,q.jsx)(`a`,{href:fe,target:`_blank`,rel:`noopener noreferrer`,className:`tap-target-comfortable inline-flex h-7 items-center rounded-lg px-2.5 text-[0.8rem] font-medium text-accent underline-offset-4 hover:underline`,onClick:e=>{!r||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||(e.preventDefault(),r.openSite(fe))},children:`Where do I find my log?`})]})]})}function fi({eyebrow:e,value:t,meta:n,flag:r=null,bar:i,dataTestid:a}){return(0,q.jsxs)(`div`,{"data-testid":a,"data-flag":r??void 0,className:`flex flex-col px-4 py-3.5`,children:[(0,q.jsxs)(`span`,{className:`trace-eyebrow flex items-center gap-1.5 tracking-[.06em]`,children:[r&&(0,q.jsx)(he,{impactBand:r}),e]}),(0,q.jsx)(`div`,{className:`kpi-value mt-1 font-mono text-[1.875rem] leading-[1.2] font-semibold tracking-[-0.02em] tabular-nums`,children:t}),(0,q.jsx)(`p`,{className:`mt-0.5 text-xs text-muted-foreground`,children:n}),i]})}function pi({pct:e,flag:t,label:n}){let r=Math.max(0,Math.min(100,e));return(0,q.jsx)(`div`,{role:`img`,"aria-label":n,className:`mt-2.5 h-1.5 w-full overflow-hidden rounded-[1px] bg-chart-idle`,children:(0,q.jsx)(`div`,{className:F(`h-full rounded-[1px]`,t?ae[t]:`bg-clean`),style:{width:`${r}%`}})})}function mi({active:e,total:t}){let n=t>0?Math.max(0,Math.min(100,e/t*100)):0;return(0,q.jsxs)(`div`,{role:`img`,"aria-label":`Active ${g(e)} of ${g(t)} total`,className:`mt-2.5 flex h-1.5 w-full overflow-hidden rounded-[1px] bg-chart-idle`,children:[(0,q.jsx)(`div`,{className:`h-full bg-muted-foreground`,style:{width:`${n}%`}}),(0,q.jsx)(`div`,{className:`h-full flex-1 bg-muted-foreground/35`})]})}function hi(e){let t=/^(\d[\d.,]*)\s*([a-zA-Z%]+)$/.exec(e);return t?(0,q.jsxs)(q.Fragment,{children:[t[1],(0,q.jsx)(`small`,{children:t[2]})]}):e}function gi(e){return e>0?`Ran ${g(e)}`:`No stage activity recorded`}function _i(){return(0,q.jsxs)(`div`,{className:`flex items-start gap-2 rounded-xl border border-warning/40 bg-warning/10 p-4`,children:[(0,q.jsx)(he,{impactBand:`warning`,className:`mt-1.5`}),(0,q.jsxs)(`p`,{className:`text-sm text-warning`,children:[(0,q.jsx)(`span`,{className:`font-semibold tracking-wide uppercase`,children:`Timing unavailable`}),`. This run has no complete application timing interval, so wall-clock, efficiency, and unused core time can’t be measured.`]})]})}function vi({interpretation:e,catalog:t}){let n=ge(),{runShape:r,coverage:i,wallClock:a}=e;if(r.wallClockMs==null)return(0,q.jsx)(_i,{});let o=r.wallClockMs,s=a.stagesActive,c=!i.noFinishedStages,l=r.efficiencyPct,u=r.efficiencyFlag,d=t.find(e=>e.type===`coldStart`),f=r.unusedCoreTimePct,p=r.unusedCoreTimeFlag;return(0,q.jsx)(rt,{className:`overflow-hidden py-0`,children:(0,q.jsxs)(`div`,{className:`grid grid-cols-1 divide-y divide-border sm:grid-cols-3 sm:divide-x sm:divide-y-0`,children:[(0,q.jsx)(fi,{eyebrow:`Wall-clock`,dataTestid:`kpi-wall-clock`,value:o>0?hi(g(o)):`—`,meta:n===`advanced`||s<=0?(0,q.jsxs)(q.Fragment,{children:[gi(s),d?` · ${d.value}s cold start`:``]}):`Total run time.`,bar:(0,q.jsx)(mi,{active:s,total:o})}),(0,q.jsx)(fi,{eyebrow:`Efficiency`,dataTestid:`kpi-efficiency`,value:c?l==null?(0,q.jsx)(`span`,{className:`text-base`,children:`Unavailable`}):(0,q.jsxs)(q.Fragment,{children:[l,(0,q.jsx)(`small`,{children:`%`})]}):(0,q.jsx)(`span`,{className:`text-base`,children:`Not measured`}),flag:u,meta:c?l==null?`This run has no complete application timing interval.`:n===`advanced`?o>s?`${gi(s)} · ${g(o-s)} idle/gap time`:`executors active the whole run`:`Share of the run with a stage running (${g(s)}). Higher is better.`:`No stage in this log recorded an end, so there is no stage time to measure.`,bar:l==null?void 0:(0,q.jsx)(pi,{pct:l,flag:u,label:`Efficiency ${l}%`})}),(0,q.jsx)(fi,{eyebrow:`Unused core time`,dataTestid:`kpi-wastage`,value:f==null?(0,q.jsx)(`span`,{className:`text-base`,children:`Unavailable`}):(0,q.jsxs)(q.Fragment,{children:[f,(0,q.jsx)(`small`,{children:`%`})]}),flag:p,meta:r.unusedCoreTimeUnavailableReason===`application-timing`?`Unused core time needs complete application timing.`:r.unusedCoreTimeUnavailableReason===`core-usage-summary`?`Unused core time needs the core-usage summary.`:r.unusedCoreTimeUnavailableReason===`executor-capacity`?`Unused core time needs usable executor-capacity data.`:n===`advanced`?`Driver-idle + executor-slack core-hours as a share of available capacity. Directional, not a cost figure.`:`Share of executor core time that ran no task. Lower is better. Not a cost figure.`,bar:f==null?void 0:(0,q.jsx)(pi,{pct:f,flag:p,label:`Unused core time ${f}%`})})]})})}var yi=10,bi=`max-sm:flex max-sm:flex-wrap max-sm:items-start`,xi=`max-sm:w-auto max-sm:shrink-0`,Si=`max-sm:min-w-0 max-sm:flex-1 max-sm:whitespace-normal max-sm:[overflow-wrap:anywhere]`,Ci=`max-sm:w-full max-sm:basis-full max-sm:pt-0 max-sm:text-left`;function wi(e){let t=Kt(e),n=e.stageId==null?t&&t.length>0?`St.${C(t)}`:null:`St.${e.stageId}`;if(e.type===`duplicatePlanSubtree`&&e.rootName!=null){let t=Ti(e);return n&&t?`${n} · ${t}`:t??n}return n||(e.type===`configAudit`?e.property:null)}function Ti(e){if(e.type!==`duplicatePlanSubtree`||e.rootName==null)return null;let t=f(e.rootName),n=e.groupIndex==null?t:`${t} #${Number(e.groupIndex)+1}`;return e.executionId==null?n:`${n} (SQL ${e.executionId})`}function Ei({finding:e,textClassName:t}){let{stageId:n}=e,r=Kt(e);if(n!=null)return(0,q.jsx)(Jt,{stageId:n});if(r&&r.length>0){let n=Ti(e);return(0,q.jsxs)(`span`,{className:`inline-flex min-w-0 flex-wrap items-center gap-1.5`,children:[(0,q.jsx)(qt,{pills:r.map(e=>({id:e}))}),n?(0,q.jsx)(`span`,{className:F(`truncate`,t),title:n,children:n}):null]})}let i=wi(e);return i?(0,q.jsx)(`span`,{className:F(`min-w-0 truncate`,t),title:i,children:i}):null}function Di({target:e,evidence:t,state:n,panelId:r,onRoute:i}){if(!e||!t)return null;let a=t.widget!=null;return(0,q.jsxs)(z,{variant:`outline`,size:`sm`,className:`mt-1 h-6 border-border bg-transparent px-2 text-xs font-medium dark:bg-transparent`,"data-shortcut-target":!0,"aria-expanded":a?n.open:void 0,"aria-controls":a?r:void 0,onClick:()=>a?n.toggle():i(e),children:[a&&n.open?`Hide evidence`:`Show evidence`,a&&n.open?(0,q.jsx)(le,{"aria-hidden":`true`}):(0,q.jsx)(me,{"aria-hidden":`true`})]})}function Oi({evidence:e,panelId:t,open:n}){return!n||!e?.widget?null:(0,q.jsx)(H,{className:`hover:bg-transparent`,children:(0,q.jsx)(V,{colSpan:3,className:`whitespace-normal`,children:(0,q.jsx)(`div`,{id:t,children:(0,q.jsx)(kn,{widget:e.widget,widgetProps:e.widgetProps})})})})}function ki({finding:e,allFindings:t,onRoute:n,evidence:r}){let i=jn(e,t),a=wi(e),o=E(e)?.figure??null,s=bt(e),c=yt(e),l=ye().byFinding.get(e)??null,u=On(r?.widget?.widgetId??null),d=`finding-evidence-${e.id}`;return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(H,{"data-testid":`fix-these-first-row`,"data-finding-type":e.type,className:bi,children:[(0,q.jsx)(V,{className:F(`w-px`,xi),children:(0,q.jsx)(k,{type:e.type,impactBand:e.impactBand,docAnchor:e.docAnchor})}),(0,q.jsxs)(V,{className:F(`whitespace-normal`,Si),children:[(0,q.jsx)(`span`,{className:`block text-sm font-semibold`,children:c}),(0,q.jsx)(`span`,{className:`block text-[0.8125rem] text-muted-foreground`,children:s}),(0,q.jsx)(Di,{target:i,evidence:r,state:u,panelId:d,onRoute:n})]}),(0,q.jsx)(V,{className:F(`w-px text-right font-mono text-xs text-muted-foreground`,Ci),title:[a,o].filter(Boolean).join(` · `),children:(0,q.jsxs)(`span`,{className:`flex items-center justify-end gap-2 max-sm:justify-start`,children:[l?(0,q.jsx)(Lr,{code:l,impactBand:l===`F1`?e.impactBand:void 0}):null,(0,q.jsx)(Ei,{finding:e}),o?(0,q.jsx)(`span`,{className:`shrink-0 font-semibold text-foreground`,children:o}):null]})})]}),(0,q.jsx)(Oi,{evidence:r,panelId:d,open:u.open})]})}function Ai({finding:e,allFindings:t,onRoute:n,id:r}){let i=jn(e,t),a=wi(e),o=E(e)?.figure??null,s=bt(e),c=yt(e),l=e.stageId!=null||a!=null;return(0,q.jsxs)(H,{id:r,"data-testid":`fix-these-first-row`,"data-finding-type":e.type,className:`bg-muted/50`,children:[(0,q.jsxs)(V,{colSpan:2,className:`whitespace-normal`,children:[l?(0,q.jsx)(`div`,{className:`mb-1`,children:(0,q.jsx)(Ei,{finding:e,textClassName:`line-clamp-1 break-words text-xs font-medium font-mono`})}):null,(0,q.jsxs)(`button`,{type:`button`,"data-shortcut-target":!0,className:`block w-full cursor-pointer rounded-sm text-left focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:()=>i&&n(i),children:[l?null:(0,q.jsx)(`span`,{className:`line-clamp-1 break-words text-xs font-medium`,children:c}),(0,q.jsx)(`span`,{className:`line-clamp-1 break-words text-xs text-muted-foreground`,children:s})]})]}),(0,q.jsx)(V,{className:`w-px text-right font-mono text-xs text-muted-foreground`,children:o})]})}function ji({group:e,allFindings:t,expanded:n,onToggle:r,onRoute:i,evidence:a}){let[o,s]=(0,K.useState)(0),c=e.findings,l=c[0],u=new Set(c.map(b)).size===1?b(l):void 0,d=yt(l),f=ye().byFinding,p=e.findings.map(e=>f.get(e)).find(e=>e!=null)??null,m=On(a?.widget?.widgetId??null),h=jn(l,t),g=`group-evidence-${e.key}`,_=Math.ceil(c.length/yi),v=Math.min(o,Math.max(0,_-1)),y=c.slice(v*yi,v*yi+yi),x=`fix-these-first-group-content-${e.kind}-${e.type}${e.unit?`-${e.unit}`:``}`;return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(H,{"data-testid":`fix-these-first-group-row`,"data-finding-type":e.type,className:bi,children:[(0,q.jsx)(V,{className:F(`w-px`,xi),children:(0,q.jsx)(k,{type:e.type,impactBand:l.impactBand,docAnchor:re(e.findings)})}),(0,q.jsxs)(V,{className:F(`whitespace-normal`,Si),children:[(0,q.jsxs)(`button`,{type:`button`,"aria-expanded":n,"aria-controls":x,"data-shortcut-target":!0,className:`tap-target-comfortable cursor-pointer rounded-sm text-left focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:r,children:[(0,q.jsx)(`span`,{className:`block text-sm font-semibold`,children:d}),u?(0,q.jsx)(`span`,{className:`block text-[0.8125rem] text-muted-foreground`,children:u}):null]}),(0,q.jsx)(`div`,{children:(0,q.jsx)(Di,{target:h,evidence:a,state:m,panelId:g,onRoute:i})})]}),(0,q.jsx)(V,{className:F(`w-px text-right font-mono text-xs text-muted-foreground`,Ci),children:(0,q.jsxs)(`span`,{className:`inline-flex items-center justify-end gap-1.5`,title:e.statTitle,children:[p?(0,q.jsx)(Lr,{code:p,className:`mr-0.5`}):null,e.stat,n?(0,q.jsx)(le,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):(0,q.jsx)(me,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`})]})})]}),(0,q.jsx)(Oi,{evidence:a,panelId:g,open:m.open}),n&&y.map((e,n)=>(0,q.jsx)(Ai,{finding:e,allFindings:t,onRoute:i,id:n===0?x:void 0},e.id)),n&&_>1&&(0,q.jsx)(H,{className:`bg-muted/50`,children:(0,q.jsx)(V,{colSpan:3,children:(0,q.jsx)(Yt,{page:v,totalPages:_,onPrev:()=>s(e=>e-1),onNext:()=>s(e=>e+1)})})})]})}function Mi(e,t,n,r){let{eligible:i,groups:a}=A(r,[...e,...t],n);return{eligible:i,groups:a,triageTarget:Mn(r,i)}}var Ni={critical:`Critical`,warning:`Warning`,info:`Info`},Pi=[`critical`,`warning`,`info`];function Fi({impactBand:e,groups:t,widgets:n,allFindings:r,expandedGroupKey:i,onToggleGroup:a,onRoute:o,appModel:s,catalog:c,configFindings:l,getTaskData:u,activeFileId:d,subheading:f}){let p={appModel:s,catalog:c,configFindings:l,getTaskData:u,activeFileId:d},{evidenceByGroup:m,unowned:h}=(0,K.useMemo)(()=>{let e=new Map(n.map(e=>[e.widgetId,e])),r=new Set,i=new Map;for(let n of t){let t=An(n.findings[0])?.widgetId,a=t?e.get(t):void 0;a&&!r.has(a.widgetId)&&(r.add(a.widgetId),i.set(n.key,a))}return{evidenceByGroup:i,unowned:n.filter(e=>!r.has(e.widgetId))}},[t,n]);if(t.length===0&&n.length===0)return null;let g=`impact-band-${e}-heading`;return(0,q.jsxs)(`section`,{"aria-labelledby":g,className:`space-y-2`,children:[(0,q.jsx)(f?`h3`:`h2`,{id:g,tabIndex:-1,className:`trace-eyebrow scroll-mt-20 rounded-sm px-1 pt-2 outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:Ni[e]}),t.length>0&&(0,q.jsx)(ct,{className:`findings-table`,children:(0,q.jsx)(wt,{children:t.map(e=>{let t={widget:m.get(e.key)??null,widgetProps:p};if(e.findings.length===1)return(0,q.jsx)(ki,{finding:e.findings[0],allFindings:r,onRoute:o,evidence:t},e.findings[0].id);let{key:n}=e;return(0,q.jsx)(ji,{group:e,allFindings:r,expanded:i===n,onToggle:()=>a(n),onRoute:o,evidence:t},n)})})}),h.length>0&&(0,q.jsx)(ht,{children:h.map(({component:e,widgetId:t,index:n})=>(0,q.jsx)(B,{cardId:`alert-${n}`,widgetId:t,children:(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)($e,{}),children:(0,q.jsx)(e,{...p,defaultCollapsed:!0})})},t))})]})}function Ii({appModel:e,catalog:t,configFindings:n=[],stages:r,getTaskData:i,activeFileId:a,onRoute:o,verdictLeads:s,verdictWidgetIds:c}){let l=R(),{groups:u,eligible:d}=(0,K.useMemo)(()=>{let e=e=>s?e.filter(e=>!s.has(e)):e;return Mi(e(t),e(n),r,l)},[t,n,r,l,s]),f=[...t,...n],p=l?.data.detectors,m=(0,K.useMemo)(()=>p?or(t,n,p).filter(e=>!c?.has(e.widgetId)):[],[t,n,p,c]),[h,g]=(0,K.useState)(null),{groupsByImpactBand:_,widgetsByImpactBand:v}=(0,K.useMemo)(()=>{let e=new Map;for(let t of u){let n=t.band;e.has(n)||e.set(n,[]),e.get(n).push(t)}let t=new Map;for(let e of m)t.has(e.impactBand)||t.set(e.impactBand,[]),t.get(e.impactBand).push(e);return{groupsByImpactBand:e,widgetsByImpactBand:t}},[u,m]),y=(s?.size??0)>0,b=d.length===0;return(0,q.jsxs)(`div`,{id:nr,className:`space-y-6 scroll-mt-20`,children:[y?b?(0,q.jsx)(`p`,{"data-testid":`no-more-findings`,className:`text-sm text-muted-foreground`,children:`No more findings to show.`}):(0,q.jsxs)(`h2`,{"data-testid":`more-findings-heading`,className:`font-heading text-base font-semibold`,children:[`More findings `,(0,q.jsxs)(`span`,{className:`font-mono text-xs font-normal text-muted-foreground tabular-nums`,children:[`(`,d.length,`)`]})]}):null,Pi.map(r=>(0,q.jsx)(Fi,{impactBand:r,groups:_.get(r)??[],widgets:v.get(r)??[],allFindings:f,expandedGroupKey:h,onToggleGroup:e=>g(t=>t===e?null:e),onRoute:o,appModel:e,catalog:t,configFindings:n,getTaskData:i,activeFileId:a,subheading:y},r)),l?(0,q.jsx)(sr,{catalog:t,configFindings:n,coverage:l.data.coverage,detectors:l.data.detectors}):null]})}var Li=[`PROCESS_LOCAL`,`NODE_LOCAL`,`RACK_LOCAL`,`NO_PREF`,`ANY`],Ri=[W.clean,W.accent,W.warning,W.muted,W.critical];function zi(e){return e?new Date(e).toLocaleString():`—`}function Bi({stats:e}){let t=new Map(e.map(e=>[e.locality,e.count])),n=Li.filter(e=>t.has(e));for(let t of e)Li.includes(t.locality)||n.push(t.locality);let r=n.map((e,n)=>({locality:e,count:t.get(e)??0,color:Ri[Math.min(n,Ri.length-1)]}));return(0,q.jsx)(Ut,{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,q.jsxs)(Ke,{data:r,children:[(0,q.jsx)(Ge,{vertical:!1,stroke:W.muted,strokeOpacity:.2}),(0,q.jsx)(Xe,{dataKey:`locality`,tick:{fontSize:12}}),(0,q.jsx)(Ye,{allowDecimals:!1,tick:{fontSize:10},width:32}),(0,q.jsx)(Qe,{formatter:e=>[`${Number(e)} task${Number(e)===1?``:`s`}`,`Tasks`]}),(0,q.jsx)(qe,{dataKey:`count`,name:`Tasks`,children:r.map(e=>(0,q.jsx)(Ve,{fill:e.color},e.locality))})]})})}function Vi(e,t){let n=new Map;for(let t of e){n.has(t.type)||n.set(t.type,{impactBand:t.impactBand,finding:t,recs:new Map});let e=n.get(t.type);_[t.impactBand]<_[e.impactBand]&&(e.impactBand=t.impactBand,e.finding=t),t.recommendation&&!e.recs.has(t.recommendation)&&e.recs.set(t.recommendation,{extended:t.type===`retryWaste`?t.extended??null:null})}let r=e=>t.includes(e)?t.indexOf(e):t.length;return[...n.entries()].sort(([e],[t])=>r(e)-r(t))}function Hi({rec:e,extended:t,finding:n,showImpactEstimate:r}){let{measured:i,fix:a}=gt(e);return(0,q.jsxs)(`div`,{className:`space-y-1 text-sm`,children:[i?(0,q.jsxs)(`p`,{className:`max-w-full leading-normal break-words`,children:[(0,q.jsx)(`span`,{className:`font-medium`,children:`What's happening: `}),i]}):null,(0,q.jsxs)(`p`,{className:`max-w-full leading-normal break-words`,children:[(0,q.jsx)(`span`,{className:`font-medium`,children:`What to try: `}),a]}),t?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:t}):null,r?(0,q.jsx)(Xt,{finding:n}):null]})}function Ui(e,t){return`${e} ${t}${e===1?``:`s`}`}function Wi(e,t,n){let r=(e.completedAt??0)-(e.submittedAt??0),i=[];if(r>0){let e=t!=null&&t>0?Math.round(r/t*100):null;i.push(`Ran for ${g(r)}${e==null?``:`, ${e}% of this ${g(t)} run`}`)}return(e.taskCount??0)>0&&i.push(`split into ${Ui(e.taskCount,`task`)}`),[i.length>0?`${i.join(`, `)}.`:``,n===0?`Nothing was flagged on this stage.`:n===1?`1 finding here.`:`${n} findings here. They often share one cause, so start with the first.`].filter(Boolean).join(` `)}function Gi({stage:e,findings:t,typeOrder:n,catalog:r,runMs:i,onShowEvidence:a}){let o=R(),s=Vi(t,n);return(0,q.jsxs)(`section`,{"aria-label":`Why this stage was flagged`,className:`space-y-3`,children:[(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:Wi(e,i,s.length)}),s.length>0?(0,q.jsx)(`ol`,{className:`space-y-4 rounded-md border p-3`,children:s.map(([e,{impactBand:t,finding:n,recs:i}])=>{let s=ie(o,n)?.compact!=null,c=a?jn(n,r):null;return(0,q.jsxs)(`li`,{className:`space-y-1.5`,"data-testid":`stage-finding`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsx)(k,{type:e,impactBand:t}),(0,q.jsx)(`h3`,{className:`text-sm font-semibold`,children:yt(n)})]}),[...i.entries()].map(([e,{extended:t}],r)=>(0,q.jsx)(Hi,{rec:e,extended:t,finding:n,showImpactEstimate:r===0&&s},r)),c&&a?(0,q.jsxs)(z,{size:`sm`,variant:`outline`,onClick:()=>a(c),children:[`Show evidence`,(0,q.jsx)(lt,{"aria-hidden":`true`})]}):null]},e)})}):null]})}function Ki({stage:e,appModel:t}){return Ee(e.id,t)?(0,q.jsx)(Te,{title:`Query Plan`,children:(0,q.jsx)(Ae,{stageId:e.id,appModel:t})}):null}function qi({stage:e,appModel:t,catalog:n,getTaskData:r,onShowEvidence:i}){let{exportMode:a,getTaskData:o}=Bt(r),[s,c]=(0,K.useState)(null),[l,u]=(0,K.useState)(!1),[f,p]=(0,K.useState)(0),m=(e.taskCount??0)>0,h=R(),_=h?.data.stages[String(e.id)],v=h&&_?_.findingIndexes.map(e=>de(h,e)).filter(e=>e!=null):[];(0,K.useEffect)(()=>{if(!m||!o)return;let t=!1;return u(!1),o(e.id).catch(()=>null).then(e=>{t||(e?c(e):u(!0))}),()=>{t=!0}},[f]);let y=(e.completedAt??0)-(e.submittedAt??0),b=(e.memoryBytesSpilled??0)>0||(e.diskBytesSpilled??0)>0,x=(e.jvmGCTime??0)>0||(e.gcPct??0)>0,S=e.fetchWaitTime??0,C=S>0&&y>0?Math.round(S/y*100):null,w=(e.inputBytes??0)>0?((e.outputBytes??0)/(e.inputBytes??0)).toFixed(2):null,T=e.localityStats??[];return(0,q.jsxs)(`div`,{className:`space-y-6`,children:[(0,q.jsx)(Gi,{stage:e,findings:v,typeOrder:_?.typeOrder??[],catalog:n,runMs:h?.data.runShape.wallClockMs??null,onShowEvidence:i}),(0,q.jsx)(Oe,{title:`Overview`,collapsible:!0,defaultOpen:!0,rows:[[`Duration`,g(y)],[`Submitted`,zi(e.submittedAt)],[`Completed`,zi(e.completedAt)],e.sqlExecutionId!=null&&[`SQL Execution`,`#${e.sqlExecutionId}`],e.stageType?[`Stage type`,e.stageType]:!1]}),(0,q.jsx)(Oe,{title:`Tasks`,collapsible:!0,rows:[[`Total`,String(e.taskCount)],[`Failed`,String(e.failedTasks)],[`P50 duration`,(e.taskDurationP50??0)>0?g(e.taskDurationP50):`—`],[`P95 duration`,(e.taskDurationP95??0)>0?g(e.taskDurationP95):`—`],[`Max duration`,(e.taskDurationMax??0)>0?g(e.taskDurationMax):`—`],(e.peakExecutionMemoryMax??0)>0&&[`Peak execution memory`,d(e.peakExecutionMemoryMax)]],children:m?a?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Per-task duration data isn’t included in exported reports.`}):s?(0,q.jsx)(Vt,{metrics:s.metrics,fieldNames:s.fieldNames,markers:{p50:e.taskDurationP50,p95:e.taskDurationP95}}):l?(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Couldn’t load task data for this stage.`}),(0,q.jsx)(z,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>p(e=>e+1),children:`Retry`})]}):(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading task data…`}):null}),(0,q.jsx)(Oe,{title:`Locality`,collapsible:!0,rows:[],children:T.length>0?(0,q.jsx)(Bi,{stats:T}):null}),(0,q.jsx)(Oe,{title:`I/O`,collapsible:!0,rows:[[`Input`,d(e.inputBytes)],[`Output`,d(e.outputBytes)],[`Shuffle read`,d(e.shuffleReadBytes)],[`Shuffle write`,d(e.shuffleWriteBytes)],S>0&&[`Fetch wait`,`${g(S)}${C==null?``:` (${C}%)`}`],w!=null&&[`I/O ratio`,w]]}),b?(0,q.jsx)(Oe,{title:`Spill`,collapsible:!0,rows:[[`Memory spilled`,d(e.memoryBytesSpilled)],[`Disk spilled`,d(e.diskBytesSpilled)],(e.memoryBytesSpilled??0)>0&&[`Classification`,e.spillClassification??`unclassified`]]}):null,x?(0,q.jsx)(Oe,{title:`GC`,collapsible:!0,rows:[[`JVM GC time`,g(e.jvmGCTime)],[`Executor run time`,g(e.executorRunTime)],[`GC %`,`${(e.gcPct??0).toFixed(1)}%`]]}):null,e.details?(0,q.jsx)(L,{children:(0,q.jsx)(Te,{title:`Call Stack`,children:(0,q.jsx)(`pre`,{className:`overflow-x-auto rounded-md bg-muted p-2 text-xs whitespace-pre-wrap`,children:e.details})})}):null,(0,q.jsx)(Ki,{stage:e,appModel:t})]})}function Ji({appModel:e,catalog:t,getTaskData:n,onRoute:r}){let{stageId:i,close:a}=St(),o=i==null?void 0:e.stages.get(i),s=o!=null,c=(0,K.useRef)(!1),l=r?e=>{c.current=!0,a(),r(e)}:void 0;return(0,q.jsx)(et,{open:s,onOpenChange:e=>{e||a()},children:(0,q.jsx)(xt,{className:`max-h-[85vh] overflow-y-auto sm:max-w-4xl`,finalFocus:()=>{let e=c.current;return c.current=!1,!e},children:o?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(tt,{children:[(0,q.jsxs)(at,{children:[`Stage `,o.id]}),o.name?(0,q.jsxs)(ut,{className:`font-mono text-xs [overflow-wrap:anywhere]`,children:[(0,q.jsx)(`span`,{className:`font-sans`,children:`Code location: `}),o.name]}):null]}),(0,q.jsx)(qi,{stage:o,appModel:e,catalog:t,getTaskData:n,onShowEvidence:l},o.id)]}):null})})}function Yi(e){return Xi(e)||typeof e==`function`||Zi(e)}function Xi(e){return typeof e==`function`&&(()=>{let t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function Zi(e){return typeof e==`object`&&typeof e.$$typeof==`symbol`&&[`react.memo`,`react.forward_ref`].includes(e.$$typeof.description)}function Qi(e,t){return e==null?null:Yi(e)?K.createElement(e,t):e}function $i(e){if(`cell`in e&&e.cell){let t=e.cell,n=t.column.columnDef,r=t,i=n;return r.getIsAggregated?.()?Qi(i.aggregatedCell??n.cell,t.getContext()):r.getIsPlaceholder?.()?null:Qi(n.cell,t.getContext())}return`header`in e&&e.header?Qi(e.header.column.columnDef.header,e.header.getContext()):`footer`in e&&e.footer?Qi(e.footer.column.columnDef.footer,e.footer.getContext()):null}function ea({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 ta(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 na=[],ra=0,{link:ia,unlink:aa,propagate:oa,checkDirty:sa,shallowPropagate:ca}=ea({update(e){return e._update()},notify(e){na[ua++]=e,e.flags&=-3},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,pa(e))}}),la=0,ua=0,J,da=0;function fa(e){try{++da,e()}finally{--da||ma()}}function pa(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=aa(n,e)}function ma(){if(!(da>0)){for(;la<ua;){let e=na[la];na[la++]=void 0,e.notify()}la=0,ua=0}}function ha(e,t){let n=typeof e==`function`,r=e,i={_snapshot:n?void 0:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:+!n,get(){return J!==void 0&&ia(i,J,ra),i._snapshot},subscribe(e){let t=ta(e),n={current:!1},r=ga(()=>{i.get(),n.current?t.next?.(i._snapshot):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=J,o=t?.compare??Object.is;if(n)J=i,++ra,i.depsTail=void 0;else if(e===void 0)return!1;n&&(i.flags=5);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{J=a,n&&(i.flags&=-5),pa(i)}}};return n?(i.flags=17,i.get=function(){let e=i.flags;if(e&16||e&32&&sa(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&ca(e)}}else e&32&&(i.flags=e&-33);return J!==void 0&&ia(i,J,ra),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(oa(e),ca(e),ma())}},i}function ga(e){let t=()=>{let t=J;J=n,++ra,n.depsTail=void 0,n.flags=6;try{return e()}finally{J=t,n.flags&=-5,pa(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&&sa(this.deps,this)?t():this.flags=2},stop(){this.flags=0,this.depsTail=void 0,pa(this)}};return t(),n}function _a(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=va(e);if(n.length!==va(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 va(e){return Object.keys(e).concat(Object.getOwnPropertySymbols(e))}var ya=e(r(),1);function ba(e,t){return e===t}function xa(e,t=e=>e,n){let r=n?.compare??ba,i=(0,K.useCallback)(t=>{let{unsubscribe:n}=e.subscribe(t);return n},[e]),a=(0,K.useCallback)(()=>e.get(),[e]);return(0,ya.useSyncExternalStoreWithSelector)(i,a,a,t,r)}function Sa(e){let t=xa(e.source,e.selector,{compare:_a});return typeof e.children==`function`?e.children(t):e.children}function Ca(e){let t=e;return Object.defineProperty(e,"state",{get(){return e.get()}}),`set`in e&&(t.setState=e.set.bind(e)),t}function wa(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 Ta(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 Ea(){return wa({createAtom:ha,batch:fa})}function Da(e,t){return typeof e==`function`?e(t):e}function Y(e){if(Array.isArray(e))return e.map(Y);if(e&&typeof e==`object`){let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)return e;let n=t===null?X():{},r=Object.keys(e);for(let t=0;t<r.length;t++){let i=r[t];Object.defineProperty(n,i,{configurable:!0,enumerable:!0,value:Y(e[i]),writable:!0})}return n}return e}function Oa(e,t){let n=Object.keys(t),r=e;for(let e=0;e<n.length;e++){let i=n[e];!i.startsWith(`_memo_`)&&i!==`_cellsCache`&&(r[i]=t[i])}return e}function X(){return Object.create(null)}function ka(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Aa(e,t){return n=>{(t.options.atoms?.[e]??t.baseAtoms[e]).set(e=>Da(n,e))}}function ja(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 Ma(e){return Reflect.ownKeys(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}var Na=3;function Pa(e,t){return Fa(e,t,Na)}function Fa(e,t,n){if(Object.is(e,t))return!0;if(n<=0||!ja(e)||!ja(t)||(Array.isArray(e)||Array.isArray(t))&&(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length))return!1;let r=Ma(e),i=Ma(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)||!Fa(a[i],o[i],n-1))return!1}return!0}function Ia(e,t,n,r=Pa){let i=`on${t.charAt(0).toUpperCase()}${t.slice(1)}Change`,a=e.options[i];a&&a(e=>{let t=Da(n,e);return r(e,t)?e:t})}function La(e){return e instanceof Function}function Ra(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 za=({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 Ba(e){let t=!1;return()=>{if(!t){t=!0;return}e()}}function Va({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 za({...a,...s})}function Ha(e,t=`_`){let[n,r]=e.split(t);return{fnKey:r,fnName:`${n}.${r}`,parentName:n}}function Z(e,t,n){for(let[r,{fn:i,memoDeps:a}]of Object.entries(n)){let{fnKey:n,fnName:o}=Ha(r);t[n]=a?Va({memoDeps:a,fn:i,fnName:o,table:t,feature:e}):i}}function Ua(e,t,n,r){for(let[i,{fn:a,memoDeps:o}]of Object.entries(r)){let{fnKey:r,fnName:s}=Ha(i);if(o){let i=`_memo_${r}`;t[r]=function(...t){if(!this[i]){let t=this;this[i]=Va({memoDeps:e=>o(t,e),fn:(...e)=>a(t,...e),fnName:s,objectId:t.id,table:n,feature:e})}return this[i](...t)}}else t[r]=function(...e){return a(this,...e)}}}function Q(e,t,n,...r){return e[t]?.(...r)??n(e,...r)}function Wa(e){return e.row.getValue(e.column.id)}function Ga(e){return e.getValue()??e.table.options.renderFallbackValue}function Ka(e){return{table:e.table,column:e.column,row:e.row,cell:e,getValue:()=>e.getValue(),renderValue:()=>e.renderValue()}}var qa={assignCellPrototype:(e,t)=>{Ua(`coreCellsFeature`,e,t,{cell_getValue:{fn:e=>Wa(e)},cell_renderValue:{fn:e=>Ga(e)},cell_getContext:{fn:e=>Ka(e),memoDeps:e=>[e]}})}};function Ja(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 Ya(e,t,n){let r=Ja(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 Xa(){return{start:[],end:[]}}function Za(){return X()}function Qa(e,t){$a(e)&&ao(e.table,n=>{let r=Object.assign(X(),n),i=t??!Q(e,`getIsVisible`,$),a=e.getLeafColumns();for(let e=0;e<a.length;e++){let t=a[e];$a(t)&&(r[t.id]=i)}return r})}function $(e){let t=e.table.atoms.columnVisibility?.get();if(!t)return!0;let n=e.columns;return n.length?n.some(e=>Q(e,`getIsVisible`,$)):(ka(t,e.id)?t[e.id]:void 0)??!0}function $a(e){return(e.columnDef.enableHiding??!0)&&(e.table.options.enableHiding??!0)}function eo(e){return t=>{Qa(e,t.target.checked)}}function to(e){let t=e.getAllCells(),n=[];for(let e=0;e<t.length;e++){let r=t[e];Q(r.column,`getIsVisible`,$)&&n.push(r)}let{start:r,end:i}=e.table.atoms.columnPinning?.get()??Xa();if(!r.length&&!i.length)return n;let a=Q(e,`getVisibleCellsByColumnId`,no),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 no(e){let t=X(),n=e.getAllCells();for(let e=0;e<n.length;e++){let r=n[e];Q(r.column,`getIsVisible`,$)&&(t[r.column.id]=r)}return t}function ro(e){return e.getAllFlatColumns().filter(e=>Q(e,`getIsVisible`,$))}function io(e){return e.getAllLeafColumns().filter(e=>Q(e,`getIsVisible`,$))}function ao(e,t){Ia(e,`columnVisibility`,t)}function oo(e,t){ao(e,t?X():Object.assign(X(),Y(e.initialState.columnVisibility??{})))}function so(e,t){t??=!co(e);let n=X(),r=e.getAllLeafColumns();for(let e=0;e<r.length;e++){let i=r[e];n[i.id]=t||!$a(i)}ao(e,n)}function co(e){return!e.getAllLeafColumns().some(e=>!Q(e,`getIsVisible`,$))}function lo(e){return e.getAllLeafColumns().some(e=>Q(e,`getIsVisible`,$))}function uo(e){return t=>{so(e,t.target.checked)}}function fo(e,t=1){let n=t;for(let r=0;r<e.length;r++){let i=e[r];Q(i,`getIsVisible`,$)&&i.columns.length&&(n=Math.max(n,fo(i.columns,t+1)))}return n}function po(e,t){return e?`${e}_${t}`:String(t)}function mo(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 ho(e,t){let n=0;for(let r=0;r<e.length;r++)e[r].column===t&&n++;return n}function go(e,t,n,r,i,a){let o={depth:t,id:po(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=Ya(n,u,{id:mo(r,t,u.id,a.id),isPlaceholder:d,placeholderId:d?String(ho(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&&go(s,t-1,n,r,i,a)}function _o(e){for(let t=0;t<e.length;t++){let n=e[t];if(!Q(n.column,`getIsVisible`,$))continue;let r=0;if(n.subHeaders.length){_o(n.subHeaders);for(let e=0;e<n.subHeaders.length;e++){let t=n.subHeaders[e];Q(t.column,`getIsVisible`,$)&&(r+=t.colSpan)}}else r=1;if(n.colSpan=r,n.isPlaceholder&&n.subHeaders.length===1&&n.subHeaders[0].column===n.column){let e=1,t=n.subHeaders[0];for(;t;)t.rowSpan=0,e++,t=t.subHeaders.length===1&&t.subHeaders[0].column===n.column?t.subHeaders[0]:void 0;n.rowSpan=e}else n.rowSpan=1}}function vo(e,t,n,r){let i=fo(e),a=[],o=n._headerGroupInstanceInitFns,s=Array(t.length);for(let e=0;e<t.length;e++)e in t&&(s[e]=Ya(n,t[e],{depth:i,index:e}));return go(s,i-1,n,r,a,o),a.reverse(),_o(a[0]?.headers??[]),a}function yo(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 bo(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=yo(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 xo(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 So(e,r)}}function So(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 Co(e){return[e,...e.columns.flatMap(e=>e.getFlatColumns())]}function wo(e){if(e.columns.length){let t=e.columns.flatMap(e=>e.getLeafColumns());return Q(e.table,`getOrderColumns`,xo)(t)}return[e]}function To(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 Eo(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=bo(e,o,r,n),c=o;s.columns=c.columns?Eo(e,c.columns,s,r+1):[],i[a]=s}return i}function Do(e){return Eo(e,e.options.columns)}function Oo(e){return e.getAllColumns().flatMap(e=>e.getFlatColumns())}function ko(e){let t=X(),n=e.getAllFlatColumns();for(let e=0;e<n.length;e++){let r=n[e];t[r.id]=r}return t}function Ao(e){let t=e.getAllColumns().flatMap(e=>e.getLeafColumns());return Q(e,`getOrderColumns`,xo)(t)}function jo(e){let t=X(),n=e.getAllLeafColumns();for(let e=0;e<n.length;e++){let r=n[e];t[r.id]=r}return t}function Mo(e,t){return e.getAllFlatColumnsById()[t]}var No={assignColumnPrototype:(e,t)=>{Ua(`coreColumnsFeature`,e,t,{column_getFlatColumns:{fn:e=>Co(e),memoDeps:e=>[e.table.options.columns]},column_getLeafColumns:{fn:e=>wo(e),memoDeps:e=>[e.table.atoms.columnOrder?.get(),e.table.atoms.grouping?.get(),e.table.options.columns,e.table.options.groupedColumnMode]}})},constructTableAPIs:e=>{Z(`coreColumnsFeature`,e,{table_getDefaultColumnDef:{fn:()=>To(e),memoDeps:()=>[e.options.defaultColumn]},table_getAllColumns:{fn:()=>Do(e),memoDeps:()=>[e.options.columns]},table_getAllFlatColumns:{fn:()=>Oo(e),memoDeps:()=>[e.options.columns]},table_getAllFlatColumnsById:{fn:()=>ko(e),memoDeps:()=>[e.options.columns]},table_getAllLeafColumns:{fn:()=>Ao(e),memoDeps:()=>[e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_getAllLeafColumnsById:{fn:()=>jo(e),memoDeps:()=>[e.getAllLeafColumns()]},table_getColumn:{fn:t=>Mo(e,t)}})}};function Po(e,t){for(let n=0;n<e.subHeaders.length;n++)Po(e.subHeaders[n],t);t.push(e)}function Fo(e){let t=[];return Po(e,t),t}function Io(e){return{column:e.column,header:e,table:e.column.table}}function Lo(e){let{start:t,end:n}=e.atoms.columnPinning?.get()??Xa(),r=e.getAllColumns(),i=Q(e,`getVisibleLeafColumns`,io);if(!t.length&&!n.length)return vo(r,i,e);let a=e.getAllLeafColumnsById(),o=[];for(let e=0;e<t.length;e++){let n=a[t[e]];n&&Q(n,`getIsVisible`,$)&&o.push(n)}let s=[];for(let e=0;e<n.length;e++){let t=a[n[e]];t&&Q(t,`getIsVisible`,$)&&s.push(t)}let c=i.filter(e=>!t.includes(e.id)&&!n.includes(e.id));return vo(r,[...o,...c,...s],e)}function Ro(e){return[...e.getHeaderGroups()].reverse()}function zo(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 Bo(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 Vo={assignHeaderPrototype:(e,t)=>{Ua(`coreHeadersFeature`,e,t,{header_getLeafHeaders:{fn:e=>Fo(e),memoDeps:e=>[e.column.table.options.columns]},header_getContext:{fn:e=>Io(e),memoDeps:e=>[e.column.table.options.columns]}})},constructTableAPIs:e=>{Z(`coreHeadersFeature`,e,{table_getHeaderGroups:{fn:()=>Lo(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:()=>Ro(e),memoDeps:()=>[e.getHeaderGroups()]},table_getFlatHeaders:{fn:()=>zo(e),memoDeps:()=>[e.getHeaderGroups()]},table_getLeafHeaders:{fn:()=>Bo(e),memoDeps:()=>[e.getHeaderGroups()]}})}};function Ho(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 Uo=(e,t,n,r,i,a,o)=>{let s=Ho(e),c=Object.create(s);c._displayIndexCache=-1,c._uniqueValuesCache=X(),c._valuesCache=X(),c.depth=i,c.id=t,c.index=r,c.original=n,c.parentId=o,c.subRows=a??[];let l=e._rowInstanceInitFns;for(let e=0;e<l.length;e++)l[e](c);return c},Wo=/([0-9]+)/gm;function Go(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}Go({resolveDataValue:e=>Yo(e).toLowerCase(),sort:(e,t)=>Xo(e,t)}),Go({resolveDataValue:e=>Yo(e),sort:(e,t)=>Xo(e,t)}),Go({resolveDataValue:e=>Yo(e).toLowerCase(),sort:(e,t)=>qo(e,t)}),Go({resolveDataValue:e=>Yo(e),sort:(e,t)=>qo(e,t)}),Go({resolveDataValue:e=>Jo(e),sort:(e,t)=>e>t?1:e<t?-1:0});var Ko=Go({sort:(e,t)=>qo(e,t)});function qo(e,t){return e===t?0:e>t?1:-1}function Jo(e){return e instanceof Date?e.getTime():e}function Yo(e){return typeof e==`number`?isNaN(e)||e===1/0||e===-1/0?``:String(e):typeof e==`string`?e:``}function Xo(e,t){let n=0,r=0,i=e.length,a=t.length;for(;n<i&&r<a;){let i=Zo(e.charCodeAt(n)),a=Zo(t.charCodeAt(r)),o=Qo(e,n,i),s=Qo(t,r,a);if(!i&&!a){let i=$o(e,n,o,t,r,s);if(i)return i;n=o,r=s;continue}if(i!==a)return i?1:-1;let c=es(e,n,o,t,r,s);if(c)return c;n=o,r=s}return ns(e,n)-ns(t,r)}function Zo(e){return e>=48&&e<=57}function Qo(e,t,n){let r=t+1;for(;r<e.length&&Zo(e.charCodeAt(r))===n;)r++;return r}function $o(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 es(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=ts(e,o,n),i=ts(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 ts(e,t,n){let r=0;for(let i=t;i<n;i++)r=r*10+e.charCodeAt(i)-48;return r}function ns(e,t){let n=0,r=t;for(;r<e.length;)n++,r=Qo(e,r,Zo(e.charCodeAt(r)));return n}function rs(){return[]}function is(e,t){Ia(e,`cellSelection`,t?rs():Y(e.initialState.cellSelection)??rs())}function as(e){e.atoms.cellSelection&&(e.options.autoResetAll??e.options.autoResetCellSelection??!0)&&e._reactivity.schedule(()=>is(e))}function os(e){e.atoms.expanded&&(e.options.autoResetAll??e.options.autoResetExpanded??!e.options.manualExpanding)&&e._reactivity.schedule(()=>ss(e))}function ss(e,t){let n=e.initialState.expanded;Ia(e,`expanded`,t?X():n===!0||Object.assign(X(),Y(n??{})))}function cs(e){let t=e.table.atoms.expanded?.get()??{};return!!(e.table.options.getIsRowExpanded?.(e)??(t===!0||ls(t,e.id)))}function ls(e,t){return!!(e&&e!==!0&&ka(e,t)&&e[t])}var us=0,ds=10;function fs(){return{pageIndex:us,pageSize:ds}}function ps(e){if(e.options.autoResetAll??e.options.autoResetPageIndex??!e.options.manualPagination){if((e.atoms.pagination?.get()?.pageIndex??us)===us)return;_s(e,!0)}}function ms(e,t){Ia(e,`pagination`,t)}function hs(e,t){ms(e,t?fs():Y(e.initialState.pagination??fs()))}function gs(e,t){ms(e,n=>{let r=Da(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 _s(e,t){gs(e,t?us:e.initialState.pagination?.pageIndex??us)}function vs(e,t){ys(e,t?ds:e.initialState.pagination?.pageSize??ds)}function ys(e,t){ms(e,e=>{let n=Math.max(1,Da(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 bs(e){let t=Os(e),n=[];return t&&t>0&&(n=[...Array(t)].fill(null).map((e,t)=>t)),n}function xs(e){return(e.atoms.pagination?.get()?.pageIndex??0)>0}function Ss(e){let t=e.atoms.pagination?.get()?.pageIndex??us,n=Os(e);return n===-1||n!==0&&t<n-1}function Cs(e){let t=e.atoms.pagination?.get()?.pageIndex??us,n=Os(e);return Number.isFinite(n)&&n>0&&t<n-1}function ws(e){return gs(e,e=>e-1)}function Ts(e){return gs(e,e=>e+1)}function Es(e){return gs(e,0)}function Ds(e){let t=Os(e);if(!(!Number.isFinite(t)||t<=0))return gs(e,t-1)}function Os(e){let t=e.options.pageCount;if(t!=null)return t;let n=ks(e),r=e.atoms.pagination?.get()?.pageSize??ds;return r===1/0&&Number.isFinite(n)&&n>0?1:Math.ceil(n/r)}function ks(e){return e.options.rowCount??e.getPrePaginatedRowModel().rows.length}function As(){return[]}function js(e,t){Ia(e,`sorting`,t)}function Ms(e,t){js(e,t?[]:Y(e.initialState.sorting??[]))}function Ns(e){e.atoms.sorting&&(e.options.autoResetAll??e.options.autoResetSorting??!1)&&Ms(e)}function Ps(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(Wo).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 Ko}function Fs(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 Is(e){let t=e.table._rowModelFns.sortFns;return La(e.columnDef.sortFn)?e.columnDef.sortFn:e.columnDef.sortFn===`auto`?Ps(e):t?.[e.columnDef.sortFn]??Ko}function Ls(e,t,n){let r=zs(e,n&&Vs(e)),i=t!==void 0;js(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&&Vs(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 Rs(e){return e.columnDef.sortDescFirst??e.table.options.sortDescFirst??Fs(e)===`desc`?`desc`:`asc`}function zs(e,t){let n=Rs(e),r=Hs(e);return r?r!==n&&(e.table.options.enableSortingRemoval??!0)&&(!t||(e.table.options.enableMultiRemove??!0))?!1:r===`desc`?`asc`:`desc`:n}function Bs(e){return(e.columnDef.enableSorting??!0)&&(e.table.options.enableSorting??!0)&&!!e.accessorFn}function Vs(e){return e.columnDef.enableMultiSort??e.table.options.enableMultiSort??!!e.accessorFn}function Hs(e){let t=e.table.atoms.sorting?.get()?.find(t=>t.id===e.id);return t?t.desc?`desc`:`asc`:!1}function Us(e){return e.table.atoms.sorting?.get()?.findIndex(t=>t.id===e.id)??-1}function Ws(e){js(e.table,t=>t.length?t.filter(t=>t.id!==e.id):[])}function Gs(e){let t=Bs(e);return n=>{t&&Ls(e,void 0,Vs(e)?e.table.options.isMultiSortEvent?.(n):!1)}}function Ks(){return e=>Va({feature:`coreRowModelsFeature`,table:e,fnName:`table.getCoreRowModel`,memoDeps:()=>[e.options.data],fn:()=>Js(e,e.options.data),onAfterUpdate:Ba(()=>{os(e),ps(e),Ns(e),as(e)})})}function qs(e,t,n,r=0,i){let a=[];for(let o=0;o<n.length;o++){let s=n[o],c=Uo(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=qs(e,t,c.originalSubRows,r+1,c)))}return a}function Js(e,t){let n={rows:[],flatRows:[],rowsById:X()};return n.rows=qs(e,n,t),n}function Ys(e){return e._rowModels.coreRowModel||(e._rowModels.coreRowModel=e.options.features.coreRowModel?.(e)??Ks()(e)),e._rowModels.coreRowModel()}function Xs(e){return e.getCoreRowModel()}function Zs(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 Qs(e){return e.getFilteredRowModel()}function $s(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 ec(e){return e.getGroupedRowModel()}function tc(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 nc(e){return e.getSortedRowModel()}function rc(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 ic(e){return e.getExpandedRowModel()}function ac(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 oc(e){return e.getPaginatedRowModel()}var sc={constructTableAPIs:e=>{Z(`coreRowModelsFeature`,e,{table_getCoreRowModel:{fn:()=>Ys(e)},table_getPreFilteredRowModel:{fn:()=>Xs(e)},table_getFilteredRowModel:{fn:()=>Zs(e)},table_getPreGroupedRowModel:{fn:()=>Qs(e)},table_getGroupedRowModel:{fn:()=>$s(e)},table_getPreSortedRowModel:{fn:()=>ec(e)},table_getSortedRowModel:{fn:()=>tc(e)},table_getPreExpandedRowModel:{fn:()=>nc(e)},table_getExpandedRowModel:{fn:()=>rc(e)},table_getPrePaginatedRowModel:{fn:()=>ic(e)},table_getPaginatedRowModel:{fn:()=>ac(e)},table_getRowModel:{fn:()=>oc(e)}})}};function cc(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 lc(e,t,n){let r=cc(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 uc(e){let t=e.table.getRowsInDisplayOrder(),n=e._displayIndexCache;return t[n]===e?n:-1}function dc(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 fc(e,t){if(ka(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 pc(e,t){if(ka(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 mc(e,t){return e.getValue(t)??e.table.options.renderFallbackValue}function hc(e){return Ra(e.subRows,e=>e.subRows)}function gc(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 _c(e){if(e.parentId)return e.table.getCoreRowModel().rowsById[e.parentId]??e.table.getRow(e.parentId,!0)}function vc(e){let t=[],n=e;for(;;){let e=n.getParentRow();if(!e)break;t.push(e),n=e}return t.reverse()}function yc(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=lc(a,e,e.table),n.set(a,o)),r[i]=o}return r}function bc(e){let t=X(),n=e.getAllCells();for(let e=0;e<n.length;e++){let r=n[e];t[r.column.id]=r}return t}function xc(e,t,n,r){return t.options.getRowId?.(e,n,r)??(r?`${r.id}.${n}`:String(n))}function Sc(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 Cc={assignRowPrototype:(e,t)=>{Ua(`coreRowsFeature`,e,t,{row_getDisplayIndex:{fn:e=>uc(e)},row_getAllCellsByColumnId:{fn:e=>bc(e),memoDeps:e=>[e.getAllCells()]},row_getAllCells:{fn:e=>yc(e),memoDeps:e=>[e.table.getAllLeafColumns()]},row_getLeafRows:{fn:e=>hc(e),memoDeps:e=>[e.subRows]},row_getParentRow:{fn:e=>_c(e)},row_getParentRows:{fn:e=>vc(e)},row_getUniqueValues:{fn:(e,t)=>pc(e,t)},row_getValue:{fn:(e,t)=>fc(e,t)},row_renderValue:{fn:(e,t)=>mc(e,t)}})},constructTableAPIs:e=>{Z(`coreRowsFeature`,e,{table_getRowsInDisplayOrder:{fn:()=>dc(e),memoDeps:()=>[e.getPrePaginatedRowModel().rows,e.options.paginateExpandedRows,e.options.paginateExpandedRows===!1?e.atoms.expanded?.get():void 0]},table_getRowId:{fn:(t,n,r)=>xc(t,e,n,r)},table_getRow:{fn:(t,n)=>Sc(e,t,n)},table_getMaxSubRowDepth:{fn:()=>gc(e),memoDeps:()=>[e.getCoreRowModel()]}})}};function wc(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 Tc(e,t,n=(e,t)=>e===t){e._reactivity.batch(()=>{wc(e,t,n),e._reactivity.commit?.()})}function Ec(e){let t=Y(e.initialState);e._reactivity.batch(()=>{let n=Object.keys(t);for(let r=0;r<n.length;r++){let i=n[r];e.baseAtoms[i].set(t[i])}});let n=Object.values(e._features);for(let t=0;t<n.length;t++)n[t].resetTableInstanceData?.(e)}function Dc(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 Oc(e,t,n){let r=Dc(e,Da(t,e.options));e.optionsStore?e.optionsStore.set(()=>r):e.options=r,n?.syncExternalState!==!1&&Tc(e,r.state??null)}var kc={coreCellsFeature:qa,coreColumnsFeature:No,coreHeadersFeature:Vo,coreRowModelsFeature:sc,coreRowsFeature:Cc,coreTablesFeature:{constructTableAPIs:e=>{Z(`coreTablesFeature`,e,{table_reset:{fn:()=>Ec(e)},table_setOptions:{fn:t=>Oc(e,t)}})}}};function Ac(e){return e}function jc(e,t={}){return Object.values(e).forEach(e=>{t=e.getInitialState?.(t)??t}),Y(t)}function Mc(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:{...kc,..._},_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=jc(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&&ka(i,n)){let e=i[n];return e===void 0?v.initialState[n]:e}return r},{debugName:`table/atoms/${n}`})}wc(v),v.store=Ca(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:_a,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 Nc={getInitialState:e=>({columnVisibility:Za(),...e}),getDefaultTableOptions:e=>({onColumnVisibilityChange:Aa(`columnVisibility`,e)}),assignColumnPrototype:(e,t)=>{Ua(`columnVisibilityFeature`,e,t,{column_getIsVisible:{fn:e=>$(e),memoDeps:e=>[t.options.columns,t.atoms.columnVisibility?.get(),e.columns]},column_getCanHide:{fn:e=>$a(e)},column_getToggleVisibilityHandler:{fn:e=>eo(e)},column_toggleVisibility:{fn:(e,t)=>Qa(e,t)}})},assignRowPrototype:(e,t)=>{Ua(`columnVisibilityFeature`,e,t,{row_getVisibleCells:{fn:e=>to(e),memoDeps:e=>[e.getAllCells(),t.atoms.columnPinning?.get(),t.atoms.columnVisibility?.get()]},row_getVisibleCellsByColumnId:{fn:e=>no(e),memoDeps:e=>[e.getAllCells(),t.atoms.columnVisibility?.get()]}})},constructTableAPIs:e=>{Z(`columnVisibilityFeature`,e,{table_getVisibleFlatColumns:{fn:()=>ro(e),memoDeps:()=>[e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_getVisibleLeafColumns:{fn:()=>io(e),memoDeps:()=>[e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_setColumnVisibility:{fn:t=>ao(e,t)},table_resetColumnVisibility:{fn:t=>oo(e,t)},table_toggleAllColumnsVisible:{fn:t=>so(e,t)},table_getIsAllColumnsVisible:{fn:()=>co(e)},table_getIsSomeColumnsVisible:{fn:()=>lo(e)},table_getToggleAllColumnsVisibilityHandler:{fn:()=>uo(e)}})}},Pc={getInitialState:e=>({...e,pagination:{...fs(),...e.pagination}}),getDefaultTableOptions:e=>({onPaginationChange:Aa(`pagination`,e)}),constructTableAPIs:e=>{Z(`rowPaginationFeature`,e,{table_autoResetPageIndex:{fn:()=>ps(e)},table_setPagination:{fn:t=>ms(e,t)},table_resetPagination:{fn:t=>hs(e,t)},table_setPageIndex:{fn:t=>gs(e,t)},table_resetPageIndex:{fn:t=>_s(e,t)},table_setPageSize:{fn:t=>ys(e,t)},table_getPageCount:{fn:()=>Os(e)},table_resetPageSize:{fn:t=>vs(e,t)},table_getPageOptions:{fn:()=>bs(e)},table_getCanPreviousPage:{fn:()=>xs(e)},table_getCanNextPage:{fn:()=>Ss(e)},table_getCanLastPage:{fn:()=>Cs(e)},table_previousPage:{fn:()=>ws(e)},table_nextPage:{fn:()=>Ts(e)},table_firstPage:{fn:()=>Es(e)},table_lastPage:{fn:()=>Ds(e)},table_getRowCount:{fn:()=>ks(e)}})}},Fc={getInitialState(e){return{sorting:As(),...e}},getDefaultColumnDef(){return{sortFn:`auto`,sortUndefined:1}},getDefaultTableOptions(e){return{autoResetSorting:!1,onSortingChange:Aa(`sorting`,e),isMultiSortEvent:e=>e.shiftKey}},assignColumnPrototype(e,t){Ua(`rowSortingFeature`,e,t,{column_getAutoSortFn:{fn:e=>Ps(e)},column_getAutoSortDir:{fn:e=>Fs(e)},column_getSortFn:{fn:e=>Is(e)},column_toggleSorting:{fn:(e,t,n)=>Ls(e,t,n)},column_getFirstSortDir:{fn:e=>Rs(e)},column_getNextSortingOrder:{fn:(e,t)=>zs(e,t)},column_getCanSort:{fn:e=>Bs(e)},column_getCanMultiSort:{fn:e=>Vs(e)},column_getIsSorted:{fn:e=>Hs(e)},column_getSortIndex:{fn:e=>Us(e)},column_clearSorting:{fn:e=>Ws(e)},column_getToggleSortingHandler:{fn:e=>Gs(e)}})},constructTableAPIs(e){Z(`rowSortingFeature`,e,{table_setSorting:{fn:t=>js(e,t)},table_resetSorting:{fn:t=>Ms(e,t)}})}};function Ic(e){let t=[],n=e=>{t.push(e),e.subRows.length&&cs(e)&&e.subRows.forEach(n)};return e.rows.forEach(n),{rows:t,flatRows:e.flatRows,rowsById:e.rowsById}}function Lc(){return e=>{let t=e;return Va({feature:`rowPaginationFeature`,table:t,fnName:`table.getPaginatedRowModel`,memoDeps:()=>[t.getPrePaginatedRowModel(),t.atoms.pagination?.get(),t.options.paginateExpandedRows?void 0:t.atoms.expanded?.get()],fn:()=>Rc(t)})}}function Rc(e){let t=e.getPrePaginatedRowModel(),n=e.atoms.pagination?.get();if(!t.rows.length)return t;let{pageSize:r,pageIndex:i}=n??fs(),{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}:Ic({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 zc(){return e=>{let t=e;return Va({feature:`rowSortingFeature`,table:t,fnName:`table.getSortedRowModel`,memoDeps:()=>[t.atoms.sorting?.get(),t.getPreSortedRowModel()],fn:()=>Bc(t),onAfterUpdate:Ba(()=>ps(t))})}}function Bc(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?Bs(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:Is(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));Oa(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 Vc=typeof window>`u`?K.useEffect:K.useLayoutEffect;function Hc(e,t){let[{table:n,rootSource:r}]=(0,K.useState)(()=>{let t=Mc({...e,features:{coreReactivityFeature:Ea(),...e.features}});return t.Subscribe=(e=>Sa({...e,source:e.source??t.store})),t.FlexRender=$i,{table:t,rootSource:Ta(t.store,_a)}}),i=n;Oc(i,t=>({...t,...e}),{syncExternalState:!1});let a=i.options.state,o=r.get(),s=xa(r,t,{compare:_a});return Vc(()=>{r.markCommitted(o),Tc(i,a??null,_a)}),(0,K.useMemo)(()=>({...n,options:e,state:s}),[n,e,s])}var Uc=Ac({columnVisibilityFeature:Nc,rowSortingFeature:Fc,rowPaginationFeature:Pc,sortedRowModel:zc(),paginatedRowModel:Lc()}),Wc=10,Gc=10,Kc=new Set([`duration`,`taskCount`,`shuffleRead`,`fetchWait`,`gcPct`,`skew`,`spill`,`findingCount`]);function qc(e,t){return e.length>t?`${e.slice(0,t)}…`:e}function Jc(e){return e<=0?(0,q.jsx)(q.Fragment,{children:`0`}):(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[e,` `,(0,q.jsx)(pe,{label:`RETRY`,impactBand:`critical`})]})}function Yc(e,t,n){if(e<=0)return(0,q.jsx)(q.Fragment,{children:`—`});let r=g(e);if(t<=0)return(0,q.jsx)(q.Fragment,{children:r});let i=e/t;return i>.3?(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[r,` `,(0,q.jsx)(pe,{label:n===`advanced`?`${Math.round(i*100)}%`:`High`,impactBand:`critical`})]}):i>.15?(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[r,` `,(0,q.jsx)(pe,{label:n===`advanced`?`${Math.round(i*100)}%`:`Elevated`,impactBand:`info`})]}):(0,q.jsx)(q.Fragment,{children:r})}function Xc(e,t){if(!e||e<=0||!t||t<=0)return(0,q.jsx)(q.Fragment,{children:`—`});let n=t/e,r=n<.01?`${n.toExponential(1)}×`:`${n.toFixed(2)}×`;return n>2||n<.1?(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[r,` `,(0,q.jsx)(pe,{label:`extreme`,impactBand:`info`})]}):(0,q.jsx)(q.Fragment,{children:r})}function Zc(e,t){if(e<=0)return(0,q.jsx)(q.Fragment,{children:`—`});let n=t??`unclassified`;return(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[d(e),` `,(0,q.jsx)(pe,{label:o[n],impactBand:`warning`,title:oe[n]})]})}function Qc(e,t){return!e||e<=0?0:(t??0)/e}function $c(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=w(e);return e.find(e=>e.impactBand===t)??e[0]})}function el({appModel:e,catalog:t,getTaskData:n,onRoute:r}){let{openStage:i}=St(),a=ge(),[o,s]=(0,K.useState)(!1),[c,l]=(0,K.useState)(``),[u,f]=(0,K.useState)([]),[p,m]=(0,K.useState)({pageIndex:0,pageSize:Wc}),{catalogByStage:h,flaggedStageIds:_}=(0,K.useMemo)(()=>{let e=new Map,n=new Set;for(let r of t)r.stageId!=null&&(n.add(r.stageId),e.has(r.stageId)||e.set(r.stageId,[]),e.get(r.stageId).push(r));return{catalogByStage:e,flaggedStageIds:n}},[t]),v=(0,K.useMemo)(()=>{let t=[...e.stages.values()],n=o?t.filter(e=>_.has(e.id)):[...t].sort((e,t)=>(t.completedAt??0)-(t.submittedAt??0)-((e.completedAt??0)-(e.submittedAt??0))).slice(0,Gc),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:$c(h.get(e.id)??[])}))},[e.stages,o,_,h,c]),y=R(),b=(0,K.useMemo)(()=>{if(!r)return null;let e=new Map;for(let n of t){let r=jn(n,t);r&&e.set(n,r)}return e},[t,r]),x=(0,K.useMemo)(()=>[{id:`id`,header:`Stage`,accessorFn:e=>e.stage.id,cell:({getValue:e})=>{let t=e(),n=te(y).byStage.get(t);return(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[(0,q.jsx)(`button`,{type:`button`,"aria-label":`Open Stage ${t} details`,className:`tap-target-comfortable 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,q.jsx)(`strong`,{className:`font-mono font-semibold`,children:t})}),n?(0,q.jsx)(Lr,{code:n}):null]})}},{id:`name`,header:`Operation`,accessorFn:e=>e.stage.name??``,cell:({row:e})=>{let t=e.original.stage.id;return(0,q.jsxs)(`span`,{className:`inline-flex flex-wrap items-center gap-1.5`,children:[qc(e.original.stage.name??``,40),e.original.tags.map((e,n)=>{let i=b?b.get(e)??null:null,a=i&&r?{target:i,onRoute:r}:null,o=ie(y,e)?.compact??null;return(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[a?(0,q.jsx)(`button`,{type:`button`,"aria-label":`Investigate ${a.target.findingLabel} in Stage ${t}`,title:`Investigate ${a.target.findingLabel} in Stage ${t}`,className:`tap-target-comfortable 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(),a.onRoute(a.target)},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&e.stopPropagation()},children:(0,q.jsx)(k,{type:e.type,impactBand:e.impactBand,plainBadge:!0})}):(0,q.jsx)(k,{type:e.type,impactBand:e.impactBand}),o?(0,q.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,q.jsx)(ve,{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,q.jsx)(q.Fragment,{children:g(e())})},{id:`taskCount`,header:`Tasks`,accessorFn:e=>e.stage.taskCount},{id:`retried`,header:`Retried`,accessorFn:e=>e.stage.failedTasks??0,cell:({getValue:e})=>Jc(e())},{id:`shuffleRead`,header:`Shuffle Read`,accessorFn:e=>e.stage.shuffleReadBytes??0,cell:({getValue:e})=>(0,q.jsx)(q.Fragment,{children:d(e())})},{id:`fetchWait`,header:`Fetch Wait`,accessorFn:e=>e.stage.fetchWaitTime??0,cell:({row:e})=>Yc(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})=>Xc(e.original.stage.inputBytes??0,e.original.stage.outputBytes??0)}]:[],{id:`spill`,header:`Spill (mem)`,accessorFn:e=>e.stage.memoryBytesSpilled??0,cell:({row:e})=>Zc(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,q.jsxs)(q.Fragment,{children:[e().toFixed(1),`%`]})},{id:`skew`,header:`Skew P95/median`,accessorFn:e=>Qc(e.stage.taskDurationP50,e.stage.taskDurationP95),cell:({getValue:e})=>{let t=e();return(0,q.jsx)(q.Fragment,{children:t>0?`${t.toFixed(1)}×`:`—`})}}]:[],{id:`findingCount`,header:`Findings`,accessorFn:e=>e.tags.length,cell:({getValue:e})=>{let t=e();return(0,q.jsx)(q.Fragment,{children:t>0?t:`—`})}}],[t,r,b,i,a,y]),S=Hc({features:Uc,data:v,columns:x,state:{sorting:u,pagination:p},sortDescFirst:!1,onSortingChange:f,onPaginationChange:m});function C(){s(e=>!e),f([]),m({pageIndex:0,pageSize:Wc})}let T=(0,K.useRef)(null),[E,D]=(0,K.useState)(!0);(0,K.useLayoutEffect)(()=>{let e=T.current?.querySelector(`[data-slot="table-container"]`);if(!e?.firstElementChild||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(()=>D(e.scrollWidth>e.clientWidth));return t.observe(e),t.observe(e.firstElementChild),()=>t.disconnect()},[]);let O=e=>e===`asc`?` ▲`:e===`desc`?` ▼`:``,A=e=>e===`asc`?`ascending`:e===`desc`?`descending`:`none`;return(0,q.jsx)(U,{title:`Stage Summary`,subtitle:`${v.length} of ${e.stages.size} stage${e.stages.size===1?``:`s`}`,children:(0,q.jsxs)(`div`,{ref:T,className:`space-y-3`,children:[(0,q.jsx)(Ie,{type:`text`,value:c,onChange:e=>{l(e.target.value),m(e=>({...e,pageIndex:0}))},placeholder:`Filter by stage name or ID…`,"aria-label":`Filter by stage name or ID`,className:`max-w-xs`}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,q.jsx)(`p`,{className:F(`text-muted-foreground text-xs`,!E&&`invisible`),children:`Scroll sideways to see all columns →`}),(0,q.jsx)(z,{type:`button`,variant:`outline`,size:`sm`,onClick:C,children:o?`Top ${Gc} by duration`:`Problems only`})]}),(0,q.jsxs)(`p`,{className:`sr-only`,role:`status`,"aria-live":`polite`,children:[`Showing `,v.length,` stage`,v.length===1?``:`s`,`: `,` `,o?`problems only`:`top ${Gc} by duration`,`.`]}),(0,q.jsxs)(ct,{children:[(0,q.jsx)(dt,{children:S.getHeaderGroups().map(e=>(0,q.jsx)(H,{children:e.headers.map(e=>{let t=e.column.getIsSorted(),n=e.column.getToggleSortingHandler();return(0,q.jsxs)(nt,{scope:`col`,tabIndex:e.column.getCanSort()?0:void 0,"aria-sort":A(t),className:F(e.column.getCanSort()&&`tap-target-comfortable cursor-pointer select-none`,Kc.has(e.column.id)&&`text-right`),onClick:n,onKeyDown:e=>{n&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n(e))},children:[Qi(e.column.columnDef.header,e.getContext()),O(t)]},e.id)})},e.id))}),(0,q.jsx)(wt,{children:S.getRowModel().rows.length===0?(0,q.jsx)(H,{children:(0,q.jsx)(V,{colSpan:x.length,className:`text-muted-foreground`,children:(0,q.jsxs)(`span`,{className:`flex items-center justify-center gap-2 py-2`,children:[(0,q.jsx)(ze,{"aria-hidden":`true`,className:`size-4 shrink-0`}),`No stages to show.`]})})}):S.getRowModel().rows.map(e=>(0,q.jsx)(H,{"data-flag":w(e.original.tags)??void 0,className:`cursor-pointer`,onClick:()=>i(e.original.stage.id),children:e.getVisibleCells().map(e=>(0,q.jsx)(V,{className:Kc.has(e.column.id)?`text-right`:void 0,children:Qi(e.column.columnDef.cell,e.getContext())},e.id))},e.id))})]}),S.getPageCount()>1?(0,q.jsxs)(`div`,{className:`flex items-center justify-end gap-2 text-xs`,children:[(0,q.jsx)(z,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:()=>S.previousPage(),disabled:!S.getCanPreviousPage(),children:`Previous`}),(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`Page `,p.pageIndex+1,` of `,S.getPageCount()]}),(0,q.jsx)(z,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:()=>S.nextPage(),disabled:!S.getCanNextPage(),children:`Next`})]}):null]})})}var tl={present:`present`,disabled:`disabled`,notEmitted:`not emitted`,notApplicable:`not applicable`,outsideEventLog:`outside event log`,unknown:`unknown`},nl={present:`info`,disabled:`warning`,notEmitted:`warning`,notApplicable:`muted`,outsideEventLog:`muted`,unknown:`muted`},rl=new Set([`noRddStorageSnapshot`,`noUsableCoreTimeAggregate`,`parseIncomplete`]);function il({entry:e}){let t=e.evidence?.count,n=Ft(),r=`${e.summary}${t==null?``:` · ${t} observed`}`,i=rl.has(e.reasonCode)?r:t==null?null:`${t} observed`,{tooltipProps:a,srOnlyTooltip:o}=Pt(r);return(0,q.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`,...a,children:[(0,q.jsxs)(`span`,{className:`flex items-center justify-between gap-2`,children:[(0,q.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,q.jsx)(he,{impactBand:nl[e.state]}),(0,q.jsx)(`span`,{className:`truncate text-sm font-medium`,children:Nt(e.key)})]}),(0,q.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:tl[e.state]}),o]}),i?(0,q.jsx)(L,{children:(0,q.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:i})}):null]})}function al(e){return Object.keys(tl).map(t=>[t,e.filter(e=>e.state===t).length]).filter(([,e])=>e>0).map(([e,t])=>`${t} ${tl[e]}`).join(` · `)}function ol({ledger:e}){let{evidenceCardOpen:t,setEvidenceCardOpen:n}=Mt();return(0,q.jsx)(U,{title:`Evidence availability`,open:t,onOpenChange:n,summary:(0,q.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e?al(e.entries):`Unavailable for this restored run`}),children:e?(0,q.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,q.jsx)(il,{entry:e},e.key))}):(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Evidence availability is unavailable for this restored run.`})})}var sl=64;function cl(e,t){return t>=1?e:`color-mix(in srgb, ${e} ${t*100}%, transparent)`}function ll(e){return[{key:`startup`,label:`Startup`,value:e.startup,color:W.startup,fillOpacity:1},{key:`stagesActive`,label:`Stages active`,value:e.stagesActive,color:W.stage,fillOpacity:1},{key:`gaps`,label:`Scheduler gaps`,value:e.gaps,color:W.gap,fillOpacity:1},{key:`idle`,label:`Idle`,value:e.idle,color:W.muted,fillOpacity:.6}].filter(e=>e.value>0).map(e=>({...e,legendColor:cl(e.color,e.fillOpacity)}))}var ul=(0,K.memo)(function(){let e=R()?.data.wallClock;if(!e||e.total<=0)return null;let t=ll(e),n=t=>e.total>0?t/e.total*100:0,r=t.reduce((e,t)=>t.value>e.value?t:e,t[0]),i=[t.reduce((e,t)=>({...e,[t.key]:t.value}),{name:`total`})];return(0,q.jsxs)(U,{title:`Wall-Clock Breakdown`,subtitle:`${g(e.total)} total`,summary:(0,q.jsx)(G,{value:`${r.label} ${Math.round(n(r.value))}%`,context:`of ${g(e.total)} total`}),children:[(0,q.jsx)(Ut,{ariaLabel:`Wall-clock breakdown: ${g(e.total)} total, split across startup, active stages, scheduler gaps and idle time. See the table below for exact values.`,height:sl,table:{caption:`Wall-clock time breakdown`,columns:[`Segment`,`Duration`,`% of total`],rows:t.map(e=>[e.label,g(e.value),`${Math.round(n(e.value))}%`]),align:[`left`,`right`,`right`]},children:(0,q.jsxs)(Ke,{data:i,layout:`vertical`,stackOffset:`expand`,margin:{top:0,right:0,bottom:0,left:0},children:[(0,q.jsx)(Xe,{type:`number`,hide:!0,domain:[0,1]}),(0,q.jsx)(Ye,{type:`category`,dataKey:`name`,hide:!0}),(0,q.jsx)(Qe,{shared:!1,labelFormatter:()=>``,formatter:(e,t)=>[g(Number(e)),t]}),(0,q.jsx)(Ue,{wrapperStyle:{fontSize:12},itemSorter:e=>t.findIndex(t=>t.key===e.dataKey),content:e=>(0,q.jsx)(Be,{...e,payload:e.payload?.map(e=>{let n=t.find(t=>t.key===e.dataKey);return n?{...e,color:n.legendColor}:e})})}),t.map(e=>(0,q.jsx)(qe,{dataKey:e.key,name:e.label,stackId:`wallclock`,fill:e.color,fillOpacity:e.fillOpacity},e.key))]})}),(0,q.jsx)(L,{children:(0,q.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-3 text-xs text-muted-foreground`,children:t.map(e=>(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,q.jsx)(`span`,{className:`inline-block size-2.5 rounded-sm`,style:{backgroundColor:e.color,opacity:e.fillOpacity}}),e.label,` (`,g(e.value),`)`]},e.key))})})]})}),dl=[`[data-testid="next-step"] [data-shortcut-target]`,`[data-testid="fix-these-first-row"] button[data-shortcut-target]`,`[data-testid="fix-these-first-group-row"] button[data-shortcut-target]`].join(`, `);function fl(e){if(e.defaultPrevented||e.metaKey||e.ctrlKey||e.altKey)return!0;let t=e.target,n=t?.tagName;return n===`INPUT`||n===`TEXTAREA`||n===`SELECT`||t?.isContentEditable||t?.closest?.(`[role="listbox"], [role="combobox"]`)?!0:[...document.querySelectorAll(`[role="dialog"], [role="menu"], [role="alertdialog"], [role="listbox"]`)].some(e=>!e.closest(`[hidden]`)&&e.getClientRects().length>0)}function pl(){return[...document.querySelectorAll(dl)].filter(e=>e.offsetParent!==null||e.getClientRects().length>0)}function ml(e){let t=pl();if(t.length===0)return null;let n=t.indexOf(document.activeElement),r=t[n===-1?e===1?0:t.length-1:Math.min(t.length-1,Math.max(0,n+e))],i=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1;return r.focus({preventScroll:!0}),r.scrollIntoView?.({block:`nearest`,behavior:i?`auto`:`smooth`}),r}function hl({enabled:e,showFindings:t,showFullReport:n}){(0,K.useEffect)(()=>{if(!e)return;function r(e){if(!fl(e))switch(e.key){case`j`:case`k`:{let n=e.key===`j`?1:-1;e.preventDefault(),t(),requestAnimationFrame(()=>ml(n));return}case`f`:{let t=document.querySelector(`[aria-label="Filter findings"] button`);if(!t)return;e.preventDefault(),t.focus();return}case`1`:t(),e.preventDefault();return;case`2`:n(),e.preventDefault();return}}return window.addEventListener(`keydown`,r),()=>window.removeEventListener(`keydown`,r)},[e,t,n])}function gl({appModel:e,catalog:t,configFindings:n,getTaskData:r,activeFileId:i,onRoute:a}){return(0,q.jsxs)(`div`,{className:`space-y-6`,children:[(0,q.jsx)(`h2`,{className:`sr-only`,children:`Full app report`}),(0,q.jsx)(ul,{}),(0,q.jsx)(Qr,{appModel:e,catalog:t}),(0,q.jsx)(Cr,{appModel:e,activeFileId:i}),(0,q.jsx)(el,{appModel:e,catalog:t,getTaskData:r,onRoute:a}),(0,q.jsxs)(ht,{children:[Ot().map(({component:a,widgetId:o})=>(0,q.jsx)(B,{cardId:`reference-${o}`,widgetId:o,collapsedTile:!0,children:(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)($e,{}),children:(0,q.jsx)(a,{appModel:e,catalog:t,configFindings:n,getTaskData:r,activeFileId:i,defaultCollapsed:!0})})},o)),(0,q.jsx)(B,{cardId:`reference-evidence-availability`,collapsedTile:!0,children:(0,q.jsx)(ol,{ledger:e.evidenceAvailability})}),(0,q.jsx)(B,{cardId:`reference-etl-phases`,collapsedTile:!0,children:(0,q.jsx)(vr,{})}),(0,q.jsx)(B,{cardId:`reference-scaling-sim`,collapsedTile:!0,children:(0,q.jsx)(Ir,{appModel:e})}),(0,q.jsx)(B,{cardId:`reference-efficiency-model`,collapsedTile:!0,children:(0,q.jsx)(gr,{})}),(0,q.jsx)(B,{cardId:`reference-core-usage-histogram`,collapsedTile:!0,children:(0,q.jsx)(pr,{appModel:e,getTaskData:r})})]})]})}function _l(e,t,n){let r=e.map(e=>e===`impactBands`?`${[...t.impactBands].join(`, `)} impact`:e===`types`?[...t.types].map(e=>pt(e)).join(`, `):[...t.stages].map(e=>`Stage ${e}`).join(`, `));return`Cleared the ${r.join(` and `)} filter${r.length===1?``:`s`} to show ${n}.`}function vl({appModel:e,catalog:t,configFindings:n,getTaskData:r,activeFileId:i,options:a,onRoute:o,activeTab:s,onActiveTabChange:c,renderTopbar:l}){let{selection:u,replaceSelection:d}=xn(),f=ge(),p=R(),m=p?.data.detectors,h=(0,K.useMemo)(()=>m?or(t,n??[],m):[],[t,n,m]),g=(0,K.useMemo)(()=>new Set(p?Pn(p):[]),[p]),_=(0,K.useMemo)(()=>p?Fn(p,new Set(h.map(e=>e.widgetId))):new Map,[p,h]),v=(0,K.useMemo)(()=>new Set(_.values()),[_]),y=(0,K.useCallback)(a=>{let o=h.find(e=>e.widgetId===a);return o?(0,q.jsx)(kn,{widget:o,widgetProps:{appModel:e,catalog:t,configFindings:n,getTaskData:r,activeFileId:i}}):null},[h,e,t,n,r,i]),b=(0,K.useCallback)(()=>{c(`findings`),requestAnimationFrame(()=>{let e=document.getElementById(nr),t=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1;e?.scrollIntoView?.({block:`start`,behavior:t?`auto`:`smooth`})})},[c]),[x,S]=(0,K.useState)(null),C=(0,K.useCallback)((e,t)=>{let n=pn(e,u);if(n.length===0)return;let r={...u};for(let e of n)Object.assign(r,{[e]:ln()[e]});d(r),S({text:_l(n,u,t),selection:r})},[u,d]),w=(0,K.useCallback)(e=>{kt(e.finding.type)||C(e.finding,`this finding`),o(e)},[C,o]),T=(0,K.useCallback)(e=>{let t=ee(p).filter(t=>t.impactBand===e&&!g.has(t)).reduce((e,t)=>!e||pn(t,u).length<pn(e,u).length?t:e,null);if(t&&C(t,`the ${e} findings`),!t){let e=document.getElementById(`run-verdict`);e?.scrollIntoView?.({block:`start`}),e?.focus({preventScroll:!0});return}c(`findings`),requestAnimationFrame(()=>{let t=document.getElementById(`impact-band-${e}-heading`);if(!t)return;let n=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1;t.scrollIntoView?.({block:`start`,behavior:n?`auto`:`smooth`}),t.focus({preventScroll:!0})})},[p,u,C,c,g]),E=(0,K.useMemo)(()=>fn(t,u),[t,u]),D=(0,K.useMemo)(()=>fn(n??[],u),[n,u]),O=(0,K.useMemo)(()=>{let e=new Set([...E,...D]);return ee(p).filter(t=>e.has(t)&&!g.has(t)).length},[p,E,D,g]),k=E.length+D.length,A=t.length+(n??[]).length>0&&k===0,j=f===`advanced`||!un(u);return(0,q.jsxs)(q.Fragment,{children:[l(T),(0,q.jsxs)(`main`,{className:`mx-auto w-full max-w-[80rem] min-w-0 flex-1 space-y-4 px-4 pt-5 pb-12 sm:px-8`,children:[(0,q.jsx)(di,{}),p?(0,q.jsx)(ui,{interpretation:p,onRoute:w,onShowMoreFindings:b,moreFindingsCount:O,evidenceOwners:_,renderEvidence:y}):null,p?(0,q.jsx)(vi,{interpretation:p.data,catalog:E}):null,j&&(0,q.jsx)(Dn,{options:a,resultCount:k}),j&&x?.selection===u?(0,q.jsx)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,children:x.text}):null,A&&(0,q.jsx)(Sn,{}),!A&&(0,q.jsxs)(Ce,{value:s,onValueChange:e=>c(e),children:[(0,q.jsxs)(ke,{variant:`chrome`,"aria-label":`Report view`,children:[(0,q.jsxs)(we,{value:`findings`,className:`tap-target-comfortable`,children:[`Findings`,O>0?(0,q.jsx)(`span`,{"aria-hidden":`true`,className:`font-mono text-xs font-normal text-muted-foreground tabular-nums`,children:O}):null]}),(0,q.jsx)(we,{value:`full-report`,className:`tap-target-comfortable`,children:`Full app report`})]}),(0,q.jsxs)(De,{value:`findings`,keepMounted:!0,children:[(0,q.jsx)(`h2`,{className:`sr-only`,children:`Findings`}),(0,q.jsx)(Ii,{verdictLeads:g,verdictWidgetIds:v,appModel:e,catalog:E,configFindings:D,stages:e.stages,getTaskData:r,activeFileId:i,onRoute:o})]}),(0,q.jsx)(De,{value:`full-report`,keepMounted:!0,children:(0,q.jsx)(gl,{appModel:e,catalog:E,getTaskData:r,configFindings:D,activeFileId:i,onRoute:o})})]}),(0,q.jsx)(Ji,{appModel:e,catalog:t,getTaskData:r,onRoute:w})]})]})}function yl(){let{resetToDropZone:e,startLoad:t,getTaskData:n,compareWithAnotherRun:r}=st(),i=I(e=>e.appModel),a=I(e=>e.catalog),o=I(e=>e.activeFileId),s=I(e=>e.exportMode),{recentEntries:c,onPickRecent:l,onRemoveRecent:u}=Re(o),[d,f]=(0,K.useState)(!1),[p,m]=(0,K.useState)(`findings`),h=ge(),g=(0,K.useCallback)(()=>m(`findings`),[]),_=(0,K.useCallback)(()=>m(`full-report`),[]);hl({enabled:h===`advanced`,showFindings:g,showFullReport:_});let{revealRequest:v}=Mt(),[y,b]=(0,K.useState)(null),[x,S]=(0,K.useState)(null),[C,w]=(0,K.useState)(null),T=(0,K.useRef)(0),E=(0,K.useRef)(null),D=(0,K.useRef)(null),k=(0,K.useRef)(new Map),A=(0,K.useRef)(new Map),j=(0,K.useRef)(null),ee=y?.target??null;(0,K.useEffect)(()=>()=>{j.current&&clearTimeout(j.current)},[]),(0,K.useLayoutEffect)(()=>{v>0&&m(`full-report`)},[v]);let M=(0,K.useCallback)(e=>{E.current?.token===e&&(E.current=null,D.current=null,b(t=>t?.token===e?null:t))},[]),N=(0,K.useCallback)(e=>{if(E.current?.token!==e.token)return null;let{catalog:t,configFindings:n,activeFileId:r}=O.getState();if(D.current!==r)return null;let i=jn(e.target.finding,[...t,...n]);return!i||i.widgetId!==e.target.widgetId||i.region!==e.target.region?null:i},[]),te=(0,K.useCallback)(e=>{m(kt(e.finding.type)?`full-report`:`findings`);let t=T.current+1;T.current=t;let{catalog:n,configFindings:r,activeFileId:i}=O.getState(),a=jn(e.finding,[...n,...r]);if(!a||a.widgetId!==e.widgetId||a.region!==e.region){E.current=null,D.current=null,b(null);return}let o={target:a,token:t};E.current=o,D.current=i,b(o)},[]),ne=(0,K.useCallback)((e,t)=>{k.current.set(e,t);let n=E.current;return n?.target.widgetId===e&&N(n)&&t.open(),()=>{k.current.get(e)===t&&k.current.delete(e)}},[N]),re=(0,K.useCallback)((e,t)=>(A.current.set(e,t),()=>{A.current.get(e)===t&&A.current.delete(e)}),[]),ie=(0,K.useCallback)((e,t)=>{if(!t)return;let n=E.current;if(!n||n.target.widgetId!==e)return;let r=N(n);if(!r){M(n.token);return}let i=k.current.get(e);if(!i)return;let a=i.getDisclosureButton();if(!a){M(n.token);return}let o=window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,s=A.current.get(r.finding);s?(s.scrollIntoView({behavior:o?`auto`:`smooth`,block:`center`,inline:`nearest`}),s.focus({preventScroll:!0}),j.current&&clearTimeout(j.current),w(r.finding),j.current=setTimeout(()=>{j.current=null,w(null)},2e3)):(i.wrapperElement.scrollIntoView({behavior:o?`auto`:`smooth`,block:`start`,inline:`nearest`}),a.focus({preventScroll:!0}),S(e)),M(n.token)},[M,N]),ae=(0,K.useCallback)(e=>{S(t=>t===e?null:t)},[]);(0,K.useLayoutEffect)(()=>{if(!y)return;let e=N(y);if(!e){M(y.token);return}k.current.get(e.widgetId)?.open()},[M,N,y]),(0,K.useLayoutEffect)(()=>{let e=E.current;e&&!N(e)&&M(e.token)},[o,a,M,N]);let P=I(e=>e.configFindings),oe=(0,K.useMemo)(()=>mn(a,P),[a,P]);return(0,q.jsxs)(`div`,{"data-testid":`dashboard`,className:`relative flex min-h-screen flex-col`,style:{paddingRight:`var(--docs-inset, 0px)`},onDragOver:e=>{s||(e.preventDefault(),f(!0))},onDragLeave:()=>f(!1),onDrop:e=>{if(s)return;e.preventDefault(),f(!1);let n=e.dataTransfer.files[0];n&&t(n)},children:[(0,q.jsx)(`button`,{type:`button`,className:`sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-50 focus:rounded-md focus:bg-background focus:px-3 focus:py-2 focus:text-sm focus:font-medium focus:shadow focus:ring-2 focus:ring-ring`,onClick:()=>{let e=document.getElementById(`run-verdict`);e?.scrollIntoView?.({block:`start`}),e?.focus({preventScroll:!0})},children:`Skip to the verdict`}),(0,q.jsx)(bn,{options:oe,fileId:o,children:(0,q.jsx)(it,{registerWidget:ne,registerFindingAnchor:re,reportWidgetOpen:ie,clearRouteFocus:ae,focusedWidgetId:x,activeRouteTarget:ee,flashedFinding:C,children:(0,q.jsx)(vl,{appModel:i,catalog:a,configFindings:P,getTaskData:n,activeFileId:o,options:oe,onRoute:te,activeTab:p,onActiveTabChange:m,renderTopbar:t=>(0,q.jsx)(Pe,{onJumpToFindings:t,onLoadNew:e,onCompare:r,recentEntries:c,activeFileId:o,onPickRecent:l,onRemoveRecent:u})})})}),d&&(0,q.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none fixed inset-0 z-50 flex items-center justify-center bg-background/80`,children:(0,q.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 bl(){return(0,q.jsx)(It,{children:(0,q.jsx)(yl,{})})}export{bl as Dashboard};