sparkforensics-server 0.6.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +16 -7
- package/package.json +1 -1
- package/public/assets/AutoscalingChurn-DenWKTv-.js +1 -0
- package/public/assets/CacheUtilization-DLz7NdjV.js +1 -0
- package/public/assets/CachingOpportunity-zpQIqhzm.js +1 -0
- package/public/assets/ChartTheme-DAiARbLP.js +8 -0
- package/public/assets/ColdStart-C-9HjxWl.js +1 -0
- package/public/assets/ConfigAudit-D0V9tcrJ.js +1 -0
- package/public/assets/CoreUsageArea-yeerrljd.js +1 -0
- package/public/assets/Dashboard-DkUPrHKV.js +1 -0
- package/public/assets/DisclosureContext-DK1_iz6J.js +1 -0
- package/public/assets/DuplicatePlanSubtree-xDNDbCd3.js +1 -0
- package/public/assets/DurationHistogram-B6jsE0Ov.js +1 -0
- package/public/assets/EmptyState-C1uL40VU.js +1 -0
- package/public/assets/ExecutorUtilization-DXDZKmSc.js +1 -0
- package/public/assets/GcPressure-MRf7I4IG.js +1 -0
- package/public/assets/ImpactEstimate-Dm3xWbzV.js +1 -0
- package/public/assets/IncompleteRun-CaLOhMtf.js +1 -0
- package/public/assets/JobFailures-CzmzlvhO.js +1 -0
- package/public/assets/MemoryUtilization-AWUMUjCH.js +1 -0
- package/public/assets/NestedLoopJoin-C9sNr6Ss.js +1 -0
- package/public/assets/OverBroadcast-BOmRE6ca.js +1 -0
- package/public/assets/PartitionHint-BL2EmJfE.js +1 -0
- package/public/assets/PartitionSizing-BzBySvUq.js +1 -0
- package/public/assets/PlanExplorer-DdiQRcJU.js +1 -0
- package/public/assets/PlanGraphRoute-CIH9gBuR.js +1 -0
- package/public/assets/PlanView-B1hxzFRs.js +2 -0
- package/public/assets/PythonUdf-DvgCCueD.js +1 -0
- package/public/assets/RetryWaste-uXXu_CyM.js +1 -0
- package/public/assets/RowPagination-C-LzWkI5.js +1 -0
- package/public/assets/RowStatusCluster-Dbtmte7l.js +1 -0
- package/public/assets/ShuffleIO-nALwzC1_.js +1 -0
- package/public/assets/Skew-CHMEKgvk.js +1 -0
- package/public/assets/SlowHost-yyvjpHk6.js +1 -0
- package/public/assets/SmallFiles-y6odJ97n.js +1 -0
- package/public/assets/SpeculationWaste-C-SD2LOt.js +1 -0
- package/public/assets/Spill-DHTMmOup.js +1 -0
- package/public/assets/StageFailed-CQ3DxC9R.js +1 -0
- package/public/assets/StageFindingGroup-BgYLyj5q.js +1 -0
- package/public/assets/StageHeader-CIETkjVZ.js +1 -0
- package/public/assets/StagePill--P7PDd3s.js +1 -0
- package/public/assets/StageShape-BIv8vx_o.js +1 -0
- package/public/assets/StageSlowness-MMqzERxN.js +1 -0
- package/public/assets/Straggler-BgrY7AyW.js +1 -0
- package/public/assets/TaskFailures-BHHyKYTs.js +1 -0
- package/public/assets/TinyTask-DDScNhCl.js +1 -0
- package/public/assets/UnderBroadcast-CGIC04TI.js +1 -0
- package/public/assets/WidgetLeadSummary-CXFZP00C.js +1 -0
- package/public/assets/button-DbpTz2yk.js +1 -0
- package/public/assets/charts-vendor-CtTxwTeu.js +59 -0
- package/public/assets/composite-C9Nu2EI9.js +1 -0
- package/public/assets/d3-vendor-DNlD2-cz.js +1 -0
- package/public/assets/detector-registry-Bp8hrLua.js +2 -0
- package/public/assets/downsample-WmNM1qc9.js +1 -0
- package/public/assets/finding-anchor-Dr40LkS9.js +1 -0
- package/public/assets/findings-of-type-BL2u3RGZ.js +1 -0
- package/public/assets/impact-sort-mC5ISgX8.js +1 -0
- package/public/assets/inbox-KPU1Gppm.js +1 -0
- package/public/assets/index-CaRVPvAT.css +2 -0
- package/public/assets/index-fDiwfuoO.js +14 -0
- package/public/assets/inertValue-L9VxV0VE.js +1 -0
- package/public/assets/layout.worker-CLcBHxVp.js +3 -0
- package/public/assets/{parser-worker-CA5RxqKc.js → parser-worker-CRIOPMOW.js} +8 -8
- package/public/assets/plan-graph-vendor-Ce6d4HU6.js +7 -0
- package/public/assets/react-vendor-C6KcUD36.js +9 -0
- package/public/assets/select-BHqOqun5.js +1 -0
- package/public/assets/toggle-DPeN6aNa.js +1 -0
- package/public/assets/toggle-group-Kl3uyHSr.js +1 -0
- package/public/assets/usePagedRows-BafD6bEN.js +1 -0
- package/public/assets/useRecentFiles-DzJZAoOT.js +3 -0
- package/public/assets/useRegisterFieldControl-pQv-ZDoU.js +1 -0
- package/public/assets/useScrollLock-BCxn_dMp.js +1 -0
- package/public/assets/useSortMode-DjrAN-z4.js +1 -0
- package/public/docs/404.html +3 -3
- package/public/docs/assets/{app.CnWL6bKV.js → app.1gvzd5Zb.js} +1 -1
- package/public/docs/assets/chunks/@localSearchIndexroot.DS2TQP5_.js +1 -0
- package/public/docs/assets/chunks/{VPLocalSearchBox.C0IBKeRQ.js → VPLocalSearchBox.CNxT3s0I.js} +1 -1
- package/public/docs/assets/chunks/{theme.BH-2HuRf.js → theme.C5lLqUv7.js} +2 -2
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CqKM_jEG.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CqKM_jEG.lean.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_board-widgets_caching-and-memory.md.CQgn1t_M.js → contributor-guide_architecture_board-widgets_caching-and-memory.md.BYDo3ClR.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.ajUAVdbc.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_board-widgets_visual-system-and-templating.md.wulOueeB.js → contributor-guide_architecture_board-widgets_visual-system-and-templating.md.WqY74T0T.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.WqY74T0T.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CHHgywoP.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_detector-contract.md.N4hhenrA.lean.js → contributor-guide_architecture_detector-contract.md.CHHgywoP.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.DIz3_oz9.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.DIz3_oz9.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.WH4tRHPL.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_detector-contract_threshold-tables.md.Dp3c40rx.lean.js → contributor-guide_architecture_detector-contract_threshold-tables.md.WH4tRHPL.lean.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_drill-down.md.CqZPrdo9.js → contributor-guide_architecture_drill-down.md.yB-Hz2XT.js} +1 -1
- 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
- package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.BQZE04sw.js +1 -0
- 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
- package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.K71YB-Rr.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.DfvbqEUu.lean.js → contributor-guide_architecture_impact-estimation.md.K71YB-Rr.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.DLCAffwn.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.Cwm1jHmn.lean.js → contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.DLCAffwn.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.JFrzDMwo.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.JFrzDMwo.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_overview.md.nxkpOhgf.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.U-9KMDFK.js +1 -0
- 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
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BrSz8Ezh.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.B7rjSF_h.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.B7rjSF_h.lean.js +1 -0
- 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
- 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
- package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.BAnhi2-d.js → contributor-guide_architecture_worker-protocol.md.Br6OE7RW.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.Br6OE7RW.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.IVyaXrGe.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_worker-protocol_cli-and-mcp.md.BX1XnFbq.lean.js → contributor-guide_architecture_worker-protocol_cli-and-mcp.md.IVyaXrGe.lean.js} +1 -1
- 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
- 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
- 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
- package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.CtmCU57I.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_worker-protocol_evidence-report.md.CiQl1MLb.lean.js → contributor-guide_architecture_worker-protocol_evidence-report.md.CtmCU57I.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_contributing.md.DBW4drtZ.js +1 -0
- package/public/docs/assets/contributor-guide_development-setup.md.B21ZTDhn.js +15 -0
- package/public/docs/assets/contributor-guide_development-setup.md.B21ZTDhn.lean.js +1 -0
- package/public/docs/assets/contributor-guide_testing.md.DpkozNoG.js +4 -0
- package/public/docs/assets/{contributor-guide_testing.md.By6XGR9a.lean.js → contributor-guide_testing.md.DpkozNoG.lean.js} +1 -1
- package/public/docs/assets/{index.md.CHJVslga.js → index.md.lMm7SUMz.js} +1 -1
- package/public/docs/assets/{index.md.CHJVslga.lean.js → index.md.lMm7SUMz.lean.js} +1 -1
- package/public/docs/assets/{style.CyK9Ss73.css → style.Cfxqlj0y.css} +1 -1
- package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.C0pcQoNc.js +29 -0
- package/public/docs/assets/{user-guide_getting-started_ci-and-automation.md.BEepbDDL.lean.js → user-guide_getting-started_ci-and-automation.md.C0pcQoNc.lean.js} +1 -1
- package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.CGaxPX_1.js +1 -0
- 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
- 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
- package/public/docs/assets/{user-guide_mcp-tools.md.C65SjWUL.js → user-guide_mcp-tools.md.49r3L2YE.js} +1 -1
- 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
- package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.BQ_kIptC.lean.js +1 -0
- package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.azCZXkH8.js +44 -0
- 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
- package/public/docs/assets/{user-guide_mcp-tools_evaluate-budgets.md.BB0nDY3Z.js → user-guide_mcp-tools_evaluate-budgets.md.dpQpRQ7z.js} +2 -2
- 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
- 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
- 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
- package/public/docs/assets/user-guide_run-comparison.md.B_LOkdBf.js +1 -0
- package/public/docs/assets/user-guide_run-comparison.md.B_LOkdBf.lean.js +1 -0
- package/public/docs/assets/user-guide_understanding-findings.md.C4riKCKl.js +1 -0
- package/public/docs/assets/user-guide_understanding-findings.md.C4riKCKl.lean.js +1 -0
- package/public/docs/contributor-guide/architecture/board-widgets/caching-and-memory.html +6 -6
- package/public/docs/contributor-guide/architecture/board-widgets/plan-advisor.html +6 -6
- package/public/docs/contributor-guide/architecture/board-widgets/visual-system-and-templating.html +6 -6
- package/public/docs/contributor-guide/architecture/board-widgets.html +6 -6
- package/public/docs/contributor-guide/architecture/detector-contract/plan-attribution.html +6 -6
- package/public/docs/contributor-guide/architecture/detector-contract/threshold-tables.html +6 -6
- package/public/docs/contributor-guide/architecture/detector-contract.html +6 -6
- package/public/docs/contributor-guide/architecture/drill-down/plan-graph.html +6 -6
- package/public/docs/contributor-guide/architecture/drill-down.html +6 -6
- package/public/docs/contributor-guide/architecture/impact-estimation/caveats-tuning-and-coverage.html +6 -6
- package/public/docs/contributor-guide/architecture/impact-estimation/stage-union-rollup.html +6 -6
- package/public/docs/contributor-guide/architecture/impact-estimation.html +6 -6
- package/public/docs/contributor-guide/architecture/index.html +5 -5
- package/public/docs/contributor-guide/architecture/overview.html +6 -6
- package/public/docs/contributor-guide/architecture/state-and-history/history-server-intake.html +5 -5
- package/public/docs/contributor-guide/architecture/state-and-history/run-comparison-internals.html +6 -6
- package/public/docs/contributor-guide/architecture/state-and-history.html +5 -5
- package/public/docs/contributor-guide/architecture/widget-rendering/findings-tab.html +6 -6
- package/public/docs/contributor-guide/architecture/widget-rendering/investigation-routing.html +5 -5
- package/public/docs/contributor-guide/architecture/widget-rendering/list-sort-mode.html +6 -6
- package/public/docs/contributor-guide/architecture/widget-rendering/reference-section.html +5 -5
- package/public/docs/contributor-guide/architecture/widget-rendering/row-expand-contract.html +6 -6
- package/public/docs/contributor-guide/architecture/widget-rendering.html +6 -6
- package/public/docs/contributor-guide/architecture/worker-protocol/cli-and-mcp.html +6 -6
- package/public/docs/contributor-guide/architecture/worker-protocol/core-and-event-validation.html +6 -6
- package/public/docs/contributor-guide/architecture/worker-protocol/evidence-availability.html +7 -7
- package/public/docs/contributor-guide/architecture/worker-protocol/evidence-report.html +6 -6
- package/public/docs/contributor-guide/architecture/worker-protocol.html +6 -6
- package/public/docs/contributor-guide/contributing.html +6 -6
- package/public/docs/contributor-guide/development-setup.html +8 -8
- package/public/docs/contributor-guide/testing.html +9 -6
- package/public/docs/hashmap.json +1 -1
- package/public/docs/index.html +6 -6
- package/public/docs/logo-dark.svg +1 -0
- package/public/docs/logo-light.svg +1 -0
- package/public/docs/tuning-reference/anti-patterns.html +5 -5
- package/public/docs/tuning-reference/aqe.html +5 -5
- package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +5 -5
- package/public/docs/tuning-reference/bottleneck-cold-start.html +5 -5
- package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +5 -5
- package/public/docs/tuning-reference/bottleneck-failures.html +5 -5
- package/public/docs/tuning-reference/bottleneck-gc.html +5 -5
- package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +5 -5
- package/public/docs/tuning-reference/bottleneck-memory-utilization.html +5 -5
- package/public/docs/tuning-reference/bottleneck-retry-waste.html +5 -5
- package/public/docs/tuning-reference/bottleneck-shuffle.html +5 -5
- package/public/docs/tuning-reference/bottleneck-skew.html +5 -5
- package/public/docs/tuning-reference/bottleneck-slow-host.html +5 -5
- package/public/docs/tuning-reference/bottleneck-small-files.html +5 -5
- package/public/docs/tuning-reference/bottleneck-spill.html +5 -5
- package/public/docs/tuning-reference/bottleneck-straggler.html +5 -5
- package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +5 -5
- package/public/docs/tuning-reference/bottleneck-utilization.html +5 -5
- package/public/docs/tuning-reference/caching.html +5 -5
- package/public/docs/tuning-reference/cluster-config.html +5 -5
- package/public/docs/tuning-reference/config.html +5 -5
- package/public/docs/tuning-reference/data-formats.html +5 -5
- package/public/docs/tuning-reference/index.html +5 -5
- package/public/docs/tuning-reference/intro.html +5 -5
- package/public/docs/tuning-reference/joins.html +5 -5
- package/public/docs/tuning-reference/memory-model.html +5 -5
- package/public/docs/tuning-reference/metrics.html +5 -5
- package/public/docs/tuning-reference/partitioning.html +5 -5
- package/public/docs/tuning-reference/pyspark.html +5 -5
- package/public/docs/tuning-reference/shuffle.html +5 -5
- package/public/docs/tuning-reference/spark-architecture.html +5 -5
- package/public/docs/tuning-reference/table-formats.html +5 -5
- package/public/docs/user-guide/alternative-log-retrieval/managed-platforms.html +5 -5
- package/public/docs/user-guide/alternative-log-retrieval/ssh-bastion.html +5 -5
- package/public/docs/user-guide/alternative-log-retrieval.html +5 -5
- package/public/docs/user-guide/getting-started/ci-and-automation.html +16 -11
- package/public/docs/user-guide/getting-started/reading-the-dashboard.html +6 -6
- package/public/docs/user-guide/getting-started/regression-metric-keys.html +5 -5
- package/public/docs/user-guide/getting-started/tuning-thresholds.html +7 -7
- package/public/docs/user-guide/getting-started.html +5 -5
- package/public/docs/user-guide/mcp-tools/compare-runs.html +16 -11
- package/public/docs/user-guide/mcp-tools/diagnose-run.html +28 -7
- package/public/docs/user-guide/mcp-tools/evaluate-budgets.html +6 -6
- package/public/docs/user-guide/mcp-tools/get-finding-documentation.html +5 -5
- package/public/docs/user-guide/mcp-tools/get-finding-evidence.html +7 -6
- package/public/docs/user-guide/mcp-tools/get-reference-doc.html +5 -5
- package/public/docs/user-guide/mcp-tools/get-run-summary.html +5 -5
- package/public/docs/user-guide/mcp-tools/list-runs.html +5 -5
- package/public/docs/user-guide/mcp-tools.html +6 -6
- package/public/docs/user-guide/run-comparison/how-stages-are-matched.html +5 -5
- package/public/docs/user-guide/run-comparison.html +6 -6
- package/public/docs/user-guide/understanding-findings.html +6 -6
- package/public/export-template.html +45 -45
- package/public/index.html +8 -7
- package/public/sample-runs/sample-run.ndjson.gz +0 -0
- package/vendor-core/allocation.js +25 -23
- package/vendor-core/analyzer.js +85 -58
- package/vendor-core/api-merge-writes.js +2 -0
- package/vendor-core/aqe-skew.js +347 -0
- package/vendor-core/cli/budgets.js +6 -4
- package/vendor-core/cli/collect-run-pair.js +89 -0
- package/vendor-core/cli/collect-run-worker.js +16 -0
- package/vendor-core/cli/collect-run.js +1 -2
- package/vendor-core/cli/native-zstd.js +12 -16
- package/vendor-core/comparability.js +234 -0
- package/vendor-core/comparison-output.js +15 -7
- package/vendor-core/comparison-verdict.js +105 -25
- package/vendor-core/core-source-hash.txt +1 -1
- package/vendor-core/core-time-series.js +0 -1
- package/vendor-core/core-usage-locality.js +1 -1
- package/vendor-core/detectors.js +1007 -380
- package/vendor-core/docs-config.js +0 -4
- package/vendor-core/docs-content/detection/cache.md +2 -1
- package/vendor-core/docs-content/detection/cfg.md +19 -11
- package/vendor-core/docs-content/detection/cold.md +2 -1
- package/vendor-core/docs-content/detection/gc.md +7 -3
- package/vendor-core/docs-content/detection/host.md +11 -1
- package/vendor-core/docs-content/detection/mem.md +17 -6
- package/vendor-core/docs-content/detection/part.md +3 -1
- package/vendor-core/docs-content/detection/plan.md +55 -13
- package/vendor-core/docs-content/detection/shfl.md +11 -5
- package/vendor-core/docs-content/detection/skew.md +47 -1
- package/vendor-core/docs-content/detection/slow.md +4 -2
- package/vendor-core/docs-content/detection/spec.md +6 -1
- package/vendor-core/docs-content/detection/spill.md +6 -3
- package/vendor-core/docs-content/detection/strag.md +19 -6
- package/vendor-core/docs-content/detection/tiny.md +9 -3
- package/vendor-core/effective-conf.js +7 -10
- package/vendor-core/efficiency-model.js +2 -2
- package/vendor-core/etl-phases.js +1 -2
- package/vendor-core/event-handlers.js +175 -57
- package/vendor-core/event-schemas.js +21 -16
- package/vendor-core/evidence-availability.js +9 -2
- package/vendor-core/evidence-report.js +118 -35
- package/vendor-core/executor-peaks.js +41 -0
- package/vendor-core/export-data.js +5 -5
- package/vendor-core/finding-identity.js +78 -0
- package/vendor-core/finding-presentation.js +116 -33
- package/vendor-core/finding-types.js +88 -21
- package/vendor-core/format-utils.js +14 -15
- package/vendor-core/html-export.js +1 -1
- package/vendor-core/impact-band.js +2 -2
- package/vendor-core/impact-format.js +47 -19
- package/vendor-core/impact-model.js +26 -15
- package/vendor-core/job-groups.js +4 -4
- package/vendor-core/mcp-server-factory.js +48 -12
- package/vendor-core/mcp-tools.js +179 -24
- package/vendor-core/median.js +2 -2
- package/vendor-core/nested-loop-join.js +73 -0
- package/vendor-core/occupancy.js +1 -2
- package/vendor-core/parser-worker.js +1 -1
- package/vendor-core/plan-graph-model.js +14 -22
- package/vendor-core/plan-node-detail.js +2 -3
- package/vendor-core/plan-summary.js +24 -19
- package/vendor-core/plan-tree-walk.js +6 -8
- package/vendor-core/python-stage.js +12 -1
- package/vendor-core/recommendation-rollup.js +13 -12
- package/vendor-core/redact.js +52 -46
- package/vendor-core/run-aggregates.js +6 -8
- package/vendor-core/run-comparison.js +226 -66
- package/vendor-core/run-identity.js +12 -0
- package/vendor-core/run-interpretation.js +21 -0
- package/vendor-core/run-metrics.js +2 -2
- package/vendor-core/run-output.js +32 -10
- package/vendor-core/run-totals.js +12 -0
- package/vendor-core/run-verdict.js +76 -3
- package/vendor-core/scaling-sim.js +3 -4
- package/vendor-core/snappy-block.js +2 -2
- package/vendor-core/spark-conf.js +168 -0
- package/vendor-core/sql-stages.js +2 -2
- package/vendor-core/stage-alignment.js +2 -12
- package/vendor-core/stage-identity.js +58 -3
- package/vendor-core/stage-label.js +14 -0
- package/vendor-core/stage-plan-nodes.js +17 -3
- package/vendor-core/stage-quantiles.js +141 -9
- package/vendor-core/stage-structure.js +17 -3
- package/vendor-core/threshold-overrides.js +9 -3
- package/vendor-core/types.js +58 -21
- package/vendor-core/wasted-core-hours.js +0 -1
- package/vendor-core/write-targets.js +114 -14
- package/vendor-core/zstd-worker-client.js +1 -1
- package/vendor-core/zstd-worker.js +1 -1
- package/public/assets/AutoscalingChurn-CRA2Mb7F.js +0 -1
- package/public/assets/CacheUtilization-Bh9OY_V9.js +0 -1
- package/public/assets/CachingOpportunity-oCiQwmTJ.js +0 -1
- package/public/assets/ColdStart-BJrtjfmn.js +0 -1
- package/public/assets/ConfigAudit-DMvKxySP.js +0 -1
- package/public/assets/CoreUsageArea-REC2zsKw.js +0 -1
- package/public/assets/Dashboard-BHZ76JCu.js +0 -2
- package/public/assets/DisclosureContext-OO7X1HAx.js +0 -1
- package/public/assets/DuplicatePlanSubtree-BgG-L-cK.js +0 -1
- package/public/assets/ExecutorUtilization-D2KhSVbY.js +0 -1
- package/public/assets/GcPressure-D1BTE8qh.js +0 -1
- package/public/assets/IncompleteRun-DD40xUpy.js +0 -1
- package/public/assets/JobFailures-YwNzCF19.js +0 -1
- package/public/assets/MemoryUtilization-9b8ee_3_.js +0 -1
- package/public/assets/OverBroadcast-CfctS8a8.js +0 -1
- package/public/assets/PartitionHint-CUvbnnxy.js +0 -1
- package/public/assets/PartitionSizing-VG8kBgG5.js +0 -1
- package/public/assets/PlanExplorer-DmubTAOP.js +0 -1
- package/public/assets/PlanGraphRoute-DctPZjS0.js +0 -1
- package/public/assets/RetryWaste-CnpM8bB7.js +0 -1
- package/public/assets/ShuffleIO-D13vGmas.js +0 -1
- package/public/assets/Skew-DlagstYP.js +0 -1
- package/public/assets/SlowHost-cSkLRZ_e.js +0 -1
- package/public/assets/SmallFiles-B-kERMcq.js +0 -1
- package/public/assets/SpeculationWaste-DaysAzXO.js +0 -1
- package/public/assets/Spill-H44Gz4US.js +0 -1
- package/public/assets/StageFailed-DCfii9h_.js +0 -1
- package/public/assets/StageFindingGroup-BXJ0Mj5n.js +0 -1
- package/public/assets/StageHeader--oN2J-oD.js +0 -1
- package/public/assets/StageShape-IZ80CZiJ.js +0 -1
- package/public/assets/StageSlowness--BRIaBc1.js +0 -1
- package/public/assets/Straggler-Ctq0Df_o.js +0 -1
- package/public/assets/TaskFailures-Bks_gqhL.js +0 -1
- package/public/assets/TinyTask-BssfzGFB.js +0 -1
- package/public/assets/UnderBroadcast-DsScrxc-.js +0 -1
- package/public/assets/charts-vendor-0VMaLVLN.js +0 -59
- package/public/assets/finding-anchor-BYW1oz5R.js +0 -1
- package/public/assets/impact-sort-xzy0g-Vh.js +0 -1
- package/public/assets/index-DhpRGMZc.css +0 -2
- package/public/assets/index-DwqkFUFk.js +0 -14
- package/public/assets/plan-graph-vendor-BYl-AzN5.js +0 -7
- package/public/assets/react-vendor-DfpuPQZf.js +0 -9
- package/public/assets/select-C8edjYTq.js +0 -1
- package/public/assets/usePagedRows-CsuUFeYx.js +0 -1
- package/public/assets/useRecentFiles-BvkKo3JN.js +0 -11
- package/public/assets/useSortMode-joX71BZN.js +0 -1
- package/public/docs/assets/chunks/@localSearchIndexroot.tE5pz54z.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.YQcj5EI4.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.YQcj5EI4.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.RlzvUmNm.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.wulOueeB.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.N4hhenrA.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.Dp3c40rx.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.DwOozIEs.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.DfvbqEUu.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.Cwm1jHmn.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_overview.md.C1sSvm9i.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.CZA0JLtV.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BOZ1azXG.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.BAnhi2-d.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.BX1XnFbq.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.CiQl1MLb.js +0 -1
- package/public/docs/assets/contributor-guide_contributing.md.CQMvGwFt.js +0 -1
- package/public/docs/assets/contributor-guide_development-setup.md.DQdzera7.js +0 -15
- package/public/docs/assets/contributor-guide_development-setup.md.DQdzera7.lean.js +0 -1
- package/public/docs/assets/contributor-guide_testing.md.By6XGR9a.js +0 -1
- package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.BEepbDDL.js +0 -24
- package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.Obf3W3__.js +0 -1
- package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.Cc_gLoix.lean.js +0 -1
- package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.BP1vnHA5.js +0 -23
- package/public/docs/assets/user-guide_run-comparison.md.BUALkohi.js +0 -1
- package/public/docs/assets/user-guide_run-comparison.md.BUALkohi.lean.js +0 -1
- package/public/docs/assets/user-guide_understanding-findings.md.3C7KCEZO.js +0 -1
- package/public/docs/assets/user-guide_understanding-findings.md.3C7KCEZO.lean.js +0 -1
- /package/public/docs/assets/{contributor-guide_architecture_board-widgets_caching-and-memory.md.CQgn1t_M.lean.js → contributor-guide_architecture_board-widgets_caching-and-memory.md.BYDo3ClR.lean.js} +0 -0
- /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
- /package/public/docs/assets/{contributor-guide_architecture_overview.md.C1sSvm9i.lean.js → contributor-guide_architecture_overview.md.nxkpOhgf.lean.js} +0 -0
- /package/public/docs/assets/{contributor-guide_architecture_widget-rendering.md.BOZ1azXG.lean.js → contributor-guide_architecture_widget-rendering.md.BrSz8Ezh.lean.js} +0 -0
- /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
- /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
- /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
- /package/public/docs/assets/{contributor-guide_contributing.md.CQMvGwFt.lean.js → contributor-guide_contributing.md.DBW4drtZ.lean.js} +0 -0
- /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
- /package/public/docs/assets/{user-guide_mcp-tools.md.C65SjWUL.lean.js → user-guide_mcp-tools.md.49r3L2YE.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/
|
|
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
|
-
|
|
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.
|
|
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};
|