From 28fea6753c90be2b62f4405a0d85d431db6cf846 Mon Sep 17 00:00:00 2001
From: Ross Mackay <ross@mcky.me>
Date: Mon, 17 Mar 2025 22:56:39 +0000
Subject: [PATCH] Automatically close the sidebar when navigating sections on
 mobile

---
 assets/js/sidebar/sidebar-drawer.js | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/assets/js/sidebar/sidebar-drawer.js b/assets/js/sidebar/sidebar-drawer.js
index b6f0022c8..f096c6a49 100644
--- a/assets/js/sidebar/sidebar-drawer.js
+++ b/assets/js/sidebar/sidebar-drawer.js
@@ -51,6 +51,8 @@ if (!isEmbedded) {
   // We observe on mousedown because we only care about user resize.
   sidebar.addEventListener('mousedown', () => resizeObserver.observe(sidebar))
   sidebar.addEventListener('mouseup', () => resizeObserver.unobserve(sidebar))
+
+  window.addEventListener('hashchange', maybeCloseSidebarOnNavigate)
 }
 
 function setDefaultSidebarState () {
@@ -114,3 +116,13 @@ function transitionSidebar (open) {
 export function openSidebar () {
   return transitionSidebar(true)
 }
+
+/**
+ * Closes the sidebar on small screens when navigating between sections
+ * on the page, for consistency with full page transitions
+ */
+function maybeCloseSidebarOnNavigate () {
+  if (smallScreenQuery.matches && isSidebarOpen()) {
+    transitionSidebar(false)
+  }
+}