sparkforensics-server 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. package/index.js +8 -4
  2. package/package.json +1 -1
  3. package/public/assets/AutoscalingChurn-9Zo6IMGS.js +1 -0
  4. package/public/assets/CacheUtilization-MBDfMsKC.js +1 -0
  5. package/public/assets/CachingOpportunity-Cfw3wAFa.js +1 -0
  6. package/public/assets/ColdStart-BtS12b6_.js +1 -0
  7. package/public/assets/ConfigAudit-DNPV6EQg.js +1 -0
  8. package/public/assets/CoreUsageArea-BObEeenE.js +1 -0
  9. package/public/assets/Dashboard-CC_BXrNy.js +2 -0
  10. package/public/assets/DisclosureContext-Ds0hcZFn.js +1 -0
  11. package/public/assets/DuplicatePlanSubtree-vN3zqRsi.js +1 -0
  12. package/public/assets/ExecutorUtilization-CZObSLIj.js +1 -0
  13. package/public/assets/GcPressure-ByJlLOua.js +1 -0
  14. package/public/assets/IncompleteRun-MzqV4W8y.js +1 -0
  15. package/public/assets/JobFailures-LbMvAwAb.js +1 -0
  16. package/public/assets/MemoryUtilization-DH4jYvJK.js +1 -0
  17. package/public/assets/OverBroadcast-euk6HKg4.js +1 -0
  18. package/public/assets/PartitionHint-DThaMMRT.js +1 -0
  19. package/public/assets/PartitionSizing-yIN-iZzx.js +1 -0
  20. package/public/assets/PlanExplorer-Dd9WPK4S.js +1 -0
  21. package/public/assets/PlanGraphRoute-NV5mCXRm.js +1 -0
  22. package/public/assets/RetryWaste-CXH4D-xH.js +1 -0
  23. package/public/assets/ShuffleIO-CW7U68ph.js +1 -0
  24. package/public/assets/Skew-PL79TppX.js +1 -0
  25. package/public/assets/SlowHost-GBO73hCi.js +1 -0
  26. package/public/assets/SmallFiles-B5cUjEav.js +1 -0
  27. package/public/assets/SpeculationWaste-mxi3jgb0.js +1 -0
  28. package/public/assets/Spill-CH1bNpxL.js +1 -0
  29. package/public/assets/StageFailed-YvxC11ii.js +1 -0
  30. package/public/assets/StageFindingGroup-B1A0nf-e.js +1 -0
  31. package/public/assets/StageHeader-BMNmUy-s.js +1 -0
  32. package/public/assets/StageShape-DO3mQ6NS.js +1 -0
  33. package/public/assets/StageSlowness-SwRxfAEx.js +1 -0
  34. package/public/assets/Straggler-DHLTiBY-.js +1 -0
  35. package/public/assets/TaskFailures-Bj0QxiOc.js +1 -0
  36. package/public/assets/{TinyTask-Be-pvTjJ.js → TinyTask-COUQQ5bQ.js} +1 -1
  37. package/public/assets/UnderBroadcast-RAUbQ6vw.js +1 -0
  38. package/public/assets/{finding-anchor-vVODA_VC.js → finding-anchor-Dl8mIHiU.js} +1 -1
  39. package/public/assets/impact-sort-Eihua9dY.js +1 -0
  40. package/public/assets/index-BcqTLKFp.css +2 -0
  41. package/public/assets/index-DaC8A2FS.js +13 -0
  42. package/public/assets/{parser-worker-jAP0kWvS.js → parser-worker-CfDvPkwF.js} +9 -9
  43. package/public/assets/react-vendor-BAKt3vny.js +9 -0
  44. package/public/assets/select-DkjFHlXR.js +1 -0
  45. package/public/assets/usePagedRows-Bo-aSztx.js +1 -0
  46. package/public/assets/useRecentFiles-Bb4-ukVz.js +11 -0
  47. package/public/assets/useSortMode-lDedD5a3.js +1 -0
  48. package/public/docs/404.html +4 -3
  49. package/public/docs/assets/{app.C5E-wy6e.js → app.yjczoibf.js} +1 -1
  50. package/public/docs/assets/chunks/@localSearchIndexroot.r9imX8Aq.js +1 -0
  51. package/public/docs/assets/chunks/{VPLocalSearchBox.DtyygpbL.js → VPLocalSearchBox.DOBbPfix.js} +1 -1
  52. package/public/docs/assets/chunks/{theme.DQS9-w_Z.js → theme.DFcAl8Ws.js} +2 -2
  53. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.D0Kkk_r5.js +1 -0
  54. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.D0Kkk_r5.lean.js +1 -0
  55. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.caA46z-u.js +1 -0
  56. package/public/docs/assets/{contributor-guide_architecture_detector-contract.md.CsCytCho.lean.js → contributor-guide_architecture_detector-contract.md.caA46z-u.lean.js} +1 -1
  57. package/public/docs/assets/contributor-guide_architecture_drill-down.md.CdtlKHl-.js +1 -0
  58. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.BNp14LtL.js +1 -0
  59. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.BNp14LtL.lean.js +1 -0
  60. package/public/docs/assets/contributor-guide_architecture_index.md.B9yZieYL.js +1 -0
  61. package/public/docs/assets/{contributor-guide_architecture_index.md.3TO9ic6w.lean.js → contributor-guide_architecture_index.md.B9yZieYL.lean.js} +1 -1
  62. package/public/docs/assets/contributor-guide_architecture_overview.md.DBGo-bwn.js +1 -0
  63. package/public/docs/assets/contributor-guide_architecture_overview.md.DBGo-bwn.lean.js +1 -0
  64. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.w4lwybdh.js +1 -0
  65. package/public/docs/assets/{contributor-guide_architecture_state-and-history.md.B8Wc_ZTg.lean.js → contributor-guide_architecture_state-and-history.md.w4lwybdh.lean.js} +1 -1
  66. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.CcvqxnZI.js +1 -0
  67. package/public/docs/assets/{contributor-guide_architecture_widget-rendering.md.DYwFeyjV.lean.js → contributor-guide_architecture_widget-rendering.md.CcvqxnZI.lean.js} +1 -1
  68. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.CKeFttKj.js +6 -0
  69. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.CKeFttKj.lean.js +1 -0
  70. package/public/docs/assets/contributor-guide_contributing.md.CQMvGwFt.js +1 -0
  71. package/public/docs/assets/{contributor-guide_contributing.md.B2E9ni79.lean.js → contributor-guide_contributing.md.CQMvGwFt.lean.js} +1 -1
  72. package/public/docs/assets/contributor-guide_development-setup.md.D9bu4j_c.js +15 -0
  73. package/public/docs/assets/contributor-guide_development-setup.md.D9bu4j_c.lean.js +1 -0
  74. package/public/docs/assets/contributor-guide_testing.md.By6XGR9a.js +1 -0
  75. package/public/docs/assets/{contributor-guide_testing.md.Cnn6gz1C.lean.js → contributor-guide_testing.md.By6XGR9a.lean.js} +1 -1
  76. package/public/docs/assets/{style.DSixAiZE.css → style.tmDhD3c8.css} +1 -1
  77. package/public/docs/assets/tuning-reference_anti-patterns.md.D08Uaod7.js +1 -0
  78. package/public/docs/assets/tuning-reference_anti-patterns.md.D08Uaod7.lean.js +1 -0
  79. package/public/docs/assets/tuning-reference_aqe.md.C1Ae6A8u.js +1 -0
  80. package/public/docs/assets/tuning-reference_aqe.md.C1Ae6A8u.lean.js +1 -0
  81. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.6wjKuJNE.js +1 -0
  82. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.6wjKuJNE.lean.js +1 -0
  83. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.BVQbsuHP.js +7 -0
  84. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.BVQbsuHP.lean.js +1 -0
  85. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.DtaYnaiF.js +1 -0
  86. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.DtaYnaiF.lean.js +1 -0
  87. package/public/docs/assets/{tuning-reference_bottleneck-failures.md.CAsFf3RR.js → tuning-reference_bottleneck-failures.md.Z1Tdmdd3.js} +2 -2
  88. package/public/docs/assets/tuning-reference_bottleneck-failures.md.Z1Tdmdd3.lean.js +1 -0
  89. package/public/docs/assets/tuning-reference_bottleneck-gc.md.BCnXLf1n.js +6 -0
  90. package/public/docs/assets/tuning-reference_bottleneck-gc.md.BCnXLf1n.lean.js +1 -0
  91. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.CcvQj2g9.js +8 -0
  92. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.CcvQj2g9.lean.js +1 -0
  93. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.B-C0-8h-.js +7 -0
  94. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.B-C0-8h-.lean.js +1 -0
  95. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.DCnhWiqj.js +1 -0
  96. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.DCnhWiqj.lean.js +1 -0
  97. package/public/docs/assets/{tuning-reference_bottleneck-shuffle.md.DDMQVOW6.js → tuning-reference_bottleneck-shuffle.md.B5OMJCd3.js} +2 -2
  98. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.B5OMJCd3.lean.js +1 -0
  99. package/public/docs/assets/{tuning-reference_bottleneck-skew.md.B0MzhWcX.js → tuning-reference_bottleneck-skew.md.Cvo6NQm_.js} +1 -1
  100. package/public/docs/assets/tuning-reference_bottleneck-skew.md.Cvo6NQm_.lean.js +1 -0
  101. package/public/docs/assets/{tuning-reference_bottleneck-slow-host.md.BlIo6UDW.js → tuning-reference_bottleneck-slow-host.md.ja5qr3wq.js} +1 -1
  102. package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.ja5qr3wq.lean.js +1 -0
  103. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.Crjtb0i2.js +5 -0
  104. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.Crjtb0i2.lean.js +1 -0
  105. package/public/docs/assets/tuning-reference_bottleneck-spill.md.Bl8KtSRg.js +6 -0
  106. package/public/docs/assets/tuning-reference_bottleneck-spill.md.Bl8KtSRg.lean.js +1 -0
  107. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.B0VN8reT.js +7 -0
  108. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.B0VN8reT.lean.js +1 -0
  109. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.DQCftGhu.js +8 -0
  110. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.DQCftGhu.lean.js +1 -0
  111. package/public/docs/assets/{tuning-reference_bottleneck-utilization.md.DqC_iGkw.js → tuning-reference_bottleneck-utilization.md.BXDl30f9.js} +1 -1
  112. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.BXDl30f9.lean.js +1 -0
  113. package/public/docs/assets/tuning-reference_caching.md.CcaiMn_7.js +1 -0
  114. package/public/docs/assets/tuning-reference_caching.md.CcaiMn_7.lean.js +1 -0
  115. package/public/docs/assets/tuning-reference_cluster-config.md.DbWG1yZq.js +1 -0
  116. package/public/docs/assets/tuning-reference_cluster-config.md.DbWG1yZq.lean.js +1 -0
  117. package/public/docs/assets/tuning-reference_config.md.YUqSpwFB.js +1 -0
  118. package/public/docs/assets/tuning-reference_config.md.YUqSpwFB.lean.js +1 -0
  119. package/public/docs/assets/tuning-reference_data-formats.md.C5DX5xL4.js +1 -0
  120. package/public/docs/assets/tuning-reference_data-formats.md.C5DX5xL4.lean.js +1 -0
  121. package/public/docs/assets/tuning-reference_index.md.ZVIpQ6Dk.js +1 -0
  122. package/public/docs/assets/tuning-reference_index.md.ZVIpQ6Dk.lean.js +1 -0
  123. package/public/docs/assets/tuning-reference_intro.md.BSSaDlqx.js +1 -0
  124. package/public/docs/assets/tuning-reference_intro.md.BSSaDlqx.lean.js +1 -0
  125. package/public/docs/assets/tuning-reference_joins.md.BVhNCDnE.js +1 -0
  126. package/public/docs/assets/tuning-reference_joins.md.BVhNCDnE.lean.js +1 -0
  127. package/public/docs/assets/tuning-reference_memory-model.md.CfjFdgbl.js +1 -0
  128. package/public/docs/assets/tuning-reference_memory-model.md.CfjFdgbl.lean.js +1 -0
  129. package/public/docs/assets/tuning-reference_metrics.md.C64VNEL4.js +1 -0
  130. package/public/docs/assets/tuning-reference_metrics.md.C64VNEL4.lean.js +1 -0
  131. package/public/docs/assets/tuning-reference_partitioning.md.CtLK0xsS.js +1 -0
  132. package/public/docs/assets/tuning-reference_partitioning.md.CtLK0xsS.lean.js +1 -0
  133. package/public/docs/assets/tuning-reference_pyspark.md.D-92XgF8.js +6 -0
  134. package/public/docs/assets/tuning-reference_pyspark.md.D-92XgF8.lean.js +1 -0
  135. package/public/docs/assets/tuning-reference_shuffle.md.Iq2v1oHJ.js +1 -0
  136. package/public/docs/assets/tuning-reference_shuffle.md.Iq2v1oHJ.lean.js +1 -0
  137. package/public/docs/assets/tuning-reference_spark-architecture.md._qwnE_Sc.js +1 -0
  138. package/public/docs/assets/tuning-reference_spark-architecture.md._qwnE_Sc.lean.js +1 -0
  139. package/public/docs/assets/tuning-reference_table-formats.md.BSYEK-eN.js +1 -0
  140. package/public/docs/assets/tuning-reference_table-formats.md.BSYEK-eN.lean.js +1 -0
  141. package/public/docs/assets/user-guide_alternative-log-retrieval.md.z-8npxNk.js +7 -0
  142. package/public/docs/assets/user-guide_alternative-log-retrieval.md.z-8npxNk.lean.js +1 -0
  143. package/public/docs/assets/user-guide_getting-started.md.BJW5oVhe.js +24 -0
  144. package/public/docs/assets/user-guide_getting-started.md.BJW5oVhe.lean.js +1 -0
  145. package/public/docs/assets/user-guide_mcp-tools.md.DcLiOa9t.js +148 -0
  146. package/public/docs/assets/user-guide_mcp-tools.md.DcLiOa9t.lean.js +1 -0
  147. package/public/docs/assets/user-guide_run-comparison.md.qin0a4IX.js +1 -0
  148. package/public/docs/assets/user-guide_run-comparison.md.qin0a4IX.lean.js +1 -0
  149. package/public/docs/assets/user-guide_understanding-findings.md.DzReyCXb.js +1 -0
  150. package/public/docs/assets/{user-guide_understanding-findings.md.YBBLOwWi.lean.js → user-guide_understanding-findings.md.DzReyCXb.lean.js} +1 -1
  151. package/public/docs/contributor-guide/architecture/board-widgets.html +7 -6
  152. package/public/docs/contributor-guide/architecture/detector-contract.html +7 -6
  153. package/public/docs/contributor-guide/architecture/drill-down.html +7 -6
  154. package/public/docs/contributor-guide/architecture/impact-estimation.html +7 -6
  155. package/public/docs/contributor-guide/architecture/index.html +7 -6
  156. package/public/docs/contributor-guide/architecture/overview.html +7 -6
  157. package/public/docs/contributor-guide/architecture/state-and-history.html +7 -6
  158. package/public/docs/contributor-guide/architecture/widget-rendering.html +7 -6
  159. package/public/docs/contributor-guide/architecture/worker-protocol.html +10 -9
  160. package/public/docs/contributor-guide/contributing.html +7 -6
  161. package/public/docs/contributor-guide/development-setup.html +12 -11
  162. package/public/docs/contributor-guide/testing.html +7 -6
  163. package/public/docs/hashmap.json +1 -1
  164. package/public/docs/index.html +5 -4
  165. package/public/docs/tuning-reference/anti-patterns.html +8 -7
  166. package/public/docs/tuning-reference/aqe.html +8 -7
  167. package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +8 -7
  168. package/public/docs/tuning-reference/bottleneck-cold-start.html +8 -7
  169. package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +8 -7
  170. package/public/docs/tuning-reference/bottleneck-failures.html +8 -7
  171. package/public/docs/tuning-reference/bottleneck-gc.html +8 -7
  172. package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +8 -7
  173. package/public/docs/tuning-reference/bottleneck-memory-utilization.html +8 -7
  174. package/public/docs/tuning-reference/bottleneck-retry-waste.html +8 -7
  175. package/public/docs/tuning-reference/bottleneck-shuffle.html +8 -7
  176. package/public/docs/tuning-reference/bottleneck-skew.html +8 -7
  177. package/public/docs/tuning-reference/bottleneck-slow-host.html +8 -7
  178. package/public/docs/tuning-reference/bottleneck-small-files.html +8 -7
  179. package/public/docs/tuning-reference/bottleneck-spill.html +8 -7
  180. package/public/docs/tuning-reference/bottleneck-straggler.html +8 -7
  181. package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +8 -7
  182. package/public/docs/tuning-reference/bottleneck-utilization.html +8 -7
  183. package/public/docs/tuning-reference/caching.html +8 -7
  184. package/public/docs/tuning-reference/cluster-config.html +8 -7
  185. package/public/docs/tuning-reference/config.html +8 -7
  186. package/public/docs/tuning-reference/data-formats.html +8 -7
  187. package/public/docs/tuning-reference/index.html +8 -7
  188. package/public/docs/tuning-reference/intro.html +8 -7
  189. package/public/docs/tuning-reference/joins.html +8 -7
  190. package/public/docs/tuning-reference/memory-model.html +8 -7
  191. package/public/docs/tuning-reference/metrics.html +8 -7
  192. package/public/docs/tuning-reference/partitioning.html +8 -7
  193. package/public/docs/tuning-reference/pyspark.html +8 -7
  194. package/public/docs/tuning-reference/shuffle.html +8 -7
  195. package/public/docs/tuning-reference/spark-architecture.html +8 -7
  196. package/public/docs/tuning-reference/table-formats.html +8 -7
  197. package/public/docs/user-guide/alternative-log-retrieval.html +14 -7
  198. package/public/docs/user-guide/getting-started.html +29 -7
  199. package/public/docs/user-guide/mcp-tools.html +51 -27
  200. package/public/docs/user-guide/run-comparison.html +7 -6
  201. package/public/docs/user-guide/understanding-findings.html +7 -6
  202. package/public/export-template.html +111 -0
  203. package/public/index.html +4 -3
  204. package/vendor-core/allocation.js +106 -0
  205. package/vendor-core/analyzer.js +168 -60
  206. package/vendor-core/check-coverage.js +88 -0
  207. package/vendor-core/cli/budgets.js +54 -27
  208. package/vendor-core/cli/collect-run.js +84 -32
  209. package/vendor-core/cli/regression-budgets.js +83 -0
  210. package/vendor-core/cli/threshold-config.js +28 -0
  211. package/vendor-core/comparison-verdict.js +177 -0
  212. package/vendor-core/core-source-hash.txt +1 -0
  213. package/vendor-core/core-usage-locality.js +56 -2
  214. package/vendor-core/detector-docs.js +58 -0
  215. package/vendor-core/detectors.js +1094 -500
  216. package/vendor-core/docs-config.js +0 -36
  217. package/vendor-core/docs-content/chapters/nav-index.json +31 -0
  218. package/vendor-core/docs-content/detection/cache.md +3 -2
  219. package/vendor-core/docs-content/detection/cfg.md +9 -8
  220. package/vendor-core/docs-content/detection/chrn.md +1 -2
  221. package/vendor-core/docs-content/detection/cold.md +4 -2
  222. package/vendor-core/docs-content/detection/cstor.md +9 -0
  223. package/vendor-core/docs-content/detection/fail.md +3 -2
  224. package/vendor-core/docs-content/detection/gc.md +3 -2
  225. package/vendor-core/docs-content/detection/host.md +2 -1
  226. package/vendor-core/docs-content/detection/local.md +1 -1
  227. package/vendor-core/docs-content/detection/mem.md +5 -2
  228. package/vendor-core/docs-content/detection/plan.md +2 -1
  229. package/vendor-core/docs-content/detection/sfail.md +2 -1
  230. package/vendor-core/docs-content/detection/shape.md +5 -4
  231. package/vendor-core/docs-content/detection/skew.md +3 -1
  232. package/vendor-core/docs-content/detection/slow.md +2 -2
  233. package/vendor-core/docs-content/detection/spec.md +2 -3
  234. package/vendor-core/docs-content/detection/spill.md +1 -1
  235. package/vendor-core/docs-site-config.js +3 -0
  236. package/vendor-core/effective-conf.js +107 -0
  237. package/vendor-core/efficiency-model.js +8 -6
  238. package/vendor-core/event-handlers.js +321 -44
  239. package/vendor-core/event-schemas.js +23 -0
  240. package/vendor-core/evidence-report.js +432 -115
  241. package/vendor-core/export-data.js +79 -6
  242. package/vendor-core/finding-action-label.js +9 -88
  243. package/vendor-core/finding-filter-predicate.js +9 -0
  244. package/vendor-core/finding-generic-recommendation.js +26 -105
  245. package/vendor-core/finding-names.js +28 -45
  246. package/vendor-core/finding-presentation.js +368 -0
  247. package/vendor-core/finding-tag-help.js +110 -0
  248. package/vendor-core/finding-types.js +373 -0
  249. package/vendor-core/findings-of-type.js +11 -0
  250. package/vendor-core/format-utils.js +96 -30
  251. package/vendor-core/html-export.js +51 -0
  252. package/vendor-core/impact-band.js +21 -8
  253. package/vendor-core/impact-estimator.js +25 -520
  254. package/vendor-core/impact-format.js +115 -0
  255. package/vendor-core/impact-model.js +197 -0
  256. package/vendor-core/ingest.js +6 -2
  257. package/vendor-core/intervals.js +13 -0
  258. package/vendor-core/list-runs.js +7 -5
  259. package/vendor-core/load-vendored.js +70 -5
  260. package/vendor-core/mcp-server-factory.js +14 -10
  261. package/vendor-core/mcp-tools.js +105 -45
  262. package/vendor-core/model-assembler.js +35 -1
  263. package/vendor-core/occupancy.js +1 -1
  264. package/vendor-core/parser-worker.js +2 -2
  265. package/vendor-core/plan-graph-model.js +3 -2
  266. package/vendor-core/plan-node-detail.js +1 -1
  267. package/vendor-core/proxy.js +3 -1
  268. package/vendor-core/python-stage.js +25 -0
  269. package/vendor-core/recommendation-rollup.js +70 -3
  270. package/vendor-core/redact.js +96 -37
  271. package/vendor-core/remediation.js +20 -0
  272. package/vendor-core/run-comparison.js +73 -29
  273. package/vendor-core/run-interpretation.js +291 -0
  274. package/vendor-core/run-metrics.js +198 -0
  275. package/vendor-core/run-outcome.js +74 -0
  276. package/vendor-core/run-payload.js +17 -0
  277. package/vendor-core/run-shape.js +40 -0
  278. package/vendor-core/run-totals.js +24 -0
  279. package/vendor-core/run-verdict.js +352 -0
  280. package/vendor-core/scaling-sim.js +4 -5
  281. package/vendor-core/scorecard-estimates.js +63 -0
  282. package/vendor-core/session-snapshot.js +7 -0
  283. package/vendor-core/shs-schemas.js +2 -2
  284. package/vendor-core/spark-memory.js +17 -0
  285. package/vendor-core/sql-stages.js +11 -0
  286. package/vendor-core/stage-plan-nodes.js +18 -0
  287. package/vendor-core/stage-quantiles.js +6 -0
  288. package/vendor-core/threshold-overrides.js +160 -0
  289. package/vendor-core/threshold-summary.js +11 -33
  290. package/vendor-core/types.js +54 -42
  291. package/vendor-core/wall-clock.js +1 -12
  292. package/vendor-core/wasted-core-hours.js +12 -9
  293. package/vendor-core/write-targets.js +312 -0
  294. package/public/assets/AutoscalingChurn-lxZHWIwq.js +0 -1
  295. package/public/assets/CacheUtilization-DuAJ-Lve.js +0 -1
  296. package/public/assets/CachingOpportunity-DC1t7o2_.js +0 -1
  297. package/public/assets/ColdStart-BOYXeiUZ.js +0 -1
  298. package/public/assets/ConfigAudit-MCPrJomC.js +0 -1
  299. package/public/assets/CoreUsageArea-ChNuqGA0.js +0 -1
  300. package/public/assets/Dashboard-VuyUGvZx.js +0 -1
  301. package/public/assets/DuplicatePlanSubtree-JZut9xwq.js +0 -1
  302. package/public/assets/DurationHistogram-_7C1w0l4.js +0 -1
  303. package/public/assets/EmptyState-D_ulfIIi.js +0 -1
  304. package/public/assets/ExecutorUtilization-B08E76jT.js +0 -1
  305. package/public/assets/GcPressure-BZMi2fTx.js +0 -1
  306. package/public/assets/ImpactEstimate-36WxuPdV.js +0 -1
  307. package/public/assets/IncompleteRun-t8JU7HRt.js +0 -1
  308. package/public/assets/JobFailures-CguB1bec.js +0 -1
  309. package/public/assets/MemoryUtilization-DDk8lz9-.js +0 -1
  310. package/public/assets/OverBroadcast-BHXLt6s7.js +0 -1
  311. package/public/assets/PartitionSizing-COj3uwV-.js +0 -1
  312. package/public/assets/PlanExplorer-CnCdEY_i.js +0 -1
  313. package/public/assets/PlanGraphRoute-BesZOW1n.js +0 -1
  314. package/public/assets/RetryWaste-CcU4ctAn.js +0 -1
  315. package/public/assets/RowPagination-D2aIcfGv.js +0 -1
  316. package/public/assets/ShuffleIO-NPHkWbg1.js +0 -1
  317. package/public/assets/Skew-CzztP-C4.js +0 -1
  318. package/public/assets/SlowHost-Dh2KHypN.js +0 -1
  319. package/public/assets/SmallFiles-CgYSuZQw.js +0 -1
  320. package/public/assets/SpeculationWaste-C8J5z1WS.js +0 -1
  321. package/public/assets/Spill-DwTQPZ_L.js +0 -1
  322. package/public/assets/StageFailed-aFeIEh3p.js +0 -1
  323. package/public/assets/StageFindingGroup-DQmAE3uk.js +0 -1
  324. package/public/assets/StageHeader-D6GBbcZp.js +0 -1
  325. package/public/assets/StagePill-CSKyM8Kd.js +0 -1
  326. package/public/assets/StageShape-J6U4cUcM.js +0 -1
  327. package/public/assets/StageSlowness-C5F2v_ZO.js +0 -1
  328. package/public/assets/Straggler-DcP3dFGA.js +0 -1
  329. package/public/assets/TaskFailures-C-vIEheo.js +0 -1
  330. package/public/assets/UnderBroadcast-DfjYGhoK.js +0 -1
  331. package/public/assets/WidgetLeadSummary-BdUUi7L5.js +0 -1
  332. package/public/assets/downsample-WmNM1qc9.js +0 -1
  333. package/public/assets/impact-sort-DxaUheWV.js +0 -1
  334. package/public/assets/inbox-LtbS_kBS.js +0 -1
  335. package/public/assets/index-27MbqTFr.js +0 -11
  336. package/public/assets/index-CWjjbtyo.css +0 -2
  337. package/public/assets/react-vendor-D2TLlSzI.js +0 -9
  338. package/public/assets/select-CC2Lyrmi.js +0 -1
  339. package/public/assets/toggle-group-lmgO21t9.js +0 -1
  340. package/public/assets/usePagedRows-jNUWgVTD.js +0 -1
  341. package/public/assets/useRecentFiles-qH5Ap4xm.js +0 -12
  342. package/public/assets/useSortMode-CvPY99UV.js +0 -1
  343. package/public/docs/assets/chunks/@localSearchIndexroot.CJBoRv1b.js +0 -1
  344. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.9ToZXcTk.js +0 -1
  345. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.9ToZXcTk.lean.js +0 -1
  346. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CsCytCho.js +0 -1
  347. package/public/docs/assets/contributor-guide_architecture_drill-down.md.Bawx6NgP.js +0 -1
  348. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.sf9DU2bA.js +0 -1
  349. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.sf9DU2bA.lean.js +0 -1
  350. package/public/docs/assets/contributor-guide_architecture_index.md.3TO9ic6w.js +0 -1
  351. package/public/docs/assets/contributor-guide_architecture_overview.md.rhfxoGsI.js +0 -1
  352. package/public/docs/assets/contributor-guide_architecture_overview.md.rhfxoGsI.lean.js +0 -1
  353. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.B8Wc_ZTg.js +0 -1
  354. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.DYwFeyjV.js +0 -1
  355. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.CBJkwH24.js +0 -6
  356. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.CBJkwH24.lean.js +0 -1
  357. package/public/docs/assets/contributor-guide_contributing.md.B2E9ni79.js +0 -1
  358. package/public/docs/assets/contributor-guide_development-setup.md.s85j2l8b.js +0 -15
  359. package/public/docs/assets/contributor-guide_development-setup.md.s85j2l8b.lean.js +0 -1
  360. package/public/docs/assets/contributor-guide_testing.md.Cnn6gz1C.js +0 -1
  361. package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.js +0 -1
  362. package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.lean.js +0 -1
  363. package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.js +0 -1
  364. package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.lean.js +0 -1
  365. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.js +0 -1
  366. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.lean.js +0 -1
  367. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.js +0 -7
  368. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.lean.js +0 -1
  369. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.js +0 -1
  370. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.lean.js +0 -1
  371. package/public/docs/assets/tuning-reference_bottleneck-failures.md.CAsFf3RR.lean.js +0 -1
  372. package/public/docs/assets/tuning-reference_bottleneck-gc.md.B4T3kJYV.js +0 -6
  373. package/public/docs/assets/tuning-reference_bottleneck-gc.md.B4T3kJYV.lean.js +0 -1
  374. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.js +0 -8
  375. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.lean.js +0 -1
  376. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.js +0 -7
  377. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.lean.js +0 -1
  378. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.js +0 -1
  379. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.lean.js +0 -1
  380. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.DDMQVOW6.lean.js +0 -1
  381. package/public/docs/assets/tuning-reference_bottleneck-skew.md.B0MzhWcX.lean.js +0 -1
  382. package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.BlIo6UDW.lean.js +0 -1
  383. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.DHGMTmPs.js +0 -5
  384. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.DHGMTmPs.lean.js +0 -1
  385. package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.js +0 -6
  386. package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.lean.js +0 -1
  387. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DIbXdAcQ.js +0 -7
  388. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DIbXdAcQ.lean.js +0 -1
  389. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.CB05v3zh.js +0 -8
  390. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.CB05v3zh.lean.js +0 -1
  391. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DqC_iGkw.lean.js +0 -1
  392. package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.js +0 -1
  393. package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.lean.js +0 -1
  394. package/public/docs/assets/tuning-reference_cluster-config.md.CD6vzYtD.js +0 -1
  395. package/public/docs/assets/tuning-reference_cluster-config.md.CD6vzYtD.lean.js +0 -1
  396. package/public/docs/assets/tuning-reference_config.md.UvveiWG3.js +0 -1
  397. package/public/docs/assets/tuning-reference_config.md.UvveiWG3.lean.js +0 -1
  398. package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.js +0 -1
  399. package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.lean.js +0 -1
  400. package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.js +0 -1
  401. package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.lean.js +0 -1
  402. package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.js +0 -1
  403. package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.lean.js +0 -1
  404. package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.js +0 -1
  405. package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.lean.js +0 -1
  406. package/public/docs/assets/tuning-reference_memory-model.md.CWhvgevP.js +0 -1
  407. package/public/docs/assets/tuning-reference_memory-model.md.CWhvgevP.lean.js +0 -1
  408. package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.js +0 -1
  409. package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.lean.js +0 -1
  410. package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.js +0 -1
  411. package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.lean.js +0 -1
  412. package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.js +0 -6
  413. package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.lean.js +0 -1
  414. package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.js +0 -1
  415. package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.lean.js +0 -1
  416. package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.js +0 -1
  417. package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.lean.js +0 -1
  418. package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.js +0 -1
  419. package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.lean.js +0 -1
  420. package/public/docs/assets/user-guide_alternative-log-retrieval.md.ZHPSbBkF.js +0 -1
  421. package/public/docs/assets/user-guide_alternative-log-retrieval.md.ZHPSbBkF.lean.js +0 -1
  422. package/public/docs/assets/user-guide_getting-started.md.Cpe0U-eO.js +0 -3
  423. package/public/docs/assets/user-guide_getting-started.md.Cpe0U-eO.lean.js +0 -1
  424. package/public/docs/assets/user-guide_mcp-tools.md.DrphooJv.js +0 -125
  425. package/public/docs/assets/user-guide_mcp-tools.md.DrphooJv.lean.js +0 -1
  426. package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.js +0 -1
  427. package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.lean.js +0 -1
  428. package/public/docs/assets/user-guide_understanding-findings.md.YBBLOwWi.js +0 -1
  429. /package/public/docs/assets/{contributor-guide_architecture_drill-down.md.Bawx6NgP.lean.js → contributor-guide_architecture_drill-down.md.CdtlKHl-.lean.js} +0 -0
