sparkforensics-server 0.1.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/index.js +41 -50
- package/lib/static-files.js +15 -10
- package/package.json +23 -3
- package/public/assets/AutoscalingChurn-B96FKx97.js +1 -0
- package/public/assets/CacheUtilization-lKua3J1x.js +1 -0
- package/public/assets/CachingOpportunity-U0g-8HPV.js +1 -0
- package/public/assets/ColdStart-w8QYTNKo.js +1 -0
- package/public/assets/ConfigAudit-ClZp5BpV.js +1 -0
- package/public/assets/CoreUsageArea-o3kqQwyi.js +1 -0
- package/public/assets/Dashboard-Bjl-MYMm.js +1 -0
- package/public/assets/DuplicatePlanSubtree-Cm_UU3lY.js +1 -0
- package/public/assets/DurationHistogram-ltF-7M0A.js +1 -0
- package/public/assets/EmptyState-BCA3xioa.js +1 -0
- package/public/assets/ExecutorUtilization-Cn69i0uq.js +1 -0
- package/public/assets/GcPressure-CYsmU1d7.js +1 -0
- package/public/assets/ImpactEstimate-BGt-4WX5.js +1 -0
- package/public/assets/IncompleteRun-s6uQ8OLf.js +1 -0
- package/public/assets/JobFailures-DJ2dDvPA.js +1 -0
- package/public/assets/MemoryUtilization-C9G7P94X.js +1 -0
- package/public/assets/OverBroadcast-DYauoYWQ.js +1 -0
- package/public/assets/PartitionSizing-Cz_B0-uG.js +1 -0
- package/public/assets/PlanExplorer-_2oB5ouy.js +1 -0
- package/public/assets/PlanGraphRoute-Cj-GWM8W.js +1 -0
- package/public/assets/RetryWaste-D_m8ASwP.js +1 -0
- package/public/assets/RowPagination-BLsm8I6i.js +1 -0
- package/public/assets/ShuffleIO-pyDhxdaz.js +1 -0
- package/public/assets/Skew-BGLJuZZR.js +1 -0
- package/public/assets/SlowHost-ChdWVvGO.js +1 -0
- package/public/assets/SmallFiles-gTilBtjW.js +1 -0
- package/public/assets/SpeculationWaste-CVzgJnSj.js +1 -0
- package/public/assets/Spill-NGJGQaTB.js +1 -0
- package/public/assets/StageFailed-sGhki53z.js +1 -0
- package/public/assets/StageFindingGroup-AyI7BMd3.js +1 -0
- package/public/assets/StageHeader-BTzGkK8k.js +1 -0
- package/public/assets/StagePill-BlMOW_pU.js +1 -0
- package/public/assets/StageShape-DfOW93Z1.js +1 -0
- package/public/assets/StageSlowness-BMZ-K_5e.js +1 -0
- package/public/assets/Straggler-dffcAN7t.js +1 -0
- package/public/assets/TaskFailures-DGDwUK2A.js +1 -0
- package/public/assets/TinyTask-CfT8zZDr.js +1 -0
- package/public/assets/UnderBroadcast-CiOiJ0k1.js +1 -0
- package/public/assets/WidgetLeadSummary-BdUUi7L5.js +1 -0
- package/public/assets/charts-vendor-0VMaLVLN.js +59 -0
- package/public/assets/downsample-WmNM1qc9.js +1 -0
- package/public/assets/finding-anchor-DEV8JvgH.js +1 -0
- package/public/assets/impact-sort-DxaUheWV.js +1 -0
- package/public/assets/inbox-_QCYkBsP.js +1 -0
- package/public/assets/index-3vlFVNCg.js +9 -0
- package/public/assets/index-CjVklAdW.css +2 -0
- package/public/assets/parser-worker-B2bc0lWe.js +112 -0
- package/public/assets/plan-graph-vendor-B0sEms9Z.js +7 -0
- package/public/assets/plan-graph-vendor-DLioOiRN.css +1 -0
- package/public/assets/react-vendor-D2TLlSzI.js +9 -0
- package/public/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/public/assets/select-kuy1MiAo.js +1 -0
- package/public/assets/toggle-group-CUd-KWkp.js +1 -0
- package/public/assets/usePagedRows-jNUWgVTD.js +1 -0
- package/public/assets/useRecentFiles-D0OA_EOK.js +11 -0
- package/public/assets/useSortMode-BaeAA5cw.js +1 -0
- package/public/docs/404.html +3 -3
- package/public/docs/assets/{app.Bxy4_HVA.js → app.APoq_UBs.js} +1 -1
- package/public/docs/assets/aqe-loop.IwQSATHw.svg +1 -0
- package/public/docs/assets/aqe-loop.dark.DGbaxqJE.svg +1 -0
- package/public/docs/assets/broadcast-vs-shuffle.Db4WY1XK.svg +1 -0
- package/public/docs/assets/broadcast-vs-shuffle.dark.C7Bxs0mG.svg +1 -0
- package/public/docs/assets/cache-lifecycle.dark.B-hS7AgU.svg +1 -0
- package/public/docs/assets/cache-lifecycle.rEOVYQNU.svg +1 -0
- package/public/docs/assets/chunks/@localSearchIndexroot.CvM5fuxe.js +1 -0
- package/public/docs/assets/chunks/{VPLocalSearchBox.L5jNOIR3.js → VPLocalSearchBox.B3TPzlHq.js} +1 -1
- package/public/docs/assets/chunks/duplicate-plan-subtree.dark.Cdp70QhV.js +1 -0
- package/public/docs/assets/chunks/{framework.CNDaxUod.js → framework.DSg0KOwT.js} +1 -1
- package/public/docs/assets/chunks/retry-escalation-ladder.dark.DHipdJgZ.js +1 -0
- package/public/docs/assets/chunks/theme.PavXO_vz.js +2 -0
- package/public/docs/assets/cold-start-timeline.DxC_Sc7w.svg +1 -0
- package/public/docs/assets/cold-start-timeline.dark.CZ17YcAG.svg +1 -0
- package/public/docs/assets/columnar-layout.PghGeOEA.svg +1 -0
- package/public/docs/assets/columnar-layout.dark.BVNlz0ff.svg +1 -0
- package/public/docs/assets/container-memory.DIO0AnIm.svg +1 -0
- package/public/docs/assets/container-memory.dark.CP-5zuCl.svg +1 -0
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CWpj01WU.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CWpj01WU.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CgzUsQ6W.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CgzUsQ6W.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.BtPdlM7r.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.BtPdlM7r.lean.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.CzlXOnCq.js → contributor-guide_architecture_impact-estimation.md.CooslVJt.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.CzlXOnCq.lean.js → contributor-guide_architecture_impact-estimation.md.CooslVJt.lean.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_index.md.94lNbF-4.js → contributor-guide_architecture_index.md.3TO9ic6w.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_index.md.94lNbF-4.lean.js → contributor-guide_architecture_index.md.3TO9ic6w.lean.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_overview.md.mQFlN66o.js → contributor-guide_architecture_overview.md.CehiRmGn.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_overview.md.mQFlN66o.lean.js → contributor-guide_architecture_overview.md.CehiRmGn.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_state-and-history.md.C-xxn0q7.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_state-and-history.md.C-xxn0q7.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.R27gQrgY.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.R27gQrgY.lean.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.BaS_L10g.js → contributor-guide_architecture_worker-protocol.md.IbnfNrV3.js} +2 -2
- package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.BaS_L10g.lean.js → contributor-guide_architecture_worker-protocol.md.IbnfNrV3.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_contributing.md.CvRsdr6J.js +1 -0
- package/public/docs/assets/contributor-guide_contributing.md.CvRsdr6J.lean.js +1 -0
- package/public/docs/assets/{contributor-guide_development-setup.md.CpUMVtIK.js → contributor-guide_development-setup.md.DvAN_9mK.js} +1 -1
- package/public/docs/assets/{contributor-guide_development-setup.md.CpUMVtIK.lean.js → contributor-guide_development-setup.md.DvAN_9mK.lean.js} +1 -1
- package/public/docs/assets/{contributor-guide_testing.md.C0q-BJfl.js → contributor-guide_testing.md.6rIKqSyY.js} +1 -1
- package/public/docs/assets/{contributor-guide_testing.md.C0q-BJfl.lean.js → contributor-guide_testing.md.6rIKqSyY.lean.js} +1 -1
- package/public/docs/assets/dag-stages.DSz_S937.svg +1 -0
- package/public/docs/assets/dag-stages.dark.F72UzxH4.svg +1 -0
- package/public/docs/assets/driver-executor.D5pQ7YN1.svg +1 -0
- package/public/docs/assets/driver-executor.dark.BmX9cPvh.svg +1 -0
- package/public/docs/assets/duplicate-plan-subtree.B4cvN6fj.svg +1 -0
- package/public/docs/assets/duplicate-plan-subtree.dark.Dw8wS0Ag.svg +1 -0
- package/public/docs/assets/{index.md.CETnDZzR.js → index.md.CHJVslga.js} +1 -1
- package/public/docs/assets/{index.md.CETnDZzR.lean.js → index.md.CHJVslga.lean.js} +1 -1
- package/public/docs/assets/join-strategy.C_FvrCEo.svg +1 -0
- package/public/docs/assets/join-strategy.dark.ChMLnNII.svg +1 -0
- package/public/docs/assets/memory-borrowing.BqQRJg0u.svg +1 -0
- package/public/docs/assets/memory-borrowing.dark.Yhh20O9C.svg +1 -0
- package/public/docs/assets/memory-regions.XHvO7jHG.svg +1 -0
- package/public/docs/assets/memory-regions.dark.D4TP9_08.svg +1 -0
- package/public/docs/assets/repartition-vs-coalesce.BovLRrpj.svg +1 -0
- package/public/docs/assets/repartition-vs-coalesce.dark.BhAczKZQ.svg +1 -0
- package/public/docs/assets/retry-escalation-ladder.DyTKJJmZ.svg +1 -0
- package/public/docs/assets/retry-escalation-ladder.dark.BdsabtU3.svg +1 -0
- package/public/docs/assets/shuffle-map-reduce.KuOEZVmg.svg +1 -0
- package/public/docs/assets/shuffle-map-reduce.dark.BgQZnFSb.svg +1 -0
- package/public/docs/assets/spill-classification.BU2euYDO.svg +1 -0
- package/public/docs/assets/spill-classification.dark.D7i1M40d.svg +1 -0
- package/public/docs/assets/{style.D2mY0HUs.css → style.DSixAiZE.css} +1 -1
- package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.js +1 -0
- package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.lean.js +1 -0
- package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.js +1 -0
- package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.js +7 -0
- package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-failures.md.4z5BXGJ2.js +6 -0
- package/public/docs/assets/tuning-reference_bottleneck-failures.md.4z5BXGJ2.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-gc.md.DSxzZRK7.js +6 -0
- package/public/docs/assets/tuning-reference_bottleneck-gc.md.DSxzZRK7.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.js +8 -0
- package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.js +7 -0
- package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.CM-nTmIH.js +12 -0
- package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.CM-nTmIH.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-skew.md.BdUwiDhn.js +14 -0
- package/public/docs/assets/tuning-reference_bottleneck-skew.md.BdUwiDhn.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.BlIo6UDW.js +7 -0
- package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.BlIo6UDW.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-small-files.md.B8kloyx8.js +5 -0
- package/public/docs/assets/tuning-reference_bottleneck-small-files.md.B8kloyx8.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.js +6 -0
- package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DY36fHN5.js +7 -0
- package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DY36fHN5.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.QTV7O8kU.js +8 -0
- package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.QTV7O8kU.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DTiueZC3.js +5 -0
- package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DTiueZC3.lean.js +1 -0
- package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.js +1 -0
- package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.lean.js +1 -0
- package/public/docs/assets/tuning-reference_cluster-config.md.ZVmDGsQ3.js +1 -0
- package/public/docs/assets/tuning-reference_cluster-config.md.ZVmDGsQ3.lean.js +1 -0
- package/public/docs/assets/tuning-reference_config.md.UvveiWG3.js +1 -0
- package/public/docs/assets/tuning-reference_config.md.UvveiWG3.lean.js +1 -0
- package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.js +1 -0
- package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.lean.js +1 -0
- package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.js +1 -0
- package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.lean.js +1 -0
- package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.js +1 -0
- package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.lean.js +1 -0
- package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.js +1 -0
- package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.lean.js +1 -0
- package/public/docs/assets/tuning-reference_memory-model.md.DhT-n4y3.js +1 -0
- package/public/docs/assets/tuning-reference_memory-model.md.DhT-n4y3.lean.js +1 -0
- package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.js +1 -0
- package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.lean.js +1 -0
- package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.js +1 -0
- package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.lean.js +1 -0
- package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.js +6 -0
- package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.lean.js +1 -0
- package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.js +1 -0
- package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.lean.js +1 -0
- package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.js +1 -0
- package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.lean.js +1 -0
- package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.js +1 -0
- package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.lean.js +1 -0
- package/public/docs/assets/udf-execution-models.BUFDICuG.svg +1 -0
- package/public/docs/assets/udf-execution-models.dark.YTNS6GDq.svg +1 -0
- package/public/docs/assets/user-guide_alternative-log-retrieval.md.B4tPGIal.js +1 -0
- package/public/docs/assets/user-guide_alternative-log-retrieval.md.B4tPGIal.lean.js +1 -0
- package/public/docs/assets/user-guide_getting-started.md.BJvwLEIM.js +3 -0
- package/public/docs/assets/user-guide_getting-started.md.BJvwLEIM.lean.js +1 -0
- package/public/docs/assets/{user-guide_mcp-tools.md.DwYI1d6C.js → user-guide_mcp-tools.md.Vi3RoflJ.js} +35 -5
- package/public/docs/assets/{user-guide_mcp-tools.md.DwYI1d6C.lean.js → user-guide_mcp-tools.md.Vi3RoflJ.lean.js} +1 -1
- package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.js +1 -0
- package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.lean.js +1 -0
- package/public/docs/assets/user-guide_understanding-findings.md.DL1UDhvR.js +1 -0
- package/public/docs/assets/user-guide_understanding-findings.md.DL1UDhvR.lean.js +1 -0
- package/public/docs/contributor-guide/architecture/board-widgets.html +7 -7
- package/public/docs/contributor-guide/architecture/detector-contract.html +7 -7
- package/public/docs/contributor-guide/architecture/drill-down.html +7 -7
- package/public/docs/contributor-guide/architecture/impact-estimation.html +7 -7
- package/public/docs/contributor-guide/architecture/index.html +7 -7
- package/public/docs/contributor-guide/architecture/overview.html +7 -7
- package/public/docs/contributor-guide/architecture/state-and-history.html +7 -7
- package/public/docs/contributor-guide/architecture/widget-rendering.html +7 -7
- package/public/docs/contributor-guide/architecture/worker-protocol.html +8 -8
- package/public/docs/contributor-guide/contributing.html +7 -7
- package/public/docs/contributor-guide/development-setup.html +7 -7
- package/public/docs/contributor-guide/testing.html +7 -7
- package/public/docs/hashmap.json +1 -1
- package/public/docs/index.html +7 -7
- package/public/docs/tuning-reference/anti-patterns.html +29 -0
- package/public/docs/tuning-reference/aqe.html +29 -0
- package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +29 -0
- package/public/docs/tuning-reference/bottleneck-cold-start.html +35 -0
- package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +30 -0
- package/public/docs/tuning-reference/bottleneck-failures.html +35 -0
- package/public/docs/tuning-reference/bottleneck-gc.html +34 -0
- package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +37 -0
- package/public/docs/tuning-reference/bottleneck-memory-utilization.html +35 -0
- package/public/docs/tuning-reference/bottleneck-retry-waste.html +30 -0
- package/public/docs/tuning-reference/bottleneck-shuffle.html +40 -0
- package/public/docs/tuning-reference/bottleneck-skew.html +42 -0
- package/public/docs/tuning-reference/bottleneck-slow-host.html +35 -0
- package/public/docs/tuning-reference/bottleneck-small-files.html +33 -0
- package/public/docs/tuning-reference/bottleneck-spill.html +34 -0
- package/public/docs/tuning-reference/bottleneck-straggler.html +35 -0
- package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +36 -0
- package/public/docs/tuning-reference/bottleneck-utilization.html +34 -0
- package/public/docs/tuning-reference/caching.html +29 -0
- package/public/docs/tuning-reference/cluster-config.html +29 -0
- package/public/docs/tuning-reference/config.html +29 -0
- package/public/docs/tuning-reference/data-formats.html +29 -0
- package/public/docs/tuning-reference/index.html +29 -0
- package/public/docs/tuning-reference/intro.html +29 -0
- package/public/docs/tuning-reference/joins.html +29 -0
- package/public/docs/tuning-reference/memory-model.html +29 -0
- package/public/docs/tuning-reference/metrics.html +29 -0
- package/public/docs/tuning-reference/partitioning.html +29 -0
- package/public/docs/tuning-reference/pyspark.html +34 -0
- package/public/docs/tuning-reference/shuffle.html +29 -0
- package/public/docs/tuning-reference/spark-architecture.html +29 -0
- package/public/docs/tuning-reference/table-formats.html +29 -0
- package/public/docs/user-guide/alternative-log-retrieval.html +29 -0
- package/public/docs/user-guide/getting-started.html +8 -8
- package/public/docs/user-guide/mcp-tools.html +41 -11
- package/public/docs/user-guide/run-comparison.html +7 -7
- package/public/docs/user-guide/understanding-findings.html +7 -7
- package/public/index.html +8 -7
- package/public/sample-runs/sample-run.ndjson.gz +0 -0
- package/vendor-core/analyzer.js +74 -74
- package/vendor-core/cli/budgets.js +13 -27
- package/vendor-core/cli/collect-run.js +43 -19
- package/vendor-core/core-count.js +25 -27
- package/vendor-core/core-locality-ratio.js +4 -11
- package/vendor-core/core-time-series.js +6 -12
- package/vendor-core/core-usage-locality.js +3 -4
- package/vendor-core/detectors.js +395 -389
- package/vendor-core/docs-config.js +69 -21
- package/vendor-core/docs-content/chapters/01-intro.md +32 -0
- package/vendor-core/docs-content/chapters/02-spark-architecture.md +76 -0
- package/vendor-core/docs-content/chapters/03-memory-model.md +73 -0
- package/vendor-core/docs-content/chapters/04-partitioning.md +65 -0
- package/vendor-core/docs-content/chapters/05-joins.md +62 -0
- package/vendor-core/docs-content/chapters/06-shuffle.md +59 -0
- package/vendor-core/docs-content/chapters/07-data-formats.md +81 -0
- package/vendor-core/docs-content/chapters/07b-table-formats.md +56 -0
- package/vendor-core/docs-content/chapters/08-caching.md +58 -0
- package/vendor-core/docs-content/chapters/09-pyspark.md +78 -0
- package/vendor-core/docs-content/chapters/10-aqe.md +167 -0
- package/vendor-core/docs-content/chapters/11-cluster-config.md +170 -0
- package/vendor-core/docs-content/chapters/12-anti-patterns.md +171 -0
- package/vendor-core/docs-content/chapters/14-metrics.md +87 -0
- package/vendor-core/docs-content/chapters/15-config.md +93 -0
- package/vendor-core/docs-content/chapters/nav-index.json +370 -0
- package/vendor-core/docs-content/detection/cache.md +7 -0
- package/vendor-core/docs-content/detection/cfg.md +15 -0
- package/vendor-core/docs-content/detection/chrn.md +9 -0
- package/vendor-core/docs-content/detection/cold.md +4 -0
- package/vendor-core/docs-content/detection/cstor.md +4 -0
- package/vendor-core/docs-content/detection/fail.md +5 -0
- package/vendor-core/docs-content/detection/gc.md +4 -0
- package/vendor-core/docs-content/detection/host.md +5 -0
- package/vendor-core/docs-content/detection/incmp.md +6 -0
- package/vendor-core/docs-content/detection/jobs.md +4 -0
- package/vendor-core/docs-content/detection/local.md +6 -0
- package/vendor-core/docs-content/detection/mem.md +10 -0
- package/vendor-core/docs-content/detection/part.md +5 -0
- package/vendor-core/docs-content/detection/plan.md +14 -0
- package/vendor-core/docs-content/detection/retry.md +4 -0
- package/vendor-core/docs-content/detection/sfail.md +5 -0
- package/vendor-core/docs-content/detection/shape.md +5 -0
- package/vendor-core/docs-content/detection/shfl.md +4 -0
- package/vendor-core/docs-content/detection/skew.md +6 -0
- package/vendor-core/docs-content/detection/slow.md +6 -0
- package/vendor-core/docs-content/detection/spec.md +8 -0
- package/vendor-core/docs-content/detection/spill.md +7 -0
- package/vendor-core/docs-content/detection/strag.md +5 -0
- package/vendor-core/docs-content/detection/tiny.md +4 -0
- package/vendor-core/docs-content/detection/util.md +4 -0
- package/vendor-core/docs-content/diagrams/aqe-loop.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/aqe-loop.svg +1 -0
- package/vendor-core/docs-content/diagrams/broadcast-vs-shuffle.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/broadcast-vs-shuffle.svg +1 -0
- package/vendor-core/docs-content/diagrams/cache-lifecycle.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/cache-lifecycle.svg +1 -0
- package/vendor-core/docs-content/diagrams/cold-start-timeline.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/cold-start-timeline.svg +1 -0
- package/vendor-core/docs-content/diagrams/columnar-layout.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/columnar-layout.svg +1 -0
- package/vendor-core/docs-content/diagrams/container-memory.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/container-memory.svg +1 -0
- package/vendor-core/docs-content/diagrams/dag-stages.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/dag-stages.svg +1 -0
- package/vendor-core/docs-content/diagrams/driver-executor.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/driver-executor.svg +1 -0
- package/vendor-core/docs-content/diagrams/duplicate-plan-subtree.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/duplicate-plan-subtree.svg +1 -0
- package/vendor-core/docs-content/diagrams/join-strategy.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/join-strategy.svg +1 -0
- package/vendor-core/docs-content/diagrams/memory-borrowing.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/memory-borrowing.svg +1 -0
- package/vendor-core/docs-content/diagrams/memory-regions.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/memory-regions.svg +1 -0
- package/vendor-core/docs-content/diagrams/repartition-vs-coalesce.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/repartition-vs-coalesce.svg +1 -0
- package/vendor-core/docs-content/diagrams/retry-escalation-ladder.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/retry-escalation-ladder.svg +1 -0
- package/vendor-core/docs-content/diagrams/shuffle-map-reduce.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/shuffle-map-reduce.svg +1 -0
- package/vendor-core/docs-content/diagrams/spill-classification.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/spill-classification.svg +1 -0
- package/vendor-core/docs-content/diagrams/udf-execution-models.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/udf-execution-models.svg +1 -0
- package/vendor-core/docs-content/tuning/broadcast-sizing.md +78 -0
- package/vendor-core/docs-content/tuning/cold-start.md +81 -0
- package/vendor-core/docs-content/tuning/duplicate-plan-subtree.md +45 -0
- package/vendor-core/docs-content/tuning/failures.md +124 -0
- package/vendor-core/docs-content/tuning/gc.md +110 -0
- package/vendor-core/docs-content/tuning/job-failure-rate.md +101 -0
- package/vendor-core/docs-content/tuning/memory-utilization.md +58 -0
- package/vendor-core/docs-content/tuning/retry-waste.md +90 -0
- package/vendor-core/docs-content/tuning/shuffle.md +154 -0
- package/vendor-core/docs-content/tuning/skew.md +123 -0
- package/vendor-core/docs-content/tuning/slow-host.md +117 -0
- package/vendor-core/docs-content/tuning/small-files.md +99 -0
- package/vendor-core/docs-content/tuning/spill.md +114 -0
- package/vendor-core/docs-content/tuning/straggler.md +103 -0
- package/vendor-core/docs-content/tuning/tiny-tasks.md +94 -0
- package/vendor-core/docs-content/tuning/utilization.md +90 -0
- package/vendor-core/docs-site-config.js +10 -17
- package/vendor-core/efficiency-model.js +7 -13
- package/vendor-core/etl-phases.js +3 -5
- package/vendor-core/event-handlers.js +232 -134
- package/vendor-core/event-schemas.js +48 -114
- package/vendor-core/evidence-availability.js +5 -10
- package/vendor-core/evidence-report.js +73 -123
- package/vendor-core/export-data.js +48 -0
- package/vendor-core/finding-action-label.js +4 -10
- package/vendor-core/finding-filter-predicate.js +3 -7
- package/vendor-core/finding-generic-recommendation.js +112 -0
- package/vendor-core/finding-names.js +51 -0
- package/vendor-core/format-utils.js +112 -38
- package/vendor-core/impact-band.js +18 -24
- package/vendor-core/impact-estimator.js +38 -74
- package/vendor-core/ingest.js +7 -13
- package/vendor-core/job-groups.js +3 -6
- package/vendor-core/list-runs.js +278 -0
- package/vendor-core/load-vendored.js +6 -12
- package/vendor-core/log-header-peek.js +81 -0
- package/vendor-core/lz4-block.js +4 -6
- package/vendor-core/mcp-server-factory.js +38 -8
- package/vendor-core/mcp-tools.js +105 -76
- package/vendor-core/model-assembler.js +8 -16
- package/vendor-core/occupancy.js +5 -9
- package/vendor-core/parser-worker.js +20 -29
- package/vendor-core/plan-dot.js +2 -5
- package/vendor-core/plan-duration-attribution.js +78 -29
- package/vendor-core/plan-graph-model.js +126 -69
- package/vendor-core/plan-node-detail.js +31 -17
- package/vendor-core/plan-summary.js +19 -8
- package/vendor-core/recommendation-rollup.js +35 -39
- package/vendor-core/redact.js +72 -16
- package/vendor-core/rolling-log-reassembly.js +4 -6
- package/vendor-core/run-comparison.js +86 -72
- package/vendor-core/scaling-sim.js +5 -7
- package/vendor-core/session-snapshot.js +1 -1
- package/vendor-core/shs-fetch.js +4 -6
- package/vendor-core/shs-load.js +9 -13
- package/vendor-core/shs-request.js +1 -1
- package/vendor-core/stage-quantiles.js +14 -0
- package/vendor-core/types.js +78 -18
- package/vendor-core/wasted-core-hours.js +7 -12
- package/public/assets/AutoscalingChurn-CP5OjN6v.js +0 -1
- package/public/assets/CacheUtilization-BjyawXL6.js +0 -1
- package/public/assets/CachingOpportunity-DV2ABG2G.js +0 -1
- package/public/assets/ConfigAudit-DMiBhAoG.js +0 -1
- package/public/assets/CoreUsageArea-CGYIgPnt.js +0 -1
- package/public/assets/Dashboard-D1_IrWRs.js +0 -12
- package/public/assets/ExecutorTimeline-DkaAGqQT.js +0 -1
- package/public/assets/Failures-Crngoicu.js +0 -1
- package/public/assets/GcPressure-CFXm4BnA.js +0 -1
- package/public/assets/IncompleteRun-BWEJTb13.js +0 -1
- package/public/assets/JobFailures-BmjxCA-h.js +0 -1
- package/public/assets/MemoryUtilization-Bu2uQJbd.js +0 -1
- package/public/assets/PlanExplorer-DKUwF0uz.js +0 -1
- package/public/assets/PlanGraphRoute-BjPSugIG.js +0 -1
- package/public/assets/ShuffleIO--Rur3neu.js +0 -1
- package/public/assets/Spill-DIMpt8c2.js +0 -1
- package/public/assets/TaskSkew-BDr1DbeI.js +0 -1
- package/public/assets/charts-vendor-NMqKV0H4.js +0 -59
- package/public/assets/index-4id52G-A.js +0 -9
- package/public/assets/index-D9kwVYIO.css +0 -1
- package/public/assets/parser-worker-00O9WEQC.js +0 -65
- package/public/assets/plan-graph-vendor-BnuhLJ6X.css +0 -1
- package/public/assets/plan-graph-vendor-vZQHG2EJ.js +0 -7
- package/public/assets/react-vendor-u4pyvC5Y.js +0 -9
- package/public/assets/useRecentFiles-46iBU9zJ.js +0 -5
- package/public/docs/assets/chunks/@localSearchIndexroot.DclgKtlT.js +0 -1
- package/public/docs/assets/chunks/theme.CoT6y5bf.js +0 -2
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.BtjoE_1k.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.BtjoE_1k.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.DQyCHQNM.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.DQyCHQNM.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.BKfyDQck.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.BKfyDQck.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DaqttKgQ.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DaqttKgQ.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.Bk6Iyj9S.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.Bk6Iyj9S.lean.js +0 -1
- package/public/docs/assets/contributor-guide_contributing.md.C-lKs70I.js +0 -1
- package/public/docs/assets/contributor-guide_contributing.md.C-lKs70I.lean.js +0 -1
- package/public/docs/assets/user-guide_getting-started.md.BJdD7a7_.js +0 -3
- package/public/docs/assets/user-guide_getting-started.md.BJdD7a7_.lean.js +0 -1
- package/public/docs/assets/user-guide_run-comparison.md.5-oaOfTu.js +0 -1
- package/public/docs/assets/user-guide_run-comparison.md.5-oaOfTu.lean.js +0 -1
- package/public/docs/assets/user-guide_understanding-findings.md.CK2WZ0Tf.js +0 -1
- package/public/docs/assets/user-guide_understanding-findings.md.CK2WZ0Tf.lean.js +0 -1
- package/public/vendor/spark-doc/anchors.json +0 -205
- package/public/vendor/spark-doc/index.html +0 -4202
- package/public/vendor/spark-doc/landing.html +0 -418
- package/public/vendor/spark-doc/meta.html +0 -970
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{D as t,M as n,O as r,T as i,_ as a,a as o,d as s,f as c,i as l,l as u,n as d,o as f,s as p,u as m,v as h}from"./charts-vendor-0VMaLVLN.js";import{A as g,D as _,E as v,O as y,P as b,k as x}from"./react-vendor-D2TLlSzI.js";import{p as S}from"./plan-graph-vendor-B0sEms9Z.js";import{A as C,B as ee,C as te,E as w,F as ne,H as re,I as T,L as E,M as ie,N as ae,O as oe,P as se,R as ce,S as D,T as O,V as le,_ as ue,a as k,b as de,d as fe,f as A,g as pe,h as me,i as he,j as ge,k as _e,l as ve,m as ye,n as be,o as xe,p as Se,r as Ce,s as we,t as Te,u as Ee,v as De,w as j,x as Oe,y as ke,z as Ae}from"./useRecentFiles-D0OA_EOK.js";import{t as je}from"./inbox-_QCYkBsP.js";import{A as Me,D as M,Dt as Ne,E as Pe,Et as Fe,Ft as Ie,G as Le,I as Re,It as N,J as ze,Mt as Be,N as Ve,Nt as He,O as Ue,Ot as We,P as Ge,Pt as Ke,T as qe,_ as P,_t as Je,a as Ye,at as Xe,b as F,bt as Ze,c as Qe,h as $e,ht as et,i as I,j as tt,k as L,kt as nt,lt as R,m as rt,n as it,o as at,ot,p as st,pt as ct,s as z,st as lt,ut as B,v as ut,vt as dt,w as ft,y as pt,yt as mt}from"./index-3vlFVNCg.js";import{t as ht}from"./EmptyState-BCA3xioa.js";import{n as gt,t as _t}from"./toggle-group-CUd-KWkp.js";import{n as vt,t as yt}from"./DurationHistogram-ltF-7M0A.js";import{t as bt}from"./downsample-WmNM1qc9.js";import{t as V}from"./WidgetLeadSummary-BdUUi7L5.js";import{n as xt,t as St}from"./StagePill-BlMOW_pU.js";import{i as Ct,n as wt,r as Tt,t as Et}from"./ImpactEstimate-BGt-4WX5.js";import{t as Dt}from"./RowPagination-BLsm8I6i.js";var Ot={name:`copy`,size:24,node:[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]};Ot.node;var kt=nt(Ot),At={name:`list-filter`,size:24,node:[[`path`,{d:`M2 5h20`,key:`1fs1ex`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M9 19h6`,key:`456am0`}]]};At.node;var jt=nt(At),Mt={name:`search-x`,size:24,node:[[`path`,{d:`m13.5 8.5-5 5`,key:`1cs55j`}],[`path`,{d:`m8.5 8.5 5 5`,key:`a8mexj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`path`,{d:`m21 21-4.3-4.3`,key:`1qie3q`}]]};Mt.node;var Nt=nt(Mt),Pt={name:`target`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]};Pt.node;var Ft=nt(Pt),H=e(n(),1),It=[`critical`,`warning`,`info`];function Lt(){return{impactBands:new Set,types:new Set,stages:new Set}}function Rt(e){return e.impactBands.size===0&&e.types.size===0&&e.stages.size===0}function zt(e,t){return E(e,{impactBand:t.impactBands,type:t.types,stageId:t.stages})}function Bt(e,t){return e.filter(e=>zt(e,t))}function Vt(e,t){let n=new Set,r=new Set,i=new Set;for(let a of[...e,...t])n.add(a.impactBand),r.add(a.type),a.stageId!=null&&i.add(a.stageId);return{impactBands:It.filter(e=>n.has(e)),types:[...r].sort(),stages:[...i].sort((e,t)=>e-t)}}function Ht(e){return e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}function Ut(e,t){let n=new URLSearchParams(e),r=Lt();for(let e of Ht(n.get(`impact`)))It.includes(e)&&r.impactBands.add(e);let i=new Set(t.types);for(let e of Ht(n.get(`type`)))i.has(e)&&r.types.add(e);for(let e of Ht(n.get(`stage`))){let t=Number(e);Number.isInteger(t)&&r.stages.add(t)}return r}function Wt(e){let t=[];return e.impactBands.size&&t.push(`impact=${It.filter(t=>e.impactBands.has(t)).join(`,`)}`),e.types.size&&t.push(`type=${[...e.types].sort().join(`,`)}`),e.stages.size&&t.push(`stage=${[...e.stages].sort((e,t)=>e-t).join(`,`)}`),t.length?`?${t.join(`&`)}`:``}var U=S(),Gt=(0,H.createContext)(null);function Kt(e,t){let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n}function qt({options:e,fileId:t,children:n}){let[r,i]=(0,H.useState)(()=>Ut(typeof window>`u`?``:window.location.search,e));(0,H.useEffect)(()=>{if(typeof window>`u`)return;let e=Wt(r),t=`${window.location.pathname}${e}${window.location.hash}`;window.history.replaceState(window.history.state,``,t)},[r]);let a=(0,H.useRef)(t);(0,H.useEffect)(()=>{a.current!==t&&(a.current=t,i(Lt()))},[t]),(0,H.useEffect)(()=>()=>{if(typeof window>`u`)return;let e=`${window.location.pathname}${window.location.hash}`;window.history.replaceState(window.history.state,``,e)},[]),(0,H.useEffect)(()=>{if(typeof window>`u`)return;let t=()=>i(Ut(window.location.search,e));return window.addEventListener(`popstate`,t),()=>window.removeEventListener(`popstate`,t)},[e]);let o=(0,H.useCallback)(e=>i(t=>({...t,impactBands:Kt(t.impactBands,e)})),[]),s=(0,H.useCallback)(e=>i(t=>({...t,types:Kt(t.types,e)})),[]),c=(0,H.useCallback)(e=>i(t=>({...t,stages:Kt(t.stages,e)})),[]),l=(0,H.useCallback)(()=>i(Lt()),[]),u=(0,H.useMemo)(()=>({selection:r,toggleImpactBand:o,toggleType:s,toggleStage:c,clearAll:l}),[r,o,s,c,l]);return(0,U.jsx)(Gt.Provider,{value:u,children:n})}function Jt(){let e=(0,H.useContext)(Gt);if(!e)throw Error(`useFindingFilter outside FindingFilterProvider`);return e}function Yt(){let{clearAll:e}=Jt();return(0,U.jsx)(ht,{icon:Nt,title:`No findings match the active filters`,description:`Adjust or clear the filters to see findings.`,action:(0,U.jsx)(`button`,{type:`button`,onClick:e,className:`cursor-pointer text-sm underline`,children:`Clear all filters`})})}function Xt({className:e,orientation:t=`horizontal`,...n}){return(0,U.jsx)(b,{"data-slot":`separator`,orientation:t,className:N(`shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch`,e),...n})}var Zt={critical:`aria-pressed:bg-critical/10 aria-pressed:text-critical`,warning:`aria-pressed:bg-warning/10 aria-pressed:text-warning`,info:`aria-pressed:bg-info/10 aria-pressed:text-info`};function Qt(e,t,n){let r=new Set(e);for(let e of r)t.has(e)||n(e);for(let e of t)r.has(e)||n(e)}function $t({label:e,count:t,children:n}){return(0,U.jsxs)(_e,{children:[(0,U.jsxs)(ie,{className:N(Ge({variant:`outline`,size:`sm`}),`gap-1.5`),"aria-label":`Filter by ${e.toLowerCase()}`,children:[e,t>0&&(0,U.jsx)(`span`,{className:`rounded-full bg-primary px-1.5 text-xs font-medium text-primary-foreground`,children:t}),(0,U.jsx)(We,{"aria-hidden":`true`,className:`opacity-60`})]}),(0,U.jsx)(ge,{align:`start`,className:`max-h-72 w-56 overflow-y-auto`,children:n})]})}function en({options:e,resultCount:t}){let{selection:n,toggleImpactBand:r,toggleType:i,toggleStage:a,clearAll:o}=Jt(),[s,c]=(0,H.useState)(``),[l,u]=(0,H.useState)(``),d=(0,H.useMemo)(()=>{let t=s.trim();return t?e.stages.filter(e=>String(e).includes(t)):e.stages},[e.stages,s]),f=(0,H.useMemo)(()=>{let t=l.trim().toLowerCase();return t?e.types.filter(e=>e.toLowerCase().includes(t)||dt(e).toLowerCase().includes(t)):e.types},[e.types,l]);if(e.impactBands.length===0&&e.types.length===0&&e.stages.length===0)return null;let p=!Rt(n),m=[...[...n.impactBands].map(e=>({key:`impact-${e}`,label:`impact ${e}`,onRemove:()=>r(e)})),...[...n.types].map(e=>({key:`type-${e}`,label:`type ${e}`,onRemove:()=>i(e)})),...[...n.stages].map(e=>({key:`stage-${e}`,label:`stage ${e}`,onRemove:()=>a(e)}))];return(0,U.jsxs)(`section`,{"aria-label":`Filter findings`,className:`flex flex-wrap items-center gap-x-3 gap-y-2 rounded-xl border border-border/60 p-2`,children:[(0,U.jsxs)(`span`,{title:`Narrow the whole dashboard to findings matching the chosen impact bands, types, or stages`,className:`flex items-center gap-1.5 text-xs font-medium text-muted-foreground`,children:[(0,U.jsx)(jt,{"aria-hidden":`true`,className:`size-3.5`}),`Filter findings`]}),(0,U.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`text-xs text-muted-foreground`,children:p?`${t} finding${t===1?``:`s`} match${t===1?`es`:``} the active filters`:`Showing all ${t} finding${t===1?``:`s`}`}),(0,U.jsx)(Xt,{orientation:`vertical`,className:`h-6`}),e.impactBands.length>0&&(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,U.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:`Impact`}),(0,U.jsx)(_t,{multiple:!0,"aria-label":`Filter by impact`,value:[...n.impactBands],onValueChange:e=>Qt(e,n.impactBands,r),children:e.impactBands.map(e=>(0,U.jsxs)(gt,{value:e,variant:`outline`,size:`sm`,"aria-label":`Filter by impact: ${e}`,className:N(`tap-target-comfortable gap-1.5`,Zt[e]),children:[(0,U.jsx)(M,{impactBand:e}),e]},e))})]}),e.types.length>0&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Xt,{orientation:`vertical`,className:`h-6`}),(0,U.jsxs)($t,{label:`Type`,count:n.types.size,children:[(0,U.jsx)(`div`,{className:`p-1`,children:(0,U.jsx)(oe,{type:`text`,value:l,onChange:e=>u(e.target.value),onKeyDown:e=>e.stopPropagation(),placeholder:`Search type…`,"aria-label":`Search types`,autoComplete:`off`,className:`h-8`})}),f.map(e=>(0,U.jsxs)(C,{checked:n.types.has(e),onCheckedChange:()=>i(e),"aria-label":`Filter by type: ${e}`,children:[(0,U.jsx)(`span`,{className:`rounded bg-muted px-1 text-xs font-medium text-foreground!`,children:dt(e)}),` `,e]},e)),f.length===0&&(0,U.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`No matching type`})]})]}),e.stages.length>0&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Xt,{orientation:`vertical`,className:`h-6`}),(0,U.jsxs)($t,{label:`Stage`,count:n.stages.size,children:[(0,U.jsx)(`div`,{className:`p-1`,children:(0,U.jsx)(oe,{type:`text`,value:s,onChange:e=>c(e.target.value),onKeyDown:e=>e.stopPropagation(),placeholder:`Search stage id…`,"aria-label":`Search stages`,autoComplete:`off`,className:`h-8`})}),d.map(e=>(0,U.jsxs)(C,{checked:n.stages.has(e),onCheckedChange:()=>a(e),"aria-label":`Filter by stage: ${e}`,children:[`Stage `,e]},e)),d.length===0&&(0,U.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`No matching stage`})]})]}),p&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Xt,{orientation:`vertical`,className:`h-6`}),(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[m.map(e=>(0,U.jsxs)(`button`,{type:`button`,onClick:e.onRemove,"aria-label":`Remove filter: ${e.label}`,className:`tap-target-comfortable inline-flex cursor-pointer items-center gap-1 rounded-full border border-border bg-muted px-2 py-0.5 text-xs hover:bg-muted/70`,children:[e.label,` `,(0,U.jsx)(Ze,{"aria-hidden":`true`,className:`size-3`})]},e.key)),(0,U.jsx)(`button`,{type:`button`,onClick:o,className:`tap-target-comfortable cursor-pointer text-xs underline`,children:`Clear all filters`})]})]})]})}function tn(e,t){let n=[];for(let{launch:t,finish:r}of e)r>t&&(n.push({t,delta:1}),n.push({t:r,delta:-1}));n.sort((e,t)=>e.t-t.t||e.delta-t.delta);let r=[],i=0;for(let e=0;e<n.length;e++){let a=n[e];i+=a.delta;let o=n[e+1];if(!o||o.t===a.t)continue;let s=t==null?i:Math.min(i,t);r.push({tStart:a.t,tEnd:o.t,busy:s})}return r}function nn(e,{bucketBy:t=`time`,bucketWidthMs:n=1e3,hypotheticalCores:r=null}={}){let i=tn(e,r);if(t===`coreCount`){let e=[];for(let t of i)e[t.busy]=(e[t.busy]??0)+(t.tEnd-t.tStart);for(let t=0;t<e.length;t++)e[t]===void 0&&(e[t]=0);return{mode:`coreCount`,histogram:e}}if(i.length===0)return{mode:`time`,bucketWidthMs:n,startTime:null,endTime:null,buckets:[]};let a=i[0].tStart,o=i[i.length-1].tEnd,s=[];for(let e=a;e<o;e+=n){let t=e+n,r=0;for(let n of i){let i=Math.max(n.tStart,e),a=Math.min(n.tEnd,t);a>i&&(r+=n.busy*(a-i))}s.push({tStart:e,tEnd:t,busyCoreMs:r,avgBusyCores:r/n})}return{mode:`time`,bucketWidthMs:n,startTime:a,endTime:o,buckets:s}}var rn=220;async function an(e,t){let n=[...e.stages.keys()],r=await Promise.all(n.map(e=>t(e).catch(()=>null))),i=[],a=!1;for(let e of r){if(!e){a=!0;continue}let{metrics:t,fieldNames:n}=e,r=n.length,o=n.indexOf(`launchTime`),s=n.indexOf(`finishTime`);if(o!==-1&&s!==-1)for(let e=0;e<t.length;e+=r)i.push({launch:t[e+o],finish:t[e+s]})}return{intervals:i,incomplete:a}}function on({appModel:e,getTaskData:t}){let{exportMode:n,getTaskData:r}=vt(t),[i,a]=(0,H.useState)(null),[o,s]=(0,H.useState)(!1),[d,m]=(0,H.useState)(!1),h=e.stages.size>0;if((0,H.useEffect)(()=>{if(!h||!d||i!==null||!r)return;let t=!1;return an(e,r).then(({intervals:e,incomplete:n})=>{if(t)return;let{histogram:r}=nn(e,{bucketBy:`coreCount`});a(r??[]),s(n)}),()=>{t=!0}},[e,r,h,d,i]),!h)return null;let g=(i??[]).map((e,t)=>({cores:String(t),coreCount:t,ms:e})),_=bt(g),v=g.reduce((e,t)=>t.ms>e.ms?t:e,g[0]);return(0,U.jsx)(I,{title:`Core-Usage Distribution`,id:`core-usage-histogram`,open:d,onOpenChange:m,summary:i!==null&&v?(0,U.jsx)(V,{value:B(v.ms),context:`at ${v.coreCount} concurrent core${v.coreCount===1?``:`s`}`}):void 0,children:i===null?n?(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Core-usage detail isn’t included in exported reports.`}):(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Loading core usage…`}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(O,{ariaLabel:`Wall-clock time spent at each concurrent-core count across the run. See the table below for exact values.`,height:rn,table:{caption:`Wall-clock time by concurrent-core count`,columns:[`Concurrent cores`,`Time`],rows:i.map((e,t)=>[t,B(e)]),align:[`right`,`right`]},children:(0,U.jsxs)(l,{data:_,children:[(0,U.jsx)(c,{vertical:!1,stroke:j.muted,strokeOpacity:.2}),(0,U.jsx)(p,{dataKey:`cores`,tick:{fontSize:10},label:{value:`Concurrent busy cores`,position:`insideBottom`,offset:-5,fontSize:10}}),(0,U.jsx)(f,{tick:{fontSize:10},width:48,tickFormatter:e=>B(e)}),(0,U.jsx)(u,{dataKey:`ms`,name:`Time`,fill:j.accent})]})}),o?(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Reopen this file to compute full core usage because some task data was released.`}):null,(0,U.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`See `,(0,U.jsx)(Me,{anchor:`#bottleneck-utilization`,children:`how to read concurrent-core utilization`}),`.`]})]})})}function sn({app:e,stages:t,executorsAdded:n,runAggregates:r}){let i=ze(e??{},n),a=(e?.endTime??0)-(e?.startTime??0),o=Le(e,t),s=a/36e5*i,c=i*((o.startup+o.gaps+o.idle)/36e5),l=i*o.stagesActive,u=r?.busyCoreMs??0,d=Math.max(0,l-u)/36e5,f=c+d,p=s>0?Math.round(f/s*100):null,m=0,h=r?.perStage??{};for(let e of Object.keys(h))m+=h[e].totalTaskDurationSum;let g=i>0?m/i:0,_=null;return(c>0||d>0)&&(_=c>=d?`driver`:`executor`),{availableComputeHours:s,driverWasteHours:c,executorWasteHours:d,wastagePct:p,floorZeroSkewMs:g,dominantWaste:_}}function cn(e){let t=e?[...e.values()]:[],n=new Map,r=0;for(let e of t){if(e.submissionTime==null||e.completionTime==null)continue;let t=e.sqlExecutionId==null?`job:${e.id??r++}`:`sql:${e.sqlExecutionId}`,i=n.get(t);i?(i.start=Math.min(i.start,e.submissionTime),i.end=Math.max(i.end,e.completionTime)):n.set(t,{start:e.submissionTime,end:e.completionTime})}let i=[...n.entries()].sort((e,t)=>e[1].start-t[1].start),a=[];for(let e=1;e<i.length;e++)for(let t=0;t<e;t++){let[n,r]=i[t],[o,s]=i[e];s.start<r.end&&r.start<s.end&&a.push([n,o])}return{wallClockReliable:a.length===0,overlappingGroupIds:a}}var ln=`This estimate is derived from a simplified compute model; compare it against wall-clock data before acting on it.`,W=e=>`${Math.round(e*100)/100} core-h`;function un(){return(0,U.jsx)(L,{children:(0,U.jsx)(D,{confidence:`low`,validationRequired:ln})})}function dn({appModel:e}){if(!e.runAggregates)return null;let t=sn({app:e.app,stages:e.stages,executorsAdded:e.executors.added,runAggregates:e.runAggregates});if(t.availableComputeHours<=0)return null;let n=cn(e.jobs),r=null;return t.dominantWaste===`driver`?r=(0,U.jsxs)(`p`,{children:[(0,U.jsx)(`strong`,{children:`Driver-bound waste dominates.`}),` Review driver sizing (spark.driver.memory / spark.driver.cores) before scaling executors.`]}):t.dominantWaste===`executor`&&(r=(0,U.jsxs)(`p`,{children:[(0,U.jsx)(`strong`,{children:`Executor-bound waste dominates.`}),` Review executor count / cores by reducing cluster size or enabling dynamic allocation.`]})),(0,U.jsx)(I,{title:`Compute Efficiency`,statusBadge:(0,U.jsx)(un,{}),defaultCollapsed:!0,summary:(0,U.jsx)(V,{value:t.wastagePct==null?W(t.availableComputeHours):`${t.wastagePct}% wasted`,context:`of ${W(t.availableComputeHours)} available`}),children:(0,U.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[!n.wallClockReliable&&(0,U.jsx)(L,{children:(0,U.jsx)(`p`,{className:`text-muted-foreground`,children:`This run used concurrent job groups: the driver/executor split below is approximate, not precise.`})}),(0,U.jsxs)(`p`,{children:[`Available: `,(0,U.jsx)(`strong`,{children:W(t.availableComputeHours)}),t.wastagePct!=null&&(0,U.jsxs)(U.Fragment,{children:[` `,`· wasted `,(0,U.jsxs)(`strong`,{children:[t.wastagePct,`%`]})]})]}),(0,U.jsxs)(`p`,{children:[(0,U.jsx)(M,{impactBand:`info`}),` Driver-bound waste: `,(0,U.jsx)(`strong`,{children:W(t.driverWasteHours)})]}),(0,U.jsxs)(`p`,{children:[(0,U.jsx)(M,{impactBand:`info`}),` Executor-bound waste: `,(0,U.jsx)(`strong`,{children:W(t.executorWasteHours)})]}),(0,U.jsxs)(`p`,{className:`text-muted-foreground`,children:[`Floor (same executors, zero skew): `,B(t.floorZeroSkewMs)]}),r]})})}function fn(e){let t={extract:0,transform:0,load:0};for(let n of e.values()){let e=Math.max(0,(n.completedAt??0)-(n.submittedAt??0));if(e===0)continue;let r=(n.shuffleReadBytes??0)>0||(n.shuffleWriteBytes??0)>0;(n.inputBytes??0)>0&&(n.shuffleReadBytes??0)===0&&(t.extract+=e),r&&(t.transform+=e),(n.outputBytes??0)>0&&(t.load+=e)}return t}var pn=[{label:`Extract`,key:`extract`},{label:`Transform`,key:`transform`},{label:`Load`,key:`load`}];function mn({appModel:e}){let t=fn(e.stages);if(t.extract+t.transform+t.load===0)return null;let n=pn.reduce((e,n)=>t[n.key]>t[e.key]?n:e);return(0,U.jsx)(I,{title:`ETL Phase Attribution`,defaultCollapsed:!0,summary:(0,U.jsx)(V,{value:`${n.label} ${B(t[n.key])}`,context:`dominant phase`}),children:(0,U.jsxs)(`div`,{className:`space-y-1`,children:[pn.map(({label:e,key:n})=>(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`strong`,{children:e}),`: `,B(t[n])]},n)),(0,U.jsx)(L,{children:(0,U.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Heuristic: a stage that both shuffles and writes counts in Transform and Load, so phases can overlap and need not sum to wall-clock.`})})]})})}var hn=220;function gn(e){let t=e.app,n=e.executors.added,r=e.executors.removed;if(t?.startTime==null||t?.endTime==null)return{times:[],counts:[]};let i=t.endTime-t.startTime,a=Math.max(5e3,Math.floor(i/100)),o=[],s=[],c=new Map(r.map(e=>[e.executorId,e.timestamp]));for(let e=t.startTime;e<=t.endTime;e+=a){let r=n.filter(t=>{let n=c.get(t.executorId)??1/0;return t.timestamp<=e&&e<n}).length;o.push(((e-t.startTime)/1e3).toFixed(0)+`s`),s.push(r)}return{times:o,counts:s}}var _n=(0,H.memo)(function({appModel:e,activeFileId:t}){let{chartData:n,sampled:r,hasSeries:i,peak:a}=(0,H.useMemo)(()=>{let{times:t,counts:n}=gn(e),r=t.map((e,t)=>({label:e,count:n[t]})),i=bt(r),a=n.length>0;return{chartData:r,sampled:i,hasSeries:a,peak:a?Math.max(...n):0}},[e,t]);return i?(0,U.jsx)(I,{title:`Executor Count Over Time`,summary:(0,U.jsx)(V,{value:`${a} peak`,context:`concurrent executors`}),children:(0,U.jsx)(O,{ariaLabel:`Executor count over time. See the table below for exact values.`,height:hn,table:{caption:`Executor timeline: active executor count over time`,columns:[`Time`,`Active executors`],rows:n.map(e=>[e.label,e.count]),align:[`left`,`right`]},children:(0,U.jsxs)(d,{data:r,children:[(0,U.jsx)(c,{vertical:!1,stroke:j.muted,strokeOpacity:.2}),(0,U.jsx)(p,{dataKey:`label`,tick:{fontSize:10},minTickGap:24}),(0,U.jsx)(f,{allowDecimals:!1,tick:{fontSize:10},width:32}),(0,U.jsx)(h,{formatter:e=>[`${e} executor${e===1?``:`s`} active`,``],labelFormatter:()=>``}),(0,U.jsx)(m,{type:`monotone`,dataKey:`count`,name:`Active executors`,stroke:j.clean,fill:j.clean,fillOpacity:.15})]})})}):(0,U.jsx)(I,{title:`Executor Count Over Time`,summary:(0,U.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:`Timeline unavailable: no end time recorded.`}),children:(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`This run has no ApplicationEnd event, so the executor timeline can't be plotted without fabricating an end time. See the Incomplete Run finding for what's still reliable.`})})}),vn=[10,20,50,80,100,110,120,150,200,300,400,500];function yn(e,t,n){return t<=0||n<=0?0:e/Math.min(n,t)}function bn(e,t){let n=0;for(let r of Object.keys(e)){let{totalTaskDurationSum:i,taskCount:a}=e[r];n+=yn(i,a,t)}return n}function xn({app:e,stages:t,runAggregates:n,executorsAdded:r}){let i=n?.perStage??{},a=ze(e??{},r),o=Le(e,t).stagesActive,s=a>0?bn(i,a):0,c=o>0?Math.round(Math.abs(s-o)/o*100):null,l=s>0?o/s:1;return{baselineCores:a,testPercentages:vn,predictions:vn.map(e=>{let t=Math.max(1,Math.round(a*e/100));return{pct:e,cores:t,estMakespanMs:Math.round(bn(i,t)*l)}}),modelErrorPct:c}}var Sn=`What-If Executor Scaling`,Cn=220,wn=20;function Tn([e,t]){let n=(t-e)*.1;return[Math.max(0,e-n),t+n]}function En(e){return[...e.stages.values()].some(e=>{let t=e.submittedAt,n=e.completedAt;return typeof t==`number`&&Number.isFinite(t)&&typeof n==`number`&&Number.isFinite(n)&&n>t})}function Dn(e){return e.evidenceAvailability?.entries.find(e=>e.key===`taskCoreTime`)}function On({reason:e,evidence:t}){return(0,U.jsx)(I,{title:Sn,summary:(0,U.jsxs)(`span`,{className:`text-muted-foreground text-xs`,children:[`Not available: `,e]}),children:(0,U.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Not available: `,e,` `,(0,U.jsx)(D,{evidenceKey:t})]})})}function kn({appModel:e}){let t=Dn(e);if(!Ie(e.runAggregates)||t!=null&&t.state!==`present`)return(0,U.jsx)(On,{reason:t?.summary??`No usable task and core-time evidence in this log.`,evidence:`taskCoreTime`});let n=xn({app:e.app,stages:e.stages,runAggregates:e.runAggregates,executorsAdded:e.executors.added});if(n.baselineCores<=0)return(0,U.jsx)(On,{reason:`Baseline executor/core capacity is unavailable in this log.`});if(!En(e))return(0,U.jsx)(On,{reason:`Usable stage timing is unavailable in this log.`});let r=cn(e.jobs),i=n.modelErrorPct!=null&&n.modelErrorPct>=wn,a=bt(n.predictions),l=n.predictions.reduce((e,t)=>t.estMakespanMs<e.estMakespanMs?t:e);return(0,U.jsx)(I,{title:Sn,defaultCollapsed:!0,summary:(0,U.jsx)(V,{value:B(l.estMakespanMs),context:`best case at ${l.pct}% executors`}),children:(0,U.jsxs)(`div`,{className:`space-y-3`,children:[(0,U.jsx)(L,{children:(0,U.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Model Error:`,` `,(0,U.jsx)(`strong`,{className:i?`text-warning`:void 0,children:n.modelErrorPct==null?`—`:`${n.modelErrorPct}%`}),` `,`(idealized makespan vs. observed); higher means all estimates below carry more error, since a single log only observes one scale.`]})}),(0,U.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Move along this curve by changing `,(0,U.jsx)(`code`,{children:`spark.dynamicAllocation`}),`’s executor bounds, see the `,(0,U.jsx)(Me,{anchor:`#config-autoscale-bounds`,children:`autoscaling config guide`}),`.`]}),r.wallClockReliable?null:(0,U.jsx)(L,{children:(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`This run used concurrent job groups, so the wall-clock-based estimates below may be unreliable.`})}),(0,U.jsx)(L,{children:(0,U.jsx)(`p`,{className:`text-xs`,children:(0,U.jsx)(D,{evidenceKey:`taskCoreTime`})})}),(0,U.jsx)(O,{ariaLabel:`Estimated makespan by executor percentage: diminishing-returns curve.`,height:Cn,table:{caption:`Estimated makespan by executor percentage`,columns:[`% Executors`,`Cores`,`Est. makespan`],rows:n.predictions.map(e=>[`${e.pct}%`,e.cores,B(e.estMakespanMs)]),align:[`right`,`right`,`right`]},children:(0,U.jsxs)(o,{data:a,children:[(0,U.jsx)(c,{stroke:j.muted,strokeOpacity:.2}),(0,U.jsx)(p,{dataKey:`pct`,tickFormatter:e=>`${e}%`,tick:{fontSize:10}}),(0,U.jsx)(f,{domain:Tn,tickFormatter:e=>B(e),tick:{fontSize:10},width:56}),(0,U.jsx)(h,{formatter:e=>[B(Number(e)),`Est. makespan`],labelFormatter:e=>`${e}% executors`}),(0,U.jsx)(s,{type:`monotone`,dataKey:`estMakespanMs`,name:`Est. makespan`,stroke:j.accent,dot:{r:3}})]})})]})})}function An(e){return typeof e?.startTime==`number`&&Number.isFinite(e.startTime)&&typeof e?.endTime==`number`&&Number.isFinite(e.endTime)&&e.endTime>e.startTime}function jn(e){if(!An(e.app))return{efficiency:{value:null,unavailableReason:`application-timing`},wastage:{value:null,unavailableReason:`application-timing`}};let t=Le(e.app,e.stages),n=Math.min(100,Math.round(t.stagesActive/t.total*100));if(!e.runAggregates)return{efficiency:{value:n,unavailableReason:null},wastage:{value:null,unavailableReason:`core-usage-summary`}};let r=sn({app:e.app,stages:e.stages,executorsAdded:e.executors.added,runAggregates:e.runAggregates});return!Number.isFinite(r.availableComputeHours)||r.availableComputeHours<=0?{efficiency:{value:n,unavailableReason:null},wastage:{value:null,unavailableReason:`executor-capacity`}}:{efficiency:{value:n,unavailableReason:null},wastage:{value:r.wastagePct,unavailableReason:null}}}var Mn={critical:`inset 4px 0 0 var(--color-critical)`,warning:`inset 4px 0 0 var(--color-warning)`};function Nn({eyebrow:e,value:t,meta:n,flag:r=null,bar:i,dataTestid:a}){return(0,U.jsxs)(`div`,{"data-testid":a,className:`flex flex-col gap-1 p-3`,style:r?{boxShadow:Mn[r]}:void 0,children:[(0,U.jsxs)(`span`,{className:N(`flex items-center gap-1.5 text-xs font-medium text-muted-foreground`,r&&Pe[r]),children:[r&&(0,U.jsx)(M,{impactBand:r}),e]}),(0,U.jsx)(`div`,{className:N(`font-heading text-2xl font-semibold`,r&&Pe[r]),children:t}),(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n}),i]})}function Pn({pct:e,flag:t,label:n}){let r=Math.max(0,Math.min(100,e));return(0,U.jsx)(`div`,{role:`img`,"aria-label":n,className:`mt-0.5 h-1.5 w-full overflow-hidden rounded-full bg-muted`,children:(0,U.jsx)(`div`,{className:N(`h-full rounded-full`,t?qe[t]:`bg-clean`),style:{width:`${r}%`}})})}function Fn({active:e,total:t}){let n=t>0?Math.max(0,Math.min(100,e/t*100)):0;return(0,U.jsxs)(`div`,{role:`img`,"aria-label":`Active ${B(e)} of ${B(t)} total`,className:`mt-0.5 flex h-1.5 w-full overflow-hidden rounded-full bg-muted`,children:[(0,U.jsx)(`div`,{className:`h-full bg-clean`,style:{width:`${n}%`}}),(0,U.jsx)(`div`,{className:`h-full flex-1 bg-muted-foreground/60`})]})}function In(e){return e>0?`Ran ${B(e)}`:`No stage activity recorded`}function Ln(){return(0,U.jsxs)(`div`,{className:`flex items-start gap-2 rounded-xl border border-warning/40 bg-warning/10 p-4`,children:[(0,U.jsx)(M,{impactBand:`warning`,className:`mt-1.5`}),(0,U.jsxs)(`p`,{className:`text-sm text-warning`,children:[(0,U.jsx)(`span`,{className:`font-semibold tracking-wide uppercase`,children:`Timing unavailable`}),`. This run has no complete application timing interval, so wall-clock, efficiency, and wastage can’t be measured.`]})]})}function Rn({appModel:e,catalog:t}){let n=Ke(),{app:r,stages:i}=e;if(!An(r))return(0,U.jsx)(Ln,{});let a=Le(r,i),o=jn(e),s=a.total,c=o.efficiency.value,l=c==null?null:c<75?`critical`:c<90?`warning`:null,u=t.find(e=>e.type===`coldStart`),d=o.wastage.value,f=d==null?null:d>=70?`critical`:d>=40?`warning`:null;return(0,U.jsx)(st,{className:`overflow-hidden py-0`,children:(0,U.jsxs)(`div`,{className:`grid grid-cols-1 divide-y divide-border sm:grid-cols-3 sm:divide-x sm:divide-y-0`,children:[(0,U.jsx)(Nn,{eyebrow:`Wall-clock`,dataTestid:`kpi-wall-clock`,value:s>0?B(s):`—`,meta:(0,U.jsxs)(U.Fragment,{children:[In(a.stagesActive),u?` · ${u.value}s cold start`:``]}),bar:(0,U.jsx)(Fn,{active:a.stagesActive,total:s})}),(0,U.jsx)(Nn,{eyebrow:`Efficiency`,dataTestid:`kpi-efficiency`,value:c==null?`Unavailable`:(0,U.jsxs)(U.Fragment,{children:[c,(0,U.jsx)(`small`,{children:`%`})]}),flag:l,meta:c==null?`This run has no complete application timing interval.`:s>a.stagesActive?`${In(a.stagesActive)} · ${B(s-a.stagesActive)} idle/gap time`:`executors active the whole run`,bar:c==null?void 0:(0,U.jsx)(Pn,{pct:c,flag:l,label:`Efficiency ${c}%`})}),(0,U.jsx)(Nn,{eyebrow:`Wastage`,dataTestid:`kpi-wastage`,value:d==null?`Unavailable`:(0,U.jsxs)(U.Fragment,{children:[d,(0,U.jsx)(`small`,{children:`%`})]}),flag:f,meta:o.wastage.unavailableReason===`application-timing`?`Wastage needs complete application timing.`:o.wastage.unavailableReason===`core-usage-summary`?`Wastage needs the core-usage summary.`:o.wastage.unavailableReason===`executor-capacity`?`Wastage needs usable executor-capacity data.`:n===`advanced`?`Driver-idle + executor-slack core-hours as a share of available capacity. Directional, not a cost figure.`:`Executor capacity that sat idle. Not a cost figure.`,bar:d==null?void 0:(0,U.jsx)(Pn,{pct:d,flag:f,label:`Wastage ${d}%`})})]})})}function zn({className:e,...t}){return(0,U.jsx)(g,{"data-slot":`accordion`,className:N(`flex w-full flex-col`,e),...t})}function Bn({className:e,...t}){return(0,U.jsx)(x,{"data-slot":`accordion-item`,className:N(`not-last:border-b`,e),...t})}function Vn({className:e,children:t,headingLevel:n=3,...r}){let i=`h${n}`;return(0,U.jsx)(y,{className:`flex`,render:(0,U.jsx)(i,{}),children:(0,U.jsxs)(_,{"data-slot":`accordion-trigger`,className:N(`group/accordion-trigger relative flex flex-1 cursor-pointer items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:cursor-default aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground`,e),...r,children:[t,(0,U.jsx)(We,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden`}),(0,U.jsx)(Ne,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline`})]})})}function Hn({className:e,children:t,...n}){return(0,U.jsx)(v,{"data-slot":`accordion-content`,className:`h-(--accordion-panel-height) overflow-hidden text-sm transition-[height] duration-150 ease-out data-ending-style:h-0 data-starting-style:h-0 motion-reduce:transition-none`,...n,children:(0,U.jsx)(`div`,{className:N(`pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4`,e),children:t})})}function Un(e){return e.length===0?e:e[0].toUpperCase()+e.slice(1)}function Wn({type:e,label:t,thresholdSummary:n}){return(0,U.jsxs)(F,{"data-testid":`clean-check-row`,"data-clean-check-type":e,children:[(0,U.jsx)(P,{className:`w-px`,children:(0,U.jsxs)(`span`,{className:`inline-flex h-6 items-center gap-1 rounded-full bg-clean/10 px-2 font-mono text-xs font-medium whitespace-nowrap text-clean`,children:[(0,U.jsx)(Fe,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}),dt(e)]})}),(0,U.jsxs)(P,{className:`whitespace-normal`,children:[(0,U.jsx)(`span`,{className:`block text-sm font-medium text-foreground`,children:Un(t)}),(0,U.jsx)(L,{children:(0,U.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:Un(`${n}.`)})})]})]})}var Gn=`suggested-improvements`,Kn={skew:`per-stage`,stageShape:`per-stage`,tinyTask:`per-stage`,shuffle:`per-stage`,partitionSizing:`per-stage`,spill:`per-stage`,gc:`per-stage`,stageFailed:`per-stage`,failures:`per-stage`,retryWaste:`per-stage`,slowHost:`per-stage`,stageSlowness:`per-stage`,straggler:`per-stage`,speculationWaste:`per-stage`,incompleteRun:`app-level`,coldStart:`app-level`,memoryUtilization:`app-level`,utilization:`app-level`,coreLocality:`app-level`,cachingOpportunity:`app-level`,cacheUtilization:`app-level`,jobFailureRate:`app-level`,autoscalingChurn:`app-level`,duplicatePlanSubtree:`sql-scope`,smallFiles:`sql-scope`,underBroadcast:`sql-scope`,overBroadcast:`sql-scope`,configAudit:`config-scope`},qn=[`per-stage`,`app-level`,`sql-scope`,`config-scope`],Jn={"per-stage":`Per-stage checks`,"app-level":`App-level checks`,"sql-scope":`SQL plan checks`,"config-scope":`Config checks`};function Yn(e,t){let n=[...e,...t].filter(de);return pe().filter(({type:e})=>!me(e)).map(({component:e,widgetId:t,type:r},i)=>{let a=n.filter(e=>e.type===r);return{component:e,widgetId:t,index:i,findings:a,impactBand:mt(a)}}).filter(e=>e.impactBand!==void 0).sort((e,t)=>Xe[e.impactBand]-Xe[t.impactBand]||e.index-t.index)}function Xn({appModel:e,catalog:t,configFindings:n=[],getTaskData:r,activeFileId:i}){let a=[...t,...n].filter(de),o=Object.keys(Se).filter(e=>!me(e)).filter(e=>!a.some(t=>t.type===e)).map(e=>({type:e,findingLabel:Se[e].findingLabel})),s=new Map;for(let e of o){let t=Kn[e.type]??`app-level`;s.has(t)||s.set(t,[]),s.get(t).push(e)}let c=ye();return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(at,{children:c.map(({component:a,widgetId:o})=>(0,U.jsx)(z,{cardId:`reference-${o}`,widgetId:o,children:(0,U.jsx)(H.Suspense,{fallback:(0,U.jsx)(Ye,{}),children:(0,U.jsx)(a,{appModel:e,catalog:t,configFindings:n,getTaskData:r,activeFileId:i,defaultCollapsed:!0})})},o))}),(0,U.jsx)(zn,{children:(0,U.jsxs)(Bn,{value:`clean-checks`,children:[(0,U.jsx)(Vn,{children:`Clean checks`}),(0,U.jsxs)(Hn,{children:[(0,U.jsxs)(`p`,{className:`pb-2 text-xs text-muted-foreground`,children:[`Every check below passed. No fix needed.`,(0,U.jsx)(L,{children:` Each line's caption states the threshold it was measured against.`})]}),qn.map(e=>{let t=s.get(e);return!t||t.length===0?null:(0,U.jsxs)(`div`,{className:`pt-3 first:pt-0`,children:[(0,U.jsx)(`p`,{className:`pb-1 text-xs font-medium text-muted-foreground`,children:Jn[e]}),(0,U.jsx)(rt,{children:(0,U.jsx)($e,{children:t.map(({type:e,findingLabel:t})=>(0,U.jsx)(Wn,{type:e,label:t,thresholdSummary:ue(e)},e))})})]},e)})]})]})})]})}function Zn(e){switch(e.type){case`skew`:return`For join-driven skew, enable AQE skew-join handling (spark.sql.adaptive.skewJoin.enabled); otherwise salt the key or repartition on a better key to reduce task skew.`;case`stageShape`:switch(e.rule){case`lowParallelism`:return`Too few tasks run relative to the cores available, leaving cluster capacity idle: repartition to use more of it.`;case`dataExplosion`:return`Output volume far exceeds input volume: check for an exploding join or a cross product.`;case`taskStageSkew`:return`A single straggler task gates the whole stage's wall-clock duration.`}break;case`shuffle`:return`Consider increasing spark.sql.shuffle.partitions or adding a broadcast join to shrink the shuffle.`;case`partitionSizing`:switch(e.rule){case`shufflePartitionSkew`:return`For join skew, enable AQE skew-join handling (spark.sql.adaptive.skewJoin.enabled); otherwise salt the key or repartition on a better key.`;case`lowShuffleParallelism`:return`Raise spark.sql.shuffle.partitions so each partition is smaller.`;case`maxPartitionTooBig`:return`Repartition to break up the oversized partition before this stage.`}break;case`spill`:return`If the spill is skew-driven, fix task skew first: adding memory will not help. Otherwise raise spark.sql.shuffle.partitions or increase executor memory.`;case`gc`:return e.direction===`low`?`Memory may be over-provisioned here: consider reducing spark.executor.memory for cost savings.`:`Reduce object creation, use primitive types, avoid UDFs, or increase executor memory to cut GC time.`;case`slowHost`:return e.variant===`durationShare`?`Check for data locality or partition assignment skewing work onto one node.`:e.variant===`multiDim`?`Investigate uneven partition assignment or a degraded executor.`:`Check what this host was running: it may just hold data locality for its tasks or carry one heavy stage, rather than a hardware fault. Enable spark.speculation to relaunch a lagging task automatically.`;case`stageSlowness`:return`Often a partition-count problem: raise parallelism via spark.sql.shuffle.partitions or spark.default.parallelism, or check for a large per-task data volume driving heavy shuffle and spill.`;case`stageFailed`:return`Inspect the driver log for the failure reason and the job that triggered it.`;case`failures`:return`Investigate driver logs for executor instability or data-driven errors.`;case`straggler`:return`Rule out a GC pause or a slow shuffle fetch before assuming a hardware issue. If a skewed key is the real cause, that is a candidate for AQE's skew-join handling.`;case`speculationWaste`:return`If task durations are naturally variable rather than genuine stragglers, consider tuning spark.speculation.multiplier/quantile.`;case`retryWaste`:return`Investigate executor loss or fetch failures behind the retried attempts.`;case`tinyTask`:return`Scheduler overhead may dominate: lower spark.sql.shuffle.partitions, or coalesce down to fewer, larger tasks.`;case`coldStart`:return`Keep a warm pool of idle executors, or if using dynamic allocation, raise the minimum/initial executor count so it does not scale up from zero.`;case`utilization`:return`Consider reducing cluster size or enabling dynamic allocation.`;case`memoryUtilization`:switch(e.variant){case`idleCores`:return`Reduce cluster size or enable dynamic allocation.`;case`wasteModel`:return`Review spark.executor.memory and executor count.`;case`memoryBand`:if(e.dataUnavailable)break;return e.rule===`heapNearCapacity`?`Memory may be too small: raise spark.executor.memory to avoid OOM/spill.`:`Memory may be over-provisioned: consider reducing spark.executor.memory for cost savings.`}break;case`cacheUtilization`:switch(e.variant){case`partialCache`:return`Increase executor memory or reduce the cached dataset size so more of it stays cached.`;case`diskSpillover`:return`Executor memory may be too small for this cached dataset: increase executor memory or reduce its size.`}break;case`coreLocality`:return`Check spark.locality.wait settings and executor/data colocation.`;case`autoscalingChurn`:return`This looks like wasteful re-provisioning rather than normal scale-down: consider raising spark.dynamicAllocation.executorIdleTimeout or widening the minExecutors/maxExecutors bounds to reduce flapping.`;case`cachingOpportunity`:return e.variant===`composite`?`Cache or persist the repeated join/union result so it is computed once instead of recomputed per query.`:`Cache the shared DataFrame, or broadcast it if it is a small join lookup.`;case`jobFailureRate`:return`Inspect the driver log for the failed job(s) and the stage failures that triggered them.`;case`configAudit`:switch(e.property){case`spark.shuffle.service.enabled`:return`Set spark.shuffle.service.enabled=true so shuffle data survives executor removal.`;case`spark.dynamicAllocation.minExecutors`:return`Set the minimum executor bound at or below the maximum.`;case`spark.dynamicAllocation.maxExecutors`:return`Set spark.dynamicAllocation.maxExecutors to cap cluster growth.`;case`spark.serializer`:return`Consider spark.serializer=org.apache.spark.serializer.KryoSerializer for faster, smaller buffers.`;case`spark.executor.memoryOverhead`:return`Raise executor memoryOverhead above Spark's default floor to avoid off-heap OOM-kills.`}break;case`duplicatePlanSubtree`:return`Check whether the repeated subtree could be computed once and reused, or cache/persist the shared computation.`;case`smallFiles`:return e.direction===`write`?`Repartition or coalesce before writing to raise the average file size.`:`Compact the upstream output so fewer, larger files are produced.`;case`underBroadcast`:return`This could have been a broadcast join: consider a broadcast() hint or raising spark.sql.autoBroadcastJoinThreshold.`;case`overBroadcast`:return`Check for a misapplied broadcast hint or a misconfigured spark.sql.autoBroadcastJoinThreshold.`}}function Qn(e){let t=Se[e.type],n=typeof e.recommendation==`string`?e.recommendation.trim():``;return!t?.routeable||!n?null:{finding:e,widgetId:t.widgetId,region:t.region,findingLabel:t.findingLabel,stageId:typeof e.stageId==`number`?e.stageId:null,recommendation:n}}function $n(e,t){return t.includes(e)?Qn(e):null}function er(e){return e.impactEstimate?.wallClock?.high??null}function tr(e){let t=new Map(pe().map((e,t)=>[e.widgetId,t])),n=e.map((e,t)=>({target:Qn(e),catalogIndex:t})).filter(e=>e.target!==null);return n.sort((e,n)=>{let r=er(e.target.finding),i=er(n.target.finding);return r!==null&&i!==null&&r!==i?i-r:r!==null==(i!==null)?(t.get(e.target.widgetId)??2**53-1)-(t.get(n.target.widgetId)??2**53-1)||e.catalogIndex-n.catalogIndex:r===null?1:-1}),n[0]?.target??null}var nr=10;function rr(e){return ke(e)&&Se[e.type]!=null}function ir(e){return Oe(e.findings)[0].impactBand}function ar(e){let t=e.impactEstimate;return t?t.wallClock?Ct(t.wallClock.low,t.wallClock.high):t.rawWaste?Tt(t.rawWaste):null:null}function or(e){let t=e.stageId==null?e.stageIds&&e.stageIds.length>0?`St.${ct(e.stageIds)}`:null:`St.${e.stageId}`;if(e.type===`duplicatePlanSubtree`&&e.rootName!=null){let n=sr(e);return t&&n?`${t} · ${n}`:n??t}return t||(e.property?String(e.property):null)}function sr(e){if(e.type!==`duplicatePlanSubtree`||e.rootName==null)return null;let t=et(e.rootName),n=e.groupIndex==null?t:`${t} #${Number(e.groupIndex)+1}`;return e.executionId==null?n:`${n} (SQL ${e.executionId})`}function cr({finding:e,textClassName:t,visibleLimit:n,stackIdentity:r,stagePillClassName:i}){let{stageId:a,stageIds:o}=e;if(a!=null)return(0,U.jsx)(St,{stageId:a});if(o&&o.length>0){let a=sr(e),s=a?(0,U.jsx)(`span`,{className:N(`truncate`,t),title:a,children:a}):null,c=(0,U.jsx)(xt,{pills:o.map(e=>({id:e})),visibleLimit:n,pillOverrideClassName:r?i:void 0});return(0,U.jsx)(`span`,{className:N(`inline-flex min-w-0 items-center gap-1.5`,r?`flex-col`:`flex-wrap`),children:r?(0,U.jsxs)(U.Fragment,{children:[s,c]}):(0,U.jsxs)(U.Fragment,{children:[c,s]})})}let s=or(e);return s?(0,U.jsx)(`span`,{className:N(`min-w-0 truncate`,t),title:s,children:s}):null}function lr(e){return(typeof e.recommendation==`string`?e.recommendation.trim():``)||(Se[e.type]?.findingLabel??e.type)}function ur({finding:e,allFindings:t,onRoute:n}){let r=$n(e,t),i=or(e),a=ar(e),o=lr(e),s=A(e);return(0,U.jsxs)(F,{"data-testid":`fix-these-first-row`,"data-finding-type":e.type,children:[(0,U.jsx)(P,{className:`w-px`,children:(0,U.jsx)(Ue,{type:e.type,impactBand:e.impactBand})}),(0,U.jsx)(P,{className:`whitespace-normal`,children:(0,U.jsxs)(`button`,{type:`button`,className:`cursor-pointer rounded-sm text-left focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:()=>r&&n(r),children:[(0,U.jsx)(`span`,{className:`block text-sm font-medium`,children:s}),(0,U.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:o})]})}),(0,U.jsx)(P,{className:`w-px text-right font-mono text-xs text-muted-foreground`,title:[i,a].filter(Boolean).join(` · `),children:(0,U.jsxs)(`span`,{className:`flex items-center justify-end gap-1.5`,children:[(0,U.jsx)(cr,{finding:e}),a?(0,U.jsx)(`span`,{className:`shrink-0`,children:a}):null]})})]})}function dr({finding:e,allFindings:t,onRoute:n,id:r}){let i=$n(e,t),a=or(e),o=ar(e),s=lr(e),c=A(e),l=e.stageId!=null||a!=null;return(0,U.jsxs)(F,{id:r,"data-testid":`fix-these-first-row`,"data-finding-type":e.type,className:`bg-muted/50`,children:[(0,U.jsxs)(P,{colSpan:2,className:`whitespace-normal`,children:[l?(0,U.jsx)(`div`,{className:`mb-1`,children:(0,U.jsx)(cr,{finding:e,textClassName:`line-clamp-1 break-words text-xs font-medium font-mono`})}):null,(0,U.jsxs)(`button`,{type:`button`,className:`block w-full cursor-pointer rounded-sm text-left focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:()=>i&&n(i),children:[l?null:(0,U.jsx)(`span`,{className:`line-clamp-1 break-words text-xs font-medium`,children:c}),(0,U.jsx)(`span`,{className:`line-clamp-1 break-words text-xs text-muted-foreground`,children:s})]})]}),(0,U.jsx)(P,{className:`w-px text-right font-mono text-xs text-muted-foreground`,children:o})]})}function fr(e){return e.kind===`time`?`×${e.findingCount} · ${Ct(e.recoverableMsHigh,e.recoverableMsHigh)} recoverable`:e.kind===`resource`?`×${e.findingCount} · resource-cost projection`:Object.entries(e.byImpactBand).map(([e,t])=>`${t} ${e}`).join(`, `)}function pr(e){return e.kind===`time`?`${e.findingCount} findings of this type; up to ${Ct(e.recoverableMsHigh,e.recoverableMsHigh)} of run time could be recovered by fixing them`:e.kind===`resource`?`${e.findingCount} findings of this type; a resource-cost estimate (not run time) is projected for fixing them`:`${e.findingCount} findings of this type, by impact`}function mr({group:e,allFindings:t,expanded:n,onToggle:r,onRoute:i}){let[a,o]=(0,H.useState)(0),s=Oe(e.findings),c=s[0],l=Zn(c),u=A(c),d=Math.ceil(s.length/nr),f=Math.min(a,Math.max(0,d-1)),p=s.slice(f*nr,f*nr+nr),m=`fix-these-first-group-content-${e.kind}-${e.type}${`unit`in e?`-${e.unit}`:``}`;return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(F,{"data-testid":`fix-these-first-group-row`,"data-finding-type":e.type,children:[(0,U.jsx)(P,{className:`w-px`,children:(0,U.jsx)(Ue,{type:e.type,impactBand:c.impactBand})}),(0,U.jsx)(P,{className:`whitespace-normal`,children:(0,U.jsxs)(`button`,{type:`button`,"aria-expanded":n,"aria-controls":m,className:`cursor-pointer rounded-sm text-left focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:r,children:[(0,U.jsx)(`span`,{className:`block text-sm font-medium`,children:u}),l?(0,U.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:l}):null]})}),(0,U.jsx)(P,{className:`w-px text-right font-mono text-xs text-muted-foreground`,children:(0,U.jsxs)(`span`,{className:`inline-flex items-center justify-end gap-1.5`,title:pr(e),children:[fr(e),n?(0,U.jsx)(Ne,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):(0,U.jsx)(We,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`})]})})]}),n&&p.map((e,n)=>(0,U.jsx)(dr,{finding:e,allFindings:t,onRoute:i,id:n===0?m:void 0},e.id)),n&&d>1&&(0,U.jsx)(F,{className:`bg-muted/50`,children:(0,U.jsx)(P,{colSpan:3,children:(0,U.jsx)(Dt,{page:f,totalPages:d,onPrev:()=>o(e=>e-1),onNext:()=>o(e=>e+1)})})})]})}function hr({target:e,onRoute:t}){let n=or(e.finding),r=ar(e.finding),i=e.finding.stageId!=null||n!=null,[a,o]=(0,H.useState)(!1),s=async()=>{let t=`${A(e.finding)} — ${lr(e.finding)}`,n=[/[.!?]$/.test(t)?t:`${t}.`,r?`Potential savings: ${r}`:null].filter(Boolean).join(` `);try{await w(n),o(!0),setTimeout(()=>o(!1),1500)}catch{}};return(0,U.jsxs)(`div`,{className:`mb-3 flex flex-col gap-2 rounded-lg border border-primary/40 bg-primary/5 transition-colors hover:bg-primary/10`,children:[(0,U.jsxs)(`button`,{type:`button`,"aria-label":`${A(e.finding)}, ${lr(e.finding)}`,onClick:()=>t(e),className:`flex cursor-pointer flex-col gap-2 rounded-lg px-4 py-3 text-left focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 sm:flex-row sm:items-start sm:justify-between sm:gap-4`,children:[(0,U.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs font-semibold tracking-wide text-primary uppercase`,children:[(0,U.jsx)(Ft,{"aria-hidden":`true`,className:`size-3.5`}),`Highest impact`]}),(0,U.jsxs)(`p`,{className:`mt-2 min-w-0`,children:[(0,U.jsx)(`span`,{className:`text-sm font-semibold`,children:A(e.finding)}),(0,U.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`, `,lr(e.finding)]})]})]}),r?(0,U.jsxs)(`div`,{className:`min-w-0 sm:shrink-0 sm:text-right`,children:[(0,U.jsx)(`p`,{className:`text-[11px] uppercase tracking-wide text-muted-foreground`,children:`Potential savings`}),(0,U.jsx)(`p`,{className:`whitespace-nowrap font-mono text-lg font-semibold leading-tight tabular-nums text-primary`,children:r})]}):null]}),(0,U.jsxs)(`div`,{className:N(`flex items-center gap-3 px-4 pb-3`,i?`justify-between`:`justify-end`),children:[i?(0,U.jsx)(cr,{finding:e.finding,textClassName:`line-clamp-2 max-w-[140px] break-words text-xs font-semibold text-muted-foreground`,visibleLimit:2,stackIdentity:!0,stagePillClassName:`h-5 px-1.5 text-[10px] font-normal`}):null,(0,U.jsx)(`button`,{type:`button`,"data-testid":`copy-finding-button`,onClick:()=>void s(),className:`inline-flex shrink-0 cursor-pointer items-center gap-1 rounded text-xs text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,children:a?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(re,{"aria-hidden":`true`,className:`size-3.5`}),`Copied`]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(kt,{"aria-hidden":`true`,className:`size-3.5`}),`Copy finding`]})})]})]})}function gr(e,t,n){let r=[...e,...t].filter(rr);return{eligible:r,groups:De(r,n),triageTarget:tr(r)}}var _r={critical:`Critical`,warning:`Warning`,info:`Info`},vr=[`critical`,`warning`,`info`];function yr(e){return`${e.kind}-${e.type}-${`unit`in e?e.unit:``}`}function br({impactBand:e,groups:t,widgets:n,allFindings:r,expandedGroupKey:i,onToggleGroup:a,onRoute:o,appModel:s,catalog:c,configFindings:l,getTaskData:u,activeFileId:d}){if(t.length===0&&n.length===0)return null;let f=`impact-band-${e}-heading`;return(0,U.jsxs)(`section`,{"aria-labelledby":f,className:`space-y-3`,children:[(0,U.jsx)(`h2`,{id:f,className:`font-heading text-base font-semibold`,children:_r[e]}),t.length>0&&(0,U.jsx)(rt,{children:(0,U.jsx)($e,{children:t.map(e=>{if(e.findingCount===1)return(0,U.jsx)(ur,{finding:e.findings[0],allFindings:r,onRoute:o},e.findings[0].id);let t=yr(e);return(0,U.jsx)(mr,{group:e,allFindings:r,expanded:i===t,onToggle:()=>a(t),onRoute:o},t)})})}),n.length>0&&(0,U.jsx)(at,{children:n.map(({component:e,widgetId:t,index:n})=>(0,U.jsx)(z,{cardId:`alert-${n}`,widgetId:t,children:(0,U.jsx)(H.Suspense,{fallback:(0,U.jsx)(Ye,{}),children:(0,U.jsx)(e,{appModel:s,catalog:c,configFindings:l,getTaskData:u,activeFileId:d,defaultCollapsed:!0})})},t))})]})}function xr({appModel:e,catalog:t,configFindings:n=[],stages:r,getTaskData:i,activeFileId:a,onRoute:o}){let{eligible:s,groups:c,triageTarget:l}=(0,H.useMemo)(()=>gr(t,n,r),[t,n,r]),u=[...t,...n],d=(0,H.useMemo)(()=>Yn(t,n),[t,n]),[f,p]=(0,H.useState)(null),{groupsByImpactBand:m,widgetsByImpactBand:h}=(0,H.useMemo)(()=>{let e=new Map;for(let t of c){let n=ir(t);e.has(n)||e.set(n,[]),e.get(n).push(t)}let t=new Map;for(let e of d)t.has(e.impactBand)||t.set(e.impactBand,[]),t.get(e.impactBand).push(e);return{groupsByImpactBand:e,widgetsByImpactBand:t}},[c,d]);return(0,U.jsxs)(`div`,{id:Gn,className:`space-y-6 scroll-mt-20`,children:[l?(0,U.jsx)(hr,{target:l,onRoute:o}):null,s.length===0?(0,U.jsx)(ht,{tone:`clean`,icon:Fe,title:`No findings to fix right now.`}):null,vr.map(r=>(0,U.jsx)(br,{impactBand:r,groups:m.get(r)??[],widgets:h.get(r)??[],allFindings:u,expandedGroupKey:f,onToggleGroup:e=>p(t=>t===e?null:e),onRoute:o,appModel:e,catalog:t,configFindings:n,getTaskData:i,activeFileId:a},r)),(0,U.jsx)(Xn,{appModel:e,catalog:t,configFindings:n,getTaskData:i,activeFileId:a})]})}var Sr=[`PROCESS_LOCAL`,`NODE_LOCAL`,`RACK_LOCAL`,`NO_PREF`,`ANY`],Cr=[j.clean,j.accent,j.warning,j.muted,j.critical];function wr(e){return e?new Date(e).toLocaleString():`—`}function Tr({stats:e}){let t=new Map(e.map(e=>[e.locality,e.count])),n=Sr.filter(e=>t.has(e));for(let t of e)Sr.includes(t.locality)||n.push(t.locality);let r=n.map((e,n)=>({locality:e,count:t.get(e)??0,color:Cr[Math.min(n,Cr.length-1)]}));return(0,U.jsx)(O,{ariaLabel:`Task locality distribution`,height:140,table:{caption:`Task locality distribution`,columns:[`Locality tier`,`Task count`],rows:r.map(e=>[e.locality,e.count]),align:[`left`,`right`]},children:(0,U.jsxs)(l,{data:r,children:[(0,U.jsx)(c,{vertical:!1,stroke:j.muted,strokeOpacity:.2}),(0,U.jsx)(p,{dataKey:`locality`,tick:{fontSize:10}}),(0,U.jsx)(f,{allowDecimals:!1,tick:{fontSize:10},width:32}),(0,U.jsx)(h,{formatter:e=>[`${Number(e)} task${Number(e)===1?``:`s`}`,`Tasks`]}),(0,U.jsx)(u,{dataKey:`count`,name:`Tasks`,children:r.map(e=>(0,U.jsx)(a,{fill:e.color},e.locality))})]})})}function Er(e){let t=new Map;for(let n of e){t.has(n.type)||t.set(n.type,{impactBand:n.impactBand,finding:n,recs:new Map});let e=t.get(n.type);Xe[n.impactBand]<Xe[e.impactBand]&&(e.impactBand=n.impactBand,e.finding=n),n.recommendation&&!e.recs.has(n.recommendation)&&e.recs.set(n.recommendation,{extended:n.extended??null})}return[...t.entries()].sort(([,e],[,t])=>Xe[e.impactBand]-Xe[t.impactBand])}function Dr({rec:e,extended:t,finding:n,showImpactEstimate:r}){return(0,U.jsxs)(`div`,{className:`space-y-1 text-sm`,children:[(0,U.jsx)(`p`,{className:`max-w-full leading-normal break-words`,children:e}),t?(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:t}):null,r?(0,U.jsx)(Et,{finding:n}):null]})}function Or({findings:e}){if(e.length===0)return null;let t=Er(e);return(0,U.jsx)(`section`,{className:`space-y-3 rounded-md border p-3`,children:t.map(([e,{impactBand:t,finding:n,recs:r}])=>{let i=wt(n.impactEstimate)!==null;return(0,U.jsxs)(`div`,{className:`space-y-1`,children:[(0,U.jsx)(Ue,{type:e,impactBand:t}),[...r.entries()].map(([e,{extended:t}],r)=>(0,U.jsx)(Dr,{rec:e,extended:t,finding:n,showImpactEstimate:r===0&&i},r))]},e)})})}function kr({stage:e,appModel:t}){return he(e.id,t)?(0,U.jsx)(fe,{title:`Query Plan`,children:(0,U.jsx)(Ce,{stageId:e.id,appModel:t})}):null}function Ar({stage:e,appModel:t,catalog:n,getTaskData:r}){let{exportMode:i,getTaskData:a}=vt(r),[o,s]=(0,H.useState)(null),[c,l]=(0,H.useState)(!1),[u,d]=(0,H.useState)(0),f=(e.taskCount??0)>0,p=n.filter(t=>t.stageId===e.id);(0,H.useEffect)(()=>{if(!f||!a)return;let t=!1;return l(!1),a(e.id).catch(()=>null).then(e=>{t||(e?s(e):l(!0))}),()=>{t=!0}},[u]);let m=(e.completedAt??0)-(e.submittedAt??0),h=(e.memoryBytesSpilled??0)>0||(e.diskBytesSpilled??0)>0,g=(e.jvmGCTime??0)>0||(e.gcPct??0)>0,_=e.fetchWaitTime??0,v=_>0&&m>0?Math.round(_/m*100):null,y=(e.inputBytes??0)>0?((e.outputBytes??0)/(e.inputBytes??0)).toFixed(2):null,b=e.localityStats??[];return(0,U.jsxs)(`div`,{className:`space-y-6`,children:[(0,U.jsx)(Or,{findings:p}),(0,U.jsx)(k,{title:`Overview`,collapsible:!0,defaultOpen:!0,rows:[[`Duration`,B(m)],[`Submitted`,wr(e.submittedAt)],[`Completed`,wr(e.completedAt)],e.sqlExecutionId!=null&&[`SQL Execution`,`#${e.sqlExecutionId}`],e.stageType?[`Stage type`,e.stageType]:!1]}),(0,U.jsx)(k,{title:`Tasks`,collapsible:!0,rows:[[`Total`,String(e.taskCount)],[`Failed`,String(e.failedTasks)],[`P50 duration`,(e.taskDurationP50??0)>0?B(e.taskDurationP50):`—`],[`P95 duration`,(e.taskDurationP95??0)>0?B(e.taskDurationP95):`—`],[`Max duration`,(e.taskDurationMax??0)>0?B(e.taskDurationMax):`—`],(e.peakExecutionMemoryMax??0)>0&&[`Peak execution memory`,R(e.peakExecutionMemoryMax)]],children:f?i?(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Per-task duration data isn’t included in exported reports.`}):o?(0,U.jsx)(yt,{metrics:o.metrics,fieldNames:o.fieldNames,markers:{p50:e.taskDurationP50,p95:e.taskDurationP95}}):c?(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Couldn’t load task data for this stage.`}),(0,U.jsx)(Ve,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>d(e=>e+1),children:`Retry`})]}):(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading task data…`}):null}),(0,U.jsx)(k,{title:`Locality`,collapsible:!0,rows:[],children:b.length>0?(0,U.jsx)(Tr,{stats:b}):null}),(0,U.jsx)(k,{title:`I/O`,collapsible:!0,rows:[[`Input`,R(e.inputBytes)],[`Output`,R(e.outputBytes)],[`Shuffle read`,R(e.shuffleReadBytes)],[`Shuffle write`,R(e.shuffleWriteBytes)],_>0&&[`Fetch wait`,`${B(_)}${v==null?``:` (${v}%)`}`],y!=null&&[`I/O ratio`,y]]}),h?(0,U.jsx)(k,{title:`Spill`,collapsible:!0,rows:[[`Memory spilled`,R(e.memoryBytesSpilled)],[`Disk spilled`,R(e.diskBytesSpilled)],(e.memoryBytesSpilled??0)>0&&[`Classification`,e.spillClassification??`unclassified`]]}):null,g?(0,U.jsx)(k,{title:`GC`,collapsible:!0,rows:[[`JVM GC time`,B(e.jvmGCTime)],[`Executor run time`,B(e.executorRunTime)],[`GC %`,`${(e.gcPct??0).toFixed(1)}%`]]}):null,e.details?(0,U.jsx)(L,{children:(0,U.jsx)(fe,{title:`Call Stack`,children:(0,U.jsx)(`pre`,{className:`overflow-x-auto rounded-md bg-muted p-2 text-xs whitespace-pre-wrap`,children:e.details})})}):null,(0,U.jsx)(kr,{stage:e,appModel:t})]})}function jr({appModel:e,catalog:t,getTaskData:n}){let{stageId:r,close:i}=it(),a=r==null?void 0:e.stages.get(r);return(0,U.jsx)(xe,{open:a!=null,onOpenChange:e=>{e||i()},children:(0,U.jsx)(we,{className:`max-h-[85vh] overflow-y-auto sm:max-w-4xl`,children:a?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(ve,{children:(0,U.jsxs)(Ee,{children:[`Stage `,a.id,` `,(0,U.jsxs)(`span`,{className:`text-muted-foreground`,children:[`— `,a.name??``]})]})}),(0,U.jsx)(Ar,{stage:a,appModel:e,catalog:t,getTaskData:n},a.id)]}):null})})}function Mr(e){return Nr(e)||typeof e==`function`||Pr(e)}function Nr(e){return typeof e==`function`&&(()=>{let t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function Pr(e){return typeof e==`object`&&typeof e.$$typeof==`symbol`&&[`react.memo`,`react.forward_ref`].includes(e.$$typeof.description)}function G(e,t){return e==null?null:Mr(e)?H.createElement(e,t):e}function Fr(e){if(`cell`in e&&e.cell){let t=e.cell,n=t.column.columnDef,r=t,i=n;return r.getIsAggregated?.()?G(i.aggregatedCell??n.cell,t.getContext()):r.getIsPlaceholder?.()?null:G(n.cell,t.getContext())}return`header`in e&&e.header?G(e.header.column.columnDef.header,e.header.getContext()):`footer`in e&&e.footer?G(e.footer.column.columnDef.footer,e.footer.getContext()):null}function Ir({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&60?a&12?a&4?!(a&48)&&c(e,i)?(i.flags=a|40,a&=1):a=0:i.flags=a&-9|32:a=0:i.flags=a|32,a&2&&t(i),a&1){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(1)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&16)a=!0;else if((c&17)==17){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&33)==33){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=-33;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(1)}function s(e){do{let n=e.sub,r=n.flags;(r&48)==32&&(n.flags=r|16,(r&6)==2&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function Lr(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var Rr=[],zr=0,{link:Br,unlink:Vr,propagate:Hr,checkDirty:Ur,shallowPropagate:Wr}=Ir({update(e){return e._update()},notify(e){Rr[Kr++]=e,e.flags&=-3},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,Yr(e))}}),Gr=0,Kr=0,K,qr=0;function Jr(e){try{++qr,e()}finally{--qr||Xr()}}function Yr(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=Vr(n,e)}function Xr(){if(!(qr>0)){for(;Gr<Kr;){let e=Rr[Gr];Rr[Gr++]=void 0,e.notify()}Gr=0,Kr=0}}function Zr(e,t){let n=typeof e==`function`,r=e,i={_snapshot:n?void 0:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:+!n,get(){return K!==void 0&&Br(i,K,zr),i._snapshot},subscribe(e){let t=Lr(e),n={current:!1},r=Qr(()=>{i.get(),n.current?t.next?.(i._snapshot):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=K,o=t?.compare??Object.is;if(n)K=i,++zr,i.depsTail=void 0;else if(e===void 0)return!1;n&&(i.flags=5);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{K=a,n&&(i.flags&=-5),Yr(i)}}};return n?(i.flags=17,i.get=function(){let e=i.flags;if(e&16||e&32&&Ur(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&Wr(e)}}else e&32&&(i.flags=e&-33);return K!==void 0&&Br(i,K,zr),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(Hr(e),Wr(e),Xr())}},i}function Qr(e){let t=()=>{let t=K;K=n,++zr,n.depsTail=void 0,n.flags=6;try{return e()}finally{K=t,n.flags&=-5,Yr(n)}},n={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:6,notify(){let e=this.flags;e&16||e&32&&Ur(this.deps,this)?t():this.flags=2},stop(){this.flags=0,this.depsTail=void 0,Yr(this)}};return t(),n}function $r(e,t){if(Object.is(e,t))return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(let[n,r]of e)if(!t.has(n)||!Object.is(r,t.get(n)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();let n=ei(e);if(n.length!==ei(t).length)return!1;for(let r=0;r<n.length;r++)if(!Object.prototype.hasOwnProperty.call(t,n[r])||!Object.is(e[n[r]],t[n[r]]))return!1;return!0}function ei(e){return Object.keys(e).concat(Object.getOwnPropertySymbols(e))}var ti=e(r(),1);function ni(e,t){return e===t}function ri(e,t=e=>e,n){let r=n?.compare??ni,i=(0,H.useCallback)(t=>{let{unsubscribe:n}=e.subscribe(t);return n},[e]),a=(0,H.useCallback)(()=>e.get(),[e]);return(0,ti.useSyncExternalStoreWithSelector)(i,a,a,t,r)}function ii(e){let t=ri(e.source,e.selector,{compare:$r});return typeof e.children==`function`?e.children(t):e.children}function ai(e){let t=e;return Object.defineProperty(e,"state",{get(){return e.get()}}),`set`in e&&(t.setState=e.set.bind(e)),t}function oi(e){let{createAtom:t,batch:n}=e,r=t(0);return{createOptionsStore:!1,wrapExternalAtoms:!1,addSubscription:()=>{throw Error(`Feature not supported in current reactivity implementation`)},unmount:()=>{throw Error(`Feature not supported in current reactivity implementation`)},schedule:e.schedule??(e=>queueMicrotask(e)),batch:n,untrack:e=>e(),createReadonlyAtom:(e,n)=>{let i=n?.compare??Object.is,a=!1,o,s=()=>{let t=e();return(!a||!i(o,t))&&(o=t,a=!0),o},c=t(()=>(r.get(),s()),{compare:i});return{get:s,subscribe:c.subscribe.bind(c)}},createWritableAtom:(e,n)=>t(e,{compare:n?.compare}),commit:()=>{r.set(e=>e+1)}}}function si(e,t=Object.is){let n=!1,r;return{get:e.get,markCommitted:e=>{r=e,n=!0},subscribe:i=>e.subscribe(e=>{(!n||!t(r,e))&&i(e)})}}function ci(){return oi({createAtom:Zr,batch:Jr})}function li(e,t){return typeof e==`function`?e(t):e}function q(e){if(Array.isArray(e))return e.map(q);if(e&&typeof e==`object`){let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)return e;let n=t===null?J():{},r=Object.keys(e);for(let t=0;t<r.length;t++){let i=r[t];Object.defineProperty(n,i,{configurable:!0,enumerable:!0,value:q(e[i]),writable:!0})}return n}return e}function ui(e,t){let n=Object.keys(t),r=e;for(let e=0;e<n.length;e++){let i=n[e];!i.startsWith(`_memo_`)&&i!==`_cellsCache`&&(r[i]=t[i])}return e}function J(){return Object.create(null)}function di(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function fi(e,t){return n=>{(t.options.atoms?.[e]??t.baseAtoms[e]).set(e=>li(n,e))}}function pi(e){if(typeof e!=`object`||!e)return!1;if(Array.isArray(e))return!0;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function mi(e){return Reflect.ownKeys(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}var hi=3;function gi(e,t){return _i(e,t,hi)}function _i(e,t,n){if(Object.is(e,t))return!0;if(n<=0||!pi(e)||!pi(t)||(Array.isArray(e)||Array.isArray(t))&&(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length))return!1;let r=mi(e),i=mi(t);if(r.length!==i.length)return!1;let a=e,o=t;for(let e=0;e<r.length;e++){let i=r[e];if(!Object.prototype.propertyIsEnumerable.call(t,i)||!_i(a[i],o[i],n-1))return!1}return!0}function vi(e,t,n,r=gi){let i=`on${t.charAt(0).toUpperCase()}${t.slice(1)}Change`,a=e.options[i];a&&a(e=>{let t=li(n,e);return r(e,t)?e:t})}function yi(e){return e instanceof Function}function bi(e,t){let n=[],r=e=>{e.forEach(e=>{n.push(e);let i=t(e);i.length&&r(i)})};return r(e),n}var xi=({fn:e,memoDeps:t,onAfterCompare:n,onAfterUpdate:r,onBeforeCompare:i,onBeforeUpdate:a})=>{let o=[],s;return c=>{i?.();let l=t?.(c),u=!l||l.length!==o?.length;if(!u&&l){for(let e=0;e<l.length;e++)if(l[e]!==o[e]){u=!0;break}}return n?.(u),u?(o=l,a?.(),s=e(...l??[]),r?.(s),s):s}};function Si(e){let t=!1;return()=>{if(!t){t=!0;return}e()}}function Ci({feature:e,fnName:t,objectId:n,onAfterUpdate:r,table:i,...a}){let o=()=>{if(!r)return;let{schedule:e,untrack:t}=i._reactivity;e(()=>t(()=>r()))},s={onAfterUpdate:()=>{o()}};return xi({...a,...s})}function wi(e,t=`_`){let[n,r]=e.split(t);return{fnKey:r,fnName:`${n}.${r}`,parentName:n}}function Y(e,t,n){for(let[r,{fn:i,memoDeps:a}]of Object.entries(n)){let{fnKey:n,fnName:o}=wi(r);t[n]=a?Ci({memoDeps:a,fn:i,fnName:o,table:t,feature:e}):i}}function X(e,t,n,r){for(let[i,{fn:a,memoDeps:o}]of Object.entries(r)){let{fnKey:r,fnName:s}=wi(i);if(o){let i=`_memo_${r}`;t[r]=function(...t){if(!this[i]){let t=this;this[i]=Ci({memoDeps:e=>o(t,e),fn:(...e)=>a(t,...e),fnName:s,objectId:t.id,table:n,feature:e})}return this[i](...t)}}else t[r]=function(...e){return a(this,...e)}}}function Z(e,t,n,...r){return e[t]?.(...r)??n(e,...r)}function Ti(e){return e.row.getValue(e.column.id)}function Ei(e){return e.getValue()??e.table.options.renderFallbackValue}function Di(e){return{table:e.table,column:e.column,row:e.row,cell:e,getValue:()=>e.getValue(),renderValue:()=>e.renderValue()}}var Oi={assignCellPrototype:(e,t)=>{X(`coreCellsFeature`,e,t,{cell_getValue:{fn:e=>Ti(e)},cell_renderValue:{fn:e=>Ei(e)},cell_getContext:{fn:e=>Di(e),memoDeps:e=>[e]}})}};function ki(e){if(!e._headerPrototype){e._headerPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignHeaderPrototype?.(e._headerPrototype,e)}return e._headerPrototype}function Ai(e,t,n){let r=ki(e),i=Object.create(r);i.colSpan=0,i.column=t,i.depth=n.depth,i.headerGroup=null,i.id=n.id??t.id,i.index=n.index,i.isPlaceholder=!!n.isPlaceholder,i.placeholderId=n.placeholderId,i.rowSpan=0,i.subHeaders=[];let a=e._headerInstanceInitFns;for(let e=0;e<a.length;e++)a[e](i);return i}function ji(){return{start:[],end:[]}}function Mi(){return J()}function Ni(e,t){Pi(e)&&Bi(e.table,n=>{let r=Object.assign(J(),n),i=t??!Z(e,`getIsVisible`,Q),a=e.getLeafColumns();for(let e=0;e<a.length;e++){let t=a[e];Pi(t)&&(r[t.id]=i)}return r})}function Q(e){let t=e.table.atoms.columnVisibility?.get();if(!t)return!0;let n=e.columns;return n.length?n.some(e=>Z(e,`getIsVisible`,Q)):(di(t,e.id)?t[e.id]:void 0)??!0}function Pi(e){return(e.columnDef.enableHiding??!0)&&(e.table.options.enableHiding??!0)}function Fi(e){return t=>{Ni(e,t.target.checked)}}function Ii(e){let t=e.getAllCells(),n=[];for(let e=0;e<t.length;e++){let r=t[e];Z(r.column,`getIsVisible`,Q)&&n.push(r)}let{start:r,end:i}=e.table.atoms.columnPinning?.get()??ji();if(!r.length&&!i.length)return n;let a=Z(e,`getVisibleCellsByColumnId`,Li),o=[];for(let e=0;e<r.length;e++){let t=a[r[e]];t&&o.push(t)}let s=[];for(let e=0;e<i.length;e++){let t=a[i[e]];t&&s.push(t)}let c=[];for(let e=0;e<n.length;e++){let t=n[e],a=t.column.id;!r.includes(a)&&!i.includes(a)&&c.push(t)}return[...o,...c,...s]}function Li(e){let t=J(),n=e.getAllCells();for(let e=0;e<n.length;e++){let r=n[e];Z(r.column,`getIsVisible`,Q)&&(t[r.column.id]=r)}return t}function Ri(e){return e.getAllFlatColumns().filter(e=>Z(e,`getIsVisible`,Q))}function zi(e){return e.getAllLeafColumns().filter(e=>Z(e,`getIsVisible`,Q))}function Bi(e,t){vi(e,`columnVisibility`,t)}function Vi(e,t){Bi(e,t?J():Object.assign(J(),q(e.initialState.columnVisibility??{})))}function Hi(e,t){t??=!Ui(e);let n=J(),r=e.getAllLeafColumns();for(let e=0;e<r.length;e++){let i=r[e];n[i.id]=t||!Pi(i)}Bi(e,n)}function Ui(e){return!e.getAllLeafColumns().some(e=>!Z(e,`getIsVisible`,Q))}function Wi(e){return e.getAllLeafColumns().some(e=>Z(e,`getIsVisible`,Q))}function Gi(e){return t=>{Hi(e,t.target.checked)}}function Ki(e,t=1){let n=t;for(let r=0;r<e.length;r++){let i=e[r];Z(i,`getIsVisible`,Q)&&i.columns.length&&(n=Math.max(n,Ki(i.columns,t+1)))}return n}function qi(e,t){return e?`${e}_${t}`:String(t)}function Ji(e,t,n,r){let i=e??``;return t&&(i=i?`${i}_${t}`:String(t)),n&&(i=i?`${i}_${n}`:n),r&&(i=i?`${i}_${r}`:r),i}function Yi(e,t){let n=0;for(let r=0;r<e.length;r++)e[r].column===t&&n++;return n}function Xi(e,t,n,r,i,a){let o={depth:t,id:qi(r,t),headers:[]},s=[];for(let i=0;i<e.length;i++){if(!(i in e))continue;let a=e[i],c=s[s.length-1],l=a.column.depth===o.depth,u,d=!1;if(l&&a.column.parent?u=a.column.parent:(u=a.column,d=!0),c&&c.column===u)c.subHeaders.push(a);else{let e=Ai(n,u,{id:Ji(r,t,u.id,a.id),isPlaceholder:d,placeholderId:d?String(Yi(s,u)):void 0,depth:t,index:s.length});e.subHeaders.push(a),s.push(e)}o.headers.push(a),a.headerGroup=o}for(let e=0;e<a.length;e++)a[e](o);i.push(o),t>0&&Xi(s,t-1,n,r,i,a)}function Zi(e){for(let t=0;t<e.length;t++){let n=e[t];if(!Z(n.column,`getIsVisible`,Q))continue;let r=0;if(n.subHeaders.length){Zi(n.subHeaders);for(let e=0;e<n.subHeaders.length;e++){let t=n.subHeaders[e];Z(t.column,`getIsVisible`,Q)&&(r+=t.colSpan)}}else r=1;if(n.colSpan=r,n.isPlaceholder&&n.subHeaders.length===1&&n.subHeaders[0].column===n.column){let e=1,t=n.subHeaders[0];for(;t;)t.rowSpan=0,e++,t=t.subHeaders.length===1&&t.subHeaders[0].column===n.column?t.subHeaders[0]:void 0;n.rowSpan=e}else n.rowSpan=1}}function Qi(e,t,n,r){let i=Ki(e),a=[],o=n._headerGroupInstanceInitFns,s=Array(t.length);for(let e=0;e<t.length;e++)e in t&&(s[e]=Ai(n,t[e],{depth:i,index:e}));return Xi(s,i-1,n,r,a,o),a.reverse(),Zi(a[0]?.headers??[]),a}function $i(e){if(!e._columnPrototype){e._columnPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignColumnPrototype?.(e._columnPrototype,e)}return e._columnPrototype}function ea(e,t,n,r){let i={...e.getDefaultColumnDef(),...t},a=i.accessorKey,o=a===void 0?void 0:String(a),s=i.id??o?.replaceAll(`.`,`_`)??(typeof i.header==`string`?i.header:void 0),c;if(i.accessorFn)c=i.accessorFn;else if(a!==void 0){if(typeof a==`string`&&a.includes(`.`)){let e=a.split(`.`);c=t=>{let n=t;for(let t=0;t<e.length;t++){let r=e[t];n=n?.[r]}return n}}else c=e=>e[i.accessorKey]}if(!s)throw Error();let l=$i(e),u=Object.create(l);u.accessorFn=c,u.columnDef=i,u.columns=[],u.depth=n,u.id=`${String(s)}`,u.parent=r;let d=e._columnInstanceInitFns;for(let e=0;e<d.length;e++)d[e](u);return u}function ta(e){let t=e.atoms.columnOrder?.get();return n=>{let r=[];if(!t?.length)r=n;else{let e=new Map;for(let t=0;t<n.length;t++){let r=n[t];e.set(r.id,r)}for(let n=0;n<t.length;n++){let i=t[n],a=e.get(i);a&&(r.push(a),e.delete(i))}for(let t=0;t<n.length;t++){let i=n[t];e.has(i.id)&&r.push(i)}}return na(e,r)}}function na(e,t){let n=e.atoms.grouping?.get()??[],{groupedColumnMode:r}=e.options;if(!n.length||!r)return t;let i=t.filter(e=>!n.includes(e.id));if(r===`remove`)return i;let a=new Map;for(let e=0;e<t.length;e++){let n=t[e];a.set(n.id,n)}let o=[];for(let e=0;e<n.length;e++){let t=a.get(n[e]);t&&o.push(t)}return[...o,...i]}function ra(e){return[e,...e.columns.flatMap(e=>e.getFlatColumns())]}function ia(e){if(e.columns.length){let t=e.columns.flatMap(e=>e.getLeafColumns());return Z(e.table,`getOrderColumns`,ta)(t)}return[e]}function aa(e){return{header:e=>{let t=e.header.column.columnDef;return t.accessorKey?t.accessorKey:t.accessorFn?t.id:null},cell:e=>e.renderValue()?.toString?.()??null,...Object.values(e._features).reduce((e,t)=>Object.assign(e,t.getDefaultColumnDef?.()),{}),...e.options.defaultColumn}}function oa(e,t,n,r=0){let i=Array(t.length);for(let a=0;a<t.length;a++){if(!(a in t))continue;let o=t[a],s=ea(e,o,r,n),c=o;s.columns=c.columns?oa(e,c.columns,s,r+1):[],i[a]=s}return i}function sa(e){return oa(e,e.options.columns)}function ca(e){return e.getAllColumns().flatMap(e=>e.getFlatColumns())}function la(e){let t=J(),n=e.getAllFlatColumns();for(let e=0;e<n.length;e++){let r=n[e];t[r.id]=r}return t}function ua(e){let t=e.getAllColumns().flatMap(e=>e.getLeafColumns());return Z(e,`getOrderColumns`,ta)(t)}function da(e){let t=J(),n=e.getAllLeafColumns();for(let e=0;e<n.length;e++){let r=n[e];t[r.id]=r}return t}function fa(e,t){return e.getAllFlatColumnsById()[t]}var pa={assignColumnPrototype:(e,t)=>{X(`coreColumnsFeature`,e,t,{column_getFlatColumns:{fn:e=>ra(e),memoDeps:e=>[e.table.options.columns]},column_getLeafColumns:{fn:e=>ia(e),memoDeps:e=>[e.table.atoms.columnOrder?.get(),e.table.atoms.grouping?.get(),e.table.options.columns,e.table.options.groupedColumnMode]}})},constructTableAPIs:e=>{Y(`coreColumnsFeature`,e,{table_getDefaultColumnDef:{fn:()=>aa(e),memoDeps:()=>[e.options.defaultColumn]},table_getAllColumns:{fn:()=>sa(e),memoDeps:()=>[e.options.columns]},table_getAllFlatColumns:{fn:()=>ca(e),memoDeps:()=>[e.options.columns]},table_getAllFlatColumnsById:{fn:()=>la(e),memoDeps:()=>[e.options.columns]},table_getAllLeafColumns:{fn:()=>ua(e),memoDeps:()=>[e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_getAllLeafColumnsById:{fn:()=>da(e),memoDeps:()=>[e.getAllLeafColumns()]},table_getColumn:{fn:t=>fa(e,t)}})}};function ma(e,t){for(let n=0;n<e.subHeaders.length;n++)ma(e.subHeaders[n],t);t.push(e)}function ha(e){let t=[];return ma(e,t),t}function ga(e){return{column:e.column,header:e,table:e.column.table}}function _a(e){let{start:t,end:n}=e.atoms.columnPinning?.get()??ji(),r=e.getAllColumns(),i=Z(e,`getVisibleLeafColumns`,zi);if(!t.length&&!n.length)return Qi(r,i,e);let a=e.getAllLeafColumnsById(),o=[];for(let e=0;e<t.length;e++){let n=a[t[e]];n&&Z(n,`getIsVisible`,Q)&&o.push(n)}let s=[];for(let e=0;e<n.length;e++){let t=a[n[e]];t&&Z(t,`getIsVisible`,Q)&&s.push(t)}let c=i.filter(e=>!t.includes(e.id)&&!n.includes(e.id));return Qi(r,[...o,...c,...s],e)}function va(e){return[...e.getHeaderGroups()].reverse()}function ya(e){let t=e.getHeaderGroups(),n=[];for(let e=0;e<t.length;e++){let r=t[e].headers;for(let e=0;e<r.length;e++)n.push(r[e])}return n}function ba(e){let t=e.getHeaderGroups()[0]?.headers??[],n=[];for(let e=0;e<t.length;e++){let r=t[e].getLeafHeaders();for(let e=0;e<r.length;e++)n.push(r[e])}return n}var xa={assignHeaderPrototype:(e,t)=>{X(`coreHeadersFeature`,e,t,{header_getLeafHeaders:{fn:e=>ha(e),memoDeps:e=>[e.column.table.options.columns]},header_getContext:{fn:e=>ga(e),memoDeps:e=>[e.column.table.options.columns]}})},constructTableAPIs:e=>{Y(`coreHeadersFeature`,e,{table_getHeaderGroups:{fn:()=>_a(e),memoDeps:()=>[e.options.columns,e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.atoms.columnPinning?.get(),e.atoms.columnVisibility?.get(),e.options.groupedColumnMode]},table_getFooterGroups:{fn:()=>va(e),memoDeps:()=>[e.getHeaderGroups()]},table_getFlatHeaders:{fn:()=>ya(e),memoDeps:()=>[e.getHeaderGroups()]},table_getLeafHeaders:{fn:()=>ba(e),memoDeps:()=>[e.getHeaderGroups()]}})}};function Sa(e){if(!e._rowPrototype){e._rowPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignRowPrototype?.(e._rowPrototype,e)}return e._rowPrototype}var Ca=(e,t,n,r,i,a,o)=>{let s=Sa(e),c=Object.create(s);c._displayIndexCache=-1,c._uniqueValuesCache=J(),c._valuesCache=J(),c.depth=i,c.id=t,c.index=r,c.original=n,c.parentId=o,c.subRows=a??[];let l=e._rowInstanceInitFns;for(let e=0;e<l.length;e++)l[e](c);return c},wa=/([0-9]+)/gm;function Ta(e){let t=Object.assign((e,n,r)=>{let i=e.getValue(r),a=n.getValue(r),o=t.resolveDataValue;return o&&(i=o(i),a=o(a)),t.sort(i,a,e,n,r)},e);return t}Ta({resolveDataValue:e=>ka(e).toLowerCase(),sort:(e,t)=>Aa(e,t)}),Ta({resolveDataValue:e=>ka(e),sort:(e,t)=>Aa(e,t)}),Ta({resolveDataValue:e=>ka(e).toLowerCase(),sort:(e,t)=>Da(e,t)}),Ta({resolveDataValue:e=>ka(e),sort:(e,t)=>Da(e,t)}),Ta({resolveDataValue:e=>Oa(e),sort:(e,t)=>e>t?1:e<t?-1:0});var Ea=Ta({sort:(e,t)=>Da(e,t)});function Da(e,t){return e===t?0:e>t?1:-1}function Oa(e){return e instanceof Date?e.getTime():e}function ka(e){return typeof e==`number`?isNaN(e)||e===1/0||e===-1/0?``:String(e):typeof e==`string`?e:``}function Aa(e,t){let n=0,r=0,i=e.length,a=t.length;for(;n<i&&r<a;){let i=ja(e.charCodeAt(n)),a=ja(t.charCodeAt(r)),o=Ma(e,n,i),s=Ma(t,r,a);if(!i&&!a){let i=Na(e,n,o,t,r,s);if(i)return i;n=o,r=s;continue}if(i!==a)return i?1:-1;let c=Pa(e,n,o,t,r,s);if(c)return c;n=o,r=s}return Ia(e,n)-Ia(t,r)}function ja(e){return e>=48&&e<=57}function Ma(e,t,n){let r=t+1;for(;r<e.length&&ja(e.charCodeAt(r))===n;)r++;return r}function Na(e,t,n,r,i,a){let o=n-t,s=a-i,c=o<s?o:s;for(let n=0;n<c;n++){let a=e.charCodeAt(t+n),o=r.charCodeAt(i+n);if(a>o)return 1;if(o>a)return-1}return o>s?1:s>o?-1:0}function Pa(e,t,n,r,i,a){let o=t;for(;o<n&&e.charCodeAt(o)===48;)o++;let s=i;for(;s<a&&r.charCodeAt(s)===48;)s++;let c=n-o,l=a-s;if(c===0&&l===0)return 0;if(c<=15&&l<=15){let t=Fa(e,o,n),i=Fa(r,s,a);return t>i?1:i>t?-1:0}let u=parseInt(e.slice(t,n),10),d=parseInt(r.slice(i,a),10);return u>d?1:d>u?-1:0}function Fa(e,t,n){let r=0;for(let i=t;i<n;i++)r=r*10+e.charCodeAt(i)-48;return r}function Ia(e,t){let n=0,r=t;for(;r<e.length;)n++,r=Ma(e,r,ja(e.charCodeAt(r)));return n}function La(){return[]}function Ra(e,t){vi(e,`cellSelection`,t?La():q(e.initialState.cellSelection)??La())}function za(e){e.atoms.cellSelection&&(e.options.autoResetAll??e.options.autoResetCellSelection??!0)&&e._reactivity.schedule(()=>Ra(e))}function Ba(e){e.atoms.expanded&&(e.options.autoResetAll??e.options.autoResetExpanded??!e.options.manualExpanding)&&e._reactivity.schedule(()=>Va(e))}function Va(e,t){let n=e.initialState.expanded;vi(e,`expanded`,t?J():n===!0||Object.assign(J(),q(n??{})))}function Ha(e){let t=e.table.atoms.expanded?.get()??{};return!!(e.table.options.getIsRowExpanded?.(e)??(t===!0||Ua(t,e.id)))}function Ua(e,t){return!!(e&&e!==!0&&di(e,t)&&e[t])}var $=0,Wa=10;function Ga(){return{pageIndex:$,pageSize:Wa}}function Ka(e){if(e.options.autoResetAll??e.options.autoResetPageIndex??!e.options.manualPagination){if((e.atoms.pagination?.get()?.pageIndex??$)===$)return;Xa(e,!0)}}function qa(e,t){vi(e,`pagination`,t)}function Ja(e,t){qa(e,t?Ga():q(e.initialState.pagination??Ga()))}function Ya(e,t){qa(e,n=>{let r=li(t,n.pageIndex),i=e.options.pageCount===void 0||e.options.pageCount===-1?2**53-1:e.options.pageCount-1;return r=Math.max(0,Math.min(r,i)),{...n,pageIndex:r}})}function Xa(e,t){Ya(e,t?$:e.initialState.pagination?.pageIndex??$)}function Za(e,t){Qa(e,t?Wa:e.initialState.pagination?.pageSize??Wa)}function Qa(e,t){qa(e,e=>{let n=Math.max(1,li(t,e.pageSize)),r=e.pageSize===1/0?0:e.pageSize*e.pageIndex,i=n===1/0?0:Math.floor(r/n);return{...e,pageIndex:i,pageSize:n}})}function $a(e){let t=so(e),n=[];return t&&t>0&&(n=[...Array(t)].fill(null).map((e,t)=>t)),n}function eo(e){return(e.atoms.pagination?.get()?.pageIndex??0)>0}function to(e){let t=e.atoms.pagination?.get()?.pageIndex??$,n=so(e);return n===-1||n!==0&&t<n-1}function no(e){let t=e.atoms.pagination?.get()?.pageIndex??$,n=so(e);return Number.isFinite(n)&&n>0&&t<n-1}function ro(e){return Ya(e,e=>e-1)}function io(e){return Ya(e,e=>e+1)}function ao(e){return Ya(e,0)}function oo(e){let t=so(e);if(!(!Number.isFinite(t)||t<=0))return Ya(e,t-1)}function so(e){let t=e.options.pageCount;if(t!=null)return t;let n=co(e),r=e.atoms.pagination?.get()?.pageSize??Wa;return r===1/0&&Number.isFinite(n)&&n>0?1:Math.ceil(n/r)}function co(e){return e.options.rowCount??e.getPrePaginatedRowModel().rows.length}function lo(){return[]}function uo(e,t){vi(e,`sorting`,t)}function fo(e,t){uo(e,t?[]:q(e.initialState.sorting??[]))}function po(e){e.atoms.sorting&&(e.options.autoResetAll??e.options.autoResetSorting??!1)&&fo(e)}function mo(e){let t=e.table._rowModelFns.sortFns,n=e.table.getFilteredRowModel().flatRows.slice(0,10),r,i=!1;for(let t=0;t<n.length;t++){let a=n[t].getValue(e.id);if(Object.prototype.toString.call(a)===`[object Date]`){r=`datetime`;break}if(typeof a==`string`&&(i=!0,a.split(wa).length>1)){r=`alphanumeric`;break}}if(!r&&i&&(r=`text`),r){let e=t?.[r];if(e||r===`alphanumeric`&&(e=t?.text),e)return e}return Ea}function ho(e){let t=e.table.getFilteredRowModel().flatRows.slice(0,10);for(let n=0;n<t.length;n++){let r=t[n].getValue(e.id);if(r!=null)return typeof r==`string`?`asc`:`desc`}return`desc`}function go(e){let t=e.table._rowModelFns.sortFns;return yi(e.columnDef.sortFn)?e.columnDef.sortFn:e.columnDef.sortFn===`auto`?mo(e):t?.[e.columnDef.sortFn]??Ea}function _o(e,t,n){let r=yo(e,n&&xo(e)),i=t!==void 0;uo(e.table,a=>{let o=a.findIndex(t=>t.id===e.id),s=o===-1?void 0:a[o],c=[],l,u=i?t:r===`desc`,d=!!(a.length&&xo(e)&&n);return l=d?s?`toggle`:`add`:s?`toggle`:`replace`,l===`toggle`&&(i||r||(l=`remove`)),l===`add`?(c=[...a,{id:e.id,desc:u}],c.splice(0,c.length-(e.table.options.maxMultiSortColCount??2**53-1))):c=l===`toggle`?d?a.map(t=>t.id===e.id?{...t,desc:u}:t):[{id:e.id,desc:u}]:l===`remove`?d?a.filter(t=>t.id!==e.id):[]:[{id:e.id,desc:u}],c})}function vo(e){return e.columnDef.sortDescFirst??e.table.options.sortDescFirst??ho(e)===`desc`?`desc`:`asc`}function yo(e,t){let n=vo(e),r=So(e);return r?r!==n&&(e.table.options.enableSortingRemoval??!0)&&(!t||(e.table.options.enableMultiRemove??!0))?!1:r===`desc`?`asc`:`desc`:n}function bo(e){return(e.columnDef.enableSorting??!0)&&(e.table.options.enableSorting??!0)&&!!e.accessorFn}function xo(e){return e.columnDef.enableMultiSort??e.table.options.enableMultiSort??!!e.accessorFn}function So(e){let t=e.table.atoms.sorting?.get()?.find(t=>t.id===e.id);return t?t.desc?`desc`:`asc`:!1}function Co(e){return e.table.atoms.sorting?.get()?.findIndex(t=>t.id===e.id)??-1}function wo(e){uo(e.table,t=>t.length?t.filter(t=>t.id!==e.id):[])}function To(e){let t=bo(e);return n=>{t&&_o(e,void 0,xo(e)?e.table.options.isMultiSortEvent?.(n):!1)}}function Eo(){return e=>Ci({feature:`coreRowModelsFeature`,table:e,fnName:`table.getCoreRowModel`,memoDeps:()=>[e.options.data],fn:()=>Oo(e,e.options.data),onAfterUpdate:Si(()=>{Ba(e),Ka(e),po(e),za(e)})})}function Do(e,t,n,r=0,i){let a=[];for(let o=0;o<n.length;o++){let s=n[o],c=Ca(e,e.getRowId(s,o,i),s,o,r,void 0,i?.id);t.flatRows.push(c),t.rowsById[c.id]=c,a.push(c),e.options.getSubRows&&(c.originalSubRows=e.options.getSubRows(s,o),c.originalSubRows?.length&&(c.subRows=Do(e,t,c.originalSubRows,r+1,c)))}return a}function Oo(e,t){let n={rows:[],flatRows:[],rowsById:J()};return n.rows=Do(e,n,t),n}function ko(e){return e._rowModels.coreRowModel||(e._rowModels.coreRowModel=e.options.features.coreRowModel?.(e)??Eo()(e)),e._rowModels.coreRowModel()}function Ao(e){return e.getCoreRowModel()}function jo(e){return e._rowModels.filteredRowModel||(e._rowModels.filteredRowModel=e.options.features.filteredRowModel?.(e)),e.options.manualFiltering||!e._rowModels.filteredRowModel?e.getPreFilteredRowModel():e._rowModels.filteredRowModel()}function Mo(e){return e.getFilteredRowModel()}function No(e){return e._rowModels.groupedRowModel||(e._rowModels.groupedRowModel=e.options.features.groupedRowModel?.(e)),e.options.manualGrouping||!e._rowModels.groupedRowModel?e.getPreGroupedRowModel():e._rowModels.groupedRowModel()}function Po(e){return e.getGroupedRowModel()}function Fo(e){return e._rowModels.sortedRowModel||(e._rowModels.sortedRowModel=e.options.features.sortedRowModel?.(e)),e.options.manualSorting||!e._rowModels.sortedRowModel?e.getPreSortedRowModel():e._rowModels.sortedRowModel()}function Io(e){return e.getSortedRowModel()}function Lo(e){return e._rowModels.expandedRowModel||(e._rowModels.expandedRowModel=e.options.features.expandedRowModel?.(e)),e.options.manualExpanding||!e._rowModels.expandedRowModel?e.getPreExpandedRowModel():e._rowModels.expandedRowModel()}function Ro(e){return e.getExpandedRowModel()}function zo(e){return e._rowModels.paginatedRowModel||(e._rowModels.paginatedRowModel=e.options.features.paginatedRowModel?.(e)),e.options.manualPagination||!e._rowModels.paginatedRowModel?e.getPrePaginatedRowModel():e._rowModels.paginatedRowModel()}function Bo(e){return e.getPaginatedRowModel()}var Vo={constructTableAPIs:e=>{Y(`coreRowModelsFeature`,e,{table_getCoreRowModel:{fn:()=>ko(e)},table_getPreFilteredRowModel:{fn:()=>Ao(e)},table_getFilteredRowModel:{fn:()=>jo(e)},table_getPreGroupedRowModel:{fn:()=>Mo(e)},table_getGroupedRowModel:{fn:()=>No(e)},table_getPreSortedRowModel:{fn:()=>Po(e)},table_getSortedRowModel:{fn:()=>Fo(e)},table_getPreExpandedRowModel:{fn:()=>Io(e)},table_getExpandedRowModel:{fn:()=>Lo(e)},table_getPrePaginatedRowModel:{fn:()=>Ro(e)},table_getPaginatedRowModel:{fn:()=>zo(e)},table_getRowModel:{fn:()=>Bo(e)}})}};function Ho(e){if(!e._cellPrototype){e._cellPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignCellPrototype?.(e._cellPrototype,e)}return e._cellPrototype}function Uo(e,t,n){let r=Ho(n),i=Object.create(r);i.column=e,i.id=`${t.id}_${e.id}`,i.row=t;let a=n._cellInstanceInitFns;for(let e=0;e<a.length;e++)a[e](i);return i}function Wo(e){let t=e.table.getRowsInDisplayOrder(),n=e._displayIndexCache;return t[n]===e?n:-1}function Go(e){let t=e.getPrePaginatedRowModel().rows;if(e.options.paginateExpandedRows===!1){let e=[],n=t=>{t._displayIndexCache=e.length,e.push(t),t.subRows.length&&t.getIsExpanded?.()&&t.subRows.forEach(n)};return t.forEach(n),e}for(let e=0;e<t.length;e++)t[e]._displayIndexCache=e;return t}function Ko(e,t){if(di(e._valuesCache,t))return e._valuesCache[t];let n=e.table.getColumn(t);if(n?.accessorFn)return e._valuesCache[t]=n.accessorFn(e.original,e.index),e._valuesCache[t]}function qo(e,t){if(di(e._uniqueValuesCache,t))return e._uniqueValuesCache[t];let n=e.table.getColumn(t);if(n?.accessorFn)return n.columnDef.getUniqueValues?(e._uniqueValuesCache[t]=n.columnDef.getUniqueValues(e.original,e.index),e._uniqueValuesCache[t]):(e._uniqueValuesCache[t]=[e.getValue(t)],e._uniqueValuesCache[t])}function Jo(e,t){return e.getValue(t)??e.table.options.renderFallbackValue}function Yo(e){return bi(e.subRows,e=>e.subRows)}function Xo(e){let t=e.getCoreRowModel().flatRows,n=0;for(let e=0;e<t.length;e++)n=Math.max(n,t[e].depth);return n}function Zo(e){if(e.parentId)return e.table.getCoreRowModel().rowsById[e.parentId]??e.table.getRow(e.parentId,!0)}function Qo(e){let t=[],n=e;for(;;){let e=n.getParentRow();if(!e)break;t.push(e),n=e}return t.reverse()}function $o(e){let t=e.table.getAllLeafColumns(),n=e._cellsCache;n||=e._cellsCache=new WeakMap;let r=Array(t.length);for(let i=0;i<t.length;i++){let a=t[i],o=n.get(a);o||(o=Uo(a,e,e.table),n.set(a,o)),r[i]=o}return r}function es(e){let t=J(),n=e.getAllCells();for(let e=0;e<n.length;e++){let r=n[e];t[r.column.id]=r}return t}function ts(e,t,n,r){return t.options.getRowId?.(e,n,r)??(r?`${r.id}.${n}`:String(n))}function ns(e,t,n){let r=(n?e.getPrePaginatedRowModel():e.getRowModel()).rowsById[t];if(!r&&(r=e.getCoreRowModel().rowsById[t],!r))throw Error();return r}var rs={assignRowPrototype:(e,t)=>{X(`coreRowsFeature`,e,t,{row_getDisplayIndex:{fn:e=>Wo(e)},row_getAllCellsByColumnId:{fn:e=>es(e),memoDeps:e=>[e.getAllCells()]},row_getAllCells:{fn:e=>$o(e),memoDeps:e=>[e.table.getAllLeafColumns()]},row_getLeafRows:{fn:e=>Yo(e),memoDeps:e=>[e.subRows]},row_getParentRow:{fn:e=>Zo(e)},row_getParentRows:{fn:e=>Qo(e)},row_getUniqueValues:{fn:(e,t)=>qo(e,t)},row_getValue:{fn:(e,t)=>Ko(e,t)},row_renderValue:{fn:(e,t)=>Jo(e,t)}})},constructTableAPIs:e=>{Y(`coreRowsFeature`,e,{table_getRowsInDisplayOrder:{fn:()=>Go(e),memoDeps:()=>[e.getPrePaginatedRowModel().rows,e.options.paginateExpandedRows,e.options.paginateExpandedRows===!1?e.atoms.expanded?.get():void 0]},table_getRowId:{fn:(t,n,r)=>ts(t,e,n,r)},table_getRow:{fn:(t,n)=>ns(e,t,n)},table_getMaxSubRowDepth:{fn:()=>Xo(e),memoDeps:()=>[e.getCoreRowModel()]}})}};function is(e,t,n=(e,t)=>e===t){let r=t===void 0?e.options.state:t;e._reactivity.batch(()=>{if(r)for(let t in r){let i=e.baseAtoms[t];if(!i)continue;let a=r[t],o=a===void 0?e.initialState[t]:a;n(e._reactivity.untrack(()=>i.get()),o)||i.set(()=>o)}})}function as(e,t,n=(e,t)=>e===t){e._reactivity.batch(()=>{is(e,t,n),e._reactivity.commit?.()})}function os(e){let t=q(e.initialState);e._reactivity.batch(()=>{let n=Object.keys(t);for(let r=0;r<n.length;r++){let i=n[r];e.baseAtoms[i].set(t[i])}});let n=Object.values(e._features);for(let t=0;t<n.length;t++)n[t].resetTableInstanceData?.(e)}function ss(e,t){let{features:n,atoms:r,initialState:i}=e.options;if(!e.options.mergeOptions)return{...e.options,...t,features:n,atoms:r,initialState:i};let a=e.options.mergeOptions(e.options,t),o={...Object.getOwnPropertyDescriptors(a)};return Object.defineProperties(Object.create(Object.getPrototypeOf(a)),{...o,features:{value:n,enumerable:!0,configurable:!0,writable:!0},atoms:{value:r,enumerable:!0,configurable:!0,writable:!0},initialState:{value:i,enumerable:!0,configurable:!0,writable:!0}})}function cs(e,t,n){let r=ss(e,li(t,e.options));e.optionsStore?e.optionsStore.set(()=>r):e.options=r,n?.syncExternalState!==!1&&as(e,r.state??null)}var ls={coreCellsFeature:Oi,coreColumnsFeature:pa,coreHeadersFeature:xa,coreRowModelsFeature:Vo,coreRowsFeature:rs,coreTablesFeature:{constructTableAPIs:e=>{Y(`coreTablesFeature`,e,{table_reset:{fn:()=>os(e)},table_setOptions:{fn:t=>cs(e,t)}})}}};function us(e){return e}function ds(e,t={}){return Object.values(e).forEach(e=>{t=e.getInitialState?.(t)??t}),q(t)}function fs(e){let t=e.features.coreReactivityFeature,{aggregationFns:n,columnMeta:r,coreRowModel:i,expandedRowModel:a,facetedMinMaxValues:o,facetedRowModel:s,facetedUniqueValues:c,filterFns:l,filterMeta:u,filteredRowModel:d,groupedRowModel:f,paginatedRowModel:p,sortFns:m,sortedRowModel:h,tableMeta:g,..._}=e.features,v={_cellInstanceInitFns:[],_columnInstanceInitFns:[],_features:{...ls,..._},_headerGroupInstanceInitFns:[],_headerInstanceInitFns:[],_reactivity:t,_rowInstanceInitFns:[],_rowModelFns:{aggregationFns:n,filterFns:l,sortFns:m},_rowModels:{},atoms:{},baseAtoms:{}},y=Object.values(v._features),b={...y.reduce((e,t)=>Object.assign(e,t.getDefaultTableOptions?.(v)),{}),...e};if(t.wrapExternalAtoms&&b.atoms)for(let[e,n]of Object.entries(b.atoms)){let r=n,i=t.createWritableAtom(r.get(),{debugName:`externalAtom/${e}`});b.atoms[e]=i;let a=!1,o=r.subscribe(e=>{a||i.set(e)}),s=i.subscribe(e=>{a=!0,r.set(e),a=!1});t.addSubscription(o),t.addSubscription(s)}t.createOptionsStore?(v.optionsStore=t.createWritableAtom(b,{debugName:`table/optionsStore`}),Object.defineProperty(v,"options",{configurable:!0,enumerable:!0,get(){return v.optionsStore.get()},set(e){v.optionsStore.set(()=>e)}})):v.options=b,v.initialState=ds(v._features,v.options.initialState);let x=Object.keys(v.initialState);for(let e=0;e<x.length;e++){let n=x[e];v.baseAtoms[n]=t.createWritableAtom(v.initialState[n],{debugName:`table/baseAtoms/${n}`}),v.atoms[n]=t.createReadonlyAtom(()=>{let e=v.options,t=e.atoms?.[n],r=t?t.get():v.baseAtoms[n].get();if(t)return r;let i=e.state;if(i&&di(i,n)){let e=i[n];return e===void 0?v.initialState[n]:e}return r},{debugName:`table/atoms/${n}`})}is(v),v.store=ai(t.createReadonlyAtom(()=>{let e={};for(let t=0;t<x.length;t++){let n=x[t];e[n]=v.atoms[n].get()}return e},{compare:$r,debugName:`table/store`}));for(let e=0;e<y.length;e++){let t=y[e];t.initTableInstanceData?.(v),t.initCellInstanceData&&v._cellInstanceInitFns.push(t.initCellInstanceData.bind(t)),t.initColumnInstanceData&&v._columnInstanceInitFns.push(t.initColumnInstanceData.bind(t)),t.initHeaderGroupInstanceData&&v._headerGroupInstanceInitFns.push(t.initHeaderGroupInstanceData.bind(t)),t.initHeaderInstanceData&&v._headerInstanceInitFns.push(t.initHeaderInstanceData.bind(t)),t.initRowInstanceData&&v._rowInstanceInitFns.push(t.initRowInstanceData.bind(t)),t.constructTableAPIs?.(v)}return v}var ps={getInitialState:e=>({columnVisibility:Mi(),...e}),getDefaultTableOptions:e=>({onColumnVisibilityChange:fi(`columnVisibility`,e)}),assignColumnPrototype:(e,t)=>{X(`columnVisibilityFeature`,e,t,{column_getIsVisible:{fn:e=>Q(e),memoDeps:e=>[t.options.columns,t.atoms.columnVisibility?.get(),e.columns]},column_getCanHide:{fn:e=>Pi(e)},column_getToggleVisibilityHandler:{fn:e=>Fi(e)},column_toggleVisibility:{fn:(e,t)=>Ni(e,t)}})},assignRowPrototype:(e,t)=>{X(`columnVisibilityFeature`,e,t,{row_getVisibleCells:{fn:e=>Ii(e),memoDeps:e=>[e.getAllCells(),t.atoms.columnPinning?.get(),t.atoms.columnVisibility?.get()]},row_getVisibleCellsByColumnId:{fn:e=>Li(e),memoDeps:e=>[e.getAllCells(),t.atoms.columnVisibility?.get()]}})},constructTableAPIs:e=>{Y(`columnVisibilityFeature`,e,{table_getVisibleFlatColumns:{fn:()=>Ri(e),memoDeps:()=>[e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_getVisibleLeafColumns:{fn:()=>zi(e),memoDeps:()=>[e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_setColumnVisibility:{fn:t=>Bi(e,t)},table_resetColumnVisibility:{fn:t=>Vi(e,t)},table_toggleAllColumnsVisible:{fn:t=>Hi(e,t)},table_getIsAllColumnsVisible:{fn:()=>Ui(e)},table_getIsSomeColumnsVisible:{fn:()=>Wi(e)},table_getToggleAllColumnsVisibilityHandler:{fn:()=>Gi(e)}})}},ms={getInitialState:e=>({...e,pagination:{...Ga(),...e.pagination}}),getDefaultTableOptions:e=>({onPaginationChange:fi(`pagination`,e)}),constructTableAPIs:e=>{Y(`rowPaginationFeature`,e,{table_autoResetPageIndex:{fn:()=>Ka(e)},table_setPagination:{fn:t=>qa(e,t)},table_resetPagination:{fn:t=>Ja(e,t)},table_setPageIndex:{fn:t=>Ya(e,t)},table_resetPageIndex:{fn:t=>Xa(e,t)},table_setPageSize:{fn:t=>Qa(e,t)},table_getPageCount:{fn:()=>so(e)},table_resetPageSize:{fn:t=>Za(e,t)},table_getPageOptions:{fn:()=>$a(e)},table_getCanPreviousPage:{fn:()=>eo(e)},table_getCanNextPage:{fn:()=>to(e)},table_getCanLastPage:{fn:()=>no(e)},table_previousPage:{fn:()=>ro(e)},table_nextPage:{fn:()=>io(e)},table_firstPage:{fn:()=>ao(e)},table_lastPage:{fn:()=>oo(e)},table_getRowCount:{fn:()=>co(e)}})}},hs={getInitialState(e){return{sorting:lo(),...e}},getDefaultColumnDef(){return{sortFn:`auto`,sortUndefined:1}},getDefaultTableOptions(e){return{autoResetSorting:!1,onSortingChange:fi(`sorting`,e),isMultiSortEvent:e=>e.shiftKey}},assignColumnPrototype(e,t){X(`rowSortingFeature`,e,t,{column_getAutoSortFn:{fn:e=>mo(e)},column_getAutoSortDir:{fn:e=>ho(e)},column_getSortFn:{fn:e=>go(e)},column_toggleSorting:{fn:(e,t,n)=>_o(e,t,n)},column_getFirstSortDir:{fn:e=>vo(e)},column_getNextSortingOrder:{fn:(e,t)=>yo(e,t)},column_getCanSort:{fn:e=>bo(e)},column_getCanMultiSort:{fn:e=>xo(e)},column_getIsSorted:{fn:e=>So(e)},column_getSortIndex:{fn:e=>Co(e)},column_clearSorting:{fn:e=>wo(e)},column_getToggleSortingHandler:{fn:e=>To(e)}})},constructTableAPIs(e){Y(`rowSortingFeature`,e,{table_setSorting:{fn:t=>uo(e,t)},table_resetSorting:{fn:t=>fo(e,t)}})}};function gs(e){let t=[],n=e=>{t.push(e),e.subRows.length&&Ha(e)&&e.subRows.forEach(n)};return e.rows.forEach(n),{rows:t,flatRows:e.flatRows,rowsById:e.rowsById}}function _s(){return e=>{let t=e;return Ci({feature:`rowPaginationFeature`,table:t,fnName:`table.getPaginatedRowModel`,memoDeps:()=>[t.getPrePaginatedRowModel(),t.atoms.pagination?.get(),t.options.paginateExpandedRows?void 0:t.atoms.expanded?.get()],fn:()=>vs(t)})}}function vs(e){let t=e.getPrePaginatedRowModel(),n=e.atoms.pagination?.get();if(!t.rows.length)return t;let{pageSize:r,pageIndex:i}=n??Ga(),{rows:a,flatRows:o,rowsById:s}=t,c=a;if(r!==1/0||i!==0){let e=r*i,t=e+r;c=a.slice(e,t)}let l;l=e.options.paginateExpandedRows?{rows:c,flatRows:o,rowsById:s}:gs({rows:c,flatRows:o,rowsById:s}),l.flatRows=[];let u=new Set,d=e=>{u.has(e.id)||(u.add(e.id),l.flatRows.push(e),e.subRows.length&&e.subRows.forEach(d))};return l.rows.forEach(d),l}function ys(){return e=>{let t=e;return Ci({feature:`rowSortingFeature`,table:t,fnName:`table.getSortedRowModel`,memoDeps:()=>[t.atoms.sorting?.get(),t.getPreSortedRowModel()],fn:()=>bs(t),onAfterUpdate:Si(()=>Ka(t))})}}function bs(e){let t=e.getPreSortedRowModel(),n=e.atoms.sorting?.get();if(!t.rows.length||!n?.length)return t;let r=[],i=n.filter(t=>{let n=e.getColumn(t.id);return n?bo(n):!1});if(!i.length)return t;let a=[];for(let t=0;t<i.length;t++){let n=i[t],r=e.getColumn(n.id);r&&a.push({id:n.id,desc:n.desc,sortUndefined:r.columnDef.sortUndefined,invertSorting:r.columnDef.invertSorting,sortFn:go(r)})}let o=(e,t)=>{for(let n=0;n<a.length;n++){let r=a[n],i=r.sortUndefined,o=r.desc,s=0;if(i){let n=e.getValue(r.id),a=t.getValue(r.id),o=n===void 0,c=a===void 0;if(o&&c)continue;if(o||c){if(i===`first`)return o?-1:1;if(i===`last`)return o?1:-1;s=o?i:-i}}if(s===0&&(s=r.sortFn(e,t,r.id)),s!==0)return o&&(s*=-1),r.invertSorting&&(s*=-1),s}return e.index-t.index},s=e=>{let t=e.slice();t.sort(o);let n=!1;for(let i=0;i<t.length;i++){let a=t[i];a!==e[i]&&(n=!0);let o=r.length;if(r.push(a),a.subRows.length){let e=s(a.subRows);if(e.changed){let s=Object.create(Object.getPrototypeOf(a));ui(s,a),s.subRows=e.rows,t[i]=s,r[o]=s,n=!0}}}return{rows:t,changed:n}};return{rows:s(t.rows).rows,flatRows:r,rowsById:t.rowsById}}var xs=typeof window>`u`?H.useEffect:H.useLayoutEffect;function Ss(e,t){let[{table:n,rootSource:r}]=(0,H.useState)(()=>{let t=fs({...e,features:{coreReactivityFeature:ci(),...e.features}});return t.Subscribe=(e=>ii({...e,source:e.source??t.store})),t.FlexRender=Fr,{table:t,rootSource:si(t.store,$r)}}),i=n;cs(i,t=>({...t,...e}),{syncExternalState:!1});let a=i.options.state,o=r.get(),s=ri(r,t,{compare:$r});return xs(()=>{r.markCommitted(o),as(i,a??null,$r)}),(0,H.useMemo)(()=>({...n,options:e,state:s}),[n,e,s])}var Cs=us({columnVisibilityFeature:ps,rowSortingFeature:hs,rowPaginationFeature:ms,sortedRowModel:ys(),paginatedRowModel:_s()}),ws=10,Ts=10,Es=new Set([`duration`,`taskCount`,`shuffleRead`,`fetchWait`,`gcPct`,`skew`,`spill`]);function Ds(e,t){return e.length>t?`${e.slice(0,t)}…`:e}function Os(e){return e<=0?(0,U.jsx)(U.Fragment,{children:`0`}):(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[e,` `,(0,U.jsx)(ft,{label:`RETRY`,impactBand:`critical`})]})}function ks(e,t,n){if(e<=0)return(0,U.jsx)(U.Fragment,{children:`—`});let r=B(e);if(t<=0)return(0,U.jsx)(U.Fragment,{children:r});let i=e/t;return i>.3?(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[r,` `,(0,U.jsx)(ft,{label:n===`advanced`?`${Math.round(i*100)}%`:`High`,impactBand:`critical`})]}):i>.15?(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[r,` `,(0,U.jsx)(ft,{label:n===`advanced`?`${Math.round(i*100)}%`:`Elevated`,impactBand:`info`})]}):(0,U.jsx)(U.Fragment,{children:r})}function As(e,t){if(!e||e<=0||!t||t<=0)return(0,U.jsx)(U.Fragment,{children:`—`});let n=t/e,r=n<.01?`${n.toExponential(1)}×`:`${n.toFixed(2)}×`;return n>2||n<.1?(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[r,` `,(0,U.jsx)(ft,{label:`extreme`,impactBand:`info`})]}):(0,U.jsx)(U.Fragment,{children:r})}function js(e,t){if(e<=0)return(0,U.jsx)(U.Fragment,{children:`—`});let n=t??`unclassified`;return(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[R(e),` `,(0,U.jsx)(ft,{label:ot[n],impactBand:`warning`,title:lt[n]})]})}function Ms(e,t){return!e||e<=0?0:(t??0)/e}function Ns(e){let t=new Map;for(let n of e)t.has(n.type)||t.set(n.type,[]),t.get(n.type).push(n);return[...t.values()].map(e=>{let t=mt(e);return e.find(e=>e.impactBand===t)??e[0]})}function Ps({appModel:e,catalog:t,getTaskData:n,onRoute:r}){let{openStage:i}=it(),a=Ke(),[o,s]=(0,H.useState)(!1),[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)([]),[f,p]=(0,H.useState)({pageIndex:0,pageSize:ws}),{catalogByStage:m,flaggedStageIds:h,frequency:g}=(0,H.useMemo)(()=>{let e=new Map,n=new Set;for(let r of t)r.stageId!=null&&(n.add(r.stageId),e.has(r.stageId)||e.set(r.stageId,[]),e.get(r.stageId).push(r));return{catalogByStage:e,flaggedStageIds:n,frequency:Je(t)}},[t]),_=(0,H.useMemo)(()=>{let t=[...e.stages.values()],n=o?t.filter(e=>h.has(e.id)):[...t].sort((e,t)=>(t.completedAt??0)-(t.submittedAt??0)-((e.completedAt??0)-(e.submittedAt??0))).slice(0,Ts),r=c.trim().toLowerCase();return(r?n.filter(e=>(e.name??``).toLowerCase().includes(r)||String(e.id).includes(r)):n).map(e=>({stage:e,tags:Ns(m.get(e.id)??[]),frequency:g.get(e.id)??0}))},[e.stages,o,h,m,g,c]),v=(0,H.useMemo)(()=>{if(!r)return null;let e=new Map;for(let n of t){let r=$n(n,t);r&&e.set(n,r)}return e},[t,r]),y=(0,H.useMemo)(()=>[{id:`id`,header:`Stage`,accessorFn:e=>e.stage.id,cell:({getValue:e})=>{let t=e();return(0,U.jsx)(`button`,{type:`button`,"aria-label":`Open Stage ${t} details`,className:`inline-flex cursor-pointer items-center rounded-sm hover:underline underline-offset-2 focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:e=>{e.stopPropagation(),i(t)},children:(0,U.jsx)(`strong`,{children:t})})}},{id:`name`,header:`Operation`,accessorFn:e=>e.stage.name??``,cell:({row:e})=>{let t=e.original.stage.id;return(0,U.jsxs)(`span`,{className:`inline-flex flex-wrap items-center gap-1.5`,children:[Ds(e.original.stage.name??``,40),e.original.tags.map((e,n)=>{let i=v?v.get(e)??null:null,a=i&&r?{target:i,onRoute:r}:null,o=wt(e.impactEstimate);return(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[a?(0,U.jsx)(`button`,{type:`button`,"aria-label":`Investigate ${a.target.findingLabel} in Stage ${t}`,title:`Investigate ${a.target.findingLabel} in Stage ${t}`,className:`inline-flex cursor-pointer items-center rounded-full hover:underline underline-offset-2 focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,onClick:e=>{e.stopPropagation(),a.onRoute(a.target)},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&e.stopPropagation()},children:(0,U.jsx)(Ue,{type:e.type,impactBand:e.impactBand,plainBadge:!0})}):(0,U.jsx)(Ue,{type:e.type,impactBand:e.impactBand}),o?(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:o}):null]},n)})]})}},{id:`type`,header:`Type`,accessorFn:e=>e.stage.stageType??``,cell:({row:e})=>(0,U.jsx)(tt,{variant:`outline`,children:e.original.stage.stageType??`—`})},{id:`duration`,header:`Duration`,accessorFn:e=>(e.stage.completedAt??0)-(e.stage.submittedAt??0),cell:({getValue:e})=>(0,U.jsx)(U.Fragment,{children:B(e())})},{id:`taskCount`,header:`Tasks`,accessorFn:e=>e.stage.taskCount},{id:`retried`,header:`Retried`,accessorFn:e=>e.stage.failedTasks??0,cell:({getValue:e})=>Os(e())},{id:`shuffleRead`,header:`Shuffle Read`,accessorFn:e=>e.stage.shuffleReadBytes??0,cell:({getValue:e})=>(0,U.jsx)(U.Fragment,{children:R(e())})},{id:`fetchWait`,header:`Fetch Wait`,accessorFn:e=>e.stage.fetchWaitTime??0,cell:({row:e})=>ks(e.original.stage.fetchWaitTime??0,e.original.stage.executorRunTime??0,a)},...a===`advanced`?[{id:`ioRatio`,header:`I/O Ratio`,accessorFn:e=>e.stage.inputBytes?(e.stage.outputBytes??0)/e.stage.inputBytes:0,cell:({row:e})=>As(e.original.stage.inputBytes??0,e.original.stage.outputBytes??0)}]:[],{id:`spill`,header:`Spill (mem)`,accessorFn:e=>e.stage.memoryBytesSpilled??0,cell:({row:e})=>js(e.original.stage.memoryBytesSpilled??0,e.original.stage.spillClassification)},...a===`advanced`?[{id:`gcPct`,header:`GC%`,accessorFn:e=>e.stage.gcPct??0,cell:({getValue:e})=>(0,U.jsxs)(U.Fragment,{children:[e().toFixed(1),`%`]})},{id:`skew`,header:`Skew P95/median`,accessorFn:e=>Ms(e.stage.taskDurationP50,e.stage.taskDurationP95),cell:({getValue:e})=>{let t=e();return(0,U.jsx)(U.Fragment,{children:t>0?`${t.toFixed(1)}×`:`—`})}}]:[],{id:`frequency`,header:`Flagged`,accessorFn:e=>e.frequency,cell:({getValue:e})=>{let t=e();return t<=1?(0,U.jsx)(U.Fragment,{children:`—`}):(0,U.jsx)(tt,{variant:`outline`,children:`Flagged by ${t}`})}}],[t,r,v,i,a]),b=Ss({features:Cs,data:_,columns:y,state:{sorting:u,pagination:f},sortDescFirst:!1,onSortingChange:d,onPaginationChange:p});function x(){s(e=>!e),d([]),p({pageIndex:0,pageSize:ws})}let S=e=>e===`asc`?` ▲`:e===`desc`?` ▼`:``,C=e=>e===`asc`?`ascending`:e===`desc`?`descending`:`none`;return(0,U.jsx)(I,{title:`Stage Summary`,children:(0,U.jsxs)(`div`,{className:`space-y-3`,children:[(0,U.jsx)(oe,{type:`text`,value:c,onChange:e=>{l(e.target.value),p(e=>({...e,pageIndex:0}))},placeholder:`Filter by stage name or ID…`,"aria-label":`Filter by stage name or ID`,className:`max-w-xs`}),(0,U.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Scroll sideways to see all columns →`}),(0,U.jsx)(Ve,{type:`button`,variant:`outline`,size:`sm`,onClick:x,children:o?`Top ${Ts} by duration`:`Problems only`})]}),(0,U.jsxs)(`p`,{className:`sr-only`,role:`status`,"aria-live":`polite`,children:[`Showing `,_.length,` stage`,_.length===1?``:`s`,`: `,` `,o?`problems only`:`top ${Ts} by duration`,`.`]}),(0,U.jsxs)(rt,{children:[(0,U.jsx)(pt,{children:b.getHeaderGroups().map(e=>(0,U.jsx)(F,{children:e.headers.map(e=>{let t=e.column.getIsSorted(),n=e.column.getToggleSortingHandler();return(0,U.jsxs)(ut,{scope:`col`,tabIndex:e.column.getCanSort()?0:void 0,"aria-sort":C(t),className:N(e.column.getCanSort()&&`tap-target-comfortable cursor-pointer select-none`,Es.has(e.column.id)&&`text-right`),onClick:n,onKeyDown:e=>{n&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n(e))},children:[G(e.column.columnDef.header,e.getContext()),S(t)]},e.id)})},e.id))}),(0,U.jsx)($e,{children:b.getRowModel().rows.length===0?(0,U.jsx)(F,{children:(0,U.jsx)(P,{colSpan:y.length,className:`text-muted-foreground`,children:(0,U.jsxs)(`span`,{className:`flex items-center justify-center gap-2 py-2`,children:[(0,U.jsx)(je,{"aria-hidden":`true`,className:`size-4 shrink-0`}),`No stages to show.`]})})}):b.getRowModel().rows.map(e=>(0,U.jsx)(F,{className:`cursor-pointer`,onClick:()=>i(e.original.stage.id),children:e.getVisibleCells().map(e=>(0,U.jsx)(P,{className:Es.has(e.column.id)?`text-right`:void 0,children:G(e.column.columnDef.cell,e.getContext())},e.id))},e.id))})]}),b.getPageCount()>1?(0,U.jsxs)(`div`,{className:`flex items-center justify-end gap-2 text-xs`,children:[(0,U.jsx)(Ve,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:()=>b.previousPage(),disabled:!b.getCanPreviousPage(),children:`Previous`}),(0,U.jsxs)(`span`,{className:`text-muted-foreground`,children:[`Page `,f.pageIndex+1,` of `,b.getPageCount()]}),(0,U.jsx)(Ve,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:()=>b.nextPage(),disabled:!b.getCanNextPage(),children:`Next`})]}):null]})})}var Fs=20,Is=24,Ls=40,Rs=200,zs=640;function Bs(e,t=Fs){let n=[...e].filter(e=>e.submittedAt&&e.completedAt),r=n.length;return r<=t?{stages:n.sort((e,t)=>e.submittedAt-t.submittedAt),total:r,capped:!1}:{stages:[...n].sort((e,t)=>t.completedAt-t.submittedAt-(e.completedAt-e.submittedAt)).slice(0,t).sort((e,t)=>e.submittedAt-t.submittedAt),total:r,capped:!0}}function Vs({appModel:e,catalog:t}){let{openStage:n}=it(),r=[...e.stages.values()].filter(e=>e.submittedAt&&e.completedAt),i=r.length,o=r.reduce((e,t)=>Math.min(e,t.submittedAt),1/0),s=e.app?.startTime??(Number.isFinite(o)?o:0),d=new Set(t.filter(e=>e.stageId!=null).map(e=>e.stageId)),m=Ke(),[g,_]=(0,H.useState)(()=>m===`advanced`?i:Fs),{stages:v}=Bs(r,g),y=bt(v).map(e=>({stageId:e.id,label:`Stage ${e.id}`,wait:e.submittedAt-s,duration:e.completedAt-e.submittedAt,flagged:d.has(e.id)})),b=Math.min(zs,Math.max(Rs,y.length*Is+Ls)),x=b-Ls,S=Math.max(1,Math.floor(x/Is)),C=Math.max(1,Math.ceil(y.length/S));return(0,U.jsx)(I,{title:`Job Timeline`,summary:i>0?(0,U.jsx)(V,{value:`${i} stage${i===1?``:`s`}`,context:`${d.size} flagged`}):void 0,children:i===0?(0,U.jsx)(ht,{tone:`neutral`,icon:je,title:`No stages in this run.`}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,U.jsx)(`label`,{htmlFor:`timeline-topn`,children:`showing top`}),(0,U.jsx)(`input`,{id:`timeline-topn`,type:`number`,min:1,max:i,value:Math.min(g,i),onChange:e=>{let t=parseInt(e.target.value,10);Number.isFinite(t)||(t=g),_(Math.max(1,Math.min(i,t)))},className:`w-16 rounded border border-input bg-transparent px-1 py-0.5`,"aria-label":`Number of stages to show`}),(0,U.jsxs)(`span`,{children:[`of `,i,` by duration · flagged in red`]})]}),(0,U.jsx)(O,{ariaLabel:`Job timeline: stage durations by time from app start.`,height:b,table:{caption:`Job timeline: stage durations by time from app start`,columns:[`Stage`,`Start`,`Duration`],rows:y.map(e=>[e.label,B(e.wait),B(e.duration)]),align:[`left`,`right`,`right`]},children:(0,U.jsxs)(l,{data:y,layout:`vertical`,children:[(0,U.jsx)(c,{stroke:j.muted,strokeOpacity:.2,horizontal:!1}),(0,U.jsx)(p,{type:`number`,tickFormatter:e=>`${Math.round(e/1e3)}s`,tick:{fontSize:10},tickCount:10}),(0,U.jsx)(f,{type:`category`,dataKey:`label`,tick:{fontSize:10},width:64,interval:0,tickFormatter:(e,t)=>t%C===0?e:``}),(0,U.jsx)(h,{formatter:(e,t)=>t===`Duration`?B(Number(e)):[null,null]}),(0,U.jsx)(u,{dataKey:`wait`,stackId:`timeline`,fill:`transparent`,name:`Wait`}),(0,U.jsx)(u,{dataKey:`duration`,stackId:`timeline`,name:`Duration`,cursor:`pointer`,onClick:e=>n(e.payload.stageId),children:y.map(e=>(0,U.jsx)(a,{fill:e.flagged?j.critical:j.accent,stroke:e.flagged?j.critical:`none`,strokeWidth:e.flagged?2:0},e.stageId))})]})})]})})}var Hs={present:`present`,disabled:`disabled`,notEmitted:`not emitted`,notApplicable:`not applicable`,outsideEventLog:`outside event log`,unknown:`unknown`},Us={present:`info`,disabled:`warning`,notEmitted:`warning`,notApplicable:`muted`,outsideEventLog:`muted`,unknown:`muted`};function Ws({entry:e}){let t=e.evidence?.count,n=T(),r=`${e.summary}${t==null?``:` · ${t} observed`}`,{tooltipProps:i,srOnlyTooltip:a}=te(r);return(0,U.jsxs)(`li`,{id:`evidence-availability-${e.key}`,tabIndex:-1,ref:t=>n(e.key,t),className:`flex flex-col gap-0.5 rounded-md px-2 py-1 outline-none focus:ring-2 focus:ring-ring`,...i,children:[(0,U.jsxs)(`span`,{className:`flex items-center justify-between gap-2`,children:[(0,U.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,U.jsx)(M,{impactBand:Us[e.state]}),(0,U.jsx)(`span`,{className:`truncate text-sm font-medium`,children:se(e.key)})]}),(0,U.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:Hs[e.state]}),a]}),(0,U.jsx)(L,{children:(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:r})})]})}function Gs(e){return Object.keys(Hs).map(t=>[t,e.filter(e=>e.state===t).length]).filter(([,e])=>e>0).map(([e,t])=>`${t} ${Hs[e]}`).join(` · `)}function Ks({ledger:e}){let{evidenceCardOpen:t,setEvidenceCardOpen:n}=ne();return(0,U.jsx)(I,{title:`Evidence availability`,open:t,onOpenChange:n,summary:(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e?Gs(e.entries):`Unavailable for this restored run`}),children:e?(0,U.jsx)(`ul`,{className:`grid grid-cols-1 gap-x-4 gap-y-0.5 sm:grid-cols-2`,"aria-label":`Evidence availability ledger`,children:e.entries.map(e=>(0,U.jsx)(Ws,{entry:e},e.key))}):(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Evidence availability is unavailable for this restored run.`})})}var qs=64;function Js(e,t){return t>=1?e:`color-mix(in srgb, ${e} ${t*100}%, transparent)`}function Ys(e){return[{key:`startup`,label:`Startup`,value:e.startup,color:j.info,fillOpacity:1},{key:`stagesActive`,label:`Stages active`,value:e.stagesActive,color:j.clean,fillOpacity:1},{key:`gaps`,label:`Scheduler gaps`,value:e.gaps,color:j.warning,fillOpacity:1},{key:`idle`,label:`Idle`,value:e.idle,color:j.muted,fillOpacity:.6}].filter(e=>e.value>0).map(e=>({...e,legendColor:Js(e.color,e.fillOpacity)}))}var Xs=(0,H.memo)(function({appModel:e}){let{app:n,stages:r}=e,a=Le(n,r);if(a.total<=0)return null;let o=Ys(a),s=e=>a.total>0?e/a.total*100:0,c=o.reduce((e,t)=>t.value>e.value?t:e,o[0]),d=[o.reduce((e,t)=>({...e,[t.key]:t.value}),{name:`total`})];return(0,U.jsxs)(I,{title:`Wall-Clock Breakdown`,badges:(0,U.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[B(a.total),` total`]}),summary:(0,U.jsx)(V,{value:`${c.label} ${Math.round(s(c.value))}%`,context:`of ${B(a.total)} total`}),children:[(0,U.jsx)(O,{ariaLabel:`Wall-clock breakdown: ${B(a.total)} total, split across startup, active stages, scheduler gaps and idle time. See the table below for exact values.`,height:qs,table:{caption:`Wall-clock time breakdown`,columns:[`Segment`,`Duration`,`% of total`],rows:o.map(e=>[e.label,B(e.value),`${Math.round(s(e.value))}%`]),align:[`left`,`right`,`right`]},children:(0,U.jsxs)(l,{data:d,layout:`vertical`,stackOffset:`expand`,margin:{top:0,right:0,bottom:0,left:0},children:[(0,U.jsx)(p,{type:`number`,hide:!0,domain:[0,1]}),(0,U.jsx)(f,{type:`category`,dataKey:`name`,hide:!0}),(0,U.jsx)(h,{shared:!1,labelFormatter:()=>``,formatter:(e,t)=>[B(Number(e)),t]}),(0,U.jsx)(i,{wrapperStyle:{fontSize:12},itemSorter:e=>o.findIndex(t=>t.key===e.dataKey),formatter:(e,t)=>{let n=o.find(e=>e.key===t.dataKey);return(0,U.jsx)(`span`,{style:{color:n?.color},children:e})},content:e=>(0,U.jsx)(t,{...e,payload:e.payload?.map(e=>{let t=o.find(t=>t.key===e.dataKey);return t?{...e,color:t.legendColor}:e})})}),o.map(e=>(0,U.jsx)(u,{dataKey:e.key,name:e.label,stackId:`wallclock`,fill:e.color,fillOpacity:e.fillOpacity},e.key))]})}),(0,U.jsx)(L,{children:(0,U.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-3 text-xs text-muted-foreground`,children:o.map(e=>(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,U.jsx)(`span`,{className:`inline-block size-2.5 rounded-sm`,style:{backgroundColor:e.color,opacity:e.fillOpacity}}),e.label,` (`,B(e.value),`)`]},e.key))})})]})}),Zs=36e5,Qs=5,$s={totalCoreHours:null,usefulCoreHours:null,wastedCoreHours:null,totalCores:null,topStages:[]};function ec(e,t=[],n){if(!n||e?.startTime==null||e?.endTime==null)return $s;let r=e.endTime-e.startTime;if(r<=0)return $s;let i=ze(e,t);if(i<=0)return $s;let a=i*r/Zs,o=(n.busyCoreMs??0)/Zs;return{totalCoreHours:a,usefulCoreHours:o,wastedCoreHours:Math.max(0,a-o),totalCores:i,topStages:Object.entries(n.perStage??{}).map(([e,t])=>({stageId:Number(e),coreMs:t?.totalTaskDurationSum??0})).sort((e,t)=>t.coreMs-e.coreMs).slice(0,Qs)}}function tc({appModel:e}){let t=ec(e.app,e.executors.added,e.runAggregates);if(t.totalCoreHours==null)return null;let n=t.totalCoreHours>0?Math.round(t.wastedCoreHours/t.totalCoreHours*100):0;return(0,U.jsx)(I,{title:`Wasted Core-Hours`,statusBadge:(0,U.jsx)(un,{}),defaultCollapsed:!0,summary:(0,U.jsx)(V,{value:(0,U.jsx)(`span`,{className:`whitespace-nowrap`,children:W(t.wastedCoreHours)}),context:`wasted of ${W(t.totalCoreHours)} allocated`}),children:(0,U.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,U.jsxs)(`p`,{children:[`Allocated: `,(0,U.jsx)(`strong`,{children:W(t.totalCoreHours)}),` · Used:`,` `,(0,U.jsx)(`strong`,{children:W(t.usefulCoreHours)})]}),(0,U.jsxs)(`p`,{children:[(0,U.jsx)(M,{impactBand:`info`}),` Wasted: `,(0,U.jsx)(`strong`,{children:W(t.wastedCoreHours)}),` (`,n,`% of allocated)`]}),(0,U.jsx)(L,{children:(0,U.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Allocated = `,t.totalCores,` cores over the run; used = core-time that actually ran tasks.`]})}),t.topStages.length>0&&(0,U.jsxs)(`div`,{className:`space-y-1`,children:[(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:`Top stages by task core-time`}),(0,U.jsx)(`ul`,{className:`space-y-0.5`,children:t.topStages.map(e=>(0,U.jsxs)(`li`,{className:`flex justify-between gap-2`,children:[(0,U.jsxs)(`span`,{children:[`Stage `,e.stageId]}),(0,U.jsx)(`span`,{className:`text-muted-foreground tabular-nums`,children:W(e.coreMs/36e5)})]},e.stageId))})]})]})})}function nc({appModel:e,catalog:t,getTaskData:n,activeFileId:r,onRoute:i}){return(0,U.jsxs)(`div`,{className:`space-y-6`,children:[(0,U.jsx)(`h2`,{className:`sr-only`,children:`Full app report`}),(0,U.jsx)(Xs,{appModel:e}),(0,U.jsx)(Vs,{appModel:e,catalog:t}),(0,U.jsx)(_n,{appModel:e,activeFileId:r}),(0,U.jsx)(Ps,{appModel:e,catalog:t,getTaskData:n,onRoute:i}),(0,U.jsxs)(at,{children:[(0,U.jsx)(z,{cardId:`reference-evidence-availability`,collapsedTile:!0,children:(0,U.jsx)(Ks,{ledger:e.evidenceAvailability})}),(0,U.jsx)(z,{cardId:`reference-etl-phases`,collapsedTile:!0,children:(0,U.jsx)(mn,{appModel:e})}),(0,U.jsx)(z,{cardId:`reference-scaling-sim`,collapsedTile:!0,children:(0,U.jsx)(kn,{appModel:e})}),(0,U.jsx)(z,{cardId:`reference-efficiency-model`,collapsedTile:!0,children:(0,U.jsx)(dn,{appModel:e})}),(0,U.jsx)(z,{cardId:`reference-wasted-core-hours`,collapsedTile:!0,children:(0,U.jsx)(tc,{appModel:e})}),(0,U.jsx)(z,{cardId:`reference-core-usage-histogram`,collapsedTile:!0,children:(0,U.jsx)(on,{appModel:e,getTaskData:n})})]})]})}function rc({appModel:e,catalog:t,configFindings:n,getTaskData:r,activeFileId:i,options:a,onRoute:o,activeTab:s,onActiveTabChange:c}){let{selection:l}=Jt(),u=(0,H.useMemo)(()=>Bt(t,l),[t,l]),d=(0,H.useMemo)(()=>Bt(n??[],l),[n,l]),f=u.length+d.length,p=t.length+(n??[]).length>0&&f===0;return(0,U.jsxs)(`main`,{className:`flex-1 space-y-6 p-4`,children:[(0,U.jsx)(en,{options:a,resultCount:f}),p&&(0,U.jsx)(Yt,{}),(0,U.jsx)(Rn,{appModel:e,catalog:u}),!p&&(0,U.jsxs)(ce,{value:s,onValueChange:e=>c(e),children:[(0,U.jsxs)(ee,{variant:`chrome`,"aria-label":`Report view`,children:[(0,U.jsx)(le,{value:`findings`,className:`tap-target-comfortable`,children:`Findings`}),(0,U.jsx)(le,{value:`full-report`,className:`tap-target-comfortable`,children:`Full app report`})]}),(0,U.jsxs)(Ae,{value:`findings`,keepMounted:!0,children:[(0,U.jsx)(`h2`,{className:`sr-only`,children:`Findings`}),(0,U.jsx)(xr,{appModel:e,catalog:u,configFindings:d,stages:e.stages,getTaskData:r,activeFileId:i,onRoute:o})]}),(0,U.jsx)(Ae,{value:`full-report`,keepMounted:!0,children:(0,U.jsx)(nc,{appModel:e,catalog:u,getTaskData:r,configFindings:d,activeFileId:i,onRoute:o})})]})]})}function ic(){let{resetToDropZone:e,startLoad:t,getTaskData:n}=Re(),r=He(e=>e.appModel),i=He(e=>e.catalog),a=He(e=>e.activeFileId),o=He(e=>e.exportMode),{recentEntries:s,onPickRecent:c,onRemoveRecent:l}=Te(a),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(`findings`),{referenceOpen:m}=ne(),[h,g]=(0,H.useState)(null),[_,v]=(0,H.useState)(null),[y,b]=(0,H.useState)(null),x=(0,H.useRef)(0),S=(0,H.useRef)(null),C=(0,H.useRef)(null),ee=(0,H.useRef)(new Map),te=(0,H.useRef)(new Map),w=(0,H.useRef)(null),re=h?.target??null;(0,H.useEffect)(()=>()=>{w.current&&clearTimeout(w.current)},[]),(0,H.useEffect)(()=>{m&&p(`full-report`)},[m]);let T=(0,H.useCallback)(e=>{S.current?.token===e&&(S.current=null,C.current=null,g(t=>t?.token===e?null:t))},[]),E=(0,H.useCallback)(e=>{if(S.current?.token!==e.token)return null;let{catalog:t,activeFileId:n}=Be.getState();if(C.current!==n)return null;let r=$n(e.target.finding,t);return!r||r.widgetId!==e.target.widgetId||r.region!==e.target.region?null:r},[]),ie=(0,H.useCallback)(e=>{p(`findings`);let t=x.current+1;x.current=t;let{catalog:n,activeFileId:r}=Be.getState(),i=$n(e.finding,n);if(!i||i.widgetId!==e.widgetId||i.region!==e.region){S.current=null,C.current=null,g(null);return}let a={target:i,token:t};S.current=a,C.current=r,g(a)},[]),ae=(0,H.useCallback)((e,t)=>{ee.current.set(e,t);let n=S.current;return n?.target.widgetId===e&&E(n)&&t.open(),()=>{ee.current.get(e)===t&&ee.current.delete(e)}},[E]),oe=(0,H.useCallback)((e,t)=>(te.current.set(e,t),()=>{te.current.get(e)===t&&te.current.delete(e)}),[]),se=(0,H.useCallback)((e,t)=>{if(!t)return;let n=S.current;if(!n||n.target.widgetId!==e)return;let r=E(n);if(!r){T(n.token);return}let i=ee.current.get(e);if(!i)return;let a=i.getDisclosureButton();if(!a){T(n.token);return}let o=window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,s=te.current.get(r.finding);s?(s.scrollIntoView({behavior:o?`auto`:`smooth`,block:`center`,inline:`nearest`}),s.focus({preventScroll:!0}),w.current&&clearTimeout(w.current),b(r.finding),w.current=setTimeout(()=>{w.current=null,b(null)},2e3)):(i.wrapperElement.scrollIntoView({behavior:o?`auto`:`smooth`,block:`start`,inline:`nearest`}),a.focus({preventScroll:!0}),v(e)),T(n.token)},[T,E]),ce=(0,H.useCallback)(e=>{v(t=>t===e?null:t)},[]);(0,H.useLayoutEffect)(()=>{if(!h)return;let e=E(h);if(!e){T(h.token);return}ee.current.get(e.widgetId)?.open()},[T,E,h]),(0,H.useLayoutEffect)(()=>{let e=S.current;e&&!E(e)&&T(e.token)},[a,i,T,E]);let D=He(e=>e.configFindings),O=(0,H.useMemo)(()=>Vt(i,D),[i,D]);return(0,U.jsxs)(`div`,{"data-testid":`dashboard`,className:`relative flex min-h-screen flex-col`,style:{paddingRight:`var(--docs-inset, 0px)`},onDragOver:e=>{o||(e.preventDefault(),d(!0))},onDragLeave:()=>d(!1),onDrop:e=>{if(o)return;e.preventDefault(),d(!1);let n=e.dataTransfer.files[0];n&&t(n)},children:[(0,U.jsx)(be,{onLoadNew:e,recentEntries:s,activeFileId:a,onPickRecent:c,onRemoveRecent:l}),(0,U.jsx)(qt,{options:O,fileId:a,children:(0,U.jsx)(Qe,{registerWidget:ae,registerFindingAnchor:oe,reportWidgetOpen:se,clearRouteFocus:ce,focusedWidgetId:_,activeRouteTarget:re,flashedFinding:y,children:(0,U.jsx)(rc,{appModel:r,catalog:i,configFindings:D,getTaskData:n,activeFileId:a,options:O,onRoute:ie,activeTab:f,onActiveTabChange:p})})}),(0,U.jsx)(jr,{appModel:r,catalog:i,getTaskData:n}),u&&(0,U.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none fixed inset-0 z-50 flex items-center justify-center bg-background/80`,children:(0,U.jsx)(`p`,{className:`rounded-lg border-2 border-dashed border-primary px-6 py-4 text-lg font-medium`,children:`Drop to load a new event log`})})]})}function ac(){return(0,U.jsx)(ae,{children:(0,U.jsx)(ic,{})})}export{ac as Dashboard};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{S as r}from"./useRecentFiles-D0OA_EOK.js";import{O as i,at as a,i as o,k as s,l as c,r as l,yt as u}from"./index-3vlFVNCg.js";import{t as d}from"./WidgetLeadSummary-BdUUi7L5.js";import{n as f}from"./StagePill-BlMOW_pU.js";import{t as p}from"./ImpactEstimate-BGt-4WX5.js";import{t as m}from"./RowPagination-BLsm8I6i.js";import{i as h,r as g}from"./impact-sort-DxaUheWV.js";import{n as _,t as v}from"./finding-anchor-DEV8JvgH.js";import{t as y}from"./usePagedRows-jNUWgVTD.js";import{n as b,t as x}from"./useSortMode-BaeAA5cw.js";var S=e(t(),1),C=n();function w({finding:e}){let t=_([e]);return(0,C.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-2 ${v} transition-colors ${t.flashClassName}`,children:[e.stageIds&&e.stageIds.length>0?(0,C.jsx)(f,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,C.jsxs)(`p`,{children:[e.recommendation,` `,(0,C.jsx)(p,{finding:e})]})]})}var T=(0,S.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:n,setSortMode:f,orderBy:p}=x(),[_,v]=(0,S.useState)(!t),[T,E]=(0,S.useState)(0),{findings:D,pills:O,groupConfidence:k}=(0,S.useMemo)(()=>{let t=e.filter(e=>e.type===`duplicatePlanSubtree`).sort((e,t)=>a[e.impactBand]-a[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds??[]))].map(e=>({id:e})),groupConfidence:t.every(e=>e.confidence===t[0]?.confidence)?t[0]:void 0}},[e]),A=p(D,e=>[e],h),j=c(),M=j?A.findIndex(e=>e===j.finding):null,{totalPages:N,effectivePage:P,visible:F}=y(A,T,E,M);return D.length===0?null:(0,C.jsxs)(o,{title:`Redundant Plan Subtree`,impactBand:u(D),open:_,onOpenChange:v,badges:(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(i,{type:`duplicatePlanSubtree`,impactBand:u(D)??`info`,className:l}),g(D,D.length,_)?(0,C.jsx)(b,{mode:n,onChange:f}):null]}),statusBadge:(0,C.jsx)(s,{children:(0,C.jsx)(r,{confidence:k?.confidence,validationRequired:k?.validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,C.jsx)(d,{value:`${O.length} stage${O.length===1?``:`s`}`,context:`${D.length} finding${D.length===1?``:`s`} flagged`}),children:[(0,C.jsx)(`ul`,{className:`space-y-3 text-sm`,children:F.map(e=>(0,C.jsx)(w,{finding:e},e.id))}),(0,C.jsx)(m,{page:P,totalPages:N,onPrev:()=>E(e=>e-1),onNext:()=>E(e=>e+1)})]})});export{T as DuplicatePlanSubtree};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{f as e,i as t,l as n,o as r,p as i,s as a,v as o}from"./charts-vendor-0VMaLVLN.js";import{p as s}from"./plan-graph-vendor-B0sEms9Z.js";import{T as c,w as l}from"./useRecentFiles-D0OA_EOK.js";import{Nt as u,ct as d}from"./index-3vlFVNCg.js";function f(e){let t=u(e=>e.exportMode);return{exportMode:t,getTaskData:t?void 0:e}}var p=s(),m=5,h=30,g=220;function _(e,t){if(e.length<2)return e[0]??null;let n=e[1]-e[0],r=Math.round((t-e[0])/n);return e[Math.min(e.length-1,Math.max(0,r))]}function v({metrics:s,fieldNames:u,markers:f={}}){let v=u.indexOf(`duration`);if(v===-1)return null;let y=u.length,b=s.length/y,x=[];for(let e=0;e<b;e++)x.push(s[e*y+v]);if(x.length<m)return(0,p.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Too few tasks (`,x.length,`) for a distribution.`]});let{labels:S,data:C}=d(x,h),w=S[1]-S[0],T=S.map((e,t)=>({bin:`${(e/1e3).toFixed(1)}s`,range:`${(e/1e3).toFixed(1)}s – ${((e+w)/1e3).toFixed(1)}s`,ms:e,count:C[t]})),E=f.p50==null?null:_(S,f.p50),D=f.p95==null?null:_(S,f.p95),O=E==null?void 0:T.find(e=>e.ms===E)?.bin,k=D==null?void 0:T.find(e=>e.ms===D)?.bin;return(0,p.jsx)(c,{title:`Task duration`,ariaLabel:`Task duration histogram`,height:g,table:{caption:`Task duration histogram`,columns:[`Duration bin`,`Task count`],rows:T.map(e=>[e.range,e.count]),align:[`right`,`right`]},children:(0,p.jsxs)(t,{data:T,children:[(0,p.jsx)(e,{vertical:!1,stroke:l.muted,strokeOpacity:.2}),(0,p.jsx)(a,{dataKey:`bin`,tick:{fontSize:10}}),(0,p.jsx)(r,{allowDecimals:!1,tick:{fontSize:10},width:32}),(0,p.jsx)(o,{formatter:e=>[`${Number(e)} task${Number(e)===1?``:`s`}`,`Count`],labelFormatter:(e,t)=>t?.[0]?.payload?.range??e}),(0,p.jsx)(n,{dataKey:`count`,name:`Tasks`,fill:l.accent}),O?(0,p.jsx)(i,{x:O,stroke:l.accent,label:`P50`}):null,k?(0,p.jsx)(i,{x:k,stroke:l.warning,label:`P95`}):null]})})}export{f as n,v as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{p as e}from"./plan-graph-vendor-B0sEms9Z.js";import{It as t}from"./index-3vlFVNCg.js";var n=e(),r={clean:{box:`border-clean/40 bg-clean/10`,icon:`text-clean`,title:`text-clean`},neutral:{box:`border-border/60 bg-muted/40`,icon:`text-muted-foreground`,title:`text-foreground`}};function i({icon:e,tone:i=`neutral`,title:a,description:o,action:s,className:c}){let l=r[i];return(0,n.jsxs)(`div`,{className:t(`flex items-start gap-3 rounded-xl border p-4`,l.box,c),children:[(0,n.jsx)(e,{"aria-hidden":`true`,className:t(`mt-0.5 size-4 shrink-0`,l.icon)}),(0,n.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,n.jsx)(`p`,{className:t(`text-sm font-medium`,l.title),children:a}),o?(0,n.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:o}):null]}),s]})}export{i as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{D as r,O as i,at as a,ft as o,i as s,l as c,mt as l,yt as u}from"./index-3vlFVNCg.js";import{t as d}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as f}from"./ImpactEstimate-BGt-4WX5.js";import{t as p}from"./RowPagination-BLsm8I6i.js";import{n as m}from"./finding-anchor-DEV8JvgH.js";import{t as h}from"./usePagedRows-jNUWgVTD.js";var g=e(t(),1),_=n();function v({finding:e}){let t=m([e]);return(0,_.jsxs)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`transition-colors ${t.flashClassName}`,children:[(0,_.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2`,children:[(0,_.jsx)(r,{impactBand:e.impactBand,className:`mt-1.5`}),(0,_.jsx)(`strong`,{children:o(`pct`,l(e))}),` average executor utilization`]}),(0,_.jsx)(f,{finding:e}),(0,_.jsx)(`p`,{children:e.recommendation})]})}var y=(0,g.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[n,r]=(0,g.useState)(0),f=(0,g.useMemo)(()=>e.filter(e=>e.type===`utilization`).slice().sort((e,t)=>a[e.impactBand]-a[t.impactBand]),[e]),m=c(),y=m?f.findIndex(e=>e===m.finding):null,{totalPages:b,effectivePage:x,visible:S}=h(f,n,r,y);return f.length===0?null:(0,_.jsxs)(s,{title:`Executor Utilization`,impactBand:u(f),badges:(0,_.jsx)(i,{type:`utilization`,impactBand:u(f)??`info`}),defaultCollapsed:t,summary:(0,_.jsx)(d,{value:`${o(`pct`,l(f[0]))} average`,context:`${f.length} item${f.length===1?``:`s`} flagged`}),children:[(0,_.jsx)(`div`,{className:`space-y-2 text-sm`,children:S.map(e=>(0,_.jsx)(v,{finding:e},e.id))}),(0,_.jsx)(p,{page:x,totalPages:b,onPrev:()=>r(e=>e-1),onNext:()=>r(e=>e+1)})]})});export{y as ExecutorUtilization};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{S as r}from"./useRecentFiles-D0OA_EOK.js";import{O as i,i as a,k as o,l as s,ut as c,yt as l}from"./index-3vlFVNCg.js";import{t as u}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as d}from"./ImpactEstimate-BGt-4WX5.js";import{t as f}from"./RowPagination-BLsm8I6i.js";import{r as p}from"./impact-sort-DxaUheWV.js";import{n as m,t as h}from"./finding-anchor-DEV8JvgH.js";import{t as g}from"./usePagedRows-jNUWgVTD.js";import{n as _,t as v}from"./useSortMode-BaeAA5cw.js";import{t as y}from"./StageHeader-BTzGkK8k.js";var b=e(t(),1),x=n(),S=`GC % = total JVM GC time ÷ total executor run time; it can exceed 100% when GC pauses overlap many concurrent task threads.`;function C(e){return[...e].sort((e,t)=>(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0))}function w({finding:e,appModel:t}){let n=m([e]),i=(e.stageId==null?void 0:t.stages.get(e.stageId))?.executorRunTime;return(0,x.jsxs)(`li`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-2 ${h} transition-colors ${n.flashClassName}`,children:[(0,x.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,x.jsx)(y,{stageId:e.stageId,appModel:t}),(0,x.jsx)(o,{children:(0,x.jsx)(r,{confidence:e.confidence,validationRequired:e.validationRequired})})]}),(0,x.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`GC: `,(0,x.jsxs)(`strong`,{children:[e.value,`%`]}),` · Executor run time:`,` `,(0,x.jsx)(`strong`,{children:c(i??0)})]}),(0,x.jsx)(d,{finding:e}),(0,x.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.recommendation})]})}function T({title:e,findings:t,appModel:n,page:r,setPage:i,routeTarget:a,orderBy:o}){let s=o(C(t),e=>[e],e=>e.stageId),c=a?s.findIndex(e=>e===a.finding):null,{totalPages:l,effectivePage:u,visible:d}=g(s,r,i,c);return(0,x.jsxs)(`section`,{className:`space-y-2`,children:[(0,x.jsxs)(`h4`,{className:`font-heading text-sm font-medium`,children:[e,` · `,t.length,` stage`,t.length===1?``:`s`]}),(0,x.jsx)(`ul`,{className:`space-y-3`,children:d.map(e=>(0,x.jsx)(w,{finding:e,appModel:n},e.stageId))}),(0,x.jsx)(f,{page:u,totalPages:l,onPrev:()=>i(e=>e-1),onNext:()=>i(e=>e+1)})]})}function E({catalog:e,appModel:t,defaultCollapsed:n=!0}){let[r,c]=(0,b.useState)(0),[d,f]=(0,b.useState)(0),{sortMode:m,setSortMode:h,orderBy:g}=v(),[y,C]=(0,b.useState)(!n),w=s(),E=(0,b.useRef)(!1);(0,b.useEffect)(()=>{if(!E.current){E.current=!0;return}c(0),f(0)},[t]);let D=e.filter(e=>e.type===`gc`);if(D.length===0)return null;let O=D.filter(e=>e.direction!==`low`),k=D.filter(e=>e.direction===`low`),A=l(D),j=[...D].sort((e,t)=>(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0))[0];return(0,x.jsx)(a,{title:`GC Pressure`,impactBand:A,badges:(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(i,{type:`gc`,impactBand:A??`info`}),p(D,D.length,y)?(0,x.jsx)(_,{mode:m,onChange:e=>{h(e),c(0),f(0)}}):null]}),defaultCollapsed:n,open:y,onOpenChange:C,summary:(0,x.jsx)(u,{value:`${j.value}%`,context:`${D.length} stage${D.length===1?``:`s`} flagged`}),children:(0,x.jsxs)(`div`,{className:`space-y-4`,children:[(0,x.jsx)(o,{children:(0,x.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:S})}),O.length>0&&(0,x.jsx)(T,{title:`GC overhead`,findings:O,appModel:t,page:r,setPage:c,routeTarget:w,orderBy:g}),k.length>0&&(0,x.jsx)(T,{title:`Low GC (cost)`,findings:k,appModel:t,page:d,setPage:f,routeTarget:w,orderBy:g})]})})}export{E as GcPressure};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{lt as r,ut as i}from"./index-3vlFVNCg.js";var a=e(t(),1),o=n();function s(e){return e===0?`0s`:i(e)}function c(e,t){let n=s(e),r=s(t);return n===r?r:`${n}-${r}`}function l(e){let t=Math.round(e.value*10)/10;switch(e.unit){case`bytes`:return r(e.value);case`ms`:return s(e.value);case`mbSeconds`:return`${t.toLocaleString(`en-US`)} MB-s`;case`coreHours`:return`${t.toFixed(1)} core-h`;case`coreMs`:return`${t.toLocaleString(`en-US`)} core-ms`;default:return String(e.value)}}function u(e){return/^0(\.0+)?(?:[^0-9.]|$)/.test(e)}function d(e){if(!e)return null;if(e.wallClock){if(e.wallClock.high<=0)return null;let t=s(e.wallClock.high);return u(t)?null:t}if(e.rawWaste){if(e.rawWaste.value<=0)return null;let t=l(e.rawWaste);return u(t)?null:t}return null}function f({finding:e}){let t=(0,a.useId)(),n=e.impactEstimate;if(!n)return null;let r=n.wallClock&&n.wallClock.high>0?s(n.wallClock.high):null,i=r&&!u(r)?c(n.wallClock.low,n.wallClock.high):null,d=n.rawWaste&&n.rawWaste.value>0?l(n.rawWaste):null,f=!i&&d&&!u(d)?d:null,p=i??f;if(!p)return null;let m=`Estimate method: ${n.estimateMethod}`;return(0,o.jsxs)(`span`,{className:`impact-estimate text-xs text-muted-foreground`,title:m,tabIndex:0,"aria-describedby":t,children:[`Potential savings: `,(0,o.jsx)(`strong`,{children:p}),(0,o.jsx)(`span`,{id:t,className:`sr-only`,children:m})]})}export{c as i,d as n,l as r,f as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{p as e}from"./plan-graph-vendor-B0sEms9Z.js";import{O as t,i as n}from"./index-3vlFVNCg.js";import{t as r}from"./ImpactEstimate-BGt-4WX5.js";var i=e();function a({finding:e}){let{recommendation:t}=e;return(0,i.jsxs)(`div`,{className:`flex flex-col gap-1 transition-colors`,children:[(0,i.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`ApplicationEnd event: `,(0,i.jsx)(`strong`,{children:`missing`})]}),(0,i.jsx)(r,{finding:e}),(0,i.jsxs)(`div`,{className:`space-y-1 pt-1`,children:[(0,i.jsx)(`p`,{children:`This run’s event log never recorded an ApplicationEnd event.`}),t?(0,i.jsx)(`p`,{children:t}):null]})]})}function o({catalog:e,defaultCollapsed:r=!0}){let o=e.find(e=>e.type===`incompleteRun`);if(!o)return null;let{impactBand:s}=o;return(0,i.jsx)(n,{title:`Incomplete Run`,impactBand:s,badges:(0,i.jsx)(t,{type:`incompleteRun`,impactBand:s}),defaultCollapsed:r,children:(0,i.jsx)(a,{finding:o})})}export{o as IncompleteRun};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{p as e}from"./plan-graph-vendor-B0sEms9Z.js";import{O as t,i as n,k as r}from"./index-3vlFVNCg.js";import{t as i}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as a}from"./ImpactEstimate-BGt-4WX5.js";var o=e();function s({finding:e}){let t=e.failedJobs,n=e.totalJobs,i=e.failedTasks,s=e.totalTasks,c=e.taskFailureRate,{value:l,recommendation:u}=e;return(0,o.jsxs)(`div`,{className:`flex flex-col gap-1 transition-colors`,children:[(0,o.jsxs)(`p`,{children:[`Failure rate: `,(0,o.jsxs)(`strong`,{children:[l,`%`]}),` (`,t,` of `,n,` completed jobs)`]}),(0,o.jsx)(r,{children:(0,o.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Task-failure context: `,i,` of `,s,` tasks failed (`,c,`%).`]})}),(0,o.jsx)(a,{finding:e}),u?(0,o.jsx)(`p`,{children:u}):null]})}function c({catalog:e,defaultCollapsed:r=!0}){let a=e.find(e=>e.type===`jobFailureRate`);if(!a)return null;let{impactBand:c,value:l}=a,u=a.failedJobs,d=a.totalJobs;return(0,o.jsx)(n,{title:`Job Failures`,impactBand:c,badges:(0,o.jsx)(t,{type:`jobFailureRate`,impactBand:c}),defaultCollapsed:r,summary:(0,o.jsx)(i,{value:`${l}%`,context:`${u} of ${d} completed jobs failed`}),children:(0,o.jsx)(s,{finding:a})})}export{c as JobFailures};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{S as r,b as i}from"./useRecentFiles-D0OA_EOK.js";import{D as a,O as o,at as s,ft as c,i as l,k as u,l as d,mt as f,yt as p}from"./index-3vlFVNCg.js";import{t as m}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as h}from"./ImpactEstimate-BGt-4WX5.js";import{t as g}from"./RowPagination-BLsm8I6i.js";import{n as _}from"./finding-anchor-DEV8JvgH.js";import{t as v}from"./usePagedRows-jNUWgVTD.js";var y=e(t(),1),b=n();function x(e){let t=f(e),n=c(`pct`,t);return e.variant===`idleCores`?`${n} of allocated core-time idle`:e.variant===`memoryBand`?e.rule===`heapNearCapacity`?`${n} of allocated heap used: near capacity`:`${n} of allocated heap used: over-provisioned`:`~${t.toLocaleString(`en-US`)} MB-seconds wasted`}function S(e){let t=e.recommendation??``,n=t.indexOf(`: `);return n===-1?` ${t}`:`; ${t.slice(n+2)}`}function C(e){if(e.rule==null)return null;let t=e.recommendation??``,n=t.indexOf(`: `);return n===-1?null:` ${t.slice(0,n)}.`}function w(e){return`executorId`in e&&e.executorId!=null?`Executor ${e.executorId}`:e.variant===`idleCores`?`Idle cores`:`Memory waste`}function T({finding:e}){let t=_([e]);return e.dataUnavailable?(0,b.jsx)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-1 transition-colors ${t.flashClassName}`,children:(0,b.jsx)(u,{children:(0,b.jsx)(`p`,{className:`text-muted-foreground`,children:e.recommendation})})}):(0,b.jsxs)(`div`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`transition-colors ${t.flashClassName}`,children:[(0,b.jsxs)(`p`,{className:`flex flex-wrap items-start gap-2`,children:[(0,b.jsx)(a,{impactBand:e.impactBand,className:`mt-1.5`}),(0,b.jsx)(`strong`,{children:w(e)})]}),(0,b.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[x(e),S(e),C(e)==null?null:(0,b.jsx)(u,{children:C(e)})]}),(0,b.jsx)(h,{finding:e})]})}var E=(0,y.memo)(function({catalog:e,defaultCollapsed:t=!0}){let[n,a]=(0,y.useState)(0),{findings:c,groupConfidence:f}=(0,y.useMemo)(()=>{let t=e.filter(e=>e.type===`memoryUtilization`).sort((e,t)=>s[e.impactBand]-s[t.impactBand]),n=t.filter(i);return{findings:t,groupConfidence:n.every(e=>e.confidence===n[0]?.confidence)?n[0]:void 0}},[e]),h=d(),_=h?c.findIndex(e=>e===h.finding):null,{totalPages:x,effectivePage:S,visible:C}=v(c,n,a,_);if(!c.some(i))return null;let E=c.find(e=>!e.dataUnavailable)??c[0];return(0,b.jsxs)(l,{title:`Memory Utilization`,impactBand:p(c),badges:(0,b.jsx)(o,{type:`memoryUtilization`,impactBand:p(c)??`info`}),statusBadge:(0,b.jsx)(u,{children:(0,b.jsx)(r,{confidence:f?.confidence,validationRequired:f?.validationRequired,evidenceKey:`executorMetrics`})}),defaultCollapsed:t,summary:(0,b.jsx)(m,{value:w(E),context:`${c.length} item${c.length===1?``:`s`} flagged`}),children:[(0,b.jsx)(`div`,{className:`space-y-2 text-sm`,children:C.map(e=>(0,b.jsx)(T,{finding:e},e.id))}),(0,b.jsx)(g,{page:S,totalPages:x,onPrev:()=>a(e=>e-1),onNext:()=>a(e=>e+1)})]})});export{E as MemoryUtilization};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{S as r}from"./useRecentFiles-D0OA_EOK.js";import{O as i,at as a,i as o,k as s,l as c,r as l,yt as u}from"./index-3vlFVNCg.js";import{t as d}from"./WidgetLeadSummary-BdUUi7L5.js";import{n as f}from"./StagePill-BlMOW_pU.js";import{t as p}from"./ImpactEstimate-BGt-4WX5.js";import{t as m}from"./RowPagination-BLsm8I6i.js";import{i as h,r as g}from"./impact-sort-DxaUheWV.js";import{n as _,t as v}from"./finding-anchor-DEV8JvgH.js";import{t as y}from"./usePagedRows-jNUWgVTD.js";import{n as b,t as x}from"./useSortMode-BaeAA5cw.js";var S=e(t(),1),C=n();function w({finding:e}){let t=_([e]);return(0,C.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-2 ${v} transition-colors ${t.flashClassName}`,children:[e.stageIds&&e.stageIds.length>0?(0,C.jsx)(f,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,C.jsxs)(`p`,{children:[e.recommendation,` `,(0,C.jsx)(p,{finding:e})]})]})}var T=(0,S.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:n,setSortMode:f,orderBy:p}=x(),[_,v]=(0,S.useState)(!t),[T,E]=(0,S.useState)(0),{findings:D,pills:O}=(0,S.useMemo)(()=>{let t=e.filter(e=>e.type===`overBroadcast`).sort((e,t)=>a[e.impactBand]-a[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds??[]))].map(e=>({id:e}))}},[e]),k=p(D,e=>[e],h),A=c(),j=A?k.findIndex(e=>e===A.finding):null,{totalPages:M,effectivePage:N,visible:P}=y(k,T,E,j);return D.length===0?null:(0,C.jsxs)(o,{title:`Oversized Broadcast Join`,impactBand:u(D),open:_,onOpenChange:v,badges:(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(i,{type:`overBroadcast`,impactBand:u(D)??`info`,className:l}),g(D,D.length,_)?(0,C.jsx)(b,{mode:n,onChange:f}):null]}),statusBadge:(0,C.jsx)(s,{children:(0,C.jsx)(r,{confidence:D[0].confidence,validationRequired:D[0].validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,C.jsx)(d,{value:`${O.length} stage${O.length===1?``:`s`}`,context:`${D.length} finding${D.length===1?``:`s`} flagged`}),children:[(0,C.jsx)(`ul`,{className:`space-y-3 text-sm`,children:P.map(e=>(0,C.jsx)(w,{finding:e},e.id))}),(0,C.jsx)(m,{page:N,totalPages:M,onPrev:()=>E(e=>e-1),onNext:()=>E(e=>e+1)})]})});export{T as OverBroadcast};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{i as r}from"./useRecentFiles-D0OA_EOK.js";import{O as i,Pt as a,at as o,i as s,l as c,lt as l,mt as u,yt as d}from"./index-3vlFVNCg.js";import{t as f}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as p}from"./ImpactEstimate-BGt-4WX5.js";import{t as m}from"./RowPagination-BLsm8I6i.js";import{r as h}from"./impact-sort-DxaUheWV.js";import{n as g,t as _}from"./finding-anchor-DEV8JvgH.js";import{t as v}from"./usePagedRows-jNUWgVTD.js";import{n as y,t as b}from"./useSortMode-BaeAA5cw.js";import{t as x}from"./StageHeader-BTzGkK8k.js";import{a as S,i as C,n as w,r as T,t as E}from"./select-kuy1MiAo.js";import{t as D}from"./PlanExplorer-_2oB5ouy.js";var O=e(t(),1),k=n();function A(e){if(e.rule===`lowShuffleParallelism`)return`${u(e)} tasks carrying the shuffle`;let t=u(e);return e.rule===`maxPartitionTooBig`?`Largest partition ${l(t)} (too large)`:`Largest partition ${l(t)}`}function j({entry:e,appModel:t}){let n=a(),i=g(e.partitions),o=n===`advanced`&&r(e.stageId,t);return(0,k.jsxs)(`div`,{ref:i.ref,tabIndex:i.tabIndex,"data-flashed":i.dataFlashed,className:`space-y-2 ${_} transition-colors ${i.flashClassName}`,children:[(0,k.jsx)(x,{stageId:e.stageId,appModel:t}),(0,k.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.partitions.map((e,t)=>(0,k.jsxs)(`span`,{children:[t>0?` · `:``,A(e)]},e.id))}),(0,k.jsx)(p,{finding:e.partitions[0]}),(0,k.jsxs)(`div`,{className:`space-y-2 pt-1`,children:[(0,k.jsx)(`ul`,{className:`list-disc space-y-1 pl-5 text-xs text-muted-foreground`,children:e.partitions.map(e=>(0,k.jsxs)(`li`,{children:[e.recommendation,` `,(0,k.jsx)(p,{finding:e})]},e.id))}),o?(0,k.jsx)(D,{stageId:e.stageId,appModel:t}):null]})]})}var M=(0,O.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let[r,a]=(0,O.useState)(0),[l,u]=(0,O.useState)(!n),{sortMode:p,setSortMode:g,orderBy:_}=b(),x=c(),{partitionFindings:D,sorted:A,orderedEntries:M}=(0,O.useMemo)(()=>{let e=t.filter(e=>e.type===`partitionSizing`),n=new Map;for(let t of e){if(t.stageId==null)continue;let e=n.get(t.stageId);e?(e.partitions.push(t),o[t.impactBand]<o[e.impactBand]&&(e.impactBand=t.impactBand)):n.set(t.stageId,{stageId:t.stageId,partitions:[t],impactBand:t.impactBand})}let r=[...n.values()].sort((e,t)=>o[e.impactBand]-o[t.impactBand]||e.stageId-t.stageId);return{partitionFindings:e,sorted:r,orderedEntries:_(r,e=>e.partitions,e=>e.stageId)}},[t,p]),N=x?M.findIndex(e=>e.partitions.includes(x.finding)):null,{totalPages:P,effectivePage:F,visible:I}=v(M,r,a,N);if(D.length===0){let t=e.stages.size;return(0,k.jsx)(s,{title:`Partition Sizing`,open:l,onOpenChange:u,summary:(0,k.jsx)(f,{value:`No issues`,context:`no issue detected: partition sizing checked across ${t} stage${t===1?``:`s`}`}),children:(0,k.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No partition-sizing issues detected.`})})}let L=d(D),R=h(D,A.length,l);return(0,k.jsx)(s,{title:`Partition Sizing`,impactBand:L,open:l,onOpenChange:u,summary:(0,k.jsx)(f,{value:`Stage ${A[0].stageId}`,context:`${A.length} stage${A.length===1?``:`s`} flagged`}),badges:(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(i,{type:`partitionSizing`,impactBand:L??`info`}),R?(0,k.jsx)(y,{mode:p,onChange:e=>{g(e),a(0)}}):null]}),children:(0,k.jsxs)(`div`,{className:`space-y-4`,children:[I.map(t=>(0,k.jsx)(j,{entry:t,appModel:e},t.stageId)),(0,k.jsx)(m,{page:F,totalPages:P,onPrev:()=>a(e=>e-1),onNext:()=>a(e=>e+1),renderJumpControl:()=>(0,k.jsxs)(E,{value:String(F*6),onValueChange:e=>a(Math.floor(Number(e)/6)),children:[(0,k.jsx)(C,{size:`sm`,"aria-label":`Jump to stage`,children:(0,k.jsx)(S,{placeholder:`Jump to stage`})}),(0,k.jsx)(w,{children:M.map((e,t)=>(0,k.jsxs)(T,{value:String(t),children:[`Stage `,e.stageId]},e.stageId))})]})})]})})});export{M as PartitionSizing};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{i as r,r as i}from"./useRecentFiles-D0OA_EOK.js";import{C as a,Dt as o,Ot as s,S as c,x as l}from"./index-3vlFVNCg.js";var u=e(t(),1),d=n();function f({stageId:e,appModel:t}){let[n,f]=(0,u.useState)(!1);return r(e,t)?(0,d.jsx)(`div`,{className:`space-y-3`,children:(0,d.jsxs)(l,{open:n,onOpenChange:f,children:[(0,d.jsxs)(a,{"aria-expanded":String(n),className:`flex cursor-pointer items-center gap-2 bg-transparent text-left`,children:[(0,d.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:`Plan context`}),n?(0,d.jsx)(o,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):(0,d.jsx)(s,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`})]}),(0,d.jsx)(c,{keepMounted:!0,children:(0,d.jsx)(`div`,{className:`pt-3`,children:(0,d.jsx)(i,{stageId:e,appModel:t})})})]})}):null}export{f as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{C as n,S as r,T as i,_ as a,b as o,g as s,h as c,m as l,v as u,w as d,x as f,y as p}from"./react-vendor-D2TLlSzI.js";import{a as m,c as h,d as g,f as _,i as v,l as y,n as b,o as x,p as S,r as ee,s as C,t as w,u as T}from"./plan-graph-vendor-B0sEms9Z.js";import{c as E,f as D,i as O,l as k,n as A,o as j,s as M,t as te,u as ne,w as N}from"./useRecentFiles-D0OA_EOK.js";import{$ as P,A as re,D as F,E as I,I as ie,It as L,Mt as R,N as z,O as B,P as V,Q as H,T as U,W as ae,Z as W,bt as oe,dt as se,et as ce,it as le,kt as G,lt as ue,nt as K,rt as de,tt as fe,ut as q,vt as pe,w as me,wt as he,yt as ge}from"./index-3vlFVNCg.js";import{t as _e}from"./impact-sort-DxaUheWV.js";var ve={name:`arrow-left-right`,size:24,node:[[`path`,{d:`M8 3 4 7l4 4`,key:`9rb6wj`}],[`path`,{d:`M4 7h16`,key:`6tx8e3`}],[`path`,{d:`m16 21 4-4-4-4`,key:`siv7j2`}],[`path`,{d:`M20 17H4`,key:`h6l3hr`}]]};ve.node;var ye=G(ve),be={name:`flag`,size:24,node:[[`path`,{d:`M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528`,key:`1jaruq`}]]};be.node;var xe=G(be),Se={name:`map`,size:24,node:[[`path`,{d:`M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z`,key:`169xi5`}],[`path`,{d:`M15 5.764v15`,key:`1pn4in`}],[`path`,{d:`M9 3.236v15`,key:`1uimfh`}]]};Se.node;var Ce=G(Se),we={name:`maximize-2`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]};we.node;var Te=G(we),Ee={name:`settings`,size:24,node:[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]};Ee.node;var De=G(Ee),Oe={name:`timer`,size:24,node:[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`,key:`14vaq8`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`,key:`17fdiu`}],[`circle`,{cx:`12`,cy:`14`,r:`8`,key:`1e1u0o`}]]};Oe.node;var ke=G(Oe),Ae={name:`zoom-out`,size:24,node:[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]};Ae.node;var je=G(Ae),Me={name:`zoom-in`,size:24,node:[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`11`,x2:`11`,y1:`8`,y2:`14`,key:`1vmskp`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]};Me.node;var Ne=G(Me),J=e(t(),1);function Pe({id:e,sourceNodeId:t,planNode:n,category:r,segmentIndex:i,splitRole:a,durationShare:o,exclusiveDurationShare:s,findings:c}){return{id:e,sourceNodeId:t,label:n.name,category:r,operatorDetail:fe(n.name,n.detail??``),primaryMetric:ce(n.metrics),segmentIndex:i,splitRole:a,durationShare:o??null,exclusiveDurationShare:s??null,findings:c,metrics:(n.metrics??[]).map(e=>({name:e.name,value:P(e)})),detailText:n.detail&&n.detail!==n.name?n.detail:``}}function Fe(e,t){let{scope:n,stageId:r,appModel:i,findings:a=[],durationMode:o=`exclusive`}=t;if(!e)return{nodes:[],edges:[],segmentIndex:null,segmentCount:0,scope:`full`,segmentStageIds:new Map};let s=i.stages.get(r)?.sqlExecutionId??null,c=s==null?null:i.sql.get(s),{segments:l,segOf:u,segmentTopology:d}=K(e),f=l.filter(Boolean).length,p=c&&s!=null?W(e,i,c,s,o):null,m=o===`exclusive`?p:c&&s!=null?W(e,i,c,s,`exclusive`):null,h=new Map,g=c&&s!=null?ae(s,i.stages):[];if(g.length){let e=new Map;for(let t of g){let n=i.stages.get(t);n&&e.set(t,{submittedAt:n.submittedAt,completedAt:n.completedAt})}for(let[t,n]of de(l,e,g,d))h.set(t,n)}let _=new Map;if(s!=null){for(let e of a)if(e.executionId===s)for(let t of e.planNodeIds??[]){let n=_.get(t);n?n.push(e):_.set(t,[e])}}let v=[],y=[],b=new Map;le(e,(e,t)=>{let n=e.id,r=H(e.name),a=u.get(e),o=t?t.id:null,s=e.exchangeRole===`write`&&t?t.id:n,c=Pe({id:n,sourceNodeId:s,planNode:e,category:r,segmentIndex:a,splitRole:e.exchangeRole??null,durationShare:p?.get(e),exclusiveDurationShare:m?.get(e),findings:_.get(n)??[]});if(v.push(c),e.exchangeRole){let t=b.get(s)??{};t[e.exchangeRole]=c,b.set(s,t)}if(o){let t={id:`${o}->${n}`,source:o,target:n};if(e.exchangeRole===`write`){let e=h.get(a),n=e==null?void 0:i.stages.get(e),r=n?.shuffleWriteBytes||n?.shuffleReadBytes;if(r){t.shuffleBytes=r;let e=b.get(s)??{};e.shuffleBytes=r,b.set(s,e)}}y.push(t)}},{dedupe:!0});for(let{read:e,write:t,shuffleBytes:n}of b.values())e&&t&&(e.pairedNodeId=t.id,t.pairedNodeId=e.id),n!=null&&(e&&(e.exchangeShuffleBytes=n),t&&(t.exchangeShuffleBytes=n));if(n===`full`)return{nodes:v,edges:y,segmentIndex:null,segmentCount:f,scope:`full`,segmentStageIds:h};let x=null;for(let[e,t]of h)if(t===r){x=e;break}if(x===null)return{nodes:v,edges:y,segmentIndex:null,segmentCount:f,scope:`full`,segmentStageIds:h};let S=new Set;return{nodes:v.filter(e=>e.segmentIndex===x&&(S.add(e.id),!0)),edges:y.filter(e=>S.has(e.source)&&S.has(e.target)),segmentIndex:x,segmentCount:f,scope:`segment`,segmentStageIds:h}}var Ie=24,Le=32;function Re(e,t,n={}){let r=new w.graphlib.Graph({compound:!!n.groupOf});r.setGraph({rankdir:`RL`,nodesep:128,ranksep:60,ranker:`tight-tree`}),r.setDefaultEdgeLabel(()=>({}));let i=new Set;if(n.groupOf){for(let t of e){let e=n.groupOf(t);e&&i.add(e)}for(let e of i)r.setNode(e,{})}for(let t of e){r.setNode(t.id,{width:220,height:90});let e=n.groupOf?.(t);e&&r.setParent(t.id,e)}for(let e of t)r.setEdge(e.source,e.target);return w.layout(r),e.map(e=>{let t=r.node(e.id);return{...e,position:{x:t.x-110,y:t.y-45}}})}function ze(e,t,n={}){let r=n.paddingX??Ie,i=n.paddingY??Ie,a=n.headerHeight??Le,o=new Map;for(let n of e){let e=t(n);if(!e)continue;let r=n.position.x,i=n.position.y,a=r+220,s=i+90,c=o.get(e);c?(c.minX=Math.min(c.minX,r),c.minY=Math.min(c.minY,i),c.maxX=Math.max(c.maxX,a),c.maxY=Math.max(c.maxY,s)):o.set(e,{minX:r,minY:i,maxX:a,maxY:s})}return[...o.entries()].map(([e,t])=>({id:e,position:{x:t.minX-r,y:t.minY-i-a},width:t.maxX-t.minX+r*2,height:t.maxY-t.minY+i*2+a}))}function Be(e,t,n={}){let r=new Set,i=[];for(let a of t){let t=t=>{let n=e(t);return n&&!r.has(n)?n:null};for(let e of ze(a,t,n))r.add(e.id),i.push(e)}return i}var Y=S();function Ve({delay:e=0,...t}){return(0,Y.jsx)(p,{"data-slot":`tooltip-provider`,delay:e,...t})}function He({...e}){return(0,Y.jsx)(i,{"data-slot":`tooltip`,...e})}function Ue({...e}){return(0,Y.jsx)(d,{"data-slot":`tooltip-trigger`,...e})}function We({className:e,side:t=`top`,sideOffset:i=4,align:a=`center`,alignOffset:s=0,children:c,...l}){return(0,Y.jsx)(n,{children:(0,Y.jsx)(r,{align:a,alignOffset:s,side:t,sideOffset:i,className:`isolate z-50`,children:(0,Y.jsxs)(f,{"data-slot":`tooltip-content`,className:L(`z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 motion-reduce:animate-none`,e),...l,children:[c,(0,Y.jsx)(o,{className:`z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5`})]})})})}function Ge(e){return e==null?null:e>=40?`critical`:e>=15?`warning`:`info`}var X={scan:`⇩`,exchange:`⇄`,join:`⋈`,aggregate:`Σ`,sort:`↕`,filter:`∇`,aqe:`⚙`,boilerplate:`·`,transform:`→`};function Ke(e){return e.find(e=>e.impactBand===`critical`)??e.find(e=>e.impactBand===`warning`)??e[0]}function qe({data:e}){let{label:t,operatorDetail:n,primaryMetric:r,category:i,splitRole:a,durationSharePct:o,findings:s}=e,c=X[i]??X.transform,l=Ge(o);return(0,Y.jsxs)(`div`,{className:`relative flex flex-col overflow-visible rounded-md border border-border bg-card px-3 py-2 text-xs shadow-sm`,style:{width:220,height:90},"data-category":i,children:[(0,Y.jsx)(m,{type:`target`,position:g.Right,className:`opacity-0!`}),(0,Y.jsx)(m,{type:`source`,position:g.Left,className:`opacity-0!`}),s&&s.length>0?(()=>{let e=Ke(s);return(0,Y.jsxs)(He,{children:[(0,Y.jsxs)(Ue,{"data-testid":`node-finding-badge`,className:L(`absolute -right-1 -top-1 flex items-center gap-1 rounded-full bg-card px-1.5 py-0.5 text-[10px] font-medium leading-none shadow-sm ring-1 ring-border`,I[e.impactBand]),children:[(0,Y.jsx)(F,{impactBand:e.impactBand}),pe(e.type),s.length>1?(0,Y.jsx)(`span`,{children:s.length}):null]}),(0,Y.jsx)(We,{className:`max-w-xs`,children:(0,Y.jsx)(`ul`,{className:`flex flex-col gap-1 text-left`,children:s.map((e,t)=>(0,Y.jsxs)(`li`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(F,{impactBand:e.impactBand}),(0,Y.jsx)(`span`,{children:D(e)})]},e.id??`${e.type}-${t}`))})})]})})():null,a===`read`?(0,Y.jsx)(`p`,{className:`truncate text-xs text-muted-foreground`,children:`paired: see write half`}):null,o!=null&&l?(0,Y.jsxs)(`div`,{className:`mb-1 flex shrink-0 items-center gap-1.5`,title:`Share of the plan's total stage wall time`,children:[(0,Y.jsxs)(`span`,{className:L(`shrink-0 text-[10px] font-medium tabular-nums`,I[l]),children:[o,`%`]}),(0,Y.jsx)(`div`,{className:`h-1.5 flex-1 overflow-hidden rounded-full bg-muted`,children:(0,Y.jsx)(`div`,{"data-testid":`duration-heat-bar-fill`,className:L(`h-full rounded-full`,U[l]),style:{width:`${o>0?Math.max(o,4):0}%`}})}),(0,Y.jsxs)(`span`,{className:`sr-only`,children:[`Duration share `,o,`%, `,l===`critical`?`high`:l===`warning`?`medium`:`low`]})]}):null,(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(`span`,{"aria-hidden":`true`,className:`shrink-0`,children:c}),(0,Y.jsx)(`span`,{className:`min-w-0 truncate font-medium`,title:t,children:t})]}),n?(0,Y.jsx)(`p`,{className:`truncate text-muted-foreground`,title:n,children:n}):null,r?(0,Y.jsx)(`p`,{className:`truncate text-muted-foreground`,title:r,children:r}):null]})}var Je={read:`Read half. Consumes the shuffle written by its paired write half.`,write:`Write half. Produces the shuffle its paired read half consumes.`};function Ye({node:e,onClose:t,onJumpToPaired:n}){let r=X[e.category]??X.transform,i=e.findings??[],a=e.metrics??[],o=e.category.charAt(0).toUpperCase()+e.category.slice(1);return(0,Y.jsxs)(`div`,{"data-testid":`plan-node-detail`,role:`dialog`,"aria-label":`Plan node detail: ${e.label}`,className:`flex h-full w-80 shrink-0 flex-col gap-3 overflow-y-auto border-l border-border bg-card p-3 text-xs`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,Y.jsx)(`span`,{"aria-hidden":`true`,className:`shrink-0`,children:r}),(0,Y.jsx)(`span`,{className:`break-words font-medium`,children:e.label})]}),(0,Y.jsx)(z,{type:`button`,variant:`ghost`,size:`icon`,className:`size-6 shrink-0`,"aria-label":`Close node detail`,onClick:t,children:(0,Y.jsx)(oe,{className:`size-4`})})]}),(0,Y.jsxs)(`p`,{className:`text-muted-foreground`,children:[o,` · Segment `,e.segmentIndex+1,e.durationSharePct==null?null:(0,Y.jsxs)(Y.Fragment,{children:[` · `,(0,Y.jsxs)(`span`,{className:`text-foreground`,children:[e.durationSharePct,`%`]}),` of plan stage time`]})]}),e.splitRole?(0,Y.jsxs)(Z,{title:`Exchange`,children:[(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:Je[e.splitRole]}),e.exchangeShuffleBytes==null?e.label.startsWith(`Broadcast`)?(0,Y.jsx)(`p`,{className:`mt-1 text-muted-foreground`,children:`Broadcast, no shuffle`}):null:(0,Y.jsxs)(`p`,{className:`mt-1 text-muted-foreground`,children:[`Shuffle written`,` `,(0,Y.jsx)(`span`,{className:`font-medium tabular-nums text-foreground`,children:ue(e.exchangeShuffleBytes)})]}),e.pairedNodeId&&n?(0,Y.jsxs)(z,{type:`button`,variant:`outline`,size:`sm`,className:`mt-2 h-7 w-full justify-start gap-1.5`,onClick:()=>n(e.pairedNodeId),children:[(0,Y.jsx)(ye,{className:`size-3.5`,"aria-hidden":`true`}),`Jump to `,e.splitRole===`read`?`write`:`read`,` half`]}):null]}):null,i.length>0?(0,Y.jsx)(Z,{title:`Findings`,children:(0,Y.jsx)(`ul`,{className:`flex flex-col gap-1.5`,children:i.map((e,t)=>(0,Y.jsxs)(`li`,{className:`flex items-start gap-1.5`,children:[(0,Y.jsx)(B,{type:e.type,impactBand:e.impactBand,className:`shrink-0`}),(0,Y.jsx)(`span`,{className:`break-words`,children:D(e)})]},e.id??`${e.type}-${t}`))})}):null,a.length>0?(0,Y.jsx)(Z,{title:`Metrics`,children:(0,Y.jsx)(`dl`,{className:`grid grid-cols-[1fr_auto] gap-x-3 gap-y-1`,children:a.map((e,t)=>(0,Y.jsxs)(`div`,{className:`contents`,children:[(0,Y.jsx)(`dt`,{className:`min-w-0 break-words text-muted-foreground`,children:e.name}),(0,Y.jsx)(`dd`,{className:`text-right font-medium tabular-nums`,children:e.value})]},`${e.name}-${t}`))})}):null,e.detailText?(0,Y.jsx)(Z,{title:`Plan detail`,children:(0,Y.jsx)(`pre`,{"data-testid":`plan-node-detail-text`,className:`max-h-48 overflow-auto whitespace-pre-wrap break-words rounded bg-muted p-2 font-mono text-[11px] leading-snug`,children:e.detailText})}):null]})}function Z({title:e,children:t}){return(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`p`,{className:`mb-1 font-medium text-muted-foreground`,children:e}),t]})}var Xe=[{category:`scan`,label:`Scan`},{category:`filter`,label:`Filter`},{category:`join`,label:`Join`},{category:`aggregate`,label:`Aggregate`},{category:`sort`,label:`Sort`},{category:`exchange`,label:`Exchange`},{category:`transform`,label:`Transform`}];function Ze(){return(0,Y.jsxs)(`div`,{"data-testid":`plan-graph-legend`,role:`region`,"aria-label":`Plan graph legend`,className:`flex max-w-md flex-col gap-2 rounded-md border border-border bg-card p-3 text-xs shadow-md`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`p`,{className:`mb-1 font-medium text-muted-foreground`,children:`Operators`}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1`,children:Xe.map(({category:e,label:t})=>(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{"aria-hidden":`true`,children:X[e]}),t]},e))})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`p`,{className:`mb-1 font-medium text-muted-foreground`,children:`Duration share`}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{className:L(`h-1.5 w-6 rounded-full`,U.info)}),` low`]}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{className:L(`h-1.5 w-6 rounded-full`,U.warning)}),` medium`]}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{className:L(`h-1.5 w-6 rounded-full`,U.critical)}),` high`]})]})]}),(0,Y.jsxs)(`p`,{className:`text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`text-foreground`,children:`Edge thickness`}),` = shuffle bytes moved across an exchange.`]}),(0,Y.jsxs)(`p`,{className:`text-muted-foreground`,children:[`A `,(0,Y.jsx)(`span`,{className:`text-foreground`,children:`segment`}),` box groups one Exchange-bounded stage of the plan; a`,` `,(0,Y.jsx)(`span`,{className:`text-foreground`,children:`stage`}),` box (full-plan view) wraps every segment of one Spark stage.`]})]})}function Qe({...e}){return(0,Y.jsx)(u,{"data-slot":`popover`,...e})}function $e({...e}){return(0,Y.jsx)(a,{"data-slot":`popover-trigger`,...e})}function et({align:e=`center`,alignOffset:t=0,side:n=`bottom`,sideOffset:r=8,className:i,...a}){return(0,Y.jsx)(s,{children:(0,Y.jsx)(c,{className:`isolate z-50 outline-none`,align:e,alignOffset:t,side:n,sideOffset:r,children:(0,Y.jsx)(l,{"data-slot":`popover-content`,className:L(`z-50 w-72 origin-(--transform-origin) rounded-lg bg-popover p-3 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95 motion-reduce:animate-none`,i),...a})})})}function tt({ariaLabel:e,name:t,options:n,value:r,onChange:i,trailingContent:a}){return(0,Y.jsx)(Ve,{children:(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1.5`,role:`radiogroup`,"aria-label":e,children:[n.map(e=>(0,Y.jsxs)(He,{children:[(0,Y.jsxs)(Ue,{render:(0,Y.jsx)(`label`,{className:`tap-target-comfortable flex min-h-8 items-center gap-1.5 px-1 text-sm`}),children:[(0,Y.jsx)(`input`,{type:`radio`,name:t,value:e.value,checked:r===e.value,onChange:()=>i(e.value)}),e.label]}),(0,Y.jsx)(We,{children:e.description})]},e.value)),a]})})}var nt=[{value:`io`,label:`I/O only`,description:`Show only scan and exchange nodes, where the plan reads or shuffles/broadcasts data.`},{value:`basic`,label:`Basic`,description:`Add join, aggregate, sort, and filter nodes to I/O; hide pass-through and boilerplate operators like Project or WholeStageCodegen.`},{value:`advanced`,label:`Advanced`,description:`Show every operator, including the pass-through and boilerplate nodes the other two modes hide.`}];function rt({mode:e,onChange:t,hiddenCount:n}){return(0,Y.jsx)(tt,{ariaLabel:`Node filter`,name:`plan-graph-filter`,options:nt,value:e,onChange:t,trailingContent:n>0?(0,Y.jsx)(me,{label:`${n} nodes hidden`,impactBand:`info`}):null})}var it=[{value:`exclusive`,label:`Node only`,description:`Each node's share reflects time spent in that operator alone, excluding its descendants.`},{value:`inclusive`,label:`Node + descendants`,description:`Each node's share adds in every descendant operator's time, so an ancestor's bar reflects its whole subtree.`}];function at({mode:e,onChange:t}){return(0,Y.jsx)(tt,{ariaLabel:`Duration heat bar scope`,name:`plan-graph-duration-mode`,options:it,value:e,onChange:t})}function ot({filterMode:e,onFilterModeChange:t,hiddenCount:n,durationMode:r,onDurationModeChange:i,iconOnly:a=!1}){return(0,Y.jsxs)(Qe,{children:[(0,Y.jsxs)($e,{"aria-label":a?`Settings`:void 0,title:a?`Settings`:void 0,className:L(V({variant:`ghost`,size:a?`icon`:`sm`}),`tap-target-comfortable`,a?void 0:`gap-1.5`),children:[(0,Y.jsx)(De,{"aria-hidden":`true`}),a?null:`Settings`]}),(0,Y.jsxs)(et,{align:a?`start`:`end`,side:a?`right`:`bottom`,"aria-label":`Plan graph settings`,className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`mb-1.5 text-xs font-medium text-muted-foreground`,children:`Node filter`}),(0,Y.jsx)(rt,{mode:e,onChange:t,hiddenCount:n})]}),(0,Y.jsx)(`div`,{"aria-hidden":`true`,className:`h-px bg-border`}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`mb-1.5 text-xs font-medium text-muted-foreground`,children:`Duration attribution`}),(0,Y.jsx)(at,{mode:r,onChange:i})]})]})]})}var st=e=>e.data;function ct({planNodes:e,problemNodes:t,filterMode:n,onFilterModeChange:r,hiddenCount:i,durationMode:a,onDurationModeChange:o,legendOpen:s,onToggleLegend:c,miniMapOpen:l,onToggleMiniMap:u}){let{zoomIn:d,zoomOut:f,fitView:p,setCenter:m}=T(),[h,g]=(0,J.useState)(null),[_,v]=(0,J.useState)(null),y=[...e].filter(e=>st(e).durationSharePct!=null).sort((e,t)=>(st(t).durationSharePct??0)-(st(e).durationSharePct??0)),b=e=>{e&&m(e.position.x,e.position.y,{zoom:1,duration:300})},x=(e,t,n)=>{if(e.length===0)return;let r=e[((t?e.findIndex(e=>e.id===t):-1)+1)%e.length];b(r),n(r.id)};return(0,Y.jsxs)(`div`,{className:`flex w-12 shrink-0 flex-col items-center gap-1 border-r border-border bg-card/60 py-2`,children:[(0,Y.jsxs)(lt,{children:[(0,Y.jsx)(Q,{label:`Zoom in`,onClick:()=>d({duration:200}),children:(0,Y.jsx)(Ne,{"aria-hidden":`true`})}),(0,Y.jsx)(Q,{label:`Zoom out`,onClick:()=>f({duration:200}),children:(0,Y.jsx)(je,{"aria-hidden":`true`})}),(0,Y.jsx)(Q,{label:`Fit to view`,onClick:()=>p({duration:200}),children:(0,Y.jsx)(Te,{"aria-hidden":`true`})})]}),(0,Y.jsx)(ut,{}),(0,Y.jsxs)(lt,{children:[(0,Y.jsx)(Q,{label:`Next worst duration`,disabled:y.length===0,onClick:()=>x(y,h,g),children:(0,Y.jsx)(ke,{"aria-hidden":`true`})}),t.length>0?(0,Y.jsx)(Q,{label:`Next problem`,onClick:()=>x(t,_,v),children:(0,Y.jsx)(xe,{"aria-hidden":`true`})}):null]}),(0,Y.jsx)(ut,{}),(0,Y.jsxs)(lt,{children:[(0,Y.jsx)(ot,{iconOnly:!0,filterMode:n,onFilterModeChange:r,hiddenCount:i,durationMode:a,onDurationModeChange:o}),(0,Y.jsx)(Q,{label:s?`Hide legend`:`Legend`,pressed:s,onClick:c,children:(0,Y.jsx)(he,{"aria-hidden":`true`})}),(0,Y.jsx)(Q,{label:l?`Hide minimap`:`Show minimap`,pressed:l,onClick:u,children:(0,Y.jsx)(Ce,{"aria-hidden":`true`})})]})]})}function lt({children:e}){return(0,Y.jsx)(`div`,{className:`flex flex-col items-center gap-1`,children:e})}function ut(){return(0,Y.jsx)(`div`,{"aria-hidden":`true`,className:`my-0.5 h-px w-6 bg-border`})}function Q({label:e,onClick:t,disabled:n,pressed:r,children:i}){return(0,Y.jsx)(z,{type:`button`,variant:`ghost`,size:`icon`,className:L(`tap-target-comfortable`,r&&`bg-primary/15 text-primary hover:bg-primary/20 hover:text-primary`),"aria-label":e,title:e,"aria-pressed":r,disabled:n,onClick:t,children:i})}function dt(e){if(e.type!==`planNode`)return`var(--muted)`;let t=e.data.findings??[],n=ge(t);return n?N[n]:`var(--plan-aggregate)`}function ft({finding:e,className:t}){let n=se(e);return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Y.jsx)(B,{type:e.type,impactBand:e.impactBand,className:t}),n?(0,Y.jsx)(`span`,{className:`font-mono text-[10px] leading-none whitespace-nowrap text-muted-foreground`,children:n}):null]})}function pt({data:e}){let{width:t,height:n,stageId:r,durationLabel:i,findings:a}=e;return(0,Y.jsx)(`div`,{className:`overflow-hidden rounded-lg border border-dashed border-border/70 bg-muted/10 nopan nodrag`,style:{width:t,height:n,pointerEvents:`all`},children:(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1 px-2 py-1 text-xs text-muted-foreground`,children:[(0,Y.jsx)(`span`,{title:r==null?`This plan segment couldn't be matched to a specific Spark stage`:void 0,children:r==null?`Stage —`:`Stage ${r}`}),(0,Y.jsx)(me,{label:i??`—`,impactBand:`info`,title:`Approximate share of this stage's wall time`}),a.length>0?(0,Y.jsx)(`div`,{className:`ml-auto flex min-w-0 flex-wrap items-center justify-end gap-1`,children:a.map((e,t)=>(0,Y.jsx)(ft,{finding:e,className:`h-4 gap-1 px-1.5 text-xs`},e.id??`${e.type}-${t}`))}):null]})})}function mt({data:e}){let{width:t,height:n,stageId:r,findings:i,showOwnFindings:a=!0,onSelect:o}=e;return(0,Y.jsxs)(`div`,{className:`relative rounded-xl border border-primary/25 bg-primary/5 nopan nodrag`,style:{width:t,height:n,pointerEvents:`all`},children:[(0,Y.jsx)(`button`,{type:`button`,"aria-label":`Focus stage ${r}`,onClick:o,style:{pointerEvents:`auto`},className:`absolute inset-0 size-full cursor-pointer rounded-xl transition-colors hover:border-primary/50 hover:bg-primary/10`}),a&&i.length>0?(0,Y.jsx)(`div`,{className:`absolute left-2 right-2 top-1 flex flex-wrap gap-1`,children:i.map((e,t)=>(0,Y.jsx)(ft,{finding:e,className:`h-4 gap-1 px-1.5 text-xs`},e.id??`${e.type}-${t}`))}):null,(0,Y.jsxs)(`span`,{className:`absolute right-2 bottom-1 text-xs font-medium text-primary`,children:[`Stage `,r]})]})}var ht=1.5,gt=.55;function _t(e,t){return!(e>0)||!(t>0)?0:Math.min(1,Math.log(e+1)/Math.log(t+1))}function vt(e,t){return ht+7.5*_t(e,t)}function yt(e,t){return gt+.44999999999999996*_t(e,t)}function bt({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:a,markerEnd:o,data:s}){let[c,l,u]=_({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:a}),{shuffleBytes:d=0,maxShuffleBytes:f=0}=s??{},p=vt(d,f),m=yt(d,f),h=d>0&&d<1e3?`<1 KB`:ue(d);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(ee,{path:c,markerEnd:o,style:{stroke:`var(--text-muted)`,strokeWidth:p,strokeOpacity:m}}),(0,Y.jsx)(v,{children:(0,Y.jsxs)(He,{children:[(0,Y.jsx)(Ue,{"data-testid":`exchange-edge-label`,className:`nodrag nopan pointer-events-auto absolute cursor-help rounded bg-card/90 px-1 py-0.5 font-mono text-[10px] leading-none text-muted-foreground ring-1 ring-border`,style:{transform:`translate(-50%, -50%) translate(${l}px, ${u}px)`},children:h}),(0,Y.jsx)(We,{className:`max-w-xs`,children:(0,Y.jsxs)(`p`,{children:[h,` of shuffle written across this exchange. Edge thickness scales with the volume moved.`]})})]})})]})}var xt={planNode:qe,segmentGroup:pt,stageGroup:mt},St={exchange:bt},Ct=1,wt=2,Tt=3,Et=e=>e.data,$={padding:.06,maxZoom:1.75};function Dt({resizeTick:e,fitSignal:t,centerRequest:n}){let{fitView:r,setCenter:i,getNode:a}=T();return(0,J.useEffect)(()=>{if(!n||n.token===0||!n.nodeId)return;let e=a(n.nodeId);e?i(e.position.x,e.position.y,{zoom:1,duration:300}):r({nodes:[{id:n.nodeId}],duration:300,maxZoom:1})},[n,i,a,r]),(0,J.useEffect)(()=>{let e=()=>r({duration:200,...$});return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[r]),(0,J.useEffect)(()=>{e!==0&&r({duration:200,...$})},[e,r]),(0,J.useEffect)(()=>{t!==0&&r({duration:300,...$})},[t,r]),null}function Ot(){let e=(0,J.useRef)(null),[t,n]=(0,J.useState)(0);return(0,J.useEffect)(()=>{let t=e.current;if(!t)return;let r=!0,i=new ResizeObserver(()=>{if(r){r=!1;return}n(e=>e+1)});return i.observe(t),()=>i.disconnect()},[]),{ref:e,tick:t}}function kt(e,t){return e.filter(e=>e.stageId===t||e.stageIds?.includes(t))}function At({model:e,showMiniMap:t,findings:n=[],stageId:r,segmentStageIds:i,visibleNodeIds:a,visibleEdges:o,onSelectStage:s,selectedNodeId:c=null,onSelectNode:l,onJumpToPaired:u,centerRequest:d,fitSignal:f=0,filterMode:p=`basic`,onFilterModeChange:m=()=>{},hiddenCount:g=0,durationMode:_=`exclusive`,onDurationModeChange:v=()=>{}}){let{flowNodes:S,flowEdges:ee}=(0,J.useMemo)(()=>{let t=e.nodes.reduce((e,t)=>e+(t.exclusiveDurationShare??t.durationShare??0),0),c=e=>`segment-${e.segmentIndex}`,l=e.scope===`full`,u=e=>{let t=i?.get(e.segmentIndex);return t==null?null:`stage-${t}`},d=a?Re(e.nodes.filter(e=>a.has(e.id)),o??e.edges,{groupOf:c}):Re(e.nodes,e.edges,{groupOf:c}),f=new Set(d.map(c)),p=l?new Set(d.map(u).filter(e=>e!=null)):null,m=e.nodes.some(e=>!f.has(c(e)))||p!=null&&e.nodes.some(e=>{let t=u(e);return t!=null&&!p.has(t)})?Re(e.nodes,e.edges,{groupOf:c}):d,h=d.map(e=>{let n=e.durationShare!=null&&t>0?Math.round(e.durationShare/t*100):null,r=e.splitRole===`read`?`${e.label}, paired: see write half`:[e.label,e.operatorDetail,e.primaryMetric,n==null?null:`${n}% of the plan's total stage duration`].filter(Boolean).join(`, `);return{id:e.id,type:`planNode`,position:e.position,draggable:!1,zIndex:Tt,measured:{width:220,height:90},ariaLabel:r,ariaRole:`button`,data:{...e,durationSharePct:n}}}),g=Be(c,[d,m]).map(t=>{let r=Number(t.id.replace(`segment-`,``)),a=e.nodes.filter(e=>c(e)===t.id),o=a.reduce((e,t)=>e+(t.exclusiveDurationShare??t.durationShare??0),0),s=a.some(e=>e.durationShare!=null),l=i?.get(r)??null,u=l==null?[]:kt(n,l);return{id:t.id,type:`segmentGroup`,position:t.position,draggable:!1,selectable:!1,focusable:!1,zIndex:wt,style:{width:t.width,height:t.height},measured:{width:t.width,height:t.height},data:{width:t.width,height:t.height,stageId:l,durationLabel:s?q(o):null,findings:u}}}),_=new Set(g.map(e=>e.data.stageId).filter(e=>e!=null)),v=l?(()=>{let e={paddingX:32,paddingY:64,headerHeight:0},t=Be(u,[d,m],e),i=`stage-${r}`;if(kt(n,r).length>0&&!t.some(e=>e.id===i)){let[n]=Be(()=>i,[d,m],e);n&&t.push(n)}return t.map(e=>{let t=Number(e.id.replace(`stage-`,``));return{id:e.id,type:`stageGroup`,position:e.position,draggable:!1,selectable:!1,focusable:!1,zIndex:Ct,style:{width:e.width,height:e.height},measured:{width:e.width,height:e.height},data:{width:e.width,height:e.height,stageId:t,findings:kt(n,t),showOwnFindings:!_.has(t),onSelect:()=>s?.(t)}}})})():[],y=o??e.edges,b=y.reduce((e,t)=>Math.max(e,t.shuffleBytes??0),0),x=y.map(e=>e.shuffleBytes?{id:e.id,source:e.source,target:e.target,type:`exchange`,data:{shuffleBytes:e.shuffleBytes,maxShuffleBytes:b}}:{id:e.id,source:e.source,target:e.target});return{flowNodes:[...v,...g,...h],flowEdges:x}},[e,n,r,i,a,o,s]),{ref:w,tick:T}=Ot(),[E,D]=(0,J.useState)(!0),[O,k]=(0,J.useState)(!0),A=c?S.find(e=>e.id===c&&e.type===`planNode`):void 0,j=S.filter(e=>e.type===`planNode`),M=S.filter(e=>e.type===`stageGroup`&&(e.data.findings?.length??0)>0).sort(_e(e=>e.data.findings??[])),te=a!=null&&a.size===0&&e.nodes.length>0;return(0,Y.jsx)(h,{children:(0,Y.jsx)(Ve,{children:(0,Y.jsxs)(`div`,{ref:w,className:`flex min-h-0 flex-1`,children:[(0,Y.jsx)(ct,{planNodes:j,problemNodes:M,filterMode:p,onFilterModeChange:m,hiddenCount:g,durationMode:_,onDurationModeChange:v,legendOpen:E,onToggleLegend:()=>D(e=>!e),miniMapOpen:t&&O,onToggleMiniMap:()=>k(e=>!e)}),(0,Y.jsx)(`div`,{className:`relative min-w-0 flex-1`,onKeyDown:e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target.closest(`.react-flow__node-planNode`)?.getAttribute(`data-id`);t&&(e.preventDefault(),l?.(t))},children:(0,Y.jsxs)(y,{nodes:S,edges:ee,nodeTypes:xt,edgeTypes:St,"aria-label":`Plan graph. Operators and the data flowing between them. Tab to move between operators, Enter to open an operator's details.`,fitView:!0,fitViewOptions:$,minZoom:.05,edgesFocusable:!1,onNodeClick:(e,t)=>{t.type===`planNode`&&l?.(t.id)},onPaneClick:()=>l?.(null),children:[(0,Y.jsx)(b,{}),(0,Y.jsx)(Dt,{resizeTick:T,fitSignal:f,centerRequest:d}),te?(0,Y.jsx)(C,{position:`top-center`,children:(0,Y.jsxs)(`p`,{role:`status`,className:`rounded-md border border-border bg-card px-3 py-2 text-xs text-muted-foreground shadow-sm`,children:[`All `,e.nodes.length,` operators are hidden by the node filter. Change it in Settings to show them.`]})}):null,E?(0,Y.jsx)(C,{position:`bottom-left`,children:(0,Y.jsx)(Ze,{})}):null,t&&O?(0,Y.jsx)(x,{nodeColor:dt,pannable:!0,zoomable:!0,ariaLabel:`Plan overview. Drag to pan and scroll to zoom the graph.`}):null]})}),A?(0,Y.jsx)(Ye,{node:Et(A),onClose:()=>l?.(null),onJumpToPaired:u}):null]})})})}function jt({open:e,nodeCount:t,onConfirm:n,onCancel:r}){return(0,Y.jsx)(j,{open:e,onOpenChange:e=>{e||r()},children:(0,Y.jsxs)(M,{children:[(0,Y.jsx)(k,{children:(0,Y.jsx)(ne,{children:`Expand to full plan?`})}),(0,Y.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`This plan has `,t,` nodes. Rendering the full graph may take several seconds.`]}),(0,Y.jsxs)(E,{children:[(0,Y.jsx)(z,{type:`button`,variant:`outline`,size:`sm`,onClick:r,children:`Cancel`}),(0,Y.jsx)(z,{type:`button`,size:`sm`,onClick:n,children:`Expand anyway`})]})]})})}var Mt={io:[`scan`,`exchange`],basic:[`scan`,`exchange`,`join`,`aggregate`,`sort`,`filter`],advanced:null},Nt=300;function Pt(e,t){let n=new Map;for(let t of e){let e=n.get(t.source);e?e.push(t.target):n.set(t.source,[t.target])}let r=new Map;function i(e){let a=r.get(e);if(a)return a;let o=new Set;r.set(e,o);for(let r of n.get(e)??[])if(t.has(r))o.add(r);else for(let e of i(r))o.add(e);return o}let a=new Map;for(let t of e)t.shuffleBytes&&a.set(`${t.source}->${t.target}`,t.shuffleBytes);let o=[];for(let e of t)for(let t of i(e)){let n={id:`${e}=>${t}`,source:e,target:t},r=a.get(`${e}->${t}`);r&&(n.shuffleBytes=r),o.push(n)}return o}function Ft(e,t){try{return Fe(e,t)}catch{return null}}var It=new Map;function Lt(e,t,n,r){return`${e??`none`}::${t}::${n}::${r}`}function Rt(){It.clear()}var zt=R.getState().modelResetCount;R.subscribe(e=>{e.modelResetCount!==zt&&(zt=e.modelResetCount,Rt())});function Bt(e,t,n){let r=Lt(n,t.stageId,t.scope,t.durationMode),i=It.get(r);if(i)return i;let a=Ft(e,t);return a&&It.set(r,a),a}function Vt({stageId:e,appModel:t,findings:n,activeFileId:r,onClose:i,initialScope:a}){let{resetToDropZone:o}=ie(),{recentEntries:s,onPickRecent:c,onRemoveRecent:l}=te(r),[u,d]=(0,J.useState)(`basic`),[f,p]=(0,J.useState)(`exclusive`),[m,h]=(0,J.useState)(a??`segment`),[g,_]=(0,J.useState)(!1),[v,y]=(0,J.useState)(a!==`full`),[b,x]=(0,J.useState)(!1),[S,ee]=(0,J.useState)(e),[C,w]=(0,J.useState)(null),[T,E]=(0,J.useState)(0),[D,k]=(0,J.useState)({nodeId:null,token:0}),[j,M]=(0,J.useState)(null),ne=e=>k(t=>({nodeId:e,token:t.token+1}));(0,J.useEffect)(()=>{w(null)},[S,m,u]);let N=O(S,t),P=N?Bt(N,{scope:`segment`,stageId:S,appModel:t,findings:n,durationMode:f},r):null,F=P!=null&&P.scope===`full`&&m===`segment`&&P.nodes.length>Nt,I=F&&!b;(0,J.useEffect)(()=>{I&&_(!0)},[I]);let L=N&&(m===`full`||g)?Bt(N,{scope:`full`,stageId:S,appModel:t,findings:n,durationMode:f},r):null,R=!v&&m===`full`&&L!=null&&L.nodes.length>Nt,B=g||R;(0,J.useEffect)(()=>{let e=e=>{e.key!==`Escape`||B||(C?w(null):i())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i,B,C]);let V=F||R?null:m===`full`?L:P;(0,J.useEffect)(()=>{j&&m===`full`&&V?.nodes.some(e=>e.id===j)&&(w(j),ne(j),M(null))},[j,m,V]);function H(){let e=N?Bt(N,{scope:`full`,stageId:S,appModel:t,findings:n,durationMode:f},r):null;e&&e.nodes.length>Nt?_(!0):(h(`full`),E(e=>e+1))}function U(){h(`segment`),E(e=>e+1)}function ae(e){if(V?.nodes.some(t=>t.id===e)){w(e),ne(e);return}M(e),H()}let W=(0,J.useCallback)(e=>{ee(e),h(`segment`),y(!0),x(!1),M(null),E(e=>e+1)},[]);function oe(){y(!0),h(`full`),_(!1),E(e=>e+1)}function se(){_(!1),M(null),R&&(y(!0),h(`segment`),P?.scope===`full`&&x(!0)),I&&x(!0)}function ce(e){return i(),c(e)}let{visibleNodeIds:le,filteredEdges:G,hiddenNodes:ue}=(0,J.useMemo)(()=>{let e=Mt[u],t=new Set;if(V)for(let n of V.nodes)(!e||e.includes(n.category))&&t.add(n.id);return{visibleNodeIds:t,filteredEdges:V?Pt(V.edges,t):[],hiddenNodes:V?V.nodes.filter(e=>!t.has(e.id)):[]}},[V,u]),K=V?.scope===`full`,de=m===`full`,fe=(0,J.useId)(),q=K&&!de;return(0,Y.jsxs)(`div`,{"data-testid":`dashboard`,className:`flex h-screen flex-col`,style:{paddingRight:`var(--docs-inset, 0px)`},children:[(0,Y.jsx)(A,{onLoadNew:o,recentEntries:s,activeFileId:r,onPickRecent:ce,onRemoveRecent:l,leadingContent:(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsxs)(`h1`,{className:`truncate font-heading text-sm font-semibold`,children:[`Plan graph: Stage `,S]}),V&&V.scope===`segment`?(0,Y.jsxs)(`p`,{className:`truncate text-xs text-muted-foreground`,children:[`Segment `,V.segmentIndex+1,` of `,V.segmentCount]}):null,(0,Y.jsx)(`p`,{className:`truncate text-xs text-muted-foreground`,children:(0,Y.jsx)(re,{anchor:`#bottleneck-duplicate-plan-subtree`,children:`Plan Advisor docs`})})]}),sectionControls:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`flex flex-col items-end gap-0.5`,children:[(0,Y.jsx)(z,{type:`button`,variant:`outline`,size:`sm`,disabled:q,"aria-describedby":q?fe:void 0,onClick:K?U:H,children:K?`Back to segment view`:`Expand to full plan`}),q?(0,Y.jsx)(`p`,{id:fe,className:`text-xs text-muted-foreground`,children:`This stage's plan couldn't be scoped to a single segment`}):null]}),(0,Y.jsx)(z,{variant:`ghost`,size:`sm`,onClick:i,children:`Close`})]})}),(0,Y.jsx)(`div`,{className:`flex flex-1 flex-col overflow-hidden`,children:R?null:!N||!V?(0,Y.jsx)(`p`,{role:`alert`,className:`p-6 text-sm text-destructive`,children:F?`This plan has more nodes than the graph view can safely render without expanding. Click "Expand to full plan" to confirm.`:`Couldn't build the plan graph for this stage.`}):(0,Y.jsx)(At,{model:V,visibleNodeIds:le,visibleEdges:G,showMiniMap:!0,findings:n,stageId:S,segmentStageIds:V.segmentStageIds,onSelectStage:W,selectedNodeId:C,onSelectNode:w,onJumpToPaired:ae,centerRequest:D,fitSignal:T,filterMode:u,onFilterModeChange:d,hiddenCount:ue.length,durationMode:f,onDurationModeChange:p})}),(0,Y.jsx)(jt,{open:B,nodeCount:L?.nodes.length??0,onConfirm:oe,onCancel:se})]})}export{Vt as PlanGraphRoute};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{D as r,O as i,at as a,i as o,k as s,l as c,mt as l,ut as u,yt as d}from"./index-3vlFVNCg.js";import{t as f}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as p}from"./StagePill-BlMOW_pU.js";import{t as m}from"./ImpactEstimate-BGt-4WX5.js";import{t as h}from"./RowPagination-BLsm8I6i.js";import{r as g}from"./impact-sort-DxaUheWV.js";import{n as _}from"./finding-anchor-DEV8JvgH.js";import{t as v}from"./usePagedRows-jNUWgVTD.js";import{n as y,t as b}from"./useSortMode-BaeAA5cw.js";var x=e(t(),1),S=n();function C(e){return e.stageId!=null}function w(e){return String(e.extended??``).replace(/, wasting \d+s of executor time\./,`.`)}function T(e){let t=String(e.recommendation??``),n=t.indexOf(`: `);return n===-1?t:t.slice(n+2)}function E({finding:e}){let t=_([e]);return(0,S.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`flex flex-col gap-1 transition-colors ${t.flashClassName}`,children:[(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(p,{stageId:e.stageId}),(0,S.jsx)(r,{impactBand:e.impactBand})]}),(0,S.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Wasted `,(0,S.jsx)(`strong`,{children:u(l(e))}),` of executor time.`,e.extended?(0,S.jsxs)(s,{children:[` `,w(e)]}):null]}),e.recommendation?(0,S.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:T(e)}):null,(0,S.jsx)(m,{finding:e})]})}function D({appModel:e,catalog:t,defaultCollapsed:n=!0}){let[r,s]=(0,x.useState)(0),{sortMode:p,setSortMode:m,orderBy:_}=b(),[w,T]=(0,x.useState)(!n),D=c(),O=(0,x.useRef)(!1);(0,x.useEffect)(()=>{if(!O.current){O.current=!0;return}s(0)},[e]);let k=t.filter(C).filter(e=>e.type===`retryWaste`),A=[...k].sort((e,t)=>a[e.impactBand]-a[t.impactBand]||(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0)),j=_(A,e=>[e],e=>e.stageId),M=D?j.findIndex(e=>e===D.finding):null,{totalPages:N,effectivePage:P,visible:F}=v(j,r,s,M);return k.length===0?null:(0,S.jsxs)(o,{title:`Retry Waste`,impactBand:d(k),badges:(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(i,{type:`retryWaste`,impactBand:d(k)}),g(k,k.length,w)?(0,S.jsx)(y,{mode:p,onChange:e=>{m(e),s(0)}}):null]}),open:w,onOpenChange:T,summary:(0,S.jsx)(f,{value:u(l(A[0])),context:`${k.length} item${k.length===1?``:`s`} flagged`}),children:[(0,S.jsx)(`ul`,{className:`space-y-3`,children:F.map(e=>(0,S.jsx)(E,{finding:e},e.id))}),(0,S.jsx)(h,{page:P,totalPages:N,onPrev:()=>s(e=>e-1),onNext:()=>s(e=>e+1)})]})}export{D as RetryWaste};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{p as e}from"./plan-graph-vendor-B0sEms9Z.js";import{N as t}from"./index-3vlFVNCg.js";var n=e();function r({page:e,totalPages:r,onPrev:i,onNext:a,renderJumpControl:o}){return r<=1?null:(0,n.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs ${o?`justify-between`:`justify-end`}`,children:[o?.(),(0,n.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,n.jsx)(t,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable tap-target-comfortable--sm`,onClick:i,disabled:e===0,children:`Previous`}),(0,n.jsxs)(`span`,{className:`text-muted-foreground`,children:[`Page `,e+1,` of `,r]}),(0,n.jsx)(t,{type:`button`,variant:`ghost`,size:`sm`,className:`tap-target-comfortable tap-target-comfortable--sm`,onClick:a,disabled:e===r-1,children:`Next`})]})]})}export{r as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{i as r}from"./useRecentFiles-D0OA_EOK.js";import{O as i,Pt as a,at as o,gt as s,i as c,l,lt as u,mt as d,yt as f}from"./index-3vlFVNCg.js";import{t as p}from"./WidgetLeadSummary-BdUUi7L5.js";import{n as m}from"./StagePill-BlMOW_pU.js";import{t as h}from"./ImpactEstimate-BGt-4WX5.js";import{t as g}from"./RowPagination-BLsm8I6i.js";import{r as _}from"./impact-sort-DxaUheWV.js";import{n as v,t as y}from"./finding-anchor-DEV8JvgH.js";import{t as b}from"./usePagedRows-jNUWgVTD.js";import{n as x,t as S}from"./useSortMode-BaeAA5cw.js";import{t as C}from"./StageHeader-BTzGkK8k.js";import{a as w,i as T,n as E,r as D,t as O}from"./select-kuy1MiAo.js";import{t as k}from"./PlanExplorer-_2oB5ouy.js";var A=e(t(),1),j=n();function M({entry:e,appModel:t}){let n=a(),i=v([e.shuffle]),o=t.stages.get(e.stageId),c=o?s(o):null,l=n===`advanced`&&r(e.stageId,t);return(0,j.jsxs)(`div`,{ref:i.ref,tabIndex:i.tabIndex,"data-flashed":i.dataFlashed,className:`space-y-2 ${y} transition-colors ${i.flashClassName}`,children:[(0,j.jsx)(C,{stageId:e.stageId,appModel:t}),(0,j.jsxs)(`p`,{className:`text-sm`,children:[`Shuffle read: `,(0,j.jsx)(`strong`,{children:u(d(e.shuffle))}),` · `,`Write: `,u(o?.shuffleWriteBytes??0)]}),(0,j.jsx)(h,{finding:e.shuffle}),c||l?(0,j.jsxs)(`div`,{className:`space-y-2 pt-1`,children:[c?(0,j.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Try `,(0,j.jsxs)(`code`,{children:[`spark.sql.shuffle.partitions = `,c.recommended]}),`: current`,` `,c.current,` tasks, target 128 MB per partition`]}):null,l?(0,j.jsx)(k,{stageId:e.stageId,appModel:t}):null]}):null]})}var N=(0,A.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let[r,a]=(0,A.useState)(0),[s,h]=(0,A.useState)(!n),{sortMode:v,setSortMode:y,orderBy:C}=S(),k=l(),{shuffleFindings:N,sorted:P,orderedEntries:F}=(0,A.useMemo)(()=>{let e=t.filter(e=>e.type===`shuffle`),n=[...e.filter(e=>e.stageId!=null).map(e=>({stageId:e.stageId,shuffle:e,impactBand:e.impactBand,peak:d(e)}))].sort((e,t)=>o[e.impactBand]-o[t.impactBand]||t.peak-e.peak);return{shuffleFindings:e,sorted:n,orderedEntries:C(n,e=>[e.shuffle],e=>e.stageId)}},[t,v]),I=k?F.findIndex(e=>e.shuffle===k.finding):null,{totalPages:L,effectivePage:R,visible:z}=b(F,r,a,I);if(N.length===0){let t=0;for(let n of e.stages.values())t=Math.max(t,n.shuffleReadBytes??0);return(0,j.jsx)(c,{title:`Shuffle I/O`,open:s,onOpenChange:h,summary:(0,j.jsx)(p,{value:u(t),context:`no issue detected: peak shuffle read`}),children:(0,j.jsx)(`div`,{className:`flex flex-col gap-1`,children:(0,j.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No shuffle read/write issues detected.`})})})}let B=f(N),V=F.map(e=>({id:e.stageId})),H=_(N,P.length,s);return(0,j.jsx)(c,{title:`Shuffle I/O`,impactBand:B,open:s,onOpenChange:h,summary:(0,j.jsx)(p,{value:u(P[0].peak),context:`Peak shuffle read · ${P.length} stage${P.length===1?``:`s`} flagged`}),badges:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(i,{type:`shuffle`,impactBand:B??`info`}),H?(0,j.jsx)(x,{mode:v,onChange:e=>{y(e),a(0)}}):null]}),children:(0,j.jsxs)(`div`,{className:`space-y-4`,children:[(0,j.jsx)(m,{pills:V}),z.map(t=>(0,j.jsx)(M,{entry:t,appModel:e},t.stageId)),(0,j.jsx)(g,{page:R,totalPages:L,onPrev:()=>a(e=>e-1),onNext:()=>a(e=>e+1),renderJumpControl:()=>(0,j.jsxs)(O,{value:String(R*6),onValueChange:e=>a(Math.floor(Number(e)/6)),children:[(0,j.jsx)(T,{size:`sm`,"aria-label":`Jump to stage`,children:(0,j.jsx)(w,{placeholder:`Jump to stage`})}),(0,j.jsx)(E,{children:F.map((e,t)=>(0,j.jsxs)(D,{value:String(t),children:[`Stage `,e.stageId,` (`,u(e.peak),`)`]},e.stageId))})]})})]})})});export{N as ShuffleIO};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{ft as r,mt as i}from"./index-3vlFVNCg.js";import{t as a}from"./StageFindingGroup-AyI7BMd3.js";var o=e(t(),1),s=n();function c(e){return`${e.metric}: ${r(`ratio`,i(e))}`}var l=(0,o.memo)(function(e){return(0,s.jsx)(a,{...e,type:`skew`,title:`Task Skew`,idPrefix:`skew`,findingLabel:c})});export{l as Skew};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{D as r,O as i,at as a,ft as o,i as s,l as c,mt as l}from"./index-3vlFVNCg.js";import{t as u}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as d}from"./ImpactEstimate-BGt-4WX5.js";import{t as f}from"./RowPagination-BLsm8I6i.js";import{r as p}from"./impact-sort-DxaUheWV.js";import{n as m}from"./finding-anchor-DEV8JvgH.js";import{t as h}from"./usePagedRows-jNUWgVTD.js";import{n as g,t as _}from"./useSortMode-BaeAA5cw.js";import{t as v}from"./StageHeader-BTzGkK8k.js";var y=e(t(),1),b=n();function x(e){let t=l(e);if(e.metric===`execMaxMedianRatio`)return`Executor ${e.executorId}: ${o(`ratio`,t)} median on ${e.dimension??`this metric`}`;let n=Math.round((e.hostTaskShare??0)*100);return e.metric===`hostDurationShare`?`${e.host}: ${o(`pctFraction`,t)} of this stage's task time (${o(`pct`,n)} of tasks)`:`${e.host}: ${o(`ratio`,t)} median task time (${o(`pct`,n)} of tasks)`}function S(e){if(e.metric!==`hostDurationShare`&&e.metric!==`execMaxMedianRatio`)return null;let t=e.recommendation??``,n=t.indexOf(`: `);return n===-1?null:t.slice(n)}function C({finding:e,appModel:t}){let n=m([e]),i=S(e);return(0,b.jsxs)(`li`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-1 text-sm transition-colors ${n.flashClassName}`,children:[(0,b.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,b.jsx)(r,{impactBand:e.impactBand}),e.stageId==null?null:(0,b.jsx)(v,{stageId:e.stageId,appModel:t})]}),(0,b.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[x(e),i]}),(0,b.jsx)(d,{finding:e}),i==null?(0,b.jsx)(`p`,{className:`text-muted-foreground pt-1`,children:e.recommendation}):null]})}var w=(0,y.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let{sortMode:r,setSortMode:o,orderBy:l}=_(),[d,m]=(0,y.useState)(!n),[v,S]=(0,y.useState)(0),w=t.filter(e=>e.type===`slowHost`).slice().sort((e,t)=>a[e.impactBand]-a[t.impactBand]),T=l(w,e=>[e],e=>e.stageId??null),E=c(),D=E?T.findIndex(e=>e===E.finding):null,{totalPages:O,effectivePage:k,visible:A}=h(T,v,S,D);return w.length===0?null:(0,b.jsxs)(s,{title:`Slow Executor Host`,impactBand:w[0].impactBand,badges:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(i,{type:`slowHost`,impactBand:w[0].impactBand}),p(w,w.length,d)?(0,b.jsx)(g,{mode:r,onChange:o}):null]}),open:d,onOpenChange:m,summary:(0,b.jsx)(u,{value:x(w[0]),context:`${w.length} issue${w.length===1?``:`s`} flagged`}),children:[(0,b.jsx)(`ul`,{className:`space-y-2`,children:A.map(t=>(0,b.jsx)(C,{finding:t,appModel:e},t.id))}),(0,b.jsx)(f,{page:k,totalPages:O,onPrev:()=>S(e=>e-1),onNext:()=>S(e=>e+1)})]})});export{w as SlowHost};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{S as r}from"./useRecentFiles-D0OA_EOK.js";import{O as i,at as a,i as o,k as s,l as c,r as l,yt as u}from"./index-3vlFVNCg.js";import{t as d}from"./WidgetLeadSummary-BdUUi7L5.js";import{n as f}from"./StagePill-BlMOW_pU.js";import{t as p}from"./ImpactEstimate-BGt-4WX5.js";import{t as m}from"./RowPagination-BLsm8I6i.js";import{i as h,r as g}from"./impact-sort-DxaUheWV.js";import{n as _,t as v}from"./finding-anchor-DEV8JvgH.js";import{t as y}from"./usePagedRows-jNUWgVTD.js";import{n as b,t as x}from"./useSortMode-BaeAA5cw.js";var S=e(t(),1),C=n();function w({finding:e}){let t=_([e]);return(0,C.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`space-y-2 ${v} transition-colors ${t.flashClassName}`,children:[e.stageIds&&e.stageIds.length>0?(0,C.jsx)(f,{pills:e.stageIds.map(e=>({id:e}))}):null,(0,C.jsxs)(`p`,{children:[e.recommendation,` `,(0,C.jsx)(p,{finding:e})]})]})}var T=(0,S.memo)(function({catalog:e,defaultCollapsed:t=!0}){let{sortMode:n,setSortMode:f,orderBy:p}=x(),[_,v]=(0,S.useState)(!t),[T,E]=(0,S.useState)(0),{findings:D,pills:O}=(0,S.useMemo)(()=>{let t=e.filter(e=>e.type===`smallFiles`).sort((e,t)=>a[e.impactBand]-a[t.impactBand]);return{findings:t,pills:[...new Set(t.flatMap(e=>e.stageIds??[]))].map(e=>({id:e}))}},[e,n]),k=p(D,e=>[e],h),A=c(),j=A?k.findIndex(e=>e===A.finding):null,{totalPages:M,effectivePage:N,visible:P}=y(k,T,E,j);return D.length===0?null:(0,C.jsxs)(o,{title:`Excessive Small Files`,impactBand:u(D),open:_,onOpenChange:v,badges:(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(i,{type:`smallFiles`,impactBand:u(D)??`info`,className:l}),g(D,D.length,_)?(0,C.jsx)(b,{mode:n,onChange:f}):null]}),statusBadge:(0,C.jsx)(s,{children:(0,C.jsx)(r,{confidence:D[0].confidence,validationRequired:D[0].validationRequired,evidenceKey:`sqlPlan`})}),summary:(0,C.jsx)(d,{value:`${O.length} stage${O.length===1?``:`s`}`,context:`${D.length} finding${D.length===1?``:`s`} flagged`}),children:[(0,C.jsx)(`ul`,{className:`space-y-3 text-sm`,children:P.map(e=>(0,C.jsx)(w,{finding:e},e.id))}),(0,C.jsx)(m,{page:N,totalPages:M,onPrev:()=>E(e=>e-1),onNext:()=>E(e=>e+1)})]})});export{T as SmallFiles};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{D as r,O as i,at as a,i as o,l as s,mt as c,ut as l}from"./index-3vlFVNCg.js";import{t as u}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as d}from"./ImpactEstimate-BGt-4WX5.js";import{t as f}from"./RowPagination-BLsm8I6i.js";import{r as p}from"./impact-sort-DxaUheWV.js";import{n as m}from"./finding-anchor-DEV8JvgH.js";import{t as h}from"./usePagedRows-jNUWgVTD.js";import{n as g,t as _}from"./useSortMode-BaeAA5cw.js";import{t as v}from"./StageHeader-BTzGkK8k.js";var y=e(t(),1),b=n();function x(e){return l(c(e))}function S({finding:e,appModel:t}){let n=m([e]);return(0,b.jsxs)(`li`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-1 text-sm transition-colors ${n.flashClassName}`,children:[(0,b.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,b.jsx)(r,{impactBand:e.impactBand}),e.stageId==null?null:(0,b.jsx)(v,{stageId:e.stageId,appModel:t}),(0,b.jsx)(`strong`,{children:x(e)})]}),(0,b.jsx)(d,{finding:e}),(0,b.jsx)(`p`,{className:`text-muted-foreground pt-1`,children:e.recommendation})]})}var C=(0,y.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let{sortMode:r,setSortMode:c,orderBy:l}=_(),[d,m]=(0,y.useState)(!n),[v,C]=(0,y.useState)(0),w=t.filter(e=>e.type===`speculationWaste`).slice().sort((e,t)=>a[e.impactBand]-a[t.impactBand]),T=l(w,e=>[e],e=>e.stageId??null),E=s(),D=E?T.findIndex(e=>e===E.finding):null,{totalPages:O,effectivePage:k,visible:A}=h(T,v,C,D);return w.length===0?null:(0,b.jsxs)(o,{title:`Speculation Waste`,impactBand:w[0].impactBand,badges:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(i,{type:`speculationWaste`,impactBand:w[0].impactBand}),p(w,w.length,d)?(0,b.jsx)(g,{mode:r,onChange:c}):null]}),open:d,onOpenChange:m,summary:(0,b.jsx)(u,{value:x(w[0]),context:`${w.length} issue${w.length===1?``:`s`} flagged`}),children:[(0,b.jsx)(`ul`,{className:`space-y-2`,children:A.map(t=>(0,b.jsx)(S,{finding:t,appModel:e},t.id))}),(0,b.jsx)(f,{page:k,totalPages:O,onPrev:()=>C(e=>e-1),onNext:()=>C(e=>e+1)})]})});export{C as SpeculationWaste};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t,_ as n,c as r,d as i,f as a,l as o,o as s,r as c,s as l,t as u,v as d}from"./charts-vendor-0VMaLVLN.js";import{p as f}from"./plan-graph-vendor-B0sEms9Z.js";import{B as p,R as m,S as h,T as g,V as _,i as v,w as y,z as b}from"./useRecentFiles-D0OA_EOK.js";import{A as x,D as S,Et as C,O as w,Pt as T,at as E,gt as ee,i as D,k as O,l as k,lt as A,mt as j,ot as M,st as N,w as P}from"./index-3vlFVNCg.js";import{t as F}from"./EmptyState-BCA3xioa.js";import{t as I}from"./downsample-WmNM1qc9.js";import{t as L}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as R}from"./StagePill-BlMOW_pU.js";import{t as z}from"./ImpactEstimate-BGt-4WX5.js";import{t as B}from"./RowPagination-BLsm8I6i.js";import{r as V}from"./impact-sort-DxaUheWV.js";import{n as H,t as U}from"./finding-anchor-DEV8JvgH.js";import{t as W}from"./usePagedRows-jNUWgVTD.js";import{n as G,t as K}from"./useSortMode-BaeAA5cw.js";import{t as q}from"./PlanExplorer-_2oB5ouy.js";var J=e(t(),1),Y=f(),X=240,Z=524288e3,Q=10;function $(e){let t=e.spillBytes>Z,n=e.gcPct>Q;return t&&n?`critical`:t||n?`warning`:`info`}function te(e){return y[$(e)]}function ne({active:e,payload:t}){if(!e||!t?.length)return null;let n=t[0]?.payload;if(!n)return null;let r=$(n);return(0,Y.jsxs)(`div`,{className:`rounded-md border border-border bg-popover px-2 py-1.5 text-xs text-popover-foreground shadow-md`,children:[(0,Y.jsxs)(`p`,{children:[A(n.spillBytes),` spilled`]}),(0,Y.jsxs)(`p`,{children:[n.gcPct.toFixed(1),`% GC`]}),(0,Y.jsxs)(`p`,{className:`mt-1 flex items-center gap-1.5 font-medium`,children:[(0,Y.jsx)(S,{impactBand:r}),r.toUpperCase()]})]})}function re({appModel:e}){let t=[];for(let n of e.stages.values()){let e=n.memoryBytesSpilled??0;e<=0||t.push({stageId:n.id,spillBytes:e,gcPct:n.gcPct??0,submittedAt:n.submittedAt??0})}if(t.length===0)return(0,Y.jsx)(F,{tone:`clean`,icon:C,title:`No stages spilled memory in this run.`});let f=I(t),h=[...f].sort((e,t)=>e.submittedAt-t.submittedAt).map(e=>({stage:`S${e.stageId}`,spillMB:e.spillBytes/1048576,gcPct:e.gcPct}));return(0,Y.jsxs)(m,{defaultValue:`scatter`,children:[(0,Y.jsxs)(p,{"aria-label":`Memory pressure view`,children:[(0,Y.jsx)(_,{value:`scatter`,children:`Scatter`}),(0,Y.jsx)(_,{value:`twin`,children:`Twin bars`})]}),(0,Y.jsxs)(`p`,{className:`text-muted-foreground text-xs`,children:[`Spill and GC pressure both stem from tight executor memory, see`,` `,(0,Y.jsx)(x,{anchor:`#memory-model`,children:`how Spark’s memory model works`}),`.`]}),(0,Y.jsxs)(b,{value:`scatter`,children:[(0,Y.jsxs)(`div`,{className:`mb-1 flex items-center gap-3 text-xs text-muted-foreground`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(S,{impactBand:`critical`}),`CRITICAL`]}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(S,{impactBand:`warning`}),`WARNING`]}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(S,{impactBand:`info`}),`INFO`]})]}),(0,Y.jsx)(g,{ariaLabel:`Memory pressure scatter: spilled memory versus GC percent, one point per stage that spilled.`,height:X,table:{caption:`Memory spilled and GC percent by stage`,columns:[`Stage`,`Memory spilled`,`GC %`],rows:f.map(e=>[`S${e.stageId}`,A(e.spillBytes),`${e.gcPct.toFixed(1)}%`]),align:[`left`,`right`,`right`]},children:(0,Y.jsxs)(c,{children:[(0,Y.jsx)(a,{stroke:y.muted,strokeOpacity:.2}),(0,Y.jsx)(l,{type:`number`,dataKey:`spillBytes`,name:`Memory spilled`,tickFormatter:e=>A(e),tick:{fontSize:10}}),(0,Y.jsx)(s,{type:`number`,dataKey:`gcPct`,name:`GC %`,tick:{fontSize:10},width:32}),(0,Y.jsx)(d,{cursor:{strokeDasharray:`3 3`},content:ne}),(0,Y.jsx)(r,{data:f,name:`Spill vs. GC`,children:f.map(e=>(0,Y.jsx)(n,{fill:te(e)},e.stageId))})]})})]}),(0,Y.jsx)(b,{value:`twin`,children:(0,Y.jsx)(g,{ariaLabel:`Memory pressure by stage: spilled memory and GC percent across stages in submission order.`,height:X,table:{caption:`Spilled memory and GC percent by stage, submission order`,columns:[`Stage`,`Spill (MB)`,`GC %`],rows:h.map(e=>[e.stage,e.spillMB.toFixed(1),`${e.gcPct.toFixed(1)}%`]),align:[`left`,`right`,`right`]},children:(0,Y.jsxs)(u,{data:h,children:[(0,Y.jsx)(a,{stroke:y.muted,strokeOpacity:.2}),(0,Y.jsx)(l,{dataKey:`stage`,tick:{fontSize:10}}),(0,Y.jsx)(s,{yAxisId:`left`,tick:{fontSize:10},width:36}),(0,Y.jsx)(s,{yAxisId:`right`,orientation:`right`,tick:{fontSize:10},width:36}),(0,Y.jsx)(d,{}),(0,Y.jsx)(o,{yAxisId:`left`,dataKey:`spillMB`,name:`Spill (MB)`,fill:y.critical}),(0,Y.jsx)(i,{yAxisId:`right`,dataKey:`gcPct`,name:`GC %`,stroke:y.info,dot:!1})]})})})]})}function ie(e,t){return e.stages.get(t)?.spillClassification??`unclassified`}function ae({finding:e,appModel:t}){let n=H([e]),r=T(),i=t.stages.get(e.stageId),a=ie(t,e.stageId),o=a===`volume`&&i?ee(i):null,s=r===`advanced`&&v(e.stageId,t);return(0,Y.jsxs)(`div`,{ref:n.ref,tabIndex:n.tabIndex,"data-flashed":n.dataFlashed,className:`space-y-2 ${U} transition-colors ${n.flashClassName}`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsx)(S,{impactBand:e.impactBand}),(0,Y.jsx)(P,{label:M[a],impactBand:e.impactBand,title:N[a]}),(0,Y.jsx)(R,{stageId:e.stageId})]}),(0,Y.jsx)(O,{children:(0,Y.jsx)(h,{confidence:e.confidence,validationRequired:e.validationRequired})})]}),(0,Y.jsxs)(`p`,{className:`text-sm`,children:[`Memory spilled: `,(0,Y.jsx)(`strong`,{children:A(j(e))}),` · `,`Disk: `,A(i?.diskBytesSpilled??0)]}),(0,Y.jsx)(z,{finding:e}),o?(0,Y.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Try: `,(0,Y.jsxs)(`code`,{children:[`spark.sql.shuffle.partitions = `,o.recommended]}),` (current ${o.current} tasks, target 128 MB per partition)`]}):null,e.recommendation?(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.recommendation}):null,s?(0,Y.jsx)(`div`,{className:`pt-1`,children:(0,Y.jsx)(q,{stageId:e.stageId,appModel:t})}):null]})}var oe=(0,J.memo)(function({appModel:e,catalog:t,defaultCollapsed:n=!0}){let{sortMode:r,setSortMode:i,orderBy:a}=K(),[o,s]=(0,J.useState)(!n),[c,l]=(0,J.useState)(0),{findings:u,sorted:d,orderedFindings:f}=(0,J.useMemo)(()=>{let e=t.filter(e=>e.type===`spill`&&e.stageId!=null),n=[...e].sort((e,t)=>(E[e.impactBand]??9)-(E[t.impactBand]??9)||(typeof t.value==`number`?t.value:0)-(typeof e.value==`number`?e.value:0));return{findings:e,sorted:n,orderedFindings:a(n,e=>[e],e=>e.stageId)}},[t,r]),p=k(),m=p?f.findIndex(e=>e===p.finding):null,{totalPages:h,effectivePage:g,visible:_}=W(f,c,l,m);if(u.length===0){let t=0;for(let n of e.stages.values())t=Math.max(t,n.memoryBytesSpilled??0);return(0,Y.jsx)(D,{title:`Spill: no issue detected (max ${A(t)} spilled)`,children:(0,Y.jsx)(F,{tone:`clean`,icon:C,title:`No stages spilled memory in this run.`})})}let v=d[0].impactBand;return(0,Y.jsx)(D,{title:`Spill`,impactBand:v,badges:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(w,{type:`spill`,impactBand:v}),V(u,d.length,o)?(0,Y.jsx)(G,{mode:r,onChange:i}):null]}),open:o,onOpenChange:s,summary:(0,Y.jsx)(L,{value:A(typeof d[0].value==`number`?d[0].value:0),context:`peak · ${d.length} stage${d.length===1?``:`s`}`}),children:(0,Y.jsxs)(`div`,{className:`space-y-4`,children:[(0,Y.jsx)(re,{appModel:e}),_.map(t=>(0,Y.jsx)(ae,{finding:t,appModel:e},t.stageId)),(0,Y.jsx)(B,{page:g,totalPages:h,onPrev:()=>l(e=>e-1),onNext:()=>l(e=>e+1)})]})})});export{oe as Spill};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{D as r,O as i,at as a,i as o,l as s,yt as c}from"./index-3vlFVNCg.js";import{t as l}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as u}from"./StagePill-BlMOW_pU.js";import{t as d}from"./ImpactEstimate-BGt-4WX5.js";import{t as f}from"./RowPagination-BLsm8I6i.js";import{r as p}from"./impact-sort-DxaUheWV.js";import{n as m}from"./finding-anchor-DEV8JvgH.js";import{t as h}from"./usePagedRows-jNUWgVTD.js";import{n as g,t as _}from"./useSortMode-BaeAA5cw.js";var v=e(t(),1),y=n();function b(e){return e.stageId!=null}function x({finding:e}){let t=m([e]);return(0,y.jsxs)(`li`,{ref:t.ref,tabIndex:t.tabIndex,"data-flashed":t.dataFlashed,className:`flex flex-col gap-1 transition-colors ${t.flashClassName}`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,y.jsx)(u,{stageId:e.stageId}),(0,y.jsx)(r,{impactBand:e.impactBand})]}),(0,y.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Stage attempt failed outright. Reason: `,(0,y.jsx)(`strong`,{children:String(e.value)})]}),(0,y.jsx)(d,{finding:e}),e.recommendation?(0,y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.recommendation}):null]})}function S({appModel:e,catalog:t,defaultCollapsed:n=!0}){let[r,u]=(0,v.useState)(0),{sortMode:d,setSortMode:m,orderBy:S}=_(),[C,w]=(0,v.useState)(!n),T=s(),E=(0,v.useRef)(!1);(0,v.useEffect)(()=>{if(!E.current){E.current=!0;return}u(0)},[e]);let D=t.filter(b).filter(e=>e.type===`stageFailed`),O=S([...D].sort((e,t)=>a[e.impactBand]-a[t.impactBand]||e.stageId-t.stageId),e=>[e],e=>e.stageId),k=T?O.findIndex(e=>e===T.finding):null,{totalPages:A,effectivePage:j,visible:M}=h(O,r,u,k);return D.length===0?null:(0,y.jsxs)(o,{title:`Failed Stages`,impactBand:c(D),badges:(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(i,{type:`stageFailed`,impactBand:c(D)}),p(D,D.length,C)?(0,y.jsx)(g,{mode:d,onChange:e=>{m(e),u(0)}}):null]}),open:C,onOpenChange:w,summary:(0,y.jsx)(l,{value:D.length,context:`stage${D.length===1?``:`s`} failed outright`}),children:[(0,y.jsx)(`ul`,{className:`space-y-3`,children:M.map(e=>(0,y.jsx)(x,{finding:e},e.id))}),(0,y.jsx)(f,{page:j,totalPages:A,onPrev:()=>u(e=>e-1),onNext:()=>u(e=>e+1)})]})}export{S as StageFailed};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{p as n}from"./plan-graph-vendor-B0sEms9Z.js";import{S as r,i}from"./useRecentFiles-D0OA_EOK.js";import{D as a,Dt as o,O as s,Ot as c,Pt as l,at as u,i as d,k as f,l as p,ut as m,yt as h}from"./index-3vlFVNCg.js";import{n as g,t as _}from"./DurationHistogram-ltF-7M0A.js";import{t as v}from"./WidgetLeadSummary-BdUUi7L5.js";import{t as y}from"./ImpactEstimate-BGt-4WX5.js";import{t as b}from"./RowPagination-BLsm8I6i.js";import{r as x}from"./impact-sort-DxaUheWV.js";import{n as S,t as C}from"./finding-anchor-DEV8JvgH.js";import{t as w}from"./usePagedRows-jNUWgVTD.js";import{n as T,t as E}from"./useSortMode-BaeAA5cw.js";import{t as D}from"./StageHeader-BTzGkK8k.js";import{t as O}from"./PlanExplorer-_2oB5ouy.js";var k=e(t(),1),A=n();function j({expanded:e,onClick:t,label:n,location:r,controlsId:i}){let a=r?` for ${r}`:``;return(0,A.jsxs)(`button`,{type:`button`,"aria-expanded":e,"aria-controls":i,"aria-label":`${e?`Hide`:`Show`} ${n.toLowerCase()}${a}`,onClick:t,className:`tap-target-comfortable tap-target-comfortable--sm flex w-fit cursor-pointer items-center gap-1 text-xs font-medium text-primary underline underline-offset-2`,children:[n,e?(0,A.jsx)(o,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}):(0,A.jsx)(c,{"aria-hidden":`true`,className:`size-3.5 shrink-0`})]})}function M(e){let[t,n]=(0,k.useState)(!1),[r,i]=(0,k.useState)(null),[a,o]=(0,k.useState)(!1),[s,c]=(0,k.useState)(!1),[l,u]=(0,k.useState)(!1);return{expanded:t,data:r,loading:a,error:s,toggle:()=>{let r=!t;n(r),r&&e&&!l&&!a&&(o(!0),e().then(e=>i(e)).catch(()=>c(!0)).finally(()=>{u(!0),o(!1)}))}}}function N({group:e,appModel:t,getTaskData:n,idPrefix:o,findingLabel:s}){let{exportMode:c,getTaskData:u}=g(n),{expanded:d,data:p,error:h,toggle:v}=M(u?()=>u(e.stageId):void 0),b=S(e.findings),x=t.stages.get(e.stageId),w=l()===`advanced`&&i(e.stageId,t),T=`${o}-stage-${e.stageId}-detail`;return(0,A.jsxs)(`div`,{ref:b.ref,tabIndex:b.tabIndex,"data-flashed":b.dataFlashed,className:`space-y-2 ${C} transition-colors ${b.flashClassName}`,children:[(0,A.jsx)(D,{stageId:e.stageId,appModel:t}),(0,A.jsx)(`ul`,{className:`flex flex-col gap-1.5`,children:e.findings.map((e,t)=>(0,A.jsxs)(`li`,{className:`flex flex-wrap items-center gap-2 text-xs text-muted-foreground`,children:[(0,A.jsx)(a,{impactBand:e.impactBand}),(0,A.jsx)(`span`,{children:s(e)}),(0,A.jsx)(y,{finding:e}),(0,A.jsx)(f,{children:(0,A.jsx)(r,{confidence:e.confidence,validationRequired:e.validationRequired})})]},t))}),x?.taskDurationP50==null?null:(0,A.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`P50 `,m(x.taskDurationP50),` · P95 `,m(x.taskDurationP95),` · Max`,` `,m(x.taskDurationMax)]}),e.slowHost?(0,A.jsxs)(`p`,{className:`flex items-start gap-2 text-xs`,children:[(0,A.jsx)(a,{impactBand:e.slowHost.impactBand,className:`mt-1`}),(0,A.jsxs)(`span`,{children:[(0,A.jsx)(`strong`,{children:`Slow host:`}),` `,e.slowHost.host,` (`,e.slowHost.value,`× median,`,` `,Math.round((e.slowHost.hostTaskShare??0)*100),`% of tasks)`]})]}):null,e.straggler?(0,A.jsxs)(`p`,{className:`flex items-start gap-2 text-xs`,children:[(0,A.jsx)(a,{impactBand:e.straggler.impactBand,className:`mt-1`}),(0,A.jsxs)(`span`,{children:[(0,A.jsx)(`strong`,{children:`Stragglers:`}),` `,(e.straggler.speculativeTasks??0)>0?`${e.straggler.speculativeTasks} speculative task${e.straggler.speculativeTasks===1?``:`s`}`:`${e.straggler.value}% of tasks > 4× P50`]})]}):null,(0,A.jsx)(j,{expanded:d,onClick:v,label:`Task detail`,location:`Stage ${e.stageId}`,controlsId:T}),d?(0,A.jsxs)(`div`,{id:T,className:`space-y-3 pt-1`,children:[p?(0,A.jsx)(_,{metrics:p.metrics,fieldNames:p.fieldNames,markers:{p50:x?.taskDurationP50,p95:x?.taskDurationP95}}):c?(0,A.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Task data isn’t included in exported reports.`}):h?(0,A.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Task data unavailable for this stage.`}):(0,A.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading task data…`}),w?(0,A.jsx)(O,{stageId:e.stageId,appModel:t}):null]}):null]})}var P=(0,k.memo)(function({appModel:e,catalog:t,getTaskData:n,defaultCollapsed:r=!0,type:i,title:a,idPrefix:o,findingLabel:c}){let[l,f]=(0,k.useState)(0),{sortMode:m,setSortMode:g,orderBy:_}=E(),[y,S]=(0,k.useState)(!r),{relevant:C,stageGroups:D,orderedGroups:O}=(0,k.useMemo)(()=>{let e=t.filter(e=>e.type===i),n=new Map;for(let t of e)t.stageId!=null&&(n.has(t.stageId)||n.set(t.stageId,[]),n.get(t.stageId).push(t));let r=[...n.entries()].map(([e,n])=>({stageId:e,findings:n,impactBand:h(n)??`info`,slowHost:t.find(t=>t.type===`slowHost`&&t.stageId===e),straggler:t.find(t=>t.type===`straggler`&&t.stageId===e)})).sort((e,t)=>u[e.impactBand]-u[t.impactBand]||e.stageId-t.stageId);return{relevant:e,stageGroups:r,orderedGroups:_(r,e=>e.findings,e=>e.stageId)}},[t,m,i]),j=p(),M=j?O.findIndex(e=>e.findings.some(e=>e===j.finding)):null,{totalPages:P,effectivePage:F,visible:I}=w(O,l,f,M);if(C.length===0)return null;let L=h(C);return(0,A.jsxs)(d,{title:a,impactBand:L,badges:(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(s,{type:i,impactBand:L??`info`}),x(C,D.length,y)?(0,A.jsx)(T,{mode:m,onChange:g}):null]}),open:y,onOpenChange:S,summary:(0,A.jsx)(v,{value:`${D.length} stage${D.length===1?``:`s`}`,context:`${C.length} finding${C.length===1?``:`s`} flagged`}),children:[(0,A.jsx)(`div`,{className:`space-y-3`,children:I.map(t=>(0,A.jsx)(N,{group:t,appModel:e,getTaskData:n,idPrefix:o,findingLabel:c},t.stageId))}),(0,A.jsx)(b,{page:F,totalPages:P,onPrev:()=>f(e=>e-1),onNext:()=>f(e=>e+1)})]})});export{P as t};
|