@@ -1,4 +1,4 @@
1
- var Ot=Object.defineProperty;var At=(a,e,t)=>e in a?Ot(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Me=(a,e,t)=>At(a,typeof e!="symbol"?e+"":e,t);import{V as Ct,q as Be,ak as Mt,h as be,al as nt,am as Lt,an as Dt,ao as Pt,G as ce,d as zt,ap as rt,p as he,aq as Vt,ar as jt,s as $t,as as Bt,v as Le,P as ve,O as xe,a2 as Wt,at as Kt,W as Jt,R as qt,$ as Ut,o as q,b as Ht,j as T,a0 as Gt,k as P,a3 as Qt,a4 as Yt,au as Zt,c as Q,n as it,e as _e,B as st,F as at,a as pe,t as me,av as Xt,aw as ot,ax as en,a9 as tn,ae as nn,ay as rn,_ as sn}from"./framework.DSg0KOwT.js";import{u as an,c as on}from"./theme.DQS9-w_Z.js";const ln={root:()=>Ct(()=>import("./@localSearchIndexroot.CJBoRv1b.js"),[])};/*!
1
+ var Ot=Object.defineProperty;var At=(a,e,t)=>e in a?Ot(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Me=(a,e,t)=>At(a,typeof e!="symbol"?e+"":e,t);import{V as Ct,q as Be,ak as Mt,h as be,al as nt,am as Lt,an as Dt,ao as Pt,G as ce,d as zt,ap as rt,p as he,aq as Vt,ar as jt,s as $t,as as Bt,v as Le,P as ve,O as xe,a2 as Wt,at as Kt,W as Jt,R as qt,$ as Ut,o as q,b as Ht,j as T,a0 as Gt,k as P,a3 as Qt,a4 as Yt,au as Zt,c as Q,n as it,e as _e,B as st,F as at,a as pe,t as me,av as Xt,aw as ot,ax as en,a9 as tn,ae as nn,ay as rn,_ as sn}from"./framework.DSg0KOwT.js";import{u as an,c as on}from"./theme.DFcAl8Ws.js";const ln={root:()=>Ct(()=>import("./@localSearchIndexroot.r9imX8Aq.js"),[])};/*!
2
2
  * tabbable 6.5.0
3
3
  * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE
4
4
  */var gt=["input:not([inert]):not([inert] *)","select:not([inert]):not([inert] *)","textarea:not([inert]):not([inert] *)","a[href]:not([inert]):not([inert] *)","area[href]:not([inert]):not([inert] *)","button:not([inert]):not([inert] *)","[tabindex]:not(slot):not([inert]):not([inert] *)","audio[controls]:not([inert]):not([inert] *)","video[controls]:not([inert]):not([inert] *)",'[contenteditable]:not([contenteditable="false"]):not([inert]):not([inert] *)',"details>summary:first-of-type:not([inert]):not([inert] *)","details:not([inert]):not([inert] *)"],ke=gt.join(","),bt=typeof Element>"u",ae=bt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ne=!bt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},Fe=function(e,t){var n;t===void 0&&(t=!0);var r=e==null||(n=e.getAttribute)===null||n===void 0?void 0:n.call(e,"inert"),s=r===""||r==="true",i=s||t&&e&&(typeof e.closest=="function"?e.closest("[inert]"):Fe(e.parentNode));return i},cn=function(e){var t,n=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return n===""||n==="true"},yt=function(e,t,n){if(Fe(e))return[];var r=Array.prototype.slice.apply(e.querySelectorAll(ke));return t&&ae.call(e,ke)&&r.unshift(e),r=r.filter(n),r},Re=function(e,t,n){for(var r=[],s=Array.from(e);s.length;){var i=s.shift();if(!Fe(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=Re(l,!0,n);n.flatten?r.push.apply(r,c):r.push({scopeParent:i,candidates:c})}else{var h=ae.call(i,ke);h&&n.filter(i)&&(t||!e.includes(i))&&r.push(i);var m=i.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(i),p=!Fe(m,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(i));if(m&&p){var b=Re(m===!0?i.children:m.children,!0,n);n.flatten?r.push.apply(r,b):r.push({scopeParent:i,candidates:b})}else s.unshift.apply(s,i.children)}}return r},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},se=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||cn(e))&&!wt(e)?0:e.tabIndex},un=function(e,t){var n=se(e);return n<0&&t&&!wt(e)?0:n},dn=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},St=function(e){return e.tagName==="INPUT"},fn=function(e){return St(e)&&e.type==="hidden"},hn=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(n){return n.tagName==="SUMMARY"});return t},vn=function(e,t){for(var n=0;n<e.length;n++)if(e[n].checked&&e[n].form===t)return e[n]},pn=function(e){if(!e.name)return!0;var t=e.form||Ne(e),n=function(o){return t.querySelectorAll('input[type="radio"][name="'+o+'"]')},r;if(typeof window<"u"&&typeof window.CSS<"u"&&typeof window.CSS.escape=="function")r=n(window.CSS.escape(e.name));else try{r=n(e.name)}catch(i){return console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s",i.message),!1}var s=vn(r,e.form);return!s||s===e},mn=function(e){return St(e)&&e.type==="radio"},gn=function(e){return mn(e)&&!pn(e)},bn=function(e){var t,n=e&&Ne(e),r=(t=n)===null||t===void 0?void 0:t.host,s=!1;if(n&&n!==e){var i,o,l;for(s=!!((i=r)!==null&&i!==void 0&&(o=i.ownerDocument)!==null&&o!==void 0&&o.contains(r)||e!=null&&(l=e.ownerDocument)!==null&&l!==void 0&&l.contains(e));!s&&r;){var c,h,m;n=Ne(r),r=(c=n)===null||c===void 0?void 0:c.host,s=!!((h=r)!==null&&h!==void 0&&(m=h.ownerDocument)!==null&&m!==void 0&&m.contains(r))}}return s},lt=function(e){var t=e.getBoundingClientRect(),n=t.width,r=t.height;return n===0&&r===0},yn=function(e,t){var n=t.displayCheck,r=t.getShadowRoot;if(n==="full-native"&&"checkVisibility"in e){var s=e.checkVisibility({checkOpacity:!1,opacityProperty:!1,contentVisibilityAuto:!0,visibilityProperty:!0,checkVisibilityCSS:!0});return!s}var i=getComputedStyle(e),o=i.visibility;if(o==="hidden"||o==="collapse")return!0;var l=ae.call(e,"details>summary:first-of-type"),c=l?e.parentElement:e;if(ae.call(c,"details:not([open]) *"))return!0;if(!n||n==="full"||n==="full-native"||n==="legacy-full"){if(typeof r=="function"){for(var h=e;e;){var m=e.parentElement,p=Ne(e);if(m&&!m.shadowRoot&&r(m)===!0)return lt(e);e.assignedSlot?e=e.assignedSlot:!m&&p!==e.ownerDocument?e=p.host:e=m}e=h}if(bn(e))return!e.getClientRects().length;if(n!=="legacy-full")return!0}else if(n==="non-zero-area")return lt(e);return!1},wn=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var n=0;n<t.children.length;n++){var r=t.children.item(n);if(r.tagName==="LEGEND")return ae.call(t,"fieldset[disabled] *")?!0:!r.contains(e)}return!0}t=t.parentElement}return!1},Oe=function(e,t){return!(t.disabled||fn(t)||yn(t,e)||hn(t)||wn(t))},We=function(e,t){return!(gn(t)||se(t)<0||!Oe(e,t))},Sn=function(e){var t=parseInt(e.getAttribute("tabindex"),10);return!!(isNaN(t)||t>=0)},xt=function(e){var t=[],n=[];return e.forEach(function(r,s){var i=!!r.scopeParent,o=i?r.scopeParent:r,l=un(o,i),c=i?xt(r.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):n.push({documentOrder:s,tabIndex:l,item:r,isScope:i,content:c})}),n.sort(dn).reduce(function(r,s){return s.isScope?r.push.apply(r,s.content):r.push(s.content),r},[]).concat(t)},xn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=Re([e],t.includeContainer,{filter:We.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:Sn}):n=yt(e,t.includeContainer,We.bind(null,t)),xt(n)},_n=function(e,t){t=t||{};var n;return t.getShadowRoot?n=Re([e],t.includeContainer,{filter:Oe.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):n=yt(e,t.includeContainer,Oe.bind(null,t)),n},oe=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,ke)===!1?!1:We(t,e)},Tn=gt.concat("iframe:not([inert]):not([inert] *)").join(","),De=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,Tn)===!1?!1:Oe(t,e)};/*!
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.DtyygpbL.js","assets/chunks/framework.DSg0KOwT.js"])))=>i.map(i=>d[i]);
2
- import{d as p,c as d,r as u,n as T,o as r,a as B,t as x,b as g,w as m,T as _e,e as h,_ as k,u as Be,i as Ye,f as Xe,g as O,h as $,j as i,k as l,l as K,m as me,p as V,q as U,s as se,v as z,x as ye,y as $e,z as Ze,A as et,F as M,B as E,C as W,D as ie,E as b,G as He,H as D,I as Oe,J as re,K as R,L as le,M as tt,N as Fe,O as he,P as ne,Q as De,R as X,S as nt,U as at,V as ot,W as je,X as Ue,Y as st,Z as it,$ as rt,a0 as qe,a1 as lt,a2 as ct,a3 as ut,a4 as dt,a5 as xe}from"./framework.DSg0KOwT.js";const vt=p({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(r(),d("span",{class:T(["VPBadge",e.type])},[u(t.$slots,"default",{},()=>[B(x(e.text),1)])],2))}}),ft={key:0,class:"VPBackdrop"},mt=p({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(r(),g(_e,{name:"fade"},{default:m(()=>[e.show?(r(),d("div",ft)):h("",!0)]),_:1}))}}),ht=k(mt,[["__scopeId","data-v-c79a1216"]]),L=Be;function pt(e,t){let n,a=!1;return()=>{n&&clearTimeout(n),a?n=setTimeout(e,t):(e(),(a=!0)&&setTimeout(()=>a=!1,t))}}function pe(e){return e.startsWith("/")?e:`/${e}`}function Pe(e){const{pathname:t,search:n,hash:a,protocol:o}=new URL(e,"http://a.com");if(Ye(e)||e.startsWith("#")||!o.startsWith("http")||!Xe(t))return e;const{site:c}=L(),s=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,c.value.cleanUrls?"":".html")}${n}${a}`);return O(s)}function Z({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:a,theme:o,hash:c}=L(),s=$(()=>{var v,y;return{label:(v=t.value.locales[n.value])==null?void 0:v.label,link:((y=t.value.locales[n.value])==null?void 0:y.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:$(()=>Object.entries(t.value.locales).flatMap(([v,y])=>s.value.label===y.label?[]:{text:y.label,link:bt(y.link||(v==="root"?"/":`/${v}/`),o.value.i18nRouting!==!1&&e,a.value.relativePath.slice(s.value.link.length-1),!t.value.cleanUrls)+c.value})),currentLang:s}}function bt(e,t,n,a){return t?e.replace(/\/$/,"")+pe(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,a?".html":"")):e}const gt={class:"NotFound"},kt={class:"code"},_t={class:"title"},yt={class:"quote"},$t={class:"action"},Pt=["href","aria-label"],Lt=p({__name:"NotFound",setup(e){const{theme:t}=L(),{currentLang:n}=Z();return(a,o)=>{var c,s,f,v,y;return r(),d("div",gt,[i("p",kt,x(((c=l(t).notFound)==null?void 0:c.code)??"404"),1),i("h1",_t,x(((s=l(t).notFound)==null?void 0:s.title)??"PAGE NOT FOUND"),1),o[0]||(o[0]=i("div",{class:"divider"},null,-1)),i("blockquote",yt,x(((f=l(t).notFound)==null?void 0:f.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),i("div",$t,[i("a",{class:"link",href:l(O)(l(n).link),"aria-label":((v=l(t).notFound)==null?void 0:v.linkLabel)??"go to home"},x(((y=l(t).notFound)==null?void 0:y.linkText)??"Take me home"),9,Pt)])])}}}),St=k(Lt,[["__scopeId","data-v-d6be1790"]]);function Ge(e,t){if(Array.isArray(e))return ee(e);if(e==null)return[];t=pe(t);const n=Object.keys(e).sort((o,c)=>c.split("/").length-o.split("/").length).find(o=>t.startsWith(pe(o))),a=n?e[n]:[];return Array.isArray(a)?ee(a):ee(a.items,a.base)}function Vt(e){const t=[];let n=0;for(const a in e){const o=e[a];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function wt(e){const t=[];function n(a){for(const o of a)o.text&&o.link&&t.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&n(o.items)}return n(e),t}function be(e,t){return Array.isArray(t)?t.some(n=>be(e,n)):K(e,t.link)?!0:t.items?be(e,t.items):!1}function ee(e,t){return[...e].map(n=>{const a={...n},o=a.base||t;return o&&a.link&&(a.link=o+a.link),a.items&&(a.items=ee(a.items,o)),a})}function q(){const{frontmatter:e,page:t,theme:n}=L(),a=me("(min-width: 960px)"),o=V(!1),c=$(()=>{const A=n.value.sidebar,H=t.value.relativePath;return A?Ge(A,H):[]}),s=V(c.value);U(c,(A,H)=>{JSON.stringify(A)!==JSON.stringify(H)&&(s.value=c.value)});const f=$(()=>e.value.sidebar!==!1&&s.value.length>0&&e.value.layout!=="home"),v=$(()=>y?e.value.aside==null?n.value.aside==="left":e.value.aside==="left":!1),y=$(()=>e.value.layout==="home"?!1:e.value.aside!=null?!!e.value.aside:n.value.aside!==!1),S=$(()=>f.value&&a.value),_=$(()=>f.value?Vt(s.value):[]);function P(){o.value=!0}function w(){o.value=!1}function N(){o.value?w():P()}return{isOpen:o,sidebar:s,sidebarGroups:_,hasSidebar:f,hasAside:y,leftAside:v,isSidebarEnabled:S,open:P,close:w,toggle:N}}function Tt(e,t){let n;se(()=>{n=e.value?document.activeElement:void 0}),z(()=>{window.addEventListener("keyup",a)}),ye(()=>{window.removeEventListener("keyup",a)});function a(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function xt(e){const{page:t,hash:n}=L(),a=V(!1),o=$(()=>e.value.collapsed!=null),c=$(()=>!!e.value.link),s=V(!1),f=()=>{s.value=K(t.value.relativePath,e.value.link)};U([t,e,n],f),z(f);const v=$(()=>s.value?!0:e.value.items?be(t.value.relativePath,e.value.items):!1),y=$(()=>!!(e.value.items&&e.value.items.length));se(()=>{a.value=!!(o.value&&e.value.collapsed)}),$e(()=>{(s.value||v.value)&&(a.value=!1)});function S(){o.value&&(a.value=!a.value)}return{collapsed:a,collapsible:o,isLink:c,isActiveLink:s,hasActiveLink:v,hasChildren:y,toggle:S}}function Mt(){const{hasSidebar:e}=q(),t=me("(min-width: 960px)"),n=me("(min-width: 1280px)");return{isAsideEnabled:$(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const Nt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,ge=[];function Re(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function Le(e){const t=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const a=Number(n.tagName[1]);return{element:n,title:At(n),link:"#"+n.id,level:a}});return It(t,e)}function At(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(Nt.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function It(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[a,o]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return Bt(e,a,o)}function Ct(e,t){const{isAsideEnabled:n}=Mt(),a=pt(c,100);let o=null;z(()=>{requestAnimationFrame(c),window.addEventListener("scroll",a)}),Ze(()=>{s(location.hash)}),ye(()=>{window.removeEventListener("scroll",a)});function c(){if(!n.value)return;const f=window.scrollY,v=window.innerHeight,y=document.body.offsetHeight,S=Math.abs(f+v-y)<1,_=ge.map(({element:w,link:N})=>({link:N,top:Et(w)})).filter(({top:w})=>!Number.isNaN(w)).sort((w,N)=>w.top-N.top);if(!_.length){s(null);return}if(f<1){s(null);return}if(S){s(_[_.length-1].link);return}let P=null;for(const{link:w,top:N}of _){if(N>f+et()+4)break;P=w}s(P)}function s(f){o&&o.classList.remove("active"),f==null?o=null:o=e.value.querySelector(`a[href="${decodeURIComponent(f)}"]`);const v=o;v?(v.classList.add("active"),t.value.style.top=v.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function Et(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function Bt(e,t,n){ge.length=0;const a=[],o=[];return e.forEach(c=>{const s={...c,children:[]};let f=o[o.length-1];for(;f&&f.level>=s.level;)o.pop(),f=o[o.length-1];if(s.element.classList.contains("ignore-header")||f&&"shouldIgnore"in f){o.push({level:s.level,shouldIgnore:!0});return}s.level>n||s.level<t||(ge.push({element:s.element,link:s.link}),f?f.children.push(s):a.push(s),o.push(s))}),a}const Ht=["href","title"],Ot=p({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(e){function t({target:n}){const a=n.href.split("#")[1],o=document.getElementById(decodeURIComponent(a));o==null||o.focus({preventScroll:!0})}return(n,a)=>{const o=W("VPDocOutlineItem",!0);return r(),d("ul",{class:T(["VPDocOutlineItem",e.root?"root":"nested"])},[(r(!0),d(M,null,E(e.headers,({children:c,link:s,title:f})=>(r(),d("li",null,[i("a",{class:"outline-link",href:s,onClick:t,title:f},x(f),9,Ht),c!=null&&c.length?(r(),g(o,{key:0,headers:c},null,8,["headers"])):h("",!0)]))),256))],2)}}}),ze=k(Ot,[["__scopeId","data-v-b933a997"]]),Ft={class:"content"},Dt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},jt=p({__name:"VPDocAsideOutline",setup(e){const{frontmatter:t,theme:n}=L(),a=He([]);ie(()=>{a.value=Le(t.value.outline??n.value.outline)});const o=V(),c=V();return Ct(o,c),(s,f)=>(r(),d("nav",{"aria-labelledby":"doc-outline-aria-label",class:T(["VPDocAsideOutline",{"has-outline":a.value.length>0}]),ref_key:"container",ref:o},[i("div",Ft,[i("div",{class:"outline-marker",ref_key:"marker",ref:c},null,512),i("div",Dt,x(l(Re)(l(n))),1),b(ze,{headers:a.value,root:!0},null,8,["headers"])])],2))}}),Ut=k(jt,[["__scopeId","data-v-a5bbad30"]]),qt={class:"VPDocAsideCarbonAds"},Gt=p({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,a)=>(r(),d("div",qt,[b(l(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),Rt={class:"VPDocAside"},zt=p({__name:"VPDocAside",setup(e){const{theme:t}=L();return(n,a)=>(r(),d("div",Rt,[u(n.$slots,"aside-top",{},void 0,!0),u(n.$slots,"aside-outline-before",{},void 0,!0),b(Ut),u(n.$slots,"aside-outline-after",{},void 0,!0),a[0]||(a[0]=i("div",{class:"spacer"},null,-1)),u(n.$slots,"aside-ads-before",{},void 0,!0),l(t).carbonAds?(r(),g(Gt,{key:0,"carbon-ads":l(t).carbonAds},null,8,["carbon-ads"])):h("",!0),u(n.$slots,"aside-ads-after",{},void 0,!0),u(n.$slots,"aside-bottom",{},void 0,!0)]))}}),Kt=k(zt,[["__scopeId","data-v-3f215769"]]);function Wt(){const{theme:e,page:t}=L();return $(()=>{const{text:n="Edit this page",pattern:a=""}=e.value.editLink||{};let o;return typeof a=="function"?o=a(t.value):o=a.replace(/:path/g,t.value.filePath),{url:o,text:n}})}function Jt(){const{page:e,theme:t,frontmatter:n}=L();return $(()=>{var y,S,_,P,w,N,A,H;const a=Ge(t.value.sidebar,e.value.relativePath),o=wt(a),c=Qt(o,F=>F.link.replace(/[?#].*$/,"")),s=c.findIndex(F=>K(e.value.relativePath,F.link)),f=((y=t.value.docFooter)==null?void 0:y.prev)===!1&&!n.value.prev||n.value.prev===!1,v=((S=t.value.docFooter)==null?void 0:S.next)===!1&&!n.value.next||n.value.next===!1;return{prev:f?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??((_=c[s-1])==null?void 0:_.docFooterText)??((P=c[s-1])==null?void 0:P.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((w=c[s-1])==null?void 0:w.link)},next:v?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((N=c[s+1])==null?void 0:N.docFooterText)??((A=c[s+1])==null?void 0:A.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((H=c[s+1])==null?void 0:H.link)}}})}function Qt(e,t){const n=new Set;return e.filter(a=>{const o=t(a);return n.has(o)?!1:n.add(o)})}const j=p({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=$(()=>t.tag??(t.href?"a":"span")),a=$(()=>t.href&&Oe.test(t.href)||t.target==="_blank");return(o,c)=>(r(),g(D(n.value),{class:T(["VPLink",{link:e.href,"vp-external-link-icon":a.value,"no-icon":e.noIcon}]),href:e.href?l(Pe)(e.href):void 0,target:e.target??(a.value?"_blank":void 0),rel:e.rel??(a.value?"noreferrer":void 0)},{default:m(()=>[u(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Yt={class:"VPLastUpdated"},Xt=["datetime"],Zt=p({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:a}=L(),o=$(()=>new Date(n.value.lastUpdated)),c=$(()=>o.value.toISOString()),s=V("");return z(()=>{se(()=>{var f,v,y;s.value=new Intl.DateTimeFormat((v=(f=t.value.lastUpdated)==null?void 0:f.formatOptions)!=null&&v.forceLocale?a.value:void 0,((y=t.value.lastUpdated)==null?void 0:y.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(f,v)=>{var y;return r(),d("p",Yt,[B(x(((y=l(t).lastUpdated)==null?void 0:y.text)||l(t).lastUpdatedText||"Last updated")+": ",1),i("time",{datetime:c.value},x(s.value),9,Xt)])}}}),en=k(Zt,[["__scopeId","data-v-e98dd255"]]),tn={key:0,class:"VPDocFooter"},nn={key:0,class:"edit-info"},an={key:0,class:"edit-link"},on={key:1,class:"last-updated"},sn={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},rn={class:"pager"},ln=["innerHTML"],cn=["innerHTML"],un={class:"pager"},dn=["innerHTML"],vn=["innerHTML"],fn=p({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:a}=L(),o=Wt(),c=Jt(),s=$(()=>t.value.editLink&&a.value.editLink!==!1),f=$(()=>n.value.lastUpdated),v=$(()=>s.value||f.value||c.value.prev||c.value.next);return(y,S)=>{var _,P,w,N;return v.value?(r(),d("footer",tn,[u(y.$slots,"doc-footer-before",{},void 0,!0),s.value||f.value?(r(),d("div",nn,[s.value?(r(),d("div",an,[b(j,{class:"edit-link-button",href:l(o).url,"no-icon":!0},{default:m(()=>[S[0]||(S[0]=i("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),B(" "+x(l(o).text),1)]),_:1},8,["href"])])):h("",!0),f.value?(r(),d("div",on,[b(en)])):h("",!0)])):h("",!0),(_=l(c).prev)!=null&&_.link||(P=l(c).next)!=null&&P.link?(r(),d("nav",sn,[S[1]||(S[1]=i("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),i("div",rn,[(w=l(c).prev)!=null&&w.link?(r(),g(j,{key:0,class:"pager-link prev",href:l(c).prev.link},{default:m(()=>{var A;return[i("span",{class:"desc",innerHTML:((A=l(t).docFooter)==null?void 0:A.prev)||"Previous page"},null,8,ln),i("span",{class:"title",innerHTML:l(c).prev.text},null,8,cn)]}),_:1},8,["href"])):h("",!0)]),i("div",un,[(N=l(c).next)!=null&&N.link?(r(),g(j,{key:0,class:"pager-link next",href:l(c).next.link},{default:m(()=>{var A;return[i("span",{class:"desc",innerHTML:((A=l(t).docFooter)==null?void 0:A.next)||"Next page"},null,8,dn),i("span",{class:"title",innerHTML:l(c).next.text},null,8,vn)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),mn=k(fn,[["__scopeId","data-v-e257564d"]]),hn={class:"container"},pn={class:"aside-container"},bn={class:"aside-content"},gn={class:"content"},kn={class:"content-container"},_n={class:"main"},yn=p({__name:"VPDoc",setup(e){const{theme:t}=L(),n=re(),{hasSidebar:a,hasAside:o,leftAside:c}=q(),s=$(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(f,v)=>{const y=W("Content");return r(),d("div",{class:T(["VPDoc",{"has-sidebar":l(a),"has-aside":l(o)}])},[u(f.$slots,"doc-top",{},void 0,!0),i("div",hn,[l(o)?(r(),d("div",{key:0,class:T(["aside",{"left-aside":l(c)}])},[v[0]||(v[0]=i("div",{class:"aside-curtain"},null,-1)),i("div",pn,[i("div",bn,[b(Kt,null,{"aside-top":m(()=>[u(f.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":m(()=>[u(f.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":m(()=>[u(f.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":m(()=>[u(f.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":m(()=>[u(f.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":m(()=>[u(f.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),i("div",gn,[i("div",kn,[u(f.$slots,"doc-before",{},void 0,!0),i("main",_n,[b(y,{class:T(["vp-doc",[s.value,l(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),b(mn,null,{"doc-footer-before":m(()=>[u(f.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),u(f.$slots,"doc-after",{},void 0,!0)])])]),u(f.$slots,"doc-bottom",{},void 0,!0)],2)}}}),$n=k(yn,[["__scopeId","data-v-39a288b8"]]),Pn=p({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=$(()=>t.href&&Oe.test(t.href)),a=$(()=>t.tag||(t.href?"a":"button"));return(o,c)=>(r(),g(D(a.value),{class:T(["VPButton",[e.size,e.theme]]),href:e.href?l(Pe)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:m(()=>[B(x(e.text),1)]),_:1},8,["class","href","target","rel"]))}}),Ln=k(Pn,[["__scopeId","data-v-fa7799d5"]]),Sn=["src","alt"],Vn=p({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const a=W("VPImage",!0);return e.image?(r(),d(M,{key:0},[typeof e.image=="string"||"src"in e.image?(r(),d("img",R({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:l(O)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Sn)):(r(),d(M,{key:1},[b(a,R({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),b(a,R({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),ae=k(Vn,[["__scopeId","data-v-8426fc1a"]]),wn={class:"container"},Tn={class:"main"},xn={class:"heading"},Mn=["innerHTML"],Nn=["innerHTML"],An=["innerHTML"],In={key:0,class:"actions"},Cn={key:0,class:"image"},En={class:"image-container"},Bn=p({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const t=le("hero-image-slot-exists");return(n,a)=>(r(),d("div",{class:T(["VPHero",{"has-image":e.image||l(t)}])},[i("div",wn,[i("div",Tn,[u(n.$slots,"home-hero-info-before",{},void 0,!0),u(n.$slots,"home-hero-info",{},()=>[i("h1",xn,[e.name?(r(),d("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,Mn)):h("",!0),e.text?(r(),d("span",{key:1,innerHTML:e.text,class:"text"},null,8,Nn)):h("",!0)]),e.tagline?(r(),d("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,An)):h("",!0)],!0),u(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(r(),d("div",In,[(r(!0),d(M,null,E(e.actions,o=>(r(),d("div",{key:o.link,class:"action"},[b(Ln,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),u(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||l(t)?(r(),d("div",Cn,[i("div",En,[a[0]||(a[0]=i("div",{class:"image-bg"},null,-1)),u(n.$slots,"home-hero-image",{},()=>[e.image?(r(),g(ae,{key:0,class:"image-src",image:e.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),Hn=k(Bn,[["__scopeId","data-v-4f9c455b"]]),On=p({__name:"VPHomeHero",setup(e){const{frontmatter:t}=L();return(n,a)=>l(t).hero?(r(),g(Hn,{key:0,class:"VPHomeHero",name:l(t).hero.name,text:l(t).hero.text,tagline:l(t).hero.tagline,image:l(t).hero.image,actions:l(t).hero.actions},{"home-hero-info-before":m(()=>[u(n.$slots,"home-hero-info-before")]),"home-hero-info":m(()=>[u(n.$slots,"home-hero-info")]),"home-hero-info-after":m(()=>[u(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":m(()=>[u(n.$slots,"home-hero-actions-after")]),"home-hero-image":m(()=>[u(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Fn={class:"box"},Dn={key:0,class:"icon"},jn=["innerHTML"],Un=["innerHTML"],qn=["innerHTML"],Gn={key:4,class:"link-text"},Rn={class:"link-text-value"},zn=p({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(r(),g(j,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:m(()=>[i("article",Fn,[typeof e.icon=="object"&&e.icon.wrap?(r(),d("div",Dn,[b(ae,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(r(),g(ae,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(r(),d("div",{key:2,class:"icon",innerHTML:e.icon},null,8,jn)):h("",!0),i("h2",{class:"title",innerHTML:e.title},null,8,Un),e.details?(r(),d("p",{key:3,class:"details",innerHTML:e.details},null,8,qn)):h("",!0),e.linkText?(r(),d("div",Gn,[i("p",Rn,[B(x(e.linkText)+" ",1),n[0]||(n[0]=i("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Kn=k(zn,[["__scopeId","data-v-a3976bdc"]]),Wn={key:0,class:"VPFeatures"},Jn={class:"container"},Qn={class:"items"},Yn=p({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=$(()=>{const a=t.features.length;if(a){if(a===2)return"grid-2";if(a===3)return"grid-3";if(a%3===0)return"grid-6";if(a>3)return"grid-4"}else return});return(a,o)=>e.features?(r(),d("div",Wn,[i("div",Jn,[i("div",Qn,[(r(!0),d(M,null,E(e.features,c=>(r(),d("div",{key:c.title,class:T(["item",[n.value]])},[b(Kn,{icon:c.icon,title:c.title,details:c.details,link:c.link,"link-text":c.linkText,rel:c.rel,target:c.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),Xn=k(Yn,[["__scopeId","data-v-a6181336"]]),Zn=p({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=L();return(n,a)=>l(t).features?(r(),g(Xn,{key:0,class:"VPHomeFeatures",features:l(t).features},null,8,["features"])):h("",!0)}}),ea=p({__name:"VPHomeContent",setup(e){const{width:t}=tt({initialWidth:0,includeScrollbar:!1});return(n,a)=>(r(),d("div",{class:"vp-doc container",style:Fe(l(t)?{"--vp-offset":`calc(50% - ${l(t)/2}px)`}:{})},[u(n.$slots,"default",{},void 0,!0)],4))}}),ta=k(ea,[["__scopeId","data-v-8e2d4988"]]),na=p({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=L();return(a,o)=>{const c=W("Content");return r(),d("div",{class:T(["VPHome",{"external-link-icon-enabled":l(n).externalLinkIcon}])},[u(a.$slots,"home-hero-before",{},void 0,!0),b(On,null,{"home-hero-info-before":m(()=>[u(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":m(()=>[u(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":m(()=>[u(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":m(()=>[u(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":m(()=>[u(a.$slots,"home-hero-image",{},void 0,!0)]),_:3}),u(a.$slots,"home-hero-after",{},void 0,!0),u(a.$slots,"home-features-before",{},void 0,!0),b(Zn),u(a.$slots,"home-features-after",{},void 0,!0),l(t).markdownStyles!==!1?(r(),g(ta,{key:0},{default:m(()=>[b(c)]),_:1})):(r(),g(c,{key:1}))],2)}}}),aa=k(na,[["__scopeId","data-v-8b561e3d"]]),oa={},sa={class:"VPPage"};function ia(e,t){const n=W("Content");return r(),d("div",sa,[u(e.$slots,"page-top"),b(n),u(e.$slots,"page-bottom")])}const ra=k(oa,[["render",ia]]),la=p({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=L(),{hasSidebar:a}=q();return(o,c)=>(r(),d("div",{class:T(["VPContent",{"has-sidebar":l(a),"is-home":l(n).layout==="home"}]),id:"VPContent"},[l(t).isNotFound?u(o.$slots,"not-found",{},()=>[b(St)],!0,0):l(n).layout==="page"?(r(),g(ra,{key:1},{"page-top":m(()=>[u(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":m(()=>[u(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):l(n).layout==="home"?(r(),g(aa,{key:2},{"home-hero-before":m(()=>[u(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":m(()=>[u(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":m(()=>[u(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":m(()=>[u(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":m(()=>[u(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":m(()=>[u(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":m(()=>[u(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":m(()=>[u(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":m(()=>[u(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):l(n).layout&&l(n).layout!=="doc"?(r(),g(D(l(n).layout),{key:3})):(r(),g($n,{key:4},{"doc-top":m(()=>[u(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":m(()=>[u(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":m(()=>[u(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":m(()=>[u(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":m(()=>[u(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":m(()=>[u(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":m(()=>[u(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":m(()=>[u(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":m(()=>[u(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":m(()=>[u(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":m(()=>[u(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ca=k(la,[["__scopeId","data-v-1428d186"]]),ua={class:"container"},da=["innerHTML"],va=["innerHTML"],fa=p({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=L(),{hasSidebar:a}=q();return(o,c)=>l(t).footer&&l(n).footer!==!1?(r(),d("footer",{key:0,class:T(["VPFooter",{"has-sidebar":l(a)}])},[i("div",ua,[l(t).footer.message?(r(),d("p",{key:0,class:"message",innerHTML:l(t).footer.message},null,8,da)):h("",!0),l(t).footer.copyright?(r(),d("p",{key:1,class:"copyright",innerHTML:l(t).footer.copyright},null,8,va)):h("",!0)])],2)):h("",!0)}}),ma=k(fa,[["__scopeId","data-v-e315a0ad"]]);function ha(){const{theme:e,frontmatter:t}=L(),n=He([]),a=$(()=>n.value.length>0);return ie(()=>{n.value=Le(t.value.outline??e.value.outline)}),{headers:n,hasLocalNav:a}}const pa={class:"menu-text"},ba={class:"header"},ga={class:"outline"},ka=p({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=L(),a=V(!1),o=V(0),c=V(),s=V();function f(_){var P;(P=c.value)!=null&&P.contains(_.target)||(a.value=!1)}U(a,_=>{if(_){document.addEventListener("click",f);return}document.removeEventListener("click",f)}),he("Escape",()=>{a.value=!1}),ie(()=>{a.value=!1});function v(){a.value=!a.value,o.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function y(_){_.target.classList.contains("outline-link")&&(s.value&&(s.value.style.transition="none"),ne(()=>{a.value=!1}))}function S(){a.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(_,P)=>(r(),d("div",{class:"VPLocalNavOutlineDropdown",style:Fe({"--vp-vh":o.value+"px"}),ref_key:"main",ref:c},[e.headers.length>0?(r(),d("button",{key:0,onClick:v,class:T({open:a.value})},[i("span",pa,x(l(Re)(l(n))),1),P[0]||(P[0]=i("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(r(),d("button",{key:1,onClick:S},x(l(n).returnToTopLabel||"Return to top"),1)),b(_e,{name:"flyout"},{default:m(()=>[a.value?(r(),d("div",{key:0,ref_key:"items",ref:s,class:"items",onClick:y},[i("div",ba,[i("a",{class:"top-link",href:"#",onClick:S},x(l(n).returnToTopLabel||"Return to top"),1)]),i("div",ga,[b(ze,{headers:e.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),_a=k(ka,[["__scopeId","data-v-8a42e2b4"]]),ya={class:"container"},$a=["aria-expanded"],Pa={class:"menu-text"},La=p({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t,frontmatter:n}=L(),{hasSidebar:a}=q(),{headers:o}=ha(),{y:c}=De(),s=V(0);z(()=>{s.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ie(()=>{o.value=Le(n.value.outline??t.value.outline)});const f=$(()=>o.value.length===0),v=$(()=>f.value&&!a.value),y=$(()=>({VPLocalNav:!0,"has-sidebar":a.value,empty:f.value,fixed:v.value}));return(S,_)=>l(n).layout!=="home"&&(!v.value||l(c)>=s.value)?(r(),d("div",{key:0,class:T(y.value)},[i("div",ya,[l(a)?(r(),d("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:_[0]||(_[0]=P=>S.$emit("open-menu"))},[_[1]||(_[1]=i("span",{class:"vpi-align-left menu-icon"},null,-1)),i("span",Pa,x(l(t).sidebarMenuLabel||"Menu"),1)],8,$a)):h("",!0),b(_a,{headers:l(o),navHeight:s.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),Sa=k(La,[["__scopeId","data-v-a6f0e41e"]]);function Va(){const e=V(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function a(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const c=re();return U(()=>c.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:a}}const wa={},Ta={class:"VPSwitch",type:"button",role:"switch"},xa={class:"check"},Ma={key:0,class:"icon"};function Na(e,t){return r(),d("button",Ta,[i("span",xa,[e.$slots.default?(r(),d("span",Ma,[u(e.$slots,"default",{},void 0,!0)])):h("",!0)])])}const Aa=k(wa,[["render",Na],["__scopeId","data-v-1d5665e3"]]),Ia=p({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=L(),a=le("toggle-appearance",()=>{t.value=!t.value}),o=V("");return $e(()=>{o.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(c,s)=>(r(),g(Aa,{title:o.value,class:"VPSwitchAppearance","aria-checked":l(t),onClick:l(a)},{default:m(()=>[...s[0]||(s[0]=[i("span",{class:"vpi-sun sun"},null,-1),i("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),Se=k(Ia,[["__scopeId","data-v-5337faa4"]]),Ca={key:0,class:"VPNavBarAppearance"},Ea=p({__name:"VPNavBarAppearance",setup(e){const{site:t}=L();return(n,a)=>l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(r(),d("div",Ca,[b(Se)])):h("",!0)}}),Ba=k(Ea,[["__scopeId","data-v-6c893767"]]),Ve=V();let Ke=!1,ve=0;function Ha(e){const t=V(!1);if(X){!Ke&&Oa(),ve++;const n=U(Ve,a=>{var o,c,s;a===e.el.value||(o=e.el.value)!=null&&o.contains(a)?(t.value=!0,(c=e.onFocus)==null||c.call(e)):(t.value=!1,(s=e.onBlur)==null||s.call(e))});ye(()=>{n(),ve--,ve||Fa()})}return nt(t)}function Oa(){document.addEventListener("focusin",We),Ke=!0,Ve.value=document.activeElement}function Fa(){document.removeEventListener("focusin",We)}function We(){Ve.value=document.activeElement}const Da={class:"VPMenuLink"},ja=["innerHTML"],Ua=p({__name:"VPMenuLink",props:{item:{}},setup(e){const{page:t}=L();return(n,a)=>(r(),d("div",Da,[b(j,{class:T({active:l(K)(l(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon},{default:m(()=>[i("span",{innerHTML:e.item.text},null,8,ja)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),ce=k(Ua,[["__scopeId","data-v-35975db6"]]),qa={class:"VPMenuGroup"},Ga={key:0,class:"title"},Ra=p({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(r(),d("div",qa,[e.text?(r(),d("p",Ga,x(e.text),1)):h("",!0),(r(!0),d(M,null,E(e.items,a=>(r(),d(M,null,["link"in a?(r(),g(ce,{key:0,item:a},null,8,["item"])):h("",!0)],64))),256))]))}}),za=k(Ra,[["__scopeId","data-v-69e747b5"]]),Ka={class:"VPMenu"},Wa={key:0,class:"items"},Ja=p({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(r(),d("div",Ka,[e.items?(r(),d("div",Wa,[(r(!0),d(M,null,E(e.items,a=>(r(),d(M,{key:JSON.stringify(a)},["link"in a?(r(),g(ce,{key:0,item:a},null,8,["item"])):"component"in a?(r(),g(D(a.component),R({key:1,ref_for:!0},a.props),null,16)):(r(),g(za,{key:2,text:a.text,items:a.items},null,8,["text","items"]))],64))),128))])):h("",!0),u(t.$slots,"default",{},void 0,!0)]))}}),Qa=k(Ja,[["__scopeId","data-v-b98bc113"]]),Ya=["aria-expanded","aria-label"],Xa={key:0,class:"text"},Za=["innerHTML"],eo={key:1,class:"vpi-more-horizontal icon"},to={class:"menu"},no=p({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=V(!1),n=V();Ha({el:n,onBlur:a});function a(){t.value=!1}return(o,c)=>(r(),d("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:c[1]||(c[1]=s=>t.value=!0),onMouseleave:c[2]||(c[2]=s=>t.value=!1)},[i("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:c[0]||(c[0]=s=>t.value=!t.value)},[e.button||e.icon?(r(),d("span",Xa,[e.icon?(r(),d("span",{key:0,class:T([e.icon,"option-icon"])},null,2)):h("",!0),e.button?(r(),d("span",{key:1,innerHTML:e.button},null,8,Za)):h("",!0),c[3]||(c[3]=i("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(r(),d("span",eo))],8,Ya),i("div",to,[b(Qa,{items:e.items},{default:m(()=>[u(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),we=k(no,[["__scopeId","data-v-cf11d7a2"]]),ao=["href","aria-label","innerHTML"],oo=p({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(e){const t=e,n=V();z(async()=>{var c;await ne();const o=(c=n.value)==null?void 0:c.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const a=$(()=>typeof t.icon=="object"?t.icon.svg:`<span class="vpi-social-${t.icon}"></span>`);return(o,c)=>(r(),d("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:"noopener",innerHTML:a.value},null,8,ao))}}),so=k(oo,[["__scopeId","data-v-bd121fe5"]]),io={class:"VPSocialLinks"},ro=p({__name:"VPSocialLinks",props:{links:{}},setup(e){return(t,n)=>(r(),d("div",io,[(r(!0),d(M,null,E(e.links,({link:a,icon:o,ariaLabel:c})=>(r(),g(so,{key:a,icon:o,link:a,ariaLabel:c},null,8,["icon","link","ariaLabel"]))),128))]))}}),Te=k(ro,[["__scopeId","data-v-7bc22406"]]),lo={key:0,class:"group translations"},co={class:"trans-title"},uo={key:1,class:"group"},vo={class:"item appearance"},fo={class:"label"},mo={class:"appearance-action"},ho={key:2,class:"group"},po={class:"item social-links"},bo=p({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=L(),{localeLinks:a,currentLang:o}=Z({correspondingLink:!0}),c=$(()=>a.value.length&&o.value.label||t.value.appearance||n.value.socialLinks);return(s,f)=>c.value?(r(),g(we,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:m(()=>[l(a).length&&l(o).label?(r(),d("div",lo,[i("p",co,x(l(o).label),1),(r(!0),d(M,null,E(l(a),v=>(r(),g(ce,{key:v.link,item:v},null,8,["item"]))),128))])):h("",!0),l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(r(),d("div",uo,[i("div",vo,[i("p",fo,x(l(n).darkModeSwitchLabel||"Appearance"),1),i("div",mo,[b(Se)])])])):h("",!0),l(n).socialLinks?(r(),d("div",ho,[i("div",po,[b(Te,{class:"social-links-list",links:l(n).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),go=k(bo,[["__scopeId","data-v-bb2aa2f0"]]),ko=["aria-expanded"],_o=p({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(r(),d("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=a=>t.$emit("click"))},[...n[1]||(n[1]=[i("span",{class:"container"},[i("span",{class:"top"}),i("span",{class:"middle"}),i("span",{class:"bottom"})],-1)])],10,ko))}}),yo=k(_o,[["__scopeId","data-v-e5dd9c1c"]]),$o=["innerHTML"],Po=p({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const{page:t}=L();return(n,a)=>(r(),g(j,{class:T({VPNavBarMenuLink:!0,active:l(K)(l(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:m(()=>[i("span",{innerHTML:e.item.text},null,8,$o)]),_:1},8,["class","href","target","rel","no-icon"]))}}),Lo=k(Po,[["__scopeId","data-v-e56f3d57"]]),So=p({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=L(),a=c=>"component"in c?!1:"link"in c?K(n.value.relativePath,c.link,!!t.item.activeMatch):c.items.some(a),o=$(()=>a(t.item));return(c,s)=>(r(),g(we,{class:T({VPNavBarMenuGroup:!0,active:l(K)(l(n).relativePath,e.item.activeMatch,!!e.item.activeMatch)||o.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),Vo={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},wo=p({__name:"VPNavBarMenu",setup(e){const{theme:t}=L();return(n,a)=>l(t).nav?(r(),d("nav",Vo,[a[0]||(a[0]=i("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(r(!0),d(M,null,E(l(t).nav,o=>(r(),d(M,{key:JSON.stringify(o)},["link"in o?(r(),g(Lo,{key:0,item:o},null,8,["item"])):"component"in o?(r(),g(D(o.component),R({key:1,ref_for:!0},o.props),null,16)):(r(),g(So,{key:2,item:o},null,8,["item"]))],64))),128))])):h("",!0)}}),To=k(wo,[["__scopeId","data-v-dc692963"]]);function xo(e){const{localeIndex:t,theme:n}=L();function a(o){var N,A,H;const c=o.split("."),s=(N=n.value.search)==null?void 0:N.options,f=s&&typeof s=="object",v=f&&((H=(A=s.locales)==null?void 0:A[t.value])==null?void 0:H.translations)||null,y=f&&s.translations||null;let S=v,_=y,P=e;const w=c.pop();for(const F of c){let G=null;const J=P==null?void 0:P[F];J&&(G=P=J);const ue=_==null?void 0:_[F];ue&&(G=_=ue);const de=S==null?void 0:S[F];de&&(G=S=de),J||(P=G),ue||(_=G),de||(S=G)}return(S==null?void 0:S[w])??(_==null?void 0:_[w])??(P==null?void 0:P[w])??""}return a}const Mo=["aria-label"],No={class:"DocSearch-Button-Container"},Ao={class:"DocSearch-Button-Placeholder"},Me=p({__name:"VPNavBarSearchButton",setup(e){const n=xo({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(a,o)=>(r(),d("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":l(n)("button.buttonAriaLabel")},[i("span",No,[o[0]||(o[0]=i("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),i("span",Ao,x(l(n)("button.buttonText")),1)]),o[1]||(o[1]=i("span",{class:"DocSearch-Button-Keys"},[i("kbd",{class:"DocSearch-Button-Key"}),i("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,Mo))}}),Io={class:"VPNavBarSearch"},Co={id:"local-search"},Eo={key:1,id:"docsearch"},Bo=p({__name:"VPNavBarSearch",setup(e){const t=at(()=>ot(()=>import("./VPLocalSearchBox.DtyygpbL.js"),__vite__mapDeps([0,1]))),n=()=>null,{theme:a}=L(),o=V(!1),c=V(!1);z(()=>{});function s(){o.value||(o.value=!0,setTimeout(f,16))}function f(){const _=new Event("keydown");_.key="k",_.metaKey=!0,window.dispatchEvent(_),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||f()},16)}function v(_){const P=_.target,w=P.tagName;return P.isContentEditable||w==="INPUT"||w==="SELECT"||w==="TEXTAREA"}const y=V(!1);he("k",_=>{(_.ctrlKey||_.metaKey)&&(_.preventDefault(),y.value=!0)}),he("/",_=>{v(_)||(_.preventDefault(),y.value=!0)});const S="local";return(_,P)=>{var w;return r(),d("div",Io,[l(S)==="local"?(r(),d(M,{key:0},[y.value?(r(),g(l(t),{key:0,onClose:P[0]||(P[0]=N=>y.value=!1)})):h("",!0),i("div",Co,[b(Me,{onClick:P[1]||(P[1]=N=>y.value=!0)})])],64)):l(S)==="algolia"?(r(),d(M,{key:1},[o.value?(r(),g(l(n),{key:0,algolia:((w=l(a).search)==null?void 0:w.options)??l(a).algolia,onVnodeBeforeMount:P[2]||(P[2]=N=>c.value=!0)},null,8,["algolia"])):h("",!0),c.value?h("",!0):(r(),d("div",Eo,[b(Me,{onClick:s})]))],64)):h("",!0)])}}}),Ho=p({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=L();return(n,a)=>l(t).socialLinks?(r(),g(Te,{key:0,class:"VPNavBarSocialLinks",links:l(t).socialLinks},null,8,["links"])):h("",!0)}}),Oo=k(Ho,[["__scopeId","data-v-0394ad82"]]),Fo=["href","rel","target"],Do=["innerHTML"],jo={key:2},Uo=p({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=L(),{hasSidebar:a}=q(),{currentLang:o}=Z(),c=$(()=>{var v;return typeof n.value.logoLink=="string"?n.value.logoLink:(v=n.value.logoLink)==null?void 0:v.link}),s=$(()=>{var v;return typeof n.value.logoLink=="string"||(v=n.value.logoLink)==null?void 0:v.rel}),f=$(()=>{var v;return typeof n.value.logoLink=="string"||(v=n.value.logoLink)==null?void 0:v.target});return(v,y)=>(r(),d("div",{class:T(["VPNavBarTitle",{"has-sidebar":l(a)}])},[i("a",{class:"title",href:c.value??l(Pe)(l(o).link),rel:s.value,target:f.value},[u(v.$slots,"nav-bar-title-before",{},void 0,!0),l(n).logo?(r(),g(ae,{key:0,class:"logo",image:l(n).logo},null,8,["image"])):h("",!0),l(n).siteTitle?(r(),d("span",{key:1,innerHTML:l(n).siteTitle},null,8,Do)):l(n).siteTitle===void 0?(r(),d("span",jo,x(l(t).title),1)):h("",!0),u(v.$slots,"nav-bar-title-after",{},void 0,!0)],8,Fo)],2))}}),qo=k(Uo,[["__scopeId","data-v-1168a8e4"]]),Go={class:"items"},Ro={class:"title"},zo=p({__name:"VPNavBarTranslations",setup(e){const{theme:t}=L(),{localeLinks:n,currentLang:a}=Z({correspondingLink:!0});return(o,c)=>l(n).length&&l(a).label?(r(),g(we,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:l(t).langMenuLabel||"Change language"},{default:m(()=>[i("div",Go,[i("p",Ro,x(l(a).label),1),(r(!0),d(M,null,E(l(n),s=>(r(),g(ce,{key:s.link,item:s},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Ko=k(zo,[["__scopeId","data-v-88af2de4"]]),Wo={class:"wrapper"},Jo={class:"container"},Qo={class:"title"},Yo={class:"content"},Xo={class:"content-body"},Zo=p({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const t=e,{y:n}=De(),{hasSidebar:a}=q(),{frontmatter:o}=L(),c=V({});return $e(()=>{c.value={"has-sidebar":a.value,home:o.value.layout==="home",top:n.value===0,"screen-open":t.isScreenOpen}}),(s,f)=>(r(),d("div",{class:T(["VPNavBar",c.value])},[i("div",Wo,[i("div",Jo,[i("div",Qo,[b(qo,null,{"nav-bar-title-before":m(()=>[u(s.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":m(()=>[u(s.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),i("div",Yo,[i("div",Xo,[u(s.$slots,"nav-bar-content-before",{},void 0,!0),b(Bo,{class:"search"}),b(To,{class:"menu"}),b(Ko,{class:"translations"}),b(Ba,{class:"appearance"}),b(Oo,{class:"social-links"}),b(go,{class:"extra"}),u(s.$slots,"nav-bar-content-after",{},void 0,!0),b(yo,{class:"hamburger",active:e.isScreenOpen,onClick:f[0]||(f[0]=v=>s.$emit("toggle-screen"))},null,8,["active"])])])])]),f[1]||(f[1]=i("div",{class:"divider"},[i("div",{class:"divider-line"})],-1))],2))}}),es=k(Zo,[["__scopeId","data-v-6aa21345"]]),ts={key:0,class:"VPNavScreenAppearance"},ns={class:"text"},as=p({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=L();return(a,o)=>l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(r(),d("div",ts,[i("p",ns,x(l(n).darkModeSwitchLabel||"Appearance"),1),b(Se)])):h("",!0)}}),os=k(as,[["__scopeId","data-v-b44890b2"]]),ss=["innerHTML"],is=p({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=le("close-screen");return(n,a)=>(r(),g(j,{class:"VPNavScreenMenuLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:l(t)},{default:m(()=>[i("span",{innerHTML:e.item.text},null,8,ss)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),rs=k(is,[["__scopeId","data-v-df37e6dd"]]),ls=["innerHTML"],cs=p({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=le("close-screen");return(n,a)=>(r(),g(j,{class:"VPNavScreenMenuGroupLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:l(t)},{default:m(()=>[i("span",{innerHTML:e.item.text},null,8,ls)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Je=k(cs,[["__scopeId","data-v-3e9c20e4"]]),us={class:"VPNavScreenMenuGroupSection"},ds={key:0,class:"title"},vs=p({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(r(),d("div",us,[e.text?(r(),d("p",ds,x(e.text),1)):h("",!0),(r(!0),d(M,null,E(e.items,a=>(r(),g(Je,{key:a.text,item:a},null,8,["item"]))),128))]))}}),fs=k(vs,[["__scopeId","data-v-8133b170"]]),ms=["aria-controls","aria-expanded"],hs=["innerHTML"],ps=["id"],bs={key:0,class:"item"},gs={key:1,class:"item"},ks={key:2,class:"group"},_s=p({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=V(!1),a=$(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(c,s)=>(r(),d("div",{class:T(["VPNavScreenMenuGroup",{open:n.value}])},[i("button",{class:"button","aria-controls":a.value,"aria-expanded":n.value,onClick:o},[i("span",{class:"button-text",innerHTML:e.text},null,8,hs),s[0]||(s[0]=i("span",{class:"vpi-plus button-icon"},null,-1))],8,ms),i("div",{id:a.value,class:"items"},[(r(!0),d(M,null,E(e.items,f=>(r(),d(M,{key:JSON.stringify(f)},["link"in f?(r(),d("div",bs,[b(Je,{item:f},null,8,["item"])])):"component"in f?(r(),d("div",gs,[(r(),g(D(f.component),R({ref_for:!0},f.props,{"screen-menu":""}),null,16))])):(r(),d("div",ks,[b(fs,{text:f.text,items:f.items},null,8,["text","items"])]))],64))),128))],8,ps)],2))}}),ys=k(_s,[["__scopeId","data-v-b9ab8c58"]]),$s={key:0,class:"VPNavScreenMenu"},Ps=p({__name:"VPNavScreenMenu",setup(e){const{theme:t}=L();return(n,a)=>l(t).nav?(r(),d("nav",$s,[(r(!0),d(M,null,E(l(t).nav,o=>(r(),d(M,{key:JSON.stringify(o)},["link"in o?(r(),g(rs,{key:0,item:o},null,8,["item"])):"component"in o?(r(),g(D(o.component),R({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(r(),g(ys,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),Ls=p({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=L();return(n,a)=>l(t).socialLinks?(r(),g(Te,{key:0,class:"VPNavScreenSocialLinks",links:l(t).socialLinks},null,8,["links"])):h("",!0)}}),Ss={class:"list"},Vs=p({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=Z({correspondingLink:!0}),a=V(!1);function o(){a.value=!a.value}return(c,s)=>l(t).length&&l(n).label?(r(),d("div",{key:0,class:T(["VPNavScreenTranslations",{open:a.value}])},[i("button",{class:"title",onClick:o},[s[0]||(s[0]=i("span",{class:"vpi-languages icon lang"},null,-1)),B(" "+x(l(n).label)+" ",1),s[1]||(s[1]=i("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),i("ul",Ss,[(r(!0),d(M,null,E(l(t),f=>(r(),d("li",{key:f.link,class:"item"},[b(j,{class:"link",href:f.link},{default:m(()=>[B(x(f.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),ws=k(Vs,[["__scopeId","data-v-858fe1a4"]]),Ts={class:"container"},xs=p({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=V(null),n=je(X?document.body:null);return(a,o)=>(r(),g(_e,{name:"fade",onEnter:o[0]||(o[0]=c=>n.value=!0),onAfterLeave:o[1]||(o[1]=c=>n.value=!1)},{default:m(()=>[e.open?(r(),d("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t,id:"VPNavScreen"},[i("div",Ts,[u(a.$slots,"nav-screen-content-before",{},void 0,!0),b(Ps,{class:"menu"}),b(ws,{class:"translations"}),b(os,{class:"appearance"}),b(Ls,{class:"social-links"}),u(a.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),Ms=k(xs,[["__scopeId","data-v-f2779853"]]),Ns={key:0,class:"VPNav"},As=p({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:a}=Va(),{frontmatter:o}=L(),c=$(()=>o.value.navbar!==!1);return Ue("close-screen",n),se(()=>{X&&document.documentElement.classList.toggle("hide-nav",!c.value)}),(s,f)=>c.value?(r(),d("header",Ns,[b(es,{"is-screen-open":l(t),onToggleScreen:l(a)},{"nav-bar-title-before":m(()=>[u(s.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":m(()=>[u(s.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":m(()=>[u(s.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":m(()=>[u(s.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),b(Ms,{open:l(t)},{"nav-screen-content-before":m(()=>[u(s.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":m(()=>[u(s.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),Is=k(As,[["__scopeId","data-v-ae24b3ad"]]),Cs=["role","tabindex"],Es={key:1,class:"items"},Bs=p({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:a,isLink:o,isActiveLink:c,hasActiveLink:s,hasChildren:f,toggle:v}=xt($(()=>t.item)),y=$(()=>f.value?"section":"div"),S=$(()=>o.value?"a":"div"),_=$(()=>f.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),P=$(()=>o.value?void 0:"button"),w=$(()=>[[`level-${t.depth}`],{collapsible:a.value},{collapsed:n.value},{"is-link":o.value},{"is-active":c.value},{"has-active":s.value}]);function N(H){"key"in H&&H.key!=="Enter"||!t.item.link&&v()}function A(){t.item.link&&v()}return(H,F)=>{const G=W("VPSidebarItem",!0);return r(),g(D(y.value),{class:T(["VPSidebarItem",w.value])},{default:m(()=>[e.item.text?(r(),d("div",R({key:0,class:"item",role:P.value},st(e.item.items?{click:N,keydown:N}:{},!0),{tabindex:e.item.items&&0}),[F[1]||(F[1]=i("div",{class:"indicator"},null,-1)),e.item.link?(r(),g(j,{key:0,tag:S.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:m(()=>[(r(),g(D(_.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(r(),g(D(_.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(r(),d("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:A,onKeydown:it(A,["enter"]),tabindex:"0"},[...F[0]||(F[0]=[i("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):h("",!0)],16,Cs)):h("",!0),e.item.items&&e.item.items.length?(r(),d("div",Es,[e.depth<5?(r(!0),d(M,{key:0},E(e.item.items,J=>(r(),g(G,{key:J.text,item:J,depth:e.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),Hs=k(Bs,[["__scopeId","data-v-b3fd67f8"]]),Os=p({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=V(!0);let n=null;return z(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),rt(()=>{n!=null&&(clearTimeout(n),n=null)}),(a,o)=>(r(!0),d(M,null,E(e.items,c=>(r(),d("div",{key:c.text,class:T(["group",{"no-transition":t.value}])},[b(Hs,{item:c,depth:0},null,8,["item"])],2))),128))}}),Fs=k(Os,[["__scopeId","data-v-c40bc020"]]),Ds={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},js=p({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=q(),a=e,o=V(null),c=je(X?document.body:null);U([a,o],()=>{var f;a.open?(c.value=!0,(f=o.value)==null||f.focus()):c.value=!1},{immediate:!0,flush:"post"});const s=V(0);return U(t,()=>{s.value+=1},{deep:!0}),(f,v)=>l(n)?(r(),d("aside",{key:0,class:T(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:v[0]||(v[0]=qe(()=>{},["stop"]))},[v[2]||(v[2]=i("div",{class:"curtain"},null,-1)),i("nav",Ds,[v[1]||(v[1]=i("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),u(f.$slots,"sidebar-nav-before",{},void 0,!0),(r(),g(Fs,{items:l(t),key:s.value},null,8,["items"])),u(f.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),Us=k(js,[["__scopeId","data-v-319d5ca6"]]),qs=p({__name:"VPSkipLink",setup(e){const{theme:t}=L(),n=re(),a=V();U(()=>n.path,()=>a.value.focus());function o({target:c}){const s=document.getElementById(decodeURIComponent(c.hash).slice(1));if(s){const f=()=>{s.removeAttribute("tabindex"),s.removeEventListener("blur",f)};s.setAttribute("tabindex","-1"),s.addEventListener("blur",f),s.focus(),window.scrollTo(0,0)}}return(c,s)=>(r(),d(M,null,[i("span",{ref_key:"backToTop",ref:a,tabindex:"-1"},null,512),i("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o},x(l(t).skipToContentLabel||"Skip to content"),1)],64))}}),Gs=k(qs,[["__scopeId","data-v-0b0ada53"]]),Rs=p({__name:"Layout",setup(e){const{isOpen:t,open:n,close:a}=q(),o=re();U(()=>o.path,a),Tt(t,a);const{frontmatter:c}=L(),s=lt(),f=$(()=>!!s["home-hero-image"]);return Ue("hero-image-slot-exists",f),(v,y)=>{const S=W("Content");return l(c).layout!==!1?(r(),d("div",{key:0,class:T(["Layout",l(c).pageClass])},[u(v.$slots,"layout-top",{},void 0,!0),b(Gs),b(ht,{class:"backdrop",show:l(t),onClick:l(a)},null,8,["show","onClick"]),b(Is,null,{"nav-bar-title-before":m(()=>[u(v.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":m(()=>[u(v.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":m(()=>[u(v.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":m(()=>[u(v.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":m(()=>[u(v.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":m(()=>[u(v.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),b(Sa,{open:l(t),onOpenMenu:l(n)},null,8,["open","onOpenMenu"]),b(Us,{open:l(t)},{"sidebar-nav-before":m(()=>[u(v.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":m(()=>[u(v.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),b(ca,null,{"page-top":m(()=>[u(v.$slots,"page-top",{},void 0,!0)]),"page-bottom":m(()=>[u(v.$slots,"page-bottom",{},void 0,!0)]),"not-found":m(()=>[u(v.$slots,"not-found",{},void 0,!0)]),"home-hero-before":m(()=>[u(v.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":m(()=>[u(v.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":m(()=>[u(v.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":m(()=>[u(v.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":m(()=>[u(v.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":m(()=>[u(v.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":m(()=>[u(v.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":m(()=>[u(v.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":m(()=>[u(v.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":m(()=>[u(v.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":m(()=>[u(v.$slots,"doc-before",{},void 0,!0)]),"doc-after":m(()=>[u(v.$slots,"doc-after",{},void 0,!0)]),"doc-top":m(()=>[u(v.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":m(()=>[u(v.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":m(()=>[u(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":m(()=>[u(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":m(()=>[u(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":m(()=>[u(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":m(()=>[u(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":m(()=>[u(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),b(ma),u(v.$slots,"layout-bottom",{},void 0,!0)],2)):(r(),g(S,{key:1}))}}}),zs=k(Rs,[["__scopeId","data-v-5d98c3a5"]]),Ks={Layout:zs,enhanceApp:({app:e})=>{e.component("Badge",vt)}},Ws={id:"main-content",class:"tuning-landing"},Js={class:"hero","aria-labelledby":"page-title"},Qs={class:"container hero-grid"},Ys={class:"hero-copy"},Xs={class:"hero-actions"},Zs=["href"],ei={class:"known-term-row"},ti={class:"signal-board","aria-label":"Example symptom paths"},ni={class:"signal-list"},ai=["href"],oi=["href"],si=["href"],ii={class:"section",id:"symptoms","aria-labelledby":"symptoms-title"},ri={class:"container"},li={class:"symptom-grid"},ci={class:"symptom"},ui=["href"],di={class:"symptom"},vi=["href"],fi={class:"symptom"},mi=["href"],hi={class:"symptom"},pi=["href"],bi={class:"symptom"},gi=["href"],ki=p({__name:"TuningLanding",setup(e){const t=ct(),n=V(""),a={memory:"memory-model","memory-model":"memory-model",spill:"memory-model","spark.memory.fraction":"memory-model",shuffle:"shuffle","spark.sql.shuffle.partitions":"shuffle",joins:"joins",join:"joins","spark.sql.autobroadcastjointhreshold":"joins",aqe:"aqe","spark.sql.adaptive.enabled":"aqe",config:"config"};function o(){const c=n.value.trim().toLowerCase(),s=a[c]||"config";t.go(O(`/tuning-reference/${s}`))}return(c,s)=>(r(),d("main",Ws,[i("section",Js,[i("div",Qs,[i("div",Ys,[s[6]||(s[6]=i("p",{class:"eyebrow"},"Practical mechanics, stable references",-1)),s[7]||(s[7]=i("h1",{id:"page-title"},"Spark tuning reference",-1)),s[8]||(s[8]=i("p",{class:"hero-summary"}," Move from a job symptom to the Spark mechanics and settings that can change its outcome without treating a tuning guess as evidence. ",-1)),i("div",Xs,[i("a",{class:"button button-primary",href:l(O)("/tuning-reference/intro")},[...s[1]||(s[1]=[B("Browse the full reference ",-1),i("span",{class:"arrow","aria-hidden":"true"},"→",-1)])],8,Zs),s[5]||(s[5]=i("a",{class:"button button-secondary",href:"#symptoms"},"Choose a symptom",-1)),i("form",{class:"known-term",onSubmit:qe(o,["prevent"])},[s[3]||(s[3]=i("label",{for:"known-term-input"},"Know the term or config key?",-1)),i("div",ei,[ut(i("input",{id:"known-term-input","onUpdate:modelValue":s[0]||(s[0]=f=>n.value=f),name:"term",type:"search",list:"known-term-options",placeholder:"e.g. spark.sql.shuffle.partitions",autocomplete:"off"},null,512),[[dt,n.value]]),s[2]||(s[2]=i("button",{class:"button button-secondary",type:"submit"},"Jump to topic",-1))]),s[4]||(s[4]=xe('<small data-v-5d65fdb9>Known routes: memory, shuffle, joins, AQE, and config. Other terms open the configuration reference.</small><datalist id="known-term-options" data-v-5d65fdb9><option value="memory" data-v-5d65fdb9></option><option value="shuffle" data-v-5d65fdb9></option><option value="joins" data-v-5d65fdb9></option><option value="AQE" data-v-5d65fdb9></option><option value="config" data-v-5d65fdb9></option><option value="spark.memory.fraction" data-v-5d65fdb9></option><option value="spark.sql.shuffle.partitions" data-v-5d65fdb9></option><option value="spark.sql.adaptive.enabled" data-v-5d65fdb9></option><option value="spark.sql.autoBroadcastJoinThreshold" data-v-5d65fdb9></option></datalist>',2))],32)])]),i("aside",ti,[s[12]||(s[12]=i("div",{class:"board-label"},"evidence → mechanic → lever",-1)),i("ul",ni,[i("li",null,[i("a",{class:"signal-link",href:l(O)("/tuning-reference/memory-model")},[...s[9]||(s[9]=[i("span",{class:"signal-marker","aria-hidden":"true"},null,-1),i("span",{class:"signal-title"},"Executor memory pressure",-1),i("span",{class:"signal-destination"},"#memory-model",-1)])],8,ai)]),i("li",null,[i("a",{class:"signal-link",href:l(O)("/tuning-reference/shuffle")},[...s[10]||(s[10]=[i("span",{class:"signal-marker","aria-hidden":"true"},null,-1),i("span",{class:"signal-title"},"Slow, wide stages",-1),i("span",{class:"signal-destination"},"#shuffle",-1)])],8,oi)]),i("li",null,[i("a",{class:"signal-link",href:l(O)("/tuning-reference/joins")},[...s[11]||(s[11]=[i("span",{class:"signal-marker","aria-hidden":"true"},null,-1),i("span",{class:"signal-title"},"Join strategy drift",-1),i("span",{class:"signal-destination"},"#joins",-1)])],8,si)])])])])]),i("section",ii,[i("div",ri,[s[23]||(s[23]=i("div",{class:"section-heading"},[i("h2",{id:"symptoms-title"},"Symptoms, mapped to the right lever"),i("p",null,"Each path stays on the canonical reference document, so existing links and saved anchors continue to work."),i("p",{class:"decision-note"},[i("strong",null,"How to use this:"),B(" SparkForensics reads your Spark event log and surfaces evidence; this reference explains the mechanics and settings behind it. Diagnose the symptom, change one informed lever, then validate against the next run's evidence. Confirm behavior and defaults against your deployed Spark version and distribution. ")])],-1)),i("div",li,[i("article",ci,[s[14]||(s[14]=i("div",null,[i("h3",null,"Spill or GC pressure"),i("p",null,"Trace executor memory, object lifetime, and the trade-offs behind changing memory settings.")],-1)),i("a",{href:l(O)("/tuning-reference/memory-model")},[...s[13]||(s[13]=[B("Open memory model ",-1),i("span",{"aria-hidden":"true"},"→",-1)])],8,ui)]),i("article",di,[s[16]||(s[16]=i("div",null,[i("h3",null,"Shuffle-heavy stages"),i("p",null,"Understand write/read costs, partition size, and why moving data becomes the bottleneck.")],-1)),i("a",{href:l(O)("/tuning-reference/shuffle")},[...s[15]||(s[15]=[B("Open shuffle guide ",-1),i("span",{"aria-hidden":"true"},"→",-1)])],8,vi)]),i("article",fi,[s[18]||(s[18]=i("div",null,[i("h3",null,"Slow or skewed joins"),i("p",null,"Compare join mechanics before changing broadcast thresholds or reshaping a plan.")],-1)),i("a",{href:l(O)("/tuning-reference/joins")},[...s[17]||(s[17]=[B("Open join optimization ",-1),i("span",{"aria-hidden":"true"},"→",-1)])],8,mi)]),i("article",hi,[s[20]||(s[20]=i("div",null,[i("h3",null,"Plan adapts poorly"),i("p",null,"Use AQE's runtime choices as an inspectable mechanism, not a checkbox to enable blindly.")],-1)),i("a",{href:l(O)("/tuning-reference/aqe")},[...s[19]||(s[19]=[B("Open AQE guide ",-1),i("span",{"aria-hidden":"true"},"→",-1)])],8,pi)]),i("article",bi,[s[22]||(s[22]=i("div",null,[i("h3",null,"Need the exact setting"),i("p",null,"Check a setting's scope, default, and interaction before applying it to a cluster.")],-1)),i("a",{href:l(O)("/tuning-reference/config")},[...s[21]||(s[21]=[B("Open config reference ",-1),i("span",{"aria-hidden":"true"},"→",-1)])],8,gi)])])])]),s[24]||(s[24]=xe('<section class="section workflow" aria-labelledby="workflow-title" data-v-5d65fdb9><div class="container workflow-grid" data-v-5d65fdb9><div class="workflow-copy" data-v-5d65fdb9><h2 id="workflow-title" data-v-5d65fdb9>Let SparkForensics surface the evidence. Use this reference to reason about it.</h2><p data-v-5d65fdb9>The two tools stay deliberately separate: SparkForensics reads the event log; this static reference explains the mechanics and settings behind what you find.</p></div><ol class="steps" data-v-5d65fdb9><li data-v-5d65fdb9><span class="step-label" data-v-5d65fdb9>Observe</span><div data-v-5d65fdb9><strong data-v-5d65fdb9>Read the stage or executor behavior</strong><span data-v-5d65fdb9>Start with the event log, metrics, and plan details Spark already produces.</span></div></li><li data-v-5d65fdb9><span class="step-label" data-v-5d65fdb9>Explain</span><div data-v-5d65fdb9><strong data-v-5d65fdb9>Name the mechanism at work</strong><span data-v-5d65fdb9>Use the stable reference anchors to connect symptoms to memory, shuffle, joins, AQE, or configuration.</span></div></li><li data-v-5d65fdb9><span class="step-label" data-v-5d65fdb9>Test</span><div data-v-5d65fdb9><strong data-v-5d65fdb9>Change one informed lever</strong><span data-v-5d65fdb9>Make a measured change, then compare the evidence again rather than carrying a tuning superstition forward.</span></div></li></ol></div></section>',1))]))}}),_i=k(ki,[["__scopeId","data-v-5d65fdb9"]]),Ne="citation-chip",Ae="citation-popover",yi=150;let I=null,C=null,Q=!1,te=null,Ie=!1;function $i(){const e=new Map;return document.querySelectorAll("section.footnotes li.footnote-item[id]").forEach(t=>{const n=t.cloneNode(!0);n.querySelectorAll("a.footnote-backref").forEach(o=>o.remove());const a=n.querySelector("a[href]");e.set(t.id,{href:a?a.getAttribute("href"):null,title:(n.textContent??"").trim()})}),e}function oe(){te!==null&&(clearTimeout(te),te=null)}function ke(){oe(),te=setTimeout(()=>{Q||Y()},yi)}function Y(){oe(),I==null||I.remove(),I=null,C==null||C.removeAttribute("aria-describedby"),C==null||C.setAttribute("aria-expanded","false"),C=null,Q=!1}function Pi(e,t){const n=t.getBoundingClientRect(),a=6,{width:o,height:c}=e.getBoundingClientRect();let s=n.bottom+a;s+c>window.innerHeight-8&&(s=n.top-c-a);const f=window.innerWidth-o-8;e.style.top=`${Math.max(8,s)}px`,e.style.left=`${Math.min(Math.max(8,n.left),Math.max(8,f))}px`}function fe(e,t,n){oe();const a=C===e;if(a||C==null||C.setAttribute("aria-expanded","false"),I||(I=document.createElement("div"),I.id=Ae,I.className="citation-popover",I.setAttribute("role","tooltip"),I.addEventListener("mouseenter",oe),I.addEventListener("mouseleave",ke),document.body.appendChild(I)),I.replaceChildren(),t.href){const o=document.createElement("a");o.href=t.href,o.target="_blank",o.rel="noreferrer",o.textContent=t.title,I.appendChild(o)}else I.textContent=t.title;e.setAttribute("aria-describedby",Ae),e.setAttribute("aria-expanded","true"),C=e,n?Q=!0:a||(Q=!1),Pi(I,e)}function Li(e,t){if(e.classList.contains(Ne))return;const n=(e.getAttribute("href")??"").replace(/^#/,""),a=t.get(n);if(!a)return;e.removeAttribute("href"),e.setAttribute("role","button"),e.tabIndex=0,e.classList.add(Ne),e.setAttribute("aria-haspopup","true"),e.setAttribute("aria-expanded","false"),e.textContent=n.replace(/^fn/,"");const o=()=>{C===e&&Q?Y():fe(e,a,!0)};e.addEventListener("mouseenter",()=>fe(e,a,!1)),e.addEventListener("mouseleave",ke),e.addEventListener("focus",()=>fe(e,a,!1)),e.addEventListener("blur",ke),e.addEventListener("click",o),e.addEventListener("keydown",c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),o())})}function Si(){Ie||(Ie=!0,document.addEventListener("click",e=>{if(!Q||!C)return;const t=e.target;C.contains(t)||I!=null&&I.contains(t)||Y()}),document.addEventListener("keydown",e=>{e.key==="Escape"&&Y()}))}function Ce(){Y(),Si();const e=$i();document.querySelectorAll("sup.footnote-ref > a[href]").forEach(t=>{Li(t,e)})}const Qe="shuffle-works-theme";function Vi(){try{const e=window.localStorage.getItem(Qe);return e==="light"||e==="dark"?e:null}catch{return null}}function Ee(e){const t=e?"dark":"light";try{window.localStorage.setItem(Qe,t)}catch{}document.documentElement.dataset.theme=t}const Ti={extends:Ks,enhanceApp({app:e,router:t}){if(e.component("TuningLanding",_i),!X)return;t.onAfterRouteChange=()=>{ne(()=>Ce())};const n=e.mount.bind(e);e.mount=(...a)=>{const o=n(...a);return ne(()=>Ce()),o},e.runWithContext(()=>{const{isDark:a}=Be(),o=Vi();o&&(a.value=o==="dark"),Ee(a.value),U(a,v=>Ee(v)),new MutationObserver(()=>{const v=document.documentElement.dataset.theme;if(v==="light"||v==="dark"){const y=v==="dark";a.value!==y&&(a.value=y)}}).observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]});const s=()=>{document.querySelectorAll(".VPNavBarAppearance, .VPNavScreenAppearance, .VPNavBarExtra .appearance-action").forEach(v=>{v.hasAttribute("data-shuffle-page-controls")||v.setAttribute("data-shuffle-page-controls","")})};s(),new MutationObserver(s).observe(document.documentElement,{childList:!0,subtree:!0})})}};export{xo as c,Ti as t,L as u};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.DOBbPfix.js","assets/chunks/framework.DSg0KOwT.js"])))=>i.map(i=>d[i]);
2
+ import{d as p,c as d,r as u,n as T,o as r,a as B,t as x,b as g,w as m,T as _e,e as h,_ as k,u as Be,i as Ye,f as Xe,g as O,h as $,j as i,k as l,l as K,m as me,p as V,q as U,s as se,v as z,x as ye,y as $e,z as Ze,A as et,F as M,B as E,C as W,D as ie,E as b,G as He,H as D,I as Oe,J as re,K as R,L as le,M as tt,N as Fe,O as he,P as ne,Q as De,R as X,S as nt,U as at,V as ot,W as je,X as Ue,Y as st,Z as it,$ as rt,a0 as qe,a1 as lt,a2 as ct,a3 as ut,a4 as dt,a5 as xe}from"./framework.DSg0KOwT.js";const vt=p({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(r(),d("span",{class:T(["VPBadge",e.type])},[u(t.$slots,"default",{},()=>[B(x(e.text),1)])],2))}}),ft={key:0,class:"VPBackdrop"},mt=p({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(r(),g(_e,{name:"fade"},{default:m(()=>[e.show?(r(),d("div",ft)):h("",!0)]),_:1}))}}),ht=k(mt,[["__scopeId","data-v-c79a1216"]]),L=Be;function pt(e,t){let n,a=!1;return()=>{n&&clearTimeout(n),a?n=setTimeout(e,t):(e(),(a=!0)&&setTimeout(()=>a=!1,t))}}function pe(e){return e.startsWith("/")?e:`/${e}`}function Pe(e){const{pathname:t,search:n,hash:a,protocol:o}=new URL(e,"http://a.com");if(Ye(e)||e.startsWith("#")||!o.startsWith("http")||!Xe(t))return e;const{site:c}=L(),s=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,c.value.cleanUrls?"":".html")}${n}${a}`);return O(s)}function Z({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:a,theme:o,hash:c}=L(),s=$(()=>{var v,y;return{label:(v=t.value.locales[n.value])==null?void 0:v.label,link:((y=t.value.locales[n.value])==null?void 0:y.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:$(()=>Object.entries(t.value.locales).flatMap(([v,y])=>s.value.label===y.label?[]:{text:y.label,link:bt(y.link||(v==="root"?"/":`/${v}/`),o.value.i18nRouting!==!1&&e,a.value.relativePath.slice(s.value.link.length-1),!t.value.cleanUrls)+c.value})),currentLang:s}}function bt(e,t,n,a){return t?e.replace(/\/$/,"")+pe(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,a?".html":"")):e}const gt={class:"NotFound"},kt={class:"code"},_t={class:"title"},yt={class:"quote"},$t={class:"action"},Pt=["href","aria-label"],Lt=p({__name:"NotFound",setup(e){const{theme:t}=L(),{currentLang:n}=Z();return(a,o)=>{var c,s,f,v,y;return r(),d("div",gt,[i("p",kt,x(((c=l(t).notFound)==null?void 0:c.code)??"404"),1),i("h1",_t,x(((s=l(t).notFound)==null?void 0:s.title)??"PAGE NOT FOUND"),1),o[0]||(o[0]=i("div",{class:"divider"},null,-1)),i("blockquote",yt,x(((f=l(t).notFound)==null?void 0:f.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),i("div",$t,[i("a",{class:"link",href:l(O)(l(n).link),"aria-label":((v=l(t).notFound)==null?void 0:v.linkLabel)??"go to home"},x(((y=l(t).notFound)==null?void 0:y.linkText)??"Take me home"),9,Pt)])])}}}),St=k(Lt,[["__scopeId","data-v-d6be1790"]]);function Ge(e,t){if(Array.isArray(e))return ee(e);if(e==null)return[];t=pe(t);const n=Object.keys(e).sort((o,c)=>c.split("/").length-o.split("/").length).find(o=>t.startsWith(pe(o))),a=n?e[n]:[];return Array.isArray(a)?ee(a):ee(a.items,a.base)}function Vt(e){const t=[];let n=0;for(const a in e){const o=e[a];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function wt(e){const t=[];function n(a){for(const o of a)o.text&&o.link&&t.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&n(o.items)}return n(e),t}function be(e,t){return Array.isArray(t)?t.some(n=>be(e,n)):K(e,t.link)?!0:t.items?be(e,t.items):!1}function ee(e,t){return[...e].map(n=>{const a={...n},o=a.base||t;return o&&a.link&&(a.link=o+a.link),a.items&&(a.items=ee(a.items,o)),a})}function q(){const{frontmatter:e,page:t,theme:n}=L(),a=me("(min-width: 960px)"),o=V(!1),c=$(()=>{const A=n.value.sidebar,H=t.value.relativePath;return A?Ge(A,H):[]}),s=V(c.value);U(c,(A,H)=>{JSON.stringify(A)!==JSON.stringify(H)&&(s.value=c.value)});const f=$(()=>e.value.sidebar!==!1&&s.value.length>0&&e.value.layout!=="home"),v=$(()=>y?e.value.aside==null?n.value.aside==="left":e.value.aside==="left":!1),y=$(()=>e.value.layout==="home"?!1:e.value.aside!=null?!!e.value.aside:n.value.aside!==!1),S=$(()=>f.value&&a.value),_=$(()=>f.value?Vt(s.value):[]);function P(){o.value=!0}function w(){o.value=!1}function N(){o.value?w():P()}return{isOpen:o,sidebar:s,sidebarGroups:_,hasSidebar:f,hasAside:y,leftAside:v,isSidebarEnabled:S,open:P,close:w,toggle:N}}function Tt(e,t){let n;se(()=>{n=e.value?document.activeElement:void 0}),z(()=>{window.addEventListener("keyup",a)}),ye(()=>{window.removeEventListener("keyup",a)});function a(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function xt(e){const{page:t,hash:n}=L(),a=V(!1),o=$(()=>e.value.collapsed!=null),c=$(()=>!!e.value.link),s=V(!1),f=()=>{s.value=K(t.value.relativePath,e.value.link)};U([t,e,n],f),z(f);const v=$(()=>s.value?!0:e.value.items?be(t.value.relativePath,e.value.items):!1),y=$(()=>!!(e.value.items&&e.value.items.length));se(()=>{a.value=!!(o.value&&e.value.collapsed)}),$e(()=>{(s.value||v.value)&&(a.value=!1)});function S(){o.value&&(a.value=!a.value)}return{collapsed:a,collapsible:o,isLink:c,isActiveLink:s,hasActiveLink:v,hasChildren:y,toggle:S}}function Mt(){const{hasSidebar:e}=q(),t=me("(min-width: 960px)"),n=me("(min-width: 1280px)");return{isAsideEnabled:$(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const Nt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,ge=[];function Re(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function Le(e){const t=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const a=Number(n.tagName[1]);return{element:n,title:At(n),link:"#"+n.id,level:a}});return It(t,e)}function At(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(Nt.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function It(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[a,o]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return Bt(e,a,o)}function Ct(e,t){const{isAsideEnabled:n}=Mt(),a=pt(c,100);let o=null;z(()=>{requestAnimationFrame(c),window.addEventListener("scroll",a)}),Ze(()=>{s(location.hash)}),ye(()=>{window.removeEventListener("scroll",a)});function c(){if(!n.value)return;const f=window.scrollY,v=window.innerHeight,y=document.body.offsetHeight,S=Math.abs(f+v-y)<1,_=ge.map(({element:w,link:N})=>({link:N,top:Et(w)})).filter(({top:w})=>!Number.isNaN(w)).sort((w,N)=>w.top-N.top);if(!_.length){s(null);return}if(f<1){s(null);return}if(S){s(_[_.length-1].link);return}let P=null;for(const{link:w,top:N}of _){if(N>f+et()+4)break;P=w}s(P)}function s(f){o&&o.classList.remove("active"),f==null?o=null:o=e.value.querySelector(`a[href="${decodeURIComponent(f)}"]`);const v=o;v?(v.classList.add("active"),t.value.style.top=v.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function Et(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function Bt(e,t,n){ge.length=0;const a=[],o=[];return e.forEach(c=>{const s={...c,children:[]};let f=o[o.length-1];for(;f&&f.level>=s.level;)o.pop(),f=o[o.length-1];if(s.element.classList.contains("ignore-header")||f&&"shouldIgnore"in f){o.push({level:s.level,shouldIgnore:!0});return}s.level>n||s.level<t||(ge.push({element:s.element,link:s.link}),f?f.children.push(s):a.push(s),o.push(s))}),a}const Ht=["href","title"],Ot=p({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(e){function t({target:n}){const a=n.href.split("#")[1],o=document.getElementById(decodeURIComponent(a));o==null||o.focus({preventScroll:!0})}return(n,a)=>{const o=W("VPDocOutlineItem",!0);return r(),d("ul",{class:T(["VPDocOutlineItem",e.root?"root":"nested"])},[(r(!0),d(M,null,E(e.headers,({children:c,link:s,title:f})=>(r(),d("li",null,[i("a",{class:"outline-link",href:s,onClick:t,title:f},x(f),9,Ht),c!=null&&c.length?(r(),g(o,{key:0,headers:c},null,8,["headers"])):h("",!0)]))),256))],2)}}}),ze=k(Ot,[["__scopeId","data-v-b933a997"]]),Ft={class:"content"},Dt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},jt=p({__name:"VPDocAsideOutline",setup(e){const{frontmatter:t,theme:n}=L(),a=He([]);ie(()=>{a.value=Le(t.value.outline??n.value.outline)});const o=V(),c=V();return Ct(o,c),(s,f)=>(r(),d("nav",{"aria-labelledby":"doc-outline-aria-label",class:T(["VPDocAsideOutline",{"has-outline":a.value.length>0}]),ref_key:"container",ref:o},[i("div",Ft,[i("div",{class:"outline-marker",ref_key:"marker",ref:c},null,512),i("div",Dt,x(l(Re)(l(n))),1),b(ze,{headers:a.value,root:!0},null,8,["headers"])])],2))}}),Ut=k(jt,[["__scopeId","data-v-a5bbad30"]]),qt={class:"VPDocAsideCarbonAds"},Gt=p({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,a)=>(r(),d("div",qt,[b(l(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),Rt={class:"VPDocAside"},zt=p({__name:"VPDocAside",setup(e){const{theme:t}=L();return(n,a)=>(r(),d("div",Rt,[u(n.$slots,"aside-top",{},void 0,!0),u(n.$slots,"aside-outline-before",{},void 0,!0),b(Ut),u(n.$slots,"aside-outline-after",{},void 0,!0),a[0]||(a[0]=i("div",{class:"spacer"},null,-1)),u(n.$slots,"aside-ads-before",{},void 0,!0),l(t).carbonAds?(r(),g(Gt,{key:0,"carbon-ads":l(t).carbonAds},null,8,["carbon-ads"])):h("",!0),u(n.$slots,"aside-ads-after",{},void 0,!0),u(n.$slots,"aside-bottom",{},void 0,!0)]))}}),Kt=k(zt,[["__scopeId","data-v-3f215769"]]);function Wt(){const{theme:e,page:t}=L();return $(()=>{const{text:n="Edit this page",pattern:a=""}=e.value.editLink||{};let o;return typeof a=="function"?o=a(t.value):o=a.replace(/:path/g,t.value.filePath),{url:o,text:n}})}function Jt(){const{page:e,theme:t,frontmatter:n}=L();return $(()=>{var y,S,_,P,w,N,A,H;const a=Ge(t.value.sidebar,e.value.relativePath),o=wt(a),c=Qt(o,F=>F.link.replace(/[?#].*$/,"")),s=c.findIndex(F=>K(e.value.relativePath,F.link)),f=((y=t.value.docFooter)==null?void 0:y.prev)===!1&&!n.value.prev||n.value.prev===!1,v=((S=t.value.docFooter)==null?void 0:S.next)===!1&&!n.value.next||n.value.next===!1;return{prev:f?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??((_=c[s-1])==null?void 0:_.docFooterText)??((P=c[s-1])==null?void 0:P.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((w=c[s-1])==null?void 0:w.link)},next:v?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((N=c[s+1])==null?void 0:N.docFooterText)??((A=c[s+1])==null?void 0:A.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((H=c[s+1])==null?void 0:H.link)}}})}function Qt(e,t){const n=new Set;return e.filter(a=>{const o=t(a);return n.has(o)?!1:n.add(o)})}const j=p({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=$(()=>t.tag??(t.href?"a":"span")),a=$(()=>t.href&&Oe.test(t.href)||t.target==="_blank");return(o,c)=>(r(),g(D(n.value),{class:T(["VPLink",{link:e.href,"vp-external-link-icon":a.value,"no-icon":e.noIcon}]),href:e.href?l(Pe)(e.href):void 0,target:e.target??(a.value?"_blank":void 0),rel:e.rel??(a.value?"noreferrer":void 0)},{default:m(()=>[u(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Yt={class:"VPLastUpdated"},Xt=["datetime"],Zt=p({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:a}=L(),o=$(()=>new Date(n.value.lastUpdated)),c=$(()=>o.value.toISOString()),s=V("");return z(()=>{se(()=>{var f,v,y;s.value=new Intl.DateTimeFormat((v=(f=t.value.lastUpdated)==null?void 0:f.formatOptions)!=null&&v.forceLocale?a.value:void 0,((y=t.value.lastUpdated)==null?void 0:y.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(f,v)=>{var y;return r(),d("p",Yt,[B(x(((y=l(t).lastUpdated)==null?void 0:y.text)||l(t).lastUpdatedText||"Last updated")+": ",1),i("time",{datetime:c.value},x(s.value),9,Xt)])}}}),en=k(Zt,[["__scopeId","data-v-e98dd255"]]),tn={key:0,class:"VPDocFooter"},nn={key:0,class:"edit-info"},an={key:0,class:"edit-link"},on={key:1,class:"last-updated"},sn={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},rn={class:"pager"},ln=["innerHTML"],cn=["innerHTML"],un={class:"pager"},dn=["innerHTML"],vn=["innerHTML"],fn=p({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:a}=L(),o=Wt(),c=Jt(),s=$(()=>t.value.editLink&&a.value.editLink!==!1),f=$(()=>n.value.lastUpdated),v=$(()=>s.value||f.value||c.value.prev||c.value.next);return(y,S)=>{var _,P,w,N;return v.value?(r(),d("footer",tn,[u(y.$slots,"doc-footer-before",{},void 0,!0),s.value||f.value?(r(),d("div",nn,[s.value?(r(),d("div",an,[b(j,{class:"edit-link-button",href:l(o).url,"no-icon":!0},{default:m(()=>[S[0]||(S[0]=i("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),B(" "+x(l(o).text),1)]),_:1},8,["href"])])):h("",!0),f.value?(r(),d("div",on,[b(en)])):h("",!0)])):h("",!0),(_=l(c).prev)!=null&&_.link||(P=l(c).next)!=null&&P.link?(r(),d("nav",sn,[S[1]||(S[1]=i("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),i("div",rn,[(w=l(c).prev)!=null&&w.link?(r(),g(j,{key:0,class:"pager-link prev",href:l(c).prev.link},{default:m(()=>{var A;return[i("span",{class:"desc",innerHTML:((A=l(t).docFooter)==null?void 0:A.prev)||"Previous page"},null,8,ln),i("span",{class:"title",innerHTML:l(c).prev.text},null,8,cn)]}),_:1},8,["href"])):h("",!0)]),i("div",un,[(N=l(c).next)!=null&&N.link?(r(),g(j,{key:0,class:"pager-link next",href:l(c).next.link},{default:m(()=>{var A;return[i("span",{class:"desc",innerHTML:((A=l(t).docFooter)==null?void 0:A.next)||"Next page"},null,8,dn),i("span",{class:"title",innerHTML:l(c).next.text},null,8,vn)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),mn=k(fn,[["__scopeId","data-v-e257564d"]]),hn={class:"container"},pn={class:"aside-container"},bn={class:"aside-content"},gn={class:"content"},kn={class:"content-container"},_n={class:"main"},yn=p({__name:"VPDoc",setup(e){const{theme:t}=L(),n=re(),{hasSidebar:a,hasAside:o,leftAside:c}=q(),s=$(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(f,v)=>{const y=W("Content");return r(),d("div",{class:T(["VPDoc",{"has-sidebar":l(a),"has-aside":l(o)}])},[u(f.$slots,"doc-top",{},void 0,!0),i("div",hn,[l(o)?(r(),d("div",{key:0,class:T(["aside",{"left-aside":l(c)}])},[v[0]||(v[0]=i("div",{class:"aside-curtain"},null,-1)),i("div",pn,[i("div",bn,[b(Kt,null,{"aside-top":m(()=>[u(f.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":m(()=>[u(f.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":m(()=>[u(f.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":m(()=>[u(f.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":m(()=>[u(f.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":m(()=>[u(f.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),i("div",gn,[i("div",kn,[u(f.$slots,"doc-before",{},void 0,!0),i("main",_n,[b(y,{class:T(["vp-doc",[s.value,l(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),b(mn,null,{"doc-footer-before":m(()=>[u(f.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),u(f.$slots,"doc-after",{},void 0,!0)])])]),u(f.$slots,"doc-bottom",{},void 0,!0)],2)}}}),$n=k(yn,[["__scopeId","data-v-39a288b8"]]),Pn=p({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=$(()=>t.href&&Oe.test(t.href)),a=$(()=>t.tag||(t.href?"a":"button"));return(o,c)=>(r(),g(D(a.value),{class:T(["VPButton",[e.size,e.theme]]),href:e.href?l(Pe)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:m(()=>[B(x(e.text),1)]),_:1},8,["class","href","target","rel"]))}}),Ln=k(Pn,[["__scopeId","data-v-fa7799d5"]]),Sn=["src","alt"],Vn=p({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const a=W("VPImage",!0);return e.image?(r(),d(M,{key:0},[typeof e.image=="string"||"src"in e.image?(r(),d("img",R({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:l(O)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Sn)):(r(),d(M,{key:1},[b(a,R({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),b(a,R({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),ae=k(Vn,[["__scopeId","data-v-8426fc1a"]]),wn={class:"container"},Tn={class:"main"},xn={class:"heading"},Mn=["innerHTML"],Nn=["innerHTML"],An=["innerHTML"],In={key:0,class:"actions"},Cn={key:0,class:"image"},En={class:"image-container"},Bn=p({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const t=le("hero-image-slot-exists");return(n,a)=>(r(),d("div",{class:T(["VPHero",{"has-image":e.image||l(t)}])},[i("div",wn,[i("div",Tn,[u(n.$slots,"home-hero-info-before",{},void 0,!0),u(n.$slots,"home-hero-info",{},()=>[i("h1",xn,[e.name?(r(),d("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,Mn)):h("",!0),e.text?(r(),d("span",{key:1,innerHTML:e.text,class:"text"},null,8,Nn)):h("",!0)]),e.tagline?(r(),d("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,An)):h("",!0)],!0),u(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(r(),d("div",In,[(r(!0),d(M,null,E(e.actions,o=>(r(),d("div",{key:o.link,class:"action"},[b(Ln,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),u(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||l(t)?(r(),d("div",Cn,[i("div",En,[a[0]||(a[0]=i("div",{class:"image-bg"},null,-1)),u(n.$slots,"home-hero-image",{},()=>[e.image?(r(),g(ae,{key:0,class:"image-src",image:e.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),Hn=k(Bn,[["__scopeId","data-v-4f9c455b"]]),On=p({__name:"VPHomeHero",setup(e){const{frontmatter:t}=L();return(n,a)=>l(t).hero?(r(),g(Hn,{key:0,class:"VPHomeHero",name:l(t).hero.name,text:l(t).hero.text,tagline:l(t).hero.tagline,image:l(t).hero.image,actions:l(t).hero.actions},{"home-hero-info-before":m(()=>[u(n.$slots,"home-hero-info-before")]),"home-hero-info":m(()=>[u(n.$slots,"home-hero-info")]),"home-hero-info-after":m(()=>[u(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":m(()=>[u(n.$slots,"home-hero-actions-after")]),"home-hero-image":m(()=>[u(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Fn={class:"box"},Dn={key:0,class:"icon"},jn=["innerHTML"],Un=["innerHTML"],qn=["innerHTML"],Gn={key:4,class:"link-text"},Rn={class:"link-text-value"},zn=p({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(r(),g(j,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:m(()=>[i("article",Fn,[typeof e.icon=="object"&&e.icon.wrap?(r(),d("div",Dn,[b(ae,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(r(),g(ae,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(r(),d("div",{key:2,class:"icon",innerHTML:e.icon},null,8,jn)):h("",!0),i("h2",{class:"title",innerHTML:e.title},null,8,Un),e.details?(r(),d("p",{key:3,class:"details",innerHTML:e.details},null,8,qn)):h("",!0),e.linkText?(r(),d("div",Gn,[i("p",Rn,[B(x(e.linkText)+" ",1),n[0]||(n[0]=i("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Kn=k(zn,[["__scopeId","data-v-a3976bdc"]]),Wn={key:0,class:"VPFeatures"},Jn={class:"container"},Qn={class:"items"},Yn=p({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=$(()=>{const a=t.features.length;if(a){if(a===2)return"grid-2";if(a===3)return"grid-3";if(a%3===0)return"grid-6";if(a>3)return"grid-4"}else return});return(a,o)=>e.features?(r(),d("div",Wn,[i("div",Jn,[i("div",Qn,[(r(!0),d(M,null,E(e.features,c=>(r(),d("div",{key:c.title,class:T(["item",[n.value]])},[b(Kn,{icon:c.icon,title:c.title,details:c.details,link:c.link,"link-text":c.linkText,rel:c.rel,target:c.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),Xn=k(Yn,[["__scopeId","data-v-a6181336"]]),Zn=p({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=L();return(n,a)=>l(t).features?(r(),g(Xn,{key:0,class:"VPHomeFeatures",features:l(t).features},null,8,["features"])):h("",!0)}}),ea=p({__name:"VPHomeContent",setup(e){const{width:t}=tt({initialWidth:0,includeScrollbar:!1});return(n,a)=>(r(),d("div",{class:"vp-doc container",style:Fe(l(t)?{"--vp-offset":`calc(50% - ${l(t)/2}px)`}:{})},[u(n.$slots,"default",{},void 0,!0)],4))}}),ta=k(ea,[["__scopeId","data-v-8e2d4988"]]),na=p({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=L();return(a,o)=>{const c=W("Content");return r(),d("div",{class:T(["VPHome",{"external-link-icon-enabled":l(n).externalLinkIcon}])},[u(a.$slots,"home-hero-before",{},void 0,!0),b(On,null,{"home-hero-info-before":m(()=>[u(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":m(()=>[u(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":m(()=>[u(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":m(()=>[u(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":m(()=>[u(a.$slots,"home-hero-image",{},void 0,!0)]),_:3}),u(a.$slots,"home-hero-after",{},void 0,!0),u(a.$slots,"home-features-before",{},void 0,!0),b(Zn),u(a.$slots,"home-features-after",{},void 0,!0),l(t).markdownStyles!==!1?(r(),g(ta,{key:0},{default:m(()=>[b(c)]),_:1})):(r(),g(c,{key:1}))],2)}}}),aa=k(na,[["__scopeId","data-v-8b561e3d"]]),oa={},sa={class:"VPPage"};function ia(e,t){const n=W("Content");return r(),d("div",sa,[u(e.$slots,"page-top"),b(n),u(e.$slots,"page-bottom")])}const ra=k(oa,[["render",ia]]),la=p({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=L(),{hasSidebar:a}=q();return(o,c)=>(r(),d("div",{class:T(["VPContent",{"has-sidebar":l(a),"is-home":l(n).layout==="home"}]),id:"VPContent"},[l(t).isNotFound?u(o.$slots,"not-found",{},()=>[b(St)],!0,0):l(n).layout==="page"?(r(),g(ra,{key:1},{"page-top":m(()=>[u(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":m(()=>[u(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):l(n).layout==="home"?(r(),g(aa,{key:2},{"home-hero-before":m(()=>[u(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":m(()=>[u(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":m(()=>[u(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":m(()=>[u(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":m(()=>[u(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":m(()=>[u(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":m(()=>[u(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":m(()=>[u(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":m(()=>[u(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):l(n).layout&&l(n).layout!=="doc"?(r(),g(D(l(n).layout),{key:3})):(r(),g($n,{key:4},{"doc-top":m(()=>[u(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":m(()=>[u(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":m(()=>[u(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":m(()=>[u(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":m(()=>[u(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":m(()=>[u(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":m(()=>[u(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":m(()=>[u(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":m(()=>[u(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":m(()=>[u(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":m(()=>[u(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ca=k(la,[["__scopeId","data-v-1428d186"]]),ua={class:"container"},da=["innerHTML"],va=["innerHTML"],fa=p({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=L(),{hasSidebar:a}=q();return(o,c)=>l(t).footer&&l(n).footer!==!1?(r(),d("footer",{key:0,class:T(["VPFooter",{"has-sidebar":l(a)}])},[i("div",ua,[l(t).footer.message?(r(),d("p",{key:0,class:"message",innerHTML:l(t).footer.message},null,8,da)):h("",!0),l(t).footer.copyright?(r(),d("p",{key:1,class:"copyright",innerHTML:l(t).footer.copyright},null,8,va)):h("",!0)])],2)):h("",!0)}}),ma=k(fa,[["__scopeId","data-v-e315a0ad"]]);function ha(){const{theme:e,frontmatter:t}=L(),n=He([]),a=$(()=>n.value.length>0);return ie(()=>{n.value=Le(t.value.outline??e.value.outline)}),{headers:n,hasLocalNav:a}}const pa={class:"menu-text"},ba={class:"header"},ga={class:"outline"},ka=p({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=L(),a=V(!1),o=V(0),c=V(),s=V();function f(_){var P;(P=c.value)!=null&&P.contains(_.target)||(a.value=!1)}U(a,_=>{if(_){document.addEventListener("click",f);return}document.removeEventListener("click",f)}),he("Escape",()=>{a.value=!1}),ie(()=>{a.value=!1});function v(){a.value=!a.value,o.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function y(_){_.target.classList.contains("outline-link")&&(s.value&&(s.value.style.transition="none"),ne(()=>{a.value=!1}))}function S(){a.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(_,P)=>(r(),d("div",{class:"VPLocalNavOutlineDropdown",style:Fe({"--vp-vh":o.value+"px"}),ref_key:"main",ref:c},[e.headers.length>0?(r(),d("button",{key:0,onClick:v,class:T({open:a.value})},[i("span",pa,x(l(Re)(l(n))),1),P[0]||(P[0]=i("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(r(),d("button",{key:1,onClick:S},x(l(n).returnToTopLabel||"Return to top"),1)),b(_e,{name:"flyout"},{default:m(()=>[a.value?(r(),d("div",{key:0,ref_key:"items",ref:s,class:"items",onClick:y},[i("div",ba,[i("a",{class:"top-link",href:"#",onClick:S},x(l(n).returnToTopLabel||"Return to top"),1)]),i("div",ga,[b(ze,{headers:e.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),_a=k(ka,[["__scopeId","data-v-8a42e2b4"]]),ya={class:"container"},$a=["aria-expanded"],Pa={class:"menu-text"},La=p({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t,frontmatter:n}=L(),{hasSidebar:a}=q(),{headers:o}=ha(),{y:c}=De(),s=V(0);z(()=>{s.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ie(()=>{o.value=Le(n.value.outline??t.value.outline)});const f=$(()=>o.value.length===0),v=$(()=>f.value&&!a.value),y=$(()=>({VPLocalNav:!0,"has-sidebar":a.value,empty:f.value,fixed:v.value}));return(S,_)=>l(n).layout!=="home"&&(!v.value||l(c)>=s.value)?(r(),d("div",{key:0,class:T(y.value)},[i("div",ya,[l(a)?(r(),d("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:_[0]||(_[0]=P=>S.$emit("open-menu"))},[_[1]||(_[1]=i("span",{class:"vpi-align-left menu-icon"},null,-1)),i("span",Pa,x(l(t).sidebarMenuLabel||"Menu"),1)],8,$a)):h("",!0),b(_a,{headers:l(o),navHeight:s.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),Sa=k(La,[["__scopeId","data-v-a6f0e41e"]]);function Va(){const e=V(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function a(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const c=re();return U(()=>c.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:a}}const wa={},Ta={class:"VPSwitch",type:"button",role:"switch"},xa={class:"check"},Ma={key:0,class:"icon"};function Na(e,t){return r(),d("button",Ta,[i("span",xa,[e.$slots.default?(r(),d("span",Ma,[u(e.$slots,"default",{},void 0,!0)])):h("",!0)])])}const Aa=k(wa,[["render",Na],["__scopeId","data-v-1d5665e3"]]),Ia=p({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=L(),a=le("toggle-appearance",()=>{t.value=!t.value}),o=V("");return $e(()=>{o.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(c,s)=>(r(),g(Aa,{title:o.value,class:"VPSwitchAppearance","aria-checked":l(t),onClick:l(a)},{default:m(()=>[...s[0]||(s[0]=[i("span",{class:"vpi-sun sun"},null,-1),i("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),Se=k(Ia,[["__scopeId","data-v-5337faa4"]]),Ca={key:0,class:"VPNavBarAppearance"},Ea=p({__name:"VPNavBarAppearance",setup(e){const{site:t}=L();return(n,a)=>l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(r(),d("div",Ca,[b(Se)])):h("",!0)}}),Ba=k(Ea,[["__scopeId","data-v-6c893767"]]),Ve=V();let Ke=!1,ve=0;function Ha(e){const t=V(!1);if(X){!Ke&&Oa(),ve++;const n=U(Ve,a=>{var o,c,s;a===e.el.value||(o=e.el.value)!=null&&o.contains(a)?(t.value=!0,(c=e.onFocus)==null||c.call(e)):(t.value=!1,(s=e.onBlur)==null||s.call(e))});ye(()=>{n(),ve--,ve||Fa()})}return nt(t)}function Oa(){document.addEventListener("focusin",We),Ke=!0,Ve.value=document.activeElement}function Fa(){document.removeEventListener("focusin",We)}function We(){Ve.value=document.activeElement}const Da={class:"VPMenuLink"},ja=["innerHTML"],Ua=p({__name:"VPMenuLink",props:{item:{}},setup(e){const{page:t}=L();return(n,a)=>(r(),d("div",Da,[b(j,{class:T({active:l(K)(l(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon},{default:m(()=>[i("span",{innerHTML:e.item.text},null,8,ja)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),ce=k(Ua,[["__scopeId","data-v-35975db6"]]),qa={class:"VPMenuGroup"},Ga={key:0,class:"title"},Ra=p({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(r(),d("div",qa,[e.text?(r(),d("p",Ga,x(e.text),1)):h("",!0),(r(!0),d(M,null,E(e.items,a=>(r(),d(M,null,["link"in a?(r(),g(ce,{key:0,item:a},null,8,["item"])):h("",!0)],64))),256))]))}}),za=k(Ra,[["__scopeId","data-v-69e747b5"]]),Ka={class:"VPMenu"},Wa={key:0,class:"items"},Ja=p({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(r(),d("div",Ka,[e.items?(r(),d("div",Wa,[(r(!0),d(M,null,E(e.items,a=>(r(),d(M,{key:JSON.stringify(a)},["link"in a?(r(),g(ce,{key:0,item:a},null,8,["item"])):"component"in a?(r(),g(D(a.component),R({key:1,ref_for:!0},a.props),null,16)):(r(),g(za,{key:2,text:a.text,items:a.items},null,8,["text","items"]))],64))),128))])):h("",!0),u(t.$slots,"default",{},void 0,!0)]))}}),Qa=k(Ja,[["__scopeId","data-v-b98bc113"]]),Ya=["aria-expanded","aria-label"],Xa={key:0,class:"text"},Za=["innerHTML"],eo={key:1,class:"vpi-more-horizontal icon"},to={class:"menu"},no=p({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=V(!1),n=V();Ha({el:n,onBlur:a});function a(){t.value=!1}return(o,c)=>(r(),d("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:c[1]||(c[1]=s=>t.value=!0),onMouseleave:c[2]||(c[2]=s=>t.value=!1)},[i("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:c[0]||(c[0]=s=>t.value=!t.value)},[e.button||e.icon?(r(),d("span",Xa,[e.icon?(r(),d("span",{key:0,class:T([e.icon,"option-icon"])},null,2)):h("",!0),e.button?(r(),d("span",{key:1,innerHTML:e.button},null,8,Za)):h("",!0),c[3]||(c[3]=i("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(r(),d("span",eo))],8,Ya),i("div",to,[b(Qa,{items:e.items},{default:m(()=>[u(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),we=k(no,[["__scopeId","data-v-cf11d7a2"]]),ao=["href","aria-label","innerHTML"],oo=p({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(e){const t=e,n=V();z(async()=>{var c;await ne();const o=(c=n.value)==null?void 0:c.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const a=$(()=>typeof t.icon=="object"?t.icon.svg:`<span class="vpi-social-${t.icon}"></span>`);return(o,c)=>(r(),d("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:"noopener",innerHTML:a.value},null,8,ao))}}),so=k(oo,[["__scopeId","data-v-bd121fe5"]]),io={class:"VPSocialLinks"},ro=p({__name:"VPSocialLinks",props:{links:{}},setup(e){return(t,n)=>(r(),d("div",io,[(r(!0),d(M,null,E(e.links,({link:a,icon:o,ariaLabel:c})=>(r(),g(so,{key:a,icon:o,link:a,ariaLabel:c},null,8,["icon","link","ariaLabel"]))),128))]))}}),Te=k(ro,[["__scopeId","data-v-7bc22406"]]),lo={key:0,class:"group translations"},co={class:"trans-title"},uo={key:1,class:"group"},vo={class:"item appearance"},fo={class:"label"},mo={class:"appearance-action"},ho={key:2,class:"group"},po={class:"item social-links"},bo=p({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=L(),{localeLinks:a,currentLang:o}=Z({correspondingLink:!0}),c=$(()=>a.value.length&&o.value.label||t.value.appearance||n.value.socialLinks);return(s,f)=>c.value?(r(),g(we,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:m(()=>[l(a).length&&l(o).label?(r(),d("div",lo,[i("p",co,x(l(o).label),1),(r(!0),d(M,null,E(l(a),v=>(r(),g(ce,{key:v.link,item:v},null,8,["item"]))),128))])):h("",!0),l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(r(),d("div",uo,[i("div",vo,[i("p",fo,x(l(n).darkModeSwitchLabel||"Appearance"),1),i("div",mo,[b(Se)])])])):h("",!0),l(n).socialLinks?(r(),d("div",ho,[i("div",po,[b(Te,{class:"social-links-list",links:l(n).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),go=k(bo,[["__scopeId","data-v-bb2aa2f0"]]),ko=["aria-expanded"],_o=p({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(r(),d("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=a=>t.$emit("click"))},[...n[1]||(n[1]=[i("span",{class:"container"},[i("span",{class:"top"}),i("span",{class:"middle"}),i("span",{class:"bottom"})],-1)])],10,ko))}}),yo=k(_o,[["__scopeId","data-v-e5dd9c1c"]]),$o=["innerHTML"],Po=p({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const{page:t}=L();return(n,a)=>(r(),g(j,{class:T({VPNavBarMenuLink:!0,active:l(K)(l(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:m(()=>[i("span",{innerHTML:e.item.text},null,8,$o)]),_:1},8,["class","href","target","rel","no-icon"]))}}),Lo=k(Po,[["__scopeId","data-v-e56f3d57"]]),So=p({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=L(),a=c=>"component"in c?!1:"link"in c?K(n.value.relativePath,c.link,!!t.item.activeMatch):c.items.some(a),o=$(()=>a(t.item));return(c,s)=>(r(),g(we,{class:T({VPNavBarMenuGroup:!0,active:l(K)(l(n).relativePath,e.item.activeMatch,!!e.item.activeMatch)||o.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),Vo={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},wo=p({__name:"VPNavBarMenu",setup(e){const{theme:t}=L();return(n,a)=>l(t).nav?(r(),d("nav",Vo,[a[0]||(a[0]=i("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(r(!0),d(M,null,E(l(t).nav,o=>(r(),d(M,{key:JSON.stringify(o)},["link"in o?(r(),g(Lo,{key:0,item:o},null,8,["item"])):"component"in o?(r(),g(D(o.component),R({key:1,ref_for:!0},o.props),null,16)):(r(),g(So,{key:2,item:o},null,8,["item"]))],64))),128))])):h("",!0)}}),To=k(wo,[["__scopeId","data-v-dc692963"]]);function xo(e){const{localeIndex:t,theme:n}=L();function a(o){var N,A,H;const c=o.split("."),s=(N=n.value.search)==null?void 0:N.options,f=s&&typeof s=="object",v=f&&((H=(A=s.locales)==null?void 0:A[t.value])==null?void 0:H.translations)||null,y=f&&s.translations||null;let S=v,_=y,P=e;const w=c.pop();for(const F of c){let G=null;const J=P==null?void 0:P[F];J&&(G=P=J);const ue=_==null?void 0:_[F];ue&&(G=_=ue);const de=S==null?void 0:S[F];de&&(G=S=de),J||(P=G),ue||(_=G),de||(S=G)}return(S==null?void 0:S[w])??(_==null?void 0:_[w])??(P==null?void 0:P[w])??""}return a}const Mo=["aria-label"],No={class:"DocSearch-Button-Container"},Ao={class:"DocSearch-Button-Placeholder"},Me=p({__name:"VPNavBarSearchButton",setup(e){const n=xo({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(a,o)=>(r(),d("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":l(n)("button.buttonAriaLabel")},[i("span",No,[o[0]||(o[0]=i("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),i("span",Ao,x(l(n)("button.buttonText")),1)]),o[1]||(o[1]=i("span",{class:"DocSearch-Button-Keys"},[i("kbd",{class:"DocSearch-Button-Key"}),i("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,Mo))}}),Io={class:"VPNavBarSearch"},Co={id:"local-search"},Eo={key:1,id:"docsearch"},Bo=p({__name:"VPNavBarSearch",setup(e){const t=at(()=>ot(()=>import("./VPLocalSearchBox.DOBbPfix.js"),__vite__mapDeps([0,1]))),n=()=>null,{theme:a}=L(),o=V(!1),c=V(!1);z(()=>{});function s(){o.value||(o.value=!0,setTimeout(f,16))}function f(){const _=new Event("keydown");_.key="k",_.metaKey=!0,window.dispatchEvent(_),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||f()},16)}function v(_){const P=_.target,w=P.tagName;return P.isContentEditable||w==="INPUT"||w==="SELECT"||w==="TEXTAREA"}const y=V(!1);he("k",_=>{(_.ctrlKey||_.metaKey)&&(_.preventDefault(),y.value=!0)}),he("/",_=>{v(_)||(_.preventDefault(),y.value=!0)});const S="local";return(_,P)=>{var w;return r(),d("div",Io,[l(S)==="local"?(r(),d(M,{key:0},[y.value?(r(),g(l(t),{key:0,onClose:P[0]||(P[0]=N=>y.value=!1)})):h("",!0),i("div",Co,[b(Me,{onClick:P[1]||(P[1]=N=>y.value=!0)})])],64)):l(S)==="algolia"?(r(),d(M,{key:1},[o.value?(r(),g(l(n),{key:0,algolia:((w=l(a).search)==null?void 0:w.options)??l(a).algolia,onVnodeBeforeMount:P[2]||(P[2]=N=>c.value=!0)},null,8,["algolia"])):h("",!0),c.value?h("",!0):(r(),d("div",Eo,[b(Me,{onClick:s})]))],64)):h("",!0)])}}}),Ho=p({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=L();return(n,a)=>l(t).socialLinks?(r(),g(Te,{key:0,class:"VPNavBarSocialLinks",links:l(t).socialLinks},null,8,["links"])):h("",!0)}}),Oo=k(Ho,[["__scopeId","data-v-0394ad82"]]),Fo=["href","rel","target"],Do=["innerHTML"],jo={key:2},Uo=p({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=L(),{hasSidebar:a}=q(),{currentLang:o}=Z(),c=$(()=>{var v;return typeof n.value.logoLink=="string"?n.value.logoLink:(v=n.value.logoLink)==null?void 0:v.link}),s=$(()=>{var v;return typeof n.value.logoLink=="string"||(v=n.value.logoLink)==null?void 0:v.rel}),f=$(()=>{var v;return typeof n.value.logoLink=="string"||(v=n.value.logoLink)==null?void 0:v.target});return(v,y)=>(r(),d("div",{class:T(["VPNavBarTitle",{"has-sidebar":l(a)}])},[i("a",{class:"title",href:c.value??l(Pe)(l(o).link),rel:s.value,target:f.value},[u(v.$slots,"nav-bar-title-before",{},void 0,!0),l(n).logo?(r(),g(ae,{key:0,class:"logo",image:l(n).logo},null,8,["image"])):h("",!0),l(n).siteTitle?(r(),d("span",{key:1,innerHTML:l(n).siteTitle},null,8,Do)):l(n).siteTitle===void 0?(r(),d("span",jo,x(l(t).title),1)):h("",!0),u(v.$slots,"nav-bar-title-after",{},void 0,!0)],8,Fo)],2))}}),qo=k(Uo,[["__scopeId","data-v-1168a8e4"]]),Go={class:"items"},Ro={class:"title"},zo=p({__name:"VPNavBarTranslations",setup(e){const{theme:t}=L(),{localeLinks:n,currentLang:a}=Z({correspondingLink:!0});return(o,c)=>l(n).length&&l(a).label?(r(),g(we,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:l(t).langMenuLabel||"Change language"},{default:m(()=>[i("div",Go,[i("p",Ro,x(l(a).label),1),(r(!0),d(M,null,E(l(n),s=>(r(),g(ce,{key:s.link,item:s},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Ko=k(zo,[["__scopeId","data-v-88af2de4"]]),Wo={class:"wrapper"},Jo={class:"container"},Qo={class:"title"},Yo={class:"content"},Xo={class:"content-body"},Zo=p({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const t=e,{y:n}=De(),{hasSidebar:a}=q(),{frontmatter:o}=L(),c=V({});return $e(()=>{c.value={"has-sidebar":a.value,home:o.value.layout==="home",top:n.value===0,"screen-open":t.isScreenOpen}}),(s,f)=>(r(),d("div",{class:T(["VPNavBar",c.value])},[i("div",Wo,[i("div",Jo,[i("div",Qo,[b(qo,null,{"nav-bar-title-before":m(()=>[u(s.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":m(()=>[u(s.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),i("div",Yo,[i("div",Xo,[u(s.$slots,"nav-bar-content-before",{},void 0,!0),b(Bo,{class:"search"}),b(To,{class:"menu"}),b(Ko,{class:"translations"}),b(Ba,{class:"appearance"}),b(Oo,{class:"social-links"}),b(go,{class:"extra"}),u(s.$slots,"nav-bar-content-after",{},void 0,!0),b(yo,{class:"hamburger",active:e.isScreenOpen,onClick:f[0]||(f[0]=v=>s.$emit("toggle-screen"))},null,8,["active"])])])])]),f[1]||(f[1]=i("div",{class:"divider"},[i("div",{class:"divider-line"})],-1))],2))}}),es=k(Zo,[["__scopeId","data-v-6aa21345"]]),ts={key:0,class:"VPNavScreenAppearance"},ns={class:"text"},as=p({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=L();return(a,o)=>l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(r(),d("div",ts,[i("p",ns,x(l(n).darkModeSwitchLabel||"Appearance"),1),b(Se)])):h("",!0)}}),os=k(as,[["__scopeId","data-v-b44890b2"]]),ss=["innerHTML"],is=p({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=le("close-screen");return(n,a)=>(r(),g(j,{class:"VPNavScreenMenuLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:l(t)},{default:m(()=>[i("span",{innerHTML:e.item.text},null,8,ss)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),rs=k(is,[["__scopeId","data-v-df37e6dd"]]),ls=["innerHTML"],cs=p({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=le("close-screen");return(n,a)=>(r(),g(j,{class:"VPNavScreenMenuGroupLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:l(t)},{default:m(()=>[i("span",{innerHTML:e.item.text},null,8,ls)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Je=k(cs,[["__scopeId","data-v-3e9c20e4"]]),us={class:"VPNavScreenMenuGroupSection"},ds={key:0,class:"title"},vs=p({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(r(),d("div",us,[e.text?(r(),d("p",ds,x(e.text),1)):h("",!0),(r(!0),d(M,null,E(e.items,a=>(r(),g(Je,{key:a.text,item:a},null,8,["item"]))),128))]))}}),fs=k(vs,[["__scopeId","data-v-8133b170"]]),ms=["aria-controls","aria-expanded"],hs=["innerHTML"],ps=["id"],bs={key:0,class:"item"},gs={key:1,class:"item"},ks={key:2,class:"group"},_s=p({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=V(!1),a=$(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(c,s)=>(r(),d("div",{class:T(["VPNavScreenMenuGroup",{open:n.value}])},[i("button",{class:"button","aria-controls":a.value,"aria-expanded":n.value,onClick:o},[i("span",{class:"button-text",innerHTML:e.text},null,8,hs),s[0]||(s[0]=i("span",{class:"vpi-plus button-icon"},null,-1))],8,ms),i("div",{id:a.value,class:"items"},[(r(!0),d(M,null,E(e.items,f=>(r(),d(M,{key:JSON.stringify(f)},["link"in f?(r(),d("div",bs,[b(Je,{item:f},null,8,["item"])])):"component"in f?(r(),d("div",gs,[(r(),g(D(f.component),R({ref_for:!0},f.props,{"screen-menu":""}),null,16))])):(r(),d("div",ks,[b(fs,{text:f.text,items:f.items},null,8,["text","items"])]))],64))),128))],8,ps)],2))}}),ys=k(_s,[["__scopeId","data-v-b9ab8c58"]]),$s={key:0,class:"VPNavScreenMenu"},Ps=p({__name:"VPNavScreenMenu",setup(e){const{theme:t}=L();return(n,a)=>l(t).nav?(r(),d("nav",$s,[(r(!0),d(M,null,E(l(t).nav,o=>(r(),d(M,{key:JSON.stringify(o)},["link"in o?(r(),g(rs,{key:0,item:o},null,8,["item"])):"component"in o?(r(),g(D(o.component),R({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(r(),g(ys,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),Ls=p({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=L();return(n,a)=>l(t).socialLinks?(r(),g(Te,{key:0,class:"VPNavScreenSocialLinks",links:l(t).socialLinks},null,8,["links"])):h("",!0)}}),Ss={class:"list"},Vs=p({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=Z({correspondingLink:!0}),a=V(!1);function o(){a.value=!a.value}return(c,s)=>l(t).length&&l(n).label?(r(),d("div",{key:0,class:T(["VPNavScreenTranslations",{open:a.value}])},[i("button",{class:"title",onClick:o},[s[0]||(s[0]=i("span",{class:"vpi-languages icon lang"},null,-1)),B(" "+x(l(n).label)+" ",1),s[1]||(s[1]=i("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),i("ul",Ss,[(r(!0),d(M,null,E(l(t),f=>(r(),d("li",{key:f.link,class:"item"},[b(j,{class:"link",href:f.link},{default:m(()=>[B(x(f.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),ws=k(Vs,[["__scopeId","data-v-858fe1a4"]]),Ts={class:"container"},xs=p({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=V(null),n=je(X?document.body:null);return(a,o)=>(r(),g(_e,{name:"fade",onEnter:o[0]||(o[0]=c=>n.value=!0),onAfterLeave:o[1]||(o[1]=c=>n.value=!1)},{default:m(()=>[e.open?(r(),d("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t,id:"VPNavScreen"},[i("div",Ts,[u(a.$slots,"nav-screen-content-before",{},void 0,!0),b(Ps,{class:"menu"}),b(ws,{class:"translations"}),b(os,{class:"appearance"}),b(Ls,{class:"social-links"}),u(a.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),Ms=k(xs,[["__scopeId","data-v-f2779853"]]),Ns={key:0,class:"VPNav"},As=p({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:a}=Va(),{frontmatter:o}=L(),c=$(()=>o.value.navbar!==!1);return Ue("close-screen",n),se(()=>{X&&document.documentElement.classList.toggle("hide-nav",!c.value)}),(s,f)=>c.value?(r(),d("header",Ns,[b(es,{"is-screen-open":l(t),onToggleScreen:l(a)},{"nav-bar-title-before":m(()=>[u(s.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":m(()=>[u(s.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":m(()=>[u(s.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":m(()=>[u(s.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),b(Ms,{open:l(t)},{"nav-screen-content-before":m(()=>[u(s.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":m(()=>[u(s.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),Is=k(As,[["__scopeId","data-v-ae24b3ad"]]),Cs=["role","tabindex"],Es={key:1,class:"items"},Bs=p({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:a,isLink:o,isActiveLink:c,hasActiveLink:s,hasChildren:f,toggle:v}=xt($(()=>t.item)),y=$(()=>f.value?"section":"div"),S=$(()=>o.value?"a":"div"),_=$(()=>f.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),P=$(()=>o.value?void 0:"button"),w=$(()=>[[`level-${t.depth}`],{collapsible:a.value},{collapsed:n.value},{"is-link":o.value},{"is-active":c.value},{"has-active":s.value}]);function N(H){"key"in H&&H.key!=="Enter"||!t.item.link&&v()}function A(){t.item.link&&v()}return(H,F)=>{const G=W("VPSidebarItem",!0);return r(),g(D(y.value),{class:T(["VPSidebarItem",w.value])},{default:m(()=>[e.item.text?(r(),d("div",R({key:0,class:"item",role:P.value},st(e.item.items?{click:N,keydown:N}:{},!0),{tabindex:e.item.items&&0}),[F[1]||(F[1]=i("div",{class:"indicator"},null,-1)),e.item.link?(r(),g(j,{key:0,tag:S.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:m(()=>[(r(),g(D(_.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(r(),g(D(_.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(r(),d("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:A,onKeydown:it(A,["enter"]),tabindex:"0"},[...F[0]||(F[0]=[i("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):h("",!0)],16,Cs)):h("",!0),e.item.items&&e.item.items.length?(r(),d("div",Es,[e.depth<5?(r(!0),d(M,{key:0},E(e.item.items,J=>(r(),g(G,{key:J.text,item:J,depth:e.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),Hs=k(Bs,[["__scopeId","data-v-b3fd67f8"]]),Os=p({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=V(!0);let n=null;return z(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),rt(()=>{n!=null&&(clearTimeout(n),n=null)}),(a,o)=>(r(!0),d(M,null,E(e.items,c=>(r(),d("div",{key:c.text,class:T(["group",{"no-transition":t.value}])},[b(Hs,{item:c,depth:0},null,8,["item"])],2))),128))}}),Fs=k(Os,[["__scopeId","data-v-c40bc020"]]),Ds={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},js=p({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=q(),a=e,o=V(null),c=je(X?document.body:null);U([a,o],()=>{var f;a.open?(c.value=!0,(f=o.value)==null||f.focus()):c.value=!1},{immediate:!0,flush:"post"});const s=V(0);return U(t,()=>{s.value+=1},{deep:!0}),(f,v)=>l(n)?(r(),d("aside",{key:0,class:T(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:v[0]||(v[0]=qe(()=>{},["stop"]))},[v[2]||(v[2]=i("div",{class:"curtain"},null,-1)),i("nav",Ds,[v[1]||(v[1]=i("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),u(f.$slots,"sidebar-nav-before",{},void 0,!0),(r(),g(Fs,{items:l(t),key:s.value},null,8,["items"])),u(f.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),Us=k(js,[["__scopeId","data-v-319d5ca6"]]),qs=p({__name:"VPSkipLink",setup(e){const{theme:t}=L(),n=re(),a=V();U(()=>n.path,()=>a.value.focus());function o({target:c}){const s=document.getElementById(decodeURIComponent(c.hash).slice(1));if(s){const f=()=>{s.removeAttribute("tabindex"),s.removeEventListener("blur",f)};s.setAttribute("tabindex","-1"),s.addEventListener("blur",f),s.focus(),window.scrollTo(0,0)}}return(c,s)=>(r(),d(M,null,[i("span",{ref_key:"backToTop",ref:a,tabindex:"-1"},null,512),i("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o},x(l(t).skipToContentLabel||"Skip to content"),1)],64))}}),Gs=k(qs,[["__scopeId","data-v-0b0ada53"]]),Rs=p({__name:"Layout",setup(e){const{isOpen:t,open:n,close:a}=q(),o=re();U(()=>o.path,a),Tt(t,a);const{frontmatter:c}=L(),s=lt(),f=$(()=>!!s["home-hero-image"]);return Ue("hero-image-slot-exists",f),(v,y)=>{const S=W("Content");return l(c).layout!==!1?(r(),d("div",{key:0,class:T(["Layout",l(c).pageClass])},[u(v.$slots,"layout-top",{},void 0,!0),b(Gs),b(ht,{class:"backdrop",show:l(t),onClick:l(a)},null,8,["show","onClick"]),b(Is,null,{"nav-bar-title-before":m(()=>[u(v.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":m(()=>[u(v.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":m(()=>[u(v.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":m(()=>[u(v.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":m(()=>[u(v.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":m(()=>[u(v.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),b(Sa,{open:l(t),onOpenMenu:l(n)},null,8,["open","onOpenMenu"]),b(Us,{open:l(t)},{"sidebar-nav-before":m(()=>[u(v.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":m(()=>[u(v.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),b(ca,null,{"page-top":m(()=>[u(v.$slots,"page-top",{},void 0,!0)]),"page-bottom":m(()=>[u(v.$slots,"page-bottom",{},void 0,!0)]),"not-found":m(()=>[u(v.$slots,"not-found",{},void 0,!0)]),"home-hero-before":m(()=>[u(v.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":m(()=>[u(v.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":m(()=>[u(v.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":m(()=>[u(v.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":m(()=>[u(v.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":m(()=>[u(v.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":m(()=>[u(v.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":m(()=>[u(v.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":m(()=>[u(v.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":m(()=>[u(v.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":m(()=>[u(v.$slots,"doc-before",{},void 0,!0)]),"doc-after":m(()=>[u(v.$slots,"doc-after",{},void 0,!0)]),"doc-top":m(()=>[u(v.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":m(()=>[u(v.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":m(()=>[u(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":m(()=>[u(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":m(()=>[u(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":m(()=>[u(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":m(()=>[u(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":m(()=>[u(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),b(ma),u(v.$slots,"layout-bottom",{},void 0,!0)],2)):(r(),g(S,{key:1}))}}}),zs=k(Rs,[["__scopeId","data-v-5d98c3a5"]]),Ks={Layout:zs,enhanceApp:({app:e})=>{e.component("Badge",vt)}},Ws={id:"main-content",class:"tuning-landing"},Js={class:"hero","aria-labelledby":"page-title"},Qs={class:"container hero-grid"},Ys={class:"hero-copy"},Xs={class:"hero-actions"},Zs=["href"],ei={class:"known-term-row"},ti={class:"signal-board","aria-label":"Example symptom paths"},ni={class:"signal-list"},ai=["href"],oi=["href"],si=["href"],ii={class:"section",id:"symptoms","aria-labelledby":"symptoms-title"},ri={class:"container"},li={class:"symptom-grid"},ci={class:"symptom"},ui=["href"],di={class:"symptom"},vi=["href"],fi={class:"symptom"},mi=["href"],hi={class:"symptom"},pi=["href"],bi={class:"symptom"},gi=["href"],ki=p({__name:"TuningLanding",setup(e){const t=ct(),n=V(""),a={memory:"memory-model","memory-model":"memory-model",spill:"memory-model","spark.memory.fraction":"memory-model",shuffle:"shuffle","spark.sql.shuffle.partitions":"shuffle",joins:"joins",join:"joins","spark.sql.autobroadcastjointhreshold":"joins",aqe:"aqe","spark.sql.adaptive.enabled":"aqe",config:"config"};function o(){const c=n.value.trim().toLowerCase(),s=a[c]||"config";t.go(O(`/tuning-reference/${s}`))}return(c,s)=>(r(),d("main",Ws,[i("section",Js,[i("div",Qs,[i("div",Ys,[s[6]||(s[6]=i("p",{class:"eyebrow"},"Practical mechanics, stable references",-1)),s[7]||(s[7]=i("h1",{id:"page-title"},"Spark tuning reference",-1)),s[8]||(s[8]=i("p",{class:"hero-summary"}," Move from a job symptom to the Spark mechanics and settings that can change its outcome without treating a tuning guess as evidence. ",-1)),i("div",Xs,[i("a",{class:"button button-primary",href:l(O)("/tuning-reference/intro")},[...s[1]||(s[1]=[B("Browse the full reference ",-1),i("span",{class:"arrow","aria-hidden":"true"},"→",-1)])],8,Zs),s[5]||(s[5]=i("a",{class:"button button-secondary",href:"#symptoms"},"Choose a symptom",-1)),i("form",{class:"known-term",onSubmit:qe(o,["prevent"])},[s[3]||(s[3]=i("label",{for:"known-term-input"},"Know the term or config key?",-1)),i("div",ei,[ut(i("input",{id:"known-term-input","onUpdate:modelValue":s[0]||(s[0]=f=>n.value=f),name:"term",type:"search",list:"known-term-options",placeholder:"e.g. spark.sql.shuffle.partitions",autocomplete:"off"},null,512),[[dt,n.value]]),s[2]||(s[2]=i("button",{class:"button button-secondary",type:"submit"},"Jump to topic",-1))]),s[4]||(s[4]=xe('<small data-v-5d65fdb9>Known routes: memory, shuffle, joins, AQE, and config. Other terms open the configuration reference.</small><datalist id="known-term-options" data-v-5d65fdb9><option value="memory" data-v-5d65fdb9></option><option value="shuffle" data-v-5d65fdb9></option><option value="joins" data-v-5d65fdb9></option><option value="AQE" data-v-5d65fdb9></option><option value="config" data-v-5d65fdb9></option><option value="spark.memory.fraction" data-v-5d65fdb9></option><option value="spark.sql.shuffle.partitions" data-v-5d65fdb9></option><option value="spark.sql.adaptive.enabled" data-v-5d65fdb9></option><option value="spark.sql.autoBroadcastJoinThreshold" data-v-5d65fdb9></option></datalist>',2))],32)])]),i("aside",ti,[s[12]||(s[12]=i("div",{class:"board-label"},"evidence → mechanic → lever",-1)),i("ul",ni,[i("li",null,[i("a",{class:"signal-link",href:l(O)("/tuning-reference/memory-model")},[...s[9]||(s[9]=[i("span",{class:"signal-marker","aria-hidden":"true"},null,-1),i("span",{class:"signal-title"},"Executor memory pressure",-1),i("span",{class:"signal-destination"},"#memory-model",-1)])],8,ai)]),i("li",null,[i("a",{class:"signal-link",href:l(O)("/tuning-reference/shuffle")},[...s[10]||(s[10]=[i("span",{class:"signal-marker","aria-hidden":"true"},null,-1),i("span",{class:"signal-title"},"Slow, wide stages",-1),i("span",{class:"signal-destination"},"#shuffle",-1)])],8,oi)]),i("li",null,[i("a",{class:"signal-link",href:l(O)("/tuning-reference/joins")},[...s[11]||(s[11]=[i("span",{class:"signal-marker","aria-hidden":"true"},null,-1),i("span",{class:"signal-title"},"Join strategy drift",-1),i("span",{class:"signal-destination"},"#joins",-1)])],8,si)])])])])]),i("section",ii,[i("div",ri,[s[23]||(s[23]=i("div",{class:"section-heading"},[i("h2",{id:"symptoms-title"},"Symptoms, mapped to the right lever"),i("p",null,"Each path stays on the canonical reference document, so existing links and saved anchors continue to work."),i("p",{class:"decision-note"},[i("strong",null,"How to use this:"),B(" SparkForensics reads your Spark event log and surfaces evidence; this reference explains the mechanics and settings behind it. Diagnose the symptom, change one informed lever, then validate against the next run's evidence. Confirm behavior and defaults against your deployed Spark version and distribution. ")])],-1)),i("div",li,[i("article",ci,[s[14]||(s[14]=i("div",null,[i("h3",null,"Spill or GC pressure"),i("p",null,"Trace executor memory, object lifetime, and the trade-offs behind changing memory settings.")],-1)),i("a",{href:l(O)("/tuning-reference/memory-model")},[...s[13]||(s[13]=[B("Open memory model ",-1),i("span",{"aria-hidden":"true"},"→",-1)])],8,ui)]),i("article",di,[s[16]||(s[16]=i("div",null,[i("h3",null,"Shuffle-heavy stages"),i("p",null,"Understand write/read costs, partition size, and why moving data becomes the bottleneck.")],-1)),i("a",{href:l(O)("/tuning-reference/shuffle")},[...s[15]||(s[15]=[B("Open shuffle guide ",-1),i("span",{"aria-hidden":"true"},"→",-1)])],8,vi)]),i("article",fi,[s[18]||(s[18]=i("div",null,[i("h3",null,"Slow or skewed joins"),i("p",null,"Compare join mechanics before changing broadcast thresholds or reshaping a plan.")],-1)),i("a",{href:l(O)("/tuning-reference/joins")},[...s[17]||(s[17]=[B("Open join optimization ",-1),i("span",{"aria-hidden":"true"},"→",-1)])],8,mi)]),i("article",hi,[s[20]||(s[20]=i("div",null,[i("h3",null,"Plan adapts poorly"),i("p",null,"Use AQE's runtime choices as an inspectable mechanism, not a checkbox to enable blindly.")],-1)),i("a",{href:l(O)("/tuning-reference/aqe")},[...s[19]||(s[19]=[B("Open AQE guide ",-1),i("span",{"aria-hidden":"true"},"→",-1)])],8,pi)]),i("article",bi,[s[22]||(s[22]=i("div",null,[i("h3",null,"Need the exact setting"),i("p",null,"Check a setting's scope, default, and interaction before applying it to a cluster.")],-1)),i("a",{href:l(O)("/tuning-reference/config")},[...s[21]||(s[21]=[B("Open config reference ",-1),i("span",{"aria-hidden":"true"},"→",-1)])],8,gi)])])])]),s[24]||(s[24]=xe('<section class="section workflow" aria-labelledby="workflow-title" data-v-5d65fdb9><div class="container workflow-grid" data-v-5d65fdb9><div class="workflow-copy" data-v-5d65fdb9><h2 id="workflow-title" data-v-5d65fdb9>Let SparkForensics surface the evidence. Use this reference to reason about it.</h2><p data-v-5d65fdb9>The two tools stay deliberately separate: SparkForensics reads the event log; this static reference explains the mechanics and settings behind what you find.</p></div><ol class="steps" data-v-5d65fdb9><li data-v-5d65fdb9><span class="step-label" data-v-5d65fdb9>Observe</span><div data-v-5d65fdb9><strong data-v-5d65fdb9>Read the stage or executor behavior</strong><span data-v-5d65fdb9>Start with the event log, metrics, and plan details Spark already produces.</span></div></li><li data-v-5d65fdb9><span class="step-label" data-v-5d65fdb9>Explain</span><div data-v-5d65fdb9><strong data-v-5d65fdb9>Name the mechanism at work</strong><span data-v-5d65fdb9>Use the stable reference anchors to connect symptoms to memory, shuffle, joins, AQE, or configuration.</span></div></li><li data-v-5d65fdb9><span class="step-label" data-v-5d65fdb9>Test</span><div data-v-5d65fdb9><strong data-v-5d65fdb9>Change one informed lever</strong><span data-v-5d65fdb9>Make a measured change, then compare the evidence again rather than carrying a tuning superstition forward.</span></div></li></ol></div></section>',1))]))}}),_i=k(ki,[["__scopeId","data-v-5d65fdb9"]]),Ne="citation-chip",Ae="citation-popover",yi=150;let I=null,C=null,Q=!1,te=null,Ie=!1;function $i(){const e=new Map;return document.querySelectorAll("section.footnotes li.footnote-item[id]").forEach(t=>{const n=t.cloneNode(!0);n.querySelectorAll("a.footnote-backref").forEach(o=>o.remove());const a=n.querySelector("a[href]");e.set(t.id,{href:a?a.getAttribute("href"):null,title:(n.textContent??"").trim()})}),e}function oe(){te!==null&&(clearTimeout(te),te=null)}function ke(){oe(),te=setTimeout(()=>{Q||Y()},yi)}function Y(){oe(),I==null||I.remove(),I=null,C==null||C.removeAttribute("aria-describedby"),C==null||C.setAttribute("aria-expanded","false"),C=null,Q=!1}function Pi(e,t){const n=t.getBoundingClientRect(),a=6,{width:o,height:c}=e.getBoundingClientRect();let s=n.bottom+a;s+c>window.innerHeight-8&&(s=n.top-c-a);const f=window.innerWidth-o-8;e.style.top=`${Math.max(8,s)}px`,e.style.left=`${Math.min(Math.max(8,n.left),Math.max(8,f))}px`}function fe(e,t,n){oe();const a=C===e;if(a||C==null||C.setAttribute("aria-expanded","false"),I||(I=document.createElement("div"),I.id=Ae,I.className="citation-popover",I.setAttribute("role","tooltip"),I.addEventListener("mouseenter",oe),I.addEventListener("mouseleave",ke),document.body.appendChild(I)),I.replaceChildren(),t.href){const o=document.createElement("a");o.href=t.href,o.target="_blank",o.rel="noreferrer",o.textContent=t.title,I.appendChild(o)}else I.textContent=t.title;e.setAttribute("aria-describedby",Ae),e.setAttribute("aria-expanded","true"),C=e,n?Q=!0:a||(Q=!1),Pi(I,e)}function Li(e,t){if(e.classList.contains(Ne))return;const n=(e.getAttribute("href")??"").replace(/^#/,""),a=t.get(n);if(!a)return;e.removeAttribute("href"),e.setAttribute("role","button"),e.tabIndex=0,e.classList.add(Ne),e.setAttribute("aria-haspopup","true"),e.setAttribute("aria-expanded","false"),e.textContent=n.replace(/^fn/,"");const o=()=>{C===e&&Q?Y():fe(e,a,!0)};e.addEventListener("mouseenter",()=>fe(e,a,!1)),e.addEventListener("mouseleave",ke),e.addEventListener("focus",()=>fe(e,a,!1)),e.addEventListener("blur",ke),e.addEventListener("click",o),e.addEventListener("keydown",c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),o())})}function Si(){Ie||(Ie=!0,document.addEventListener("click",e=>{if(!Q||!C)return;const t=e.target;C.contains(t)||I!=null&&I.contains(t)||Y()}),document.addEventListener("keydown",e=>{e.key==="Escape"&&Y()}))}function Ce(){Y(),Si();const e=$i();document.querySelectorAll("sup.footnote-ref > a[href]").forEach(t=>{Li(t,e)})}const Qe="shuffle-works-theme";function Vi(){try{const e=window.localStorage.getItem(Qe);return e==="light"||e==="dark"?e:null}catch{return null}}function Ee(e){const t=e?"dark":"light";try{window.localStorage.setItem(Qe,t)}catch{}document.documentElement.dataset.theme=t}function wi(){if(!location.hash)return;let e=null;try{e=document.getElementById(decodeURIComponent(location.hash.slice(1)))}catch{return}e==null||e.scrollIntoView()}const xi={extends:Ks,enhanceApp({app:e,router:t}){if(e.component("TuningLanding",_i),!X)return;t.onAfterRouteChange=()=>{ne(()=>Ce())};const n=e.mount.bind(e);e.mount=(...a)=>{const o=n(...a);return ne(()=>{Ce(),requestAnimationFrame(wi)}),o},e.runWithContext(()=>{const{isDark:a}=Be(),o=Vi();o&&(a.value=o==="dark"),Ee(a.value),U(a,v=>Ee(v)),new MutationObserver(()=>{const v=document.documentElement.dataset.theme;if(v==="light"||v==="dark"){const y=v==="dark";a.value!==y&&(a.value=y)}}).observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]});const s=()=>{document.querySelectorAll(".VPNavBarAppearance, .VPNavScreenAppearance, .VPNavBarExtra .appearance-action").forEach(v=>{v.hasAttribute("data-shuffle-page-controls")||v.setAttribute("data-shuffle-page-controls","")})};s(),new MutationObserver(s).observe(document.documentElement,{childList:!0,subtree:!0})})}};export{xo as c,xi as t,L as u};
@@ -0,0 +1 @@
1
+ import{_ as o,o as t,c,a5 as d}from"./chunks/framework.DSg0KOwT.js";const g=JSON.parse('{"title":"Board widgets","description":"","frontmatter":{},"headers":[],"relativePath":"contributor-guide/architecture/board-widgets.md","filePath":"contributor-guide/architecture/board-widgets.md"}'),a={name:"contributor-guide/architecture/board-widgets.md"};function i(n,e,r,s,l,h){return t(),c("div",null,[...e[0]||(e[0]=[d('<h1 id="board-widgets" tabindex="-1">Board widgets <a class="header-anchor" href="#board-widgets" aria-label="Permalink to &quot;Board widgets&quot;">​</a></h1><h2 id="board-widgets-app-and-plan-widgets" tabindex="-1">App- and plan-level widgets <a class="header-anchor" href="#board-widgets-app-and-plan-widgets" aria-label="Permalink to &quot;App- and plan-level widgets {#board-widgets-app-and-plan-widgets}&quot;">​</a></h2><p>(Components below live in <code>src/view/widgets/</code>, one file per widget name, e.g. <code>JobFailures.tsx</code>, <code>MemoryUtilization.tsx</code>.)</p><p>Beyond the stage-level cards, nine app- and plan-level cards render in the Findings tab, all <code>region: &#39;action&#39;</code> in <code>detector-registry.tsx</code>: Incomplete Run, Job Failures, Caching Opportunities, Autoscaling Churn, Config Audit, and the four Plan Advisor cards (Redundant Plan Subtree, Excessive Small Files, Missed Broadcast Join, Oversized Broadcast Join). <code>REGISTRY</code> maps every finding type to its own component: 24 <code>action</code> and 4 <code>reference</code> entries.</p><ul><li><p><strong>Incomplete Run</strong> (tag <code>INCMP</code>, <code>IncompleteRun.tsx</code>): app-level &quot;the capture never finished&quot; caveat (DETECTORS entry <code>incompleteRun</code>). Fires whenever <code>app.startTime</code> was observed but <code>app.endTime</code> was not, i.e. no <code>SparkListenerApplicationEnd</code> in the log: an in-flight job, a rotated-away log, or a capture cut short. Order 5, the lowest of any detector, so within the Warning band (its fixed impact band) its card comes first. The Findings tab&#39;s recommendation rollup (rendered by <code>FixTheseFirst.tsx</code>) excludes <code>incompleteRun</code> from that list outright (see <a href="./widget-rendering.html#widget-rendering-order">Widget rendering order</a>): it&#39;s a pipeline-completeness caveat, not an addressable fix, so it never competes with other findings for a ranked slot there. Self-gates to <code>null</code> (no card in the DOM) once the run completed normally. Unrelated to <code>evidence-availability.ts</code>&#39;s own <code>trustworthy</code> gate (see <a href="./worker-protocol.html#evidence-availability-contract">Evidence-availability contract</a>): that ledger only downgrades <em>absence</em> conclusions for individual evidence categories, never becomes a <code>DETECTORS</code> finding itself, and this card does not read it. No <code>docAnchor</code> is set: this is a tool-specific signal with no upstream <code>spark-tuning-reference</code> section.</p></li><li><p><strong>Job Failures</strong> (tag <code>JOBS</code>): app-level job-failure-rate rollup (DETECTORS entry <code>jobFailureRate</code> in <code>packages/core/src/detectors.ts</code>), computed from the run&#39;s <code>jobs</code> map (<code>ctx.jobs</code>, <code>SparkListenerJobEnd</code> results): ≥10% info, ≥30% warning, ≥50% critical. Complements the per-stage, task-level Failed Tasks card (tag <code>FAIL</code>).</p></li><li><p><strong>Caching Opportunities</strong> (tag <code>CACHE</code>, <code>CachingOpportunity.tsx</code>): app-level SQL relation-reuse detector (DETECTORS entry <code>cachingOpportunity</code>), computed from <code>ctx.sql</code>. It walks each execution&#39;s <code>planTree</code> and keys every scan by its stable pre-AQE identity via <code>scanRelationId</code> (<code>plan-summary.ts</code>): <code>&lt;parquet|orc|csv|json&gt;:&lt;db.table&gt;</code>, <code>delta:&lt;db.table&gt;</code>, <code>jdbc:&lt;schema.table&gt;</code>. That dedupes relations within one execution (self-joins count once) and flags any relation scanned by <code>&gt;= minExecutions</code> (2) distinct executions. Relation identity comes from the catalog-qualified scan name (nodeName, e.g. <code>Scan parquet spark_catalog.db.t</code>), not the <code>Location:</code> path, since Spark truncates that path at ~100 chars and points it at <code>_delta_log</code> for Delta tables; internal Delta-log metadata scans are dropped. Read bytes come from the scan&#39;s <code>size of files read</code> metric (<code>0</code>/unknown for JDBC). Findings carry <code>executionReuse</code> (<code>value</code> = distinct-execution count), <code>relation</code>, <code>format</code>, <code>executionIds</code>, <code>totalReadBytes</code>, and a size-aware <code>recommendation</code> (<code>confidence</code> scaled <code>low</code>/<code>medium</code>/<code>high</code> via <code>cachingReuseConfidence</code> off reuse-execution count, plus <code>validationRequired</code>). Renders nothing when clean (no card in the DOM). One row per relation: name + format badge, reuse count, <code>Data read</code> (<code>formatBytes</code>, em-dash when unknown), sorted by <code>totalReadBytes</code> then reuse count descending; the card states the fix once (<code>fixFor</code>), not per row. Rows are paged <code>VISIBLE_LIMIT</code> (6) at a time (<code>usePagedRows</code> + <code>RowPagination</code>), and a route to a row jumps to its page. Pure-RDD-API apps (no SQL executions) produce no finding: a deliberate trade-off, since an RDD-lineage heuristic surfaces only internal query-engine RDDs on DataFrame/SQL workloads.</p><p>It also detects composite reuse. When the same join/union subtree (not just a leaf scan) recurs across <code>&gt;= minExecutions</code> distinct SQL executions, the detector emits one <code>variant:&#39;composite&#39;</code> finding recommending caching the derived join/union result instead of two independent leaf-relation rows, and suppresses the leaf findings for relations fully covered by it. A relation reused beyond the composite&#39;s executions keeps a residual leaf finding for just the uncovered executions. Composite identity is structural: an anchor plan-shape fingerprint built by <code>findCompositeCandidates</code> (<code>packages/core/src/detectors.ts</code>; the same shape <code>computePlanShapes</code> produces with <code>opts.includeDetail</code>, computed inline in one bottom-up pass) folds the join/union node&#39;s own normalized <code>detail</code> (join type, columns, literals, with expr ids, <code>plan_id=</code>, codegen-stage numbers, and AQE&#39;s BuildLeft/BuildRight stripped, and commutative equality operands canonicalized) plus its children&#39;s detail-free shapes. Descendant nodes never contribute detail text, only structural shape, so a shared join reused across differently-filtered pre-join scans still matches (a deliberate trade-off) while a different join <em>condition</em> on the same tables does not collide. Nested composites (an inner join reused both standalone and inside an outer join) dedupe one level at a time: an inner composite fully covered by a qualifying outer composite&#39;s execution set is suppressed entirely, and a superset recomputes a residual finding over just its extra executions. Reuse via pure projection/aggregation with no join/union underneath stays leaf-level, not modeled as composite. <code>variant:&#39;composite&#39;</code> findings carry <code>operator</code> (<code>&#39;join&#39;</code>|<code>&#39;union&#39;</code>), <code>relations</code> (leaf relations under the composite, for display), and <code>format:&#39;derived&#39;</code> (a sentinel: composites have no scan storage format). They render a <code>JOIN</code>/<code>UNION</code> operator badge (styled distinct from the format badges) plus a confidence marker (<code>confidence</code> scaled via <code>cachingReuseConfidence</code>, <code>validationRequired</code>) in <code>CachingOpportunity.tsx</code>.</p></li><li><p><strong>Autoscaling Churn</strong> (tag <code>CHRN</code>, <code>AutoscalingChurn.tsx</code>): app-level short-lived-executor detector (DETECTORS entry <code>autoscalingChurn</code> in <code>packages/core/src/detectors.ts</code>; reuses the same <code>executorsAdded</code>/<code>executorsRemoved</code> matching logic as <code>utilization</code>). For each added executor, finds its matching removal event (falling back to <code>app.endTime</code> for an executor still alive when the log ends) and flags it short-lived if its lifetime is under 2 minutes (<code>thresholds.shortLivedMs</code>). Warns above 30% short-lived, escalates to critical above 60% (<code>confidence</code> scales <code>low</code>/<code>medium</code>/<code>high</code> via <code>autoscalingChurnConfidence</code>, off how far the short-lived share sits past <code>warningPct</code>/<code>criticalPct</code>: these thresholds are unvalidated estimates, not checked against real autoscaling-heavy logs). Returns no finding below 5 total executors (noise floor) or when <code>app.endTime</code> is missing (truncated/still-running log). The widget shows a finding-driven verdict banner (impact dot + <code>CHRN</code> tag + recommendation) above its add/remove chart, whose scale-down bars are muted. Its <code>docAnchor</code> is <code>#bottleneck-autoscaling-churn</code>, a section of the cluster-config chapter (<code>docs-content/chapters/11-cluster-config.md</code>), not a bottleneck page of its own: <code>pageForAnchor</code> maps it there, so the <code>CHRN</code> pill opens <code>cluster-config.html#bottleneck-autoscaling-churn</code>.</p></li><li><p><strong>Config Audit</strong> (tag <code>CFG</code>): static Spark-config sanity findings derived from <code>app.config</code>/<code>app.resources</code> (parsed from <code>SparkListenerEnvironmentUpdate</code>): dynamic-allocation vs. shuffle-service mismatch, inverted/missing autoscaling bounds, non-Kryo serializer, low executor <code>memoryOverhead</code>. Computed outside the runtime bottleneck catalog: its findings live in the separate <code>configFindings</code> stream, not <code>catalog</code>. But <code>FixTheseFirst</code>/<code>Alerts</code> both merge <code>catalog</code> and <code>configFindings</code> (neither reads <code>region</code>), so a Config Audit finding is eligible for a row in the Findings tab&#39;s recommendation rollup and gets its own card in the active grid, alongside genuine bottleneck-catalog findings.</p></li><li><p><strong>Plan Advisor</strong> (tag <code>PLAN</code>): SQL-plan-level findings computed from <code>appModel.sql</code>&#39;s resolved <code>planTree</code> (DETECTORS entries <code>duplicatePlanSubtree</code>, <code>smallFiles</code>, <code>broadcastSizing</code> in <code>packages/core/src/detectors.ts</code>): repeated plan subtrees (≥3 nodes, ≥2 occurrences; dropped when their linked stages take under 0.5% of the run; banded from the recovered wall-clock like other findings, with a <code>warning</code>/<code>info</code> fallback; an <code>Exchange</code> root only changes the recommendation to a possible missed exchange reuse), small-files read/write (&gt;100 files averaging ❤️ MiB), and broadcast-join sizing in both directions (missed- broadcast info finding, over-broadcast warning at &gt;1 GB). Each of the four emitted types renders as its own card (<code>DuplicatePlanSubtree.tsx</code>, <code>SmallFiles.tsx</code>, <code>UnderBroadcast.tsx</code>, <code>OverBroadcast.tsx</code>): all four share the <code>PLAN</code> tag and the same <code>--plan-aggregate</code> badge tint (<code>src/view/plan-finding-shared.ts</code>). Their <code>docAnchor</code>s (<code>#bottleneck-duplicate-plan-subtree</code>, <code>#bottleneck-small-files</code>, <code>#bottleneck-broadcast-sizing</code>) each resolve to their own page in the vendored tuning reference.</p></li></ul><p><code>detector-registry.tsx</code>&#39;s <code>REGISTRY</code> carries <code>region: &#39;reference&#39;</code> on four entries, each its own component: <code>memoryUtilization</code> (<code>MemoryUtilization</code>), <code>utilization</code> (<code>ExecutorUtilization</code>), <code>cacheUtilization</code> (<code>CacheUtilization</code>), and <code>coreLocality</code> (<code>CoreUsageArea</code>). <code>broadcastSizing</code> has no <code>REGISTRY</code> entry: it never backs a real <code>Finding</code> (the <code>broadcastSizing</code> <code>DETECTORS</code> entry only emits <code>underBroadcast</code>/<code>overBroadcast</code>, both <code>region: &#39;action&#39;</code>, each its own Plan Advisor card), so there is no key for it to occupy or clean-check line for it to render. Autoscaling Churn, the other executor-provisioning-lifecycle detector alongside <code>utilization</code>/<code>memoryUtilization</code>, is <code>action</code>, not <code>reference</code> (see &quot;App- and plan-level widgets&quot; above).</p><p><code>region</code> decides one thing (see <a href="./widget-rendering.html#widget-rendering-order">Widget rendering order</a>): whether a widget always mounts. <code>isAlwaysMountedType()</code> flags exactly one of the four <code>reference</code>-region types: Core Usage by Locality. That one mounts unconditionally from <code>appModel</code> at the head of the Full app report tab&#39;s reference grid, regardless of finding state. Memory Utilization, Executor Utilization, and Cache Storage are <code>reference</code> too, but all three are excluded by product decision, not a component-sharing constraint (<code>ALWAYS_MOUNTED_EXCEPTIONS</code> in <code>src/view/detector-registry.tsx</code> carries <code>cacheUtilization</code>, <code>memoryUtilization</code>, and <code>utilization</code>): a clean run on any of them isn&#39;t evidence worth surfacing unconditionally, so each collapses to an ordinary <code>CleanCheckRow</code> like any other action-region type on a clean run. Every other <code>REGISTRY</code> widget renders unconditionally as either an active card or a clean-check line, and <code>region</code>, then detector order, breaks ties between cards of the same impact band (<code>computeActiveWidgets</code> ranks by worst impact band first; <code>ImpactBoard</code> groups cards Critical, Warning, Info). The Full app report tab reads no other <code>REGISTRY</code> entry. So Core Usage by Locality, the one widget tagged <code>region: &#39;reference&#39;</code> and exempt from <code>ALWAYS_MOUNTED_EXCEPTIONS</code>, renders in the Full app report beside the other run-wide reference views, and a route to a <code>coreLocality</code> finding switches to that tab (Memory Utilization, Executor Utilization, and Cache Storage all render through the ordinary active/clean paths instead):</p><ul><li><strong>Memory Utilization</strong> (tag <code>MEM</code>): app-level card combining three sub-findings from the <code>memoryUtilization</code> DETECTORS entry (<code>packages/core/src/detectors.ts</code>): idle-cores rate (busy-core-time from the worker&#39;s run-aggregates sweep vs. peak-cores × wall-clock), per-executor memory bands (peak heap vs. allocated, gated on <code>spark.eventLog.logStageExecutorMetrics</code>: a distinct <code>dataUnavailable</code> finding renders when that config was off), and an unverified memory-waste model (<code>confidence</code> scales <code>low</code>/<code>medium</code>/<code>high</code> via <code>memoryWasteConfidence</code>, off how far the wasted/used ratio sits past the 1.5× buffer). There is no driver-memory band: the worker only extracts <em>allocated</em> <code>spark.driver.memory</code>, never a driver actual-usage metric, so there is nothing to band against. The separate <code>utilization</code> DETECTORS entry (an <code>avgUtilization</code> info finding: active-executor-time fraction below 60%) has its own card, <strong>Executor Utilization</strong> (tag <code>UTIL</code>, <code>ExecutorUtilization.tsx</code>): a <code>reference</code>-region widget in its own right that renders only with an active finding.</li><li><strong>Cache Storage</strong> (tag <code>CSTOR</code>): app-level card driven by the <code>cacheUtilization</code> DETECTORS entry (<code>packages/core/src/detectors.ts</code>), evaluating two per-RDD proxies over <code>ctx.app.rddInfo</code> since Spark event logs carry no runtime block-access/read-count data. <code>rddInfo</code>&#39;s cache figures come from <code>SparkListenerBlockUpdated</code> (<code>recordBlockUpdate</code> in <code>event-handlers.ts</code>, only written with <code>spark.eventLog.logBlockUpdates.enabled=true</code>): each RDD&#39;s peak count of resident partitions, with the memory/disk bytes at the latest moment that peak held, so an <code>unpersist()</code> before the log ends doesn&#39;t erase it. A block&#39;s bytes count only where its storage level says it lives (as in Spark&#39;s <code>AppStatusListener</code>): a drop from memory to disk still reports the dropped bytes as <code>Memory Size</code>. A removed executor&#39;s blocks are dropped with it (Spark logs no update for them), and once an RDD has block updates a later stage&#39;s RDD Info can&#39;t reset its storage level to <code>NONE</code> after an <code>unpersist()</code>. The corpus <code>cache-memory-only</code> and <code>cache-memory-and-disk</code> logs exercise both rules. Without block updates they fall back to <code>SparkListenerStageSubmitted</code>&#39;s RDD Info (<code>storageSource</code> records which), which is always 0 since Spark 2.3; Spark 1.x fills it only on <code>StageCompleted</code>, which isn&#39;t read. The two proxies are partial caching (<code>numCachedPartitions / numPartitions &lt; 0.90</code>, <code>&lt; 0.50</code> for the warning tier) and disk spillover for <code>MEMORY_AND_DISK*</code> RDDs (<code>diskSize / (memorySize + diskSize) &gt; 0.15</code>, <code>&gt; 0.40</code> for the warning tier; <code>DISK_ONLY</code> RDDs are never flagged). <code>confidence</code> scales <code>low</code>/<code>medium</code>/<code>high</code> via <code>cacheSampleConfidence(rdd.numPartitions)</code>, because the ratio is a storage snapshot, not a runtime read-count, and more partitions average that snapshot noise into a more stable ratio. When persisted RDDs have no storage evidence at all (no block updates, block-update logging not enabled in the app config, a recorded Spark version of 2.3 or later, and every RDD Info figure 0), the detector emits one <code>storageUnobserved</code> caveat (<code>dataUnavailable: true</code>, <code>info</code>) naming <code>spark.eventLog.logBlockUpdates.enabled</code>. Unlike <code>memoryUtilization</code>&#39;s caveat it counts for <code>isRealFinding</code>, so the card still mounts (with the caveat and no table) and Cache Storage never lands in Clean checks for a run that couldn&#39;t be checked; <code>isEligible</code> keeps it out of Fix these first. The RDD table renders unconditionally; flagged rows get an inline <code>CSTOR</code> tag next to the RDD name, and every flagged RDD&#39;s recommendation renders below the table, worst-first.</li><li><strong>Core Usage by Locality</strong> (tag <code>LOCAL</code>, <code>CoreUsageArea.tsx</code>): app-level non-local-task-ratio threshold (DETECTORS entry <code>coreLocality</code>; the other half of a wasted-cores-ratio check, the idle-core half already covered by Memory Utilization&#39;s <code>idleCores</code> variant above). Sums <code>RACK_LOCAL</code> + <code>ANY</code> task counts against total task count across every stage&#39;s <code>stage.localityStats</code> (pure reducer <code>computeCoreLocalityRatio</code>, <code>packages/core/src/core-locality-ratio.ts</code>). <code>NO_PREF</code> stays in the denominator only, since it&#39;s what shuffle-read stages legitimately report with no locality problem. Below 50 total tasks or below a 15% non-local ratio: no finding; 15%-35%: warning; &gt;= 35%: critical; these thresholds are unvalidated estimates (<code>confidence</code> scales <code>low</code>/<code>medium</code>/<code>high</code> via <code>coreLocalityConfidence</code>, off whichever is weaker of the non-local ratio and the sampled task count, the same evidence-strength convention as the memory-waste model above). The widget&#39;s always-rendered stacked-area chart (<code>packages/core/src/core-usage-locality.ts</code>) does not depend on the finding. The finding adds a threshold/impact-band section above it, a per-stage non-local breakdown below it (shown whenever any non-local tasks exist at all, independent of whether the aggregate crossed threshold), and a one-line cross-reference to Memory Utilization when its <code>idleCores</code> finding also fired (idle-core ratio itself is not duplicated here).</li></ul><p>Documented ALL-CAPS tag vocabulary: <code>SKEW</code>, <code>SHFL</code>, <code>SPILL</code>, <code>GC</code>, <code>COLD</code>, <code>UTIL</code>, <code>MEM</code> (Memory Utilization), <code>CSTOR</code> (Cache Storage), <code>LOCAL</code> (Core Usage by Locality), plus <code>FAIL</code> (Failed Tasks), <code>JOBS</code> (Job Failures), <code>CFG</code> (Config Audit), <code>PLAN</code> (Plan Advisor), <code>SFAIL</code> (stage failed outright), <code>PART</code> (partition sizing), <code>SLOW</code> (stage overall slowness), <code>SHAPE</code> (stage shape smells), <code>CACHE</code> (caching opportunity), <code>CHRN</code> (autoscaling churn), <code>TINY</code> (tiny tasks), <code>RETRY</code> (retry waste), <code>HOST</code> (slow executor host), <code>STRAG</code> (straggling task), <code>SPEC</code> (speculation waste) and <code>INCMP</code> (incomplete run); <code>packages/core/test/tag-vocabulary.test.js</code> checks the list.</p><p>ETL Phase Attribution (<code>packages/core/src/etl-phases.ts</code> + <code>EtlPhases.tsx</code>), What-If Executor Scaling (<code>packages/core/src/scaling-sim.ts</code> + <code>ScalingSim.tsx</code>, makespan predictions are unvalidated and carry a Model Error indicator), and Compute Efficiency (<code>packages/core/src/efficiency-model.ts</code> + <code>EfficiencyModel.tsx</code>, available vs. used core-hours with <code>wasted-core-hours.ts</code>&#39;s top stages by task core-time, the driver-vs-executor waste split, two theoretical floors, and the right-sizing copy) are main-thread report modules, not <code>DETECTORS</code> entries: descriptive lenses with no impact-band threshold, rendered unconditionally into the Full app report tab rather than participating in the bottleneck catalog. <code>packages/core/src/job-groups.ts</code> (<code>checkConcurrentJobGroups</code>) is likewise a report helper: it flags when concurrent SQL-execution job groups make wall-clock-based estimates unreliable. It feeds the run interpretation&#39;s <code>wallClockReliable</code>; the scaling simulator and the efficiency model read that flag and show a caveat banner rather than suppressing the estimate. The same Full app report grid also holds Evidence Availability and the Core Usage Histogram.</p><h2 id="confidence-metadata" tabindex="-1">Confidence metadata <a class="header-anchor" href="#confidence-metadata" aria-label="Permalink to &quot;Confidence metadata&quot;">​</a></h2><p>Best-effort (non-deterministic) findings carry a <code>confidence</code> + <code>validationRequired</code> marker, rendered by the shared <code>RowStatusCluster</code> (<code>src/view/RowStatusCluster.tsx</code>) when <code>confidence</code> is present and not <code>&#39;high&#39;</code>: a muted &quot;<code>&lt;level&gt;</code> confidence&quot; pill whose accessible tooltip (<code>useAccessibleTooltip</code>: <code>title</code> + <code>aria-describedby</code>, keyboard-focusable) carries <code>validationRequired</code>. Consumers include <code>Spill.tsx</code>, <code>DuplicatePlanSubtree.tsx</code>, <code>SmallFiles.tsx</code>, <code>UnderBroadcast.tsx</code>, <code>OverBroadcast.tsx</code>, <code>CachingOpportunity.tsx</code>, <code>PlanView.tsx</code> and <code>EfficiencyModel.tsx</code>. Spill classification is <code>medium</code> when classified (skew/volume) and <code>low</code> when unclassified; plan-summary warnings are <code>low</code>. Deterministic detectors stay unmarked, treated as high confidence.</p><h2 id="visual-system" tabindex="-1">Visual system <a class="header-anchor" href="#visual-system" aria-label="Permalink to &quot;Visual system&quot;">​</a></h2><p>Tailwind CSS v4 + shadcn/ui (Base UI primitives). The design tokens (colors, including the telemetry-console dark palette) are defined as CSS variables in an <code>@theme inline</code> block and consumed via Tailwind utility classes; there is no hand-authored BEM CSS. Theme polarity: dark = bare <code>:root</code> (no attribute), light = <code>:root[data-theme=&quot;light&quot;]</code>, toggled by <code>src/theme/ThemeProvider.tsx</code> and persisted to <code>localStorage</code>. <code>index.html</code>&#39;s inline FOUC-prevention script runs before React mounts. Mono is the typeface for numerics (<code>--font-mono</code>), applied via a <code>.num</code>-equivalent Tailwind utility per call site rather than one global class. Charts are Recharts (<code>src/view/charts/ChartTheme.tsx</code>&#39;s <code>CHART_COLORS</code>, read from the same CSS tokens). React re-renders on theme toggle, so chart colors update live with the theme. <code>ChartFrame</code> can also expose the underlying rows through a toggleable accessible table and copy them to the clipboard as TSV.</p><h2 id="templating-xss-safe" tabindex="-1">Templating (XSS-safe) <a class="header-anchor" href="#templating-xss-safe" aria-label="Permalink to &quot;Templating (XSS-safe)&quot;">​</a></h2><p>JSX auto-escapes every interpolated value by default. No <code>.innerHTML</code> assignment exists anywhere in the view layer (the one <code>dangerouslySetInnerHTML</code>, shadcn&#39;s <code>ChartStyle</code> in <code>src/components/ui/chart.tsx</code>, only writes CSS variables from the static chart config).</p><p>One Base UI-specific gotcha: <code>WidgetCard.tsx</code> passes <code>aria-expanded={String(open) as &#39;true&#39; | &#39;false&#39;}</code> rather than the raw boolean, because Base UI&#39;s <code>Collapsible.Trigger</code> otherwise overrides a boolean <code>aria-expanded</code> prop with its own internal state via prop merging. The explicit <code>String()</code> cast keeps the rendered attribute in sync with this app&#39;s own <code>open</code> state.</p>',17)])])}const u=o(a,[["render",i]]);export{g as __pageData,u as default};
@@ -0,0 +1 @@
1
+ import{_ as o,o as t,c,a5 as d}from"./chunks/framework.DSg0KOwT.js";const g=JSON.parse('{"title":"Board widgets","description":"","frontmatter":{},"headers":[],"relativePath":"contributor-guide/architecture/board-widgets.md","filePath":"contributor-guide/architecture/board-widgets.md"}'),a={name:"contributor-guide/architecture/board-widgets.md"};function i(n,e,r,s,l,h){return t(),c("div",null,[...e[0]||(e[0]=[d("",17)])])}const u=o(a,[["render",i]]);export{g as __pageData,u as default